PDF-Tools SaaS - Azure Function
PDF-Tools in SaaS
De “PDF-Tools” zoals we die kenden in de extensies (tem BC18) is voor SaaS (vanaf BC19) volledig herschreven geweest.
De dll wordt daarbij niet meer rechtstreeks gebruikt, maar in een Azure Function. Op zich blijft de bestaande dll wel gebruikt binnen de Azure Function, wat inhoudt dat de werking vrij analoog is.
Naast de wijziging van dll naar Azure Function is ook de opslag van de templates veranderd. De templates werden bewaard op de root-folder van BoCount Dynamics. Voor de SaaS versies (dus vanaf BC19) worden de bestanden bewaard als blob-veld op de document-tabel.
Het is echter zo dat bij eerste afdruk van een document, het systeem automatisch gaat zoeken naar de file op de root-folder en die importeren in het blob-veld van de document-tabel. Dat betekent dus dat bij een upgrade dit feilloos en zonder manuele aanpassing zal overgezet worden. Maar dus wel belangrijk om te weten dat bij een aanpassing aan de template het bestand moet opgeladen worden via de documenten tabel.
Nieuw PDF-Tools rapport maken
Om een compleet nieuw PDF-Tools rapport te maken, kan je gebruik maken van deze template:
report 50099 "PDFTool Template"
{
ApplicationArea = All;
Caption = 'Report Caption To Replace';
DefaultRenderingLayout = PDFTools;
dataset
{
dataitem(DataItemToReplace; "Integer")
{
dataitem(CopyLoop; "Integer")
{
DataItemTableView = sorting(Number);
dataitem(PageLoop; "Integer")
{
DataItemTableView = sorting(Number) where(Number = const(1));
trigger OnPostDataItem()
var
CFLBase64Convert: Codeunit "CFL Base64 Convert";
tempBlob: Codeunit "Temp Blob";
OutPutFileBase64: Text;
OutPutFileBase64WithStationary: Text;
DocumentTitle: Text;
NoOfLinesPerItem: Integer;
begin
Clear(PDFProgram);
CFLDocument.Get('DOCUMENT CODE TO REPLACE');
LanguageCode := CFLReportMgt.CFLGetLanguageForDocument('LANGUAGE CODE TO REPLACE');
CFLGetTranslations(LanguageCode);
DocumentTitle := CFLTranslationDictGet('DOCUMENT TITLE TO REPLACE');
DocumentName := DelChr(DocumentTitle + DelChr('DOCUMENT NO. TO REPLACE', '=', DelChr('DOCUMENT NO. TO REPLACE', '=', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')), '=', '/\:*?"<>|') + '.pdf';
intPage := 0;
intCounter := CFLDocument."CFL Lines per Page";
//Lines.Reset();
//SET THE FILTERS ON THE LINES
//if Lines.FindSet() then
// repeat
if CFLCheckLine() then begin
NoOfLinesPerItem := CFLGetNoOfLinesPerItem();
CFLAddLineToDocument(NoOfLinesPerItem);
end;
// until Lines.Next() = 0;
CFLAddTotals();
OutPutFileBase64 := CFLClosePDF();
Clear(OutPutFileBase64WithStationary);
if CFLDocument."CFL Apply Stationary" <> CFLDocument."CFL Apply Stationary"::"CFL Never" then
OutPutFileBase64WithStationary := PDFProgram.CFLAddStationary(OutPutFileBase64, CFLGetStationaryBase64())
else
OutPutFileBase64WithStationary := OutPutFileBase64;
CFLBase64Convert.CFLBase64StringToTempBlob(OutPutFileBase64WithStationary, tempBlob);
PDFCopyWithStationary.Add(OutPutFileBase64WithStationary);
PDFCopy.Add(OutPutFileBase64);
PDFCopyIsCreated := true;
end;
}
trigger OnPreDataItem()
var
NoOfLoops: Integer;
begin
NoOfLoops := Abs(NoOfCopies) + 1;
if NoOfLoops <= 0 then
NoOfLoops := 1;
SetRange(Number, 1, NoOfLoops);
end;
}
trigger OnPreDataItem()
begin
Clear(PDFProgram);
end;
trigger OnAfterGetRecord()
begin
Clear(PDFProgram);
end;
}
dataitem(Base64Result; Integer)
{
DataItemTableView = sorting(Number) where(Number = const(1));
column(PDFinBase64; Format(Base64))
{ }
trigger OnPreDataItem()
var
CFLBoCountDynamicsMgt: Codeunit "CFL BoCount Dynamics Mgmt";
OutPutFileWithStationary: Text;
begin
if PDFCopyIsCreated then begin
Clear(PDFProgram);
if PDFCopyIsCreated then begin
OutPutFileWithStationary := PDFProgram.CFLMergePDF(PDFCopyWithStationary, CFLBoCountDynamicsMgt.GetExtensionName(), CompanyName, '', '');
if (CFLDocument."CFL Apply Stationary" = CFLDocument."CFL Apply Stationary"::"CFL PDF") then
Base64.Add('Base64PDFPrint', PDFProgram.CFLMergePDF(PDFCopy, CFLBoCountDynamicsMgt.GetExtensionName(), CompanyName, '', ''))
else
Base64.Add('Base64PDFPrint', OutPutFileWithStationary);
Base64.Add('Base64PDF', OutPutFileWithStationary);
end;
end;
end;
}
}
requestpage
{
SaveValues = false;
layout
{
area(content)
{
group(Options)
{
Caption = 'Options';
// field(NoOfCopies; NoOfCopies)
// {
// ApplicationArea = All;
// Caption = 'No. of Extra Copies';
// }
}
}
}
actions
{
}
}
rendering
{
layout(PDFTools)
{
Type = Custom;
LayoutFile = './src/report/PDFTools.pdftools';
Caption = 'PDFTools layout', Locked = true;
Summary = 'PDFTools layout';
MimeType = 'Application/Report/pdftools';
}
}
trigger OnInitReport()
begin
ExtensionSetup.Get();
CFLBoCountDynamicsSetup.Get();
end;
var
NoOfCopies: Integer;
ExtensionSetup: Record "Extension Setup";
CFLBoCountDynamicsSetup: record "CFL BoCount Base Setup";
CFLDocument: Record "CFL Document";
CFLFunctions: Codeunit "CFL Functions";
PDFProgram: Codeunit "CFL PDFProgram";
CFLReportMgt: Codeunit "CFL Report Management";
LanguageCode: Code[10];
LanguageDict: Dictionary of [Text, Dictionary of [Text, Text]];
TranslationDict: Dictionary of [Text, Text];
DocumentName: Text;
Base64: JsonObject;
intpage: Integer;
intcounter: Integer;
PDFCopyIsCreated: Boolean;
PDFCopy: List of [Text];
PDFCopyWithStationary: List of [Text];
//Lines: record "TABLE CONTAINING LINES";
local procedure CFLCheckLine() AddLine: boolean
begin
AddLine := true;
end;
local procedure CFLGetNoOfLinesPerItem() NoOfLinesPerItem: integer
begin
NoOfLinesPerItem := 1;
end;
local procedure CFLAddLineToDocument(NoOfLinesPerItem: integer)
begin
if intCounter > CFLDocument."CFL Lines per Page" - NoOfLinesPerItem then
CFLNewPage();
PDFProgram.CFLSetfield('PDFFIELD TO REPLACE' + '.' + Format(intCounter), 'PDFVALUE TO REPLACE');
//.....
intCounter += NoOfLinesPerItem;
end;
local procedure CFLAddTotals()
begin
end;
local procedure CFLNewPage()
begin
CFLAddPDF();
intPage += 1;
intCounter := 0;
PDFProgram.CFLSetField('Pagina', Format(intPage));
PDFProgram.CFLSetfield('PDFFIELD TO REPLACE', 'PDFVALUE TO REPLACE');
//.....
end;
local procedure CFLAddPDF()
var
CFLBoCountDynamicsMgt: Codeunit "CFL BoCount Dynamics Mgmt";
FormFlattening: Boolean;
begin
if (intPage = 0) then begin
PDFProgram.CFLSetTemplate(CFLDocument.CFLGetFileBase64());
PDFProgram.CFLUpdateTemplate(CFLDocument."CFL Lines per Page");
PDFProgram.CFLSetOutputFile('');
PDFProgram.CFLStartOutputFile(CFLBoCountDynamicsMgt.GetExtensionName(), CompanyName, DocumentName, '');
PDFProgram.CFLStartFillPage();
end else begin
FormFlattening := true;
PDFProgram.CFLEndFillPage(false, FormFlattening);
PDFProgram.CFLAddPageToOutputFile();
PDFProgram.CFLStartFillPage();
end;
end;
local procedure CFLClosePDF() Base64Output: Text;
var
CFLWatermarkPosition: Enum "CFL Watermark Position";
PageNoFormat: Text;
begin
CFLAddPDF();
PDFProgram.CFLCloseOutputFile();
PageNoFormat := TranslationDict.Get('PAGE') + ' : %1/%2';
Base64Output := PDFProgram.CFLInvoke();
Base64Output := PDFProgram.CFLAddWatermark(Base64Output, PageNoFormat, CFLWatermarkPosition::"CFL Bottomright", '50', '10', '', '', '', '');
end;
local procedure CFLGetStationaryBase64(): text
var
bgDocument: record "CFL Document";
begin
if (CFLBoCountDynamicsSetup."CFL Company Paper" <> '') then begin
bgDocument.get(CFLBoCountDynamicsSetup."CFL Company Paper");
end;
if bgDocument."CFL File Content".HasValue then
exit(bgDocument.CFLGetFileBase64());
end;
local procedure CFLGetTranslations(languageCode: Code[10])
var
CFLReportMgt: Codeunit "CFL Report Management";
begin
if not LanguageDict.ContainsKey(languageCode) then begin
TranslationDict := CFLReportMgt.CFLLoadTranslationsInDictionary(languageCode, "CFL Translation Table"::"CFL Expression", '');
LanguageDict.Add(languageCode, TranslationDict);
end else begin
TranslationDict := LanguageDict.Get(languageCode);
end;
end;
local procedure CFLTranslationDictGet(DictionaryKey: Text) Translation: Text
var
CFLExpression: Record "CFL Expression";
TranslationNotFoundErr: Label 'No translation found for %1 %2 in language %3';
begin
if not CFLTryGetTranslation(DictionaryKey, Translation) then begin
Translation := DictionaryKey;
Error(StrSubstNo(TranslationNotFoundErr, CFLExpression.TableCaption, DictionaryKey, LanguageCode));
end;
end;
[tryfunction]
internal procedure CFLTryGetTranslation(DictionaryKey: Text; var DictionaryValue: Text)
begin
DictionaryValue := TranslationDict.Get(DictionaryKey);
end;
}
PDF-Tools rapporten extenden
De PDF-Tools rapporten zijn aangepast aan deze nieuwe werking en bevatten heel wat events die het mogelijk maken om het document aan te passen. Het is dus niet langer nodig om het rapport te kopiëren naar je maatwerk-extensie, maar je kan via de events de nodige aanpassingen doen aan het document.
Alle PDF-Tools rapporten zijn op dezelfde manier opgebouwd en bevatten in grote lijnen dezelfde events.
De events worden hieronder opgesomd.
Zie Voorbeeld van extenden van een PDF-Tools rapport.
Events in rapporten
Alle events in de rapporten hebben de eigenschap includesender=true. Er is dus toegang tot het rapport.
CFLOnAfterSetLineFilters
Via dit event heb je toegang tot de regels van het document. Het is mogelijk om de filters op de regels te gaan aanpassen.
CFLOnAfterCheckLine
Voordat een lijn wordt toegevoegd aan de PDF wordt via de functie CFLCheckLine bepaalt of de lijn op het document moet worden afgedrukt. Via dit event is het mogelijk hierin in te grijpen via de parameter Addline.
CFLOnAfterCheckIntrastat
Op bepaalde documenten (zoals factuur, creditnota) wordt intrastat-informatie weergegeven op basis van de functie CFLCheckIntrastat.
Via dit event is het mogelijk in te grijpen in het weergeven van de intrastat-informatie voor de gegeven regel. Dit kan door de parameter AddIntrastat aan te passen.
CFLonAfterGetNoOfLinesPerItem
Op de PDF-Tools rapporten worden de meerdere lijnen op de pdf samengehouden voor 1 regel. Dit gebeurt op basis van de functie CFLGetNoOfLinesPerItem.
Via dit event is het mogelijk in te grijpen op dit aantal lijnen via de parameter NoOfLinesPerItem.
Indien er afbeeldingen worden weergegeven, dan wordt het aantal lijnen voor de afbeelding in de parameter NoOfLinesForImage.
CFLOnBeforeAddLineToDocument
De lijnen op een pdf voor een documentregel worden ingevoegd door de functie CFLAddLineToDocument.
Via dit event is het mogelijk om een eigen invoeging te voorzien. Dit kan door de Handled-parameter op true te zetten. In deergelijk geval zal de functie CFLAddLineToDocument niet worden uitgevoerd.
CFLOnAfterAddLineToDocument
Enkel beschikbaar in Service Order en Quote.
CFLOnAfterSetServiceLineFilters
Via dit event heb je toegang tot de service lines van het document. Het is mogelijk om de filters op de regels te gaan aanpassen.
Enkel beschikbaar in service quote en order.
CFLOnBeforeAddServiceLineToDocument
Enkel beschikbaar in Service Order en Quote.
CFLOnAfterAddServiceLineToDocument
Via dit event is het mogelijk om na de standaard invoeging nog aanpassingen of extra velden te voorzien.
Je hebt hierbij toegang tot de parameter PDFProgram alsook de intCounter.
De intCounter is de lijnteller. Als je dus een extra lijn gaat invoegen, dan dien je deze intCounter te gaan verhogen zodat de volgende lijnen op de correcte plaats worden ingevoegd.
CFLOnAfterAddIntrastatToTemp
Op bepaalde documenten (zoals factuur, creditnota) wordt intrastat-informatie weergegeven.
Hiervoor wordt gebruik gemaakt van de functie CFLAddIntrastatToTemp.
Deze functie zal voor de gegeven documentregel, de nodige zaken invoegen in de tmpTariffNumber parameter.
Via dit event krijg je toegang tot deze parameter en kan je de nodige aanpassingen voorzien.
CFLOnAfterAddTaxToTemp
Op bepaalde documenten (zoals factuur, creditnota) wordt tax-informatie weergegeven.
Hiervoor wordt gebruik gemaakt van de functie CFLAddTaxToTemp.
Deze functie zal voor de gegeven documentregel, de nodige zaken invoegen in de tmpTax parameter.
Via dit event krijg je toegang tot deze parameter en kan je de nodige aanpassingen voorzien.
CFLOnBeforeAddLineForDescription2ToDocument
Via de functie CFLAddLineForDescription2ToDocument wordt op de PDF-Tools rapporten een lijn ingevoegd voor de Omschrijving 2 van een documentregel.
Via dit event is het mogelijk om een eigen invoeging te voorzien. Dit kan door de Handled-parameter op true te zetten. In deergelijk geval zal de functie CFLAddLineForDescription2ToDocument niet worden uitgevoerd.
CFLOnAfterAddLineForDescription2ToDocument
Via dit event is het mogelijk om na de standaard invoeging nog aanpassingen of extra velden te voorzien.
Je hebt hierbij toegang tot de parameter PDFProgram alsook de intCounter.
De intCounter is de lijnteller. Als je dus een extra lijn gaat invoegen, dan dien je deze intCounter te gaan verhogen zodat de volgende lijnen op de correcte plaats worden ingevoegd.
CFLOnBeforeAddImageToDocument
Via de functie CFLAddImageToDocument wordt op de PDF-Tools rapporten een afbeelding ingevoegd voor de documentregel.
Via dit event is het mogelijk om een eigen invoeging te voorzien. Dit kan door de Handled-parameter op true te zetten. In dergelijk geval zal de functie CFLAddImageToDocument niet worden uitgevoerd.
CFLOnAfterAddImageToDocument
Via dit event is het mogelijk om na de standaard invoeging nog aanpassingen of extra velden te voorzien.
Je hebt hierbij toegang tot de parameter PDFProgram alsook de intCounter.
De intCounter is de lijnteller. Als je dus een extra lijn gaat invoegen, dan dien je deze intCounter te gaan verhogen zodat de volgende lijnen op de correcte plaats worden ingevoegd.
CFLOnBeforeAddIntrastatToDocument
Via de functie CFLAddIntrastatToDocument wordt op bepaalde PDF-Tools rapporten (bvb. factuur, creditnota) de intrastat-informatie ingevoegd.
Via dit event is het mogelijk om een eigen invoeging te voorzien. Dit kan door de Handled-parameter op true te zetten. In deergelijk geval zal de functie CFLAddIntrastatToDocument niet worden uitgevoerd.
CFLOnAfterAddIntrastatToDocument
Via dit event is het mogelijk om na de standaard invoeging nog aanpassingen of extra velden te voorzien.
Je hebt hierbij toegang tot de parameter PDFProgram alsook de intCounter.
De intCounter is de lijnteller. Als je dus een extra lijn gaat invoegen, dan dien je deze intCounter te gaan verhogen zodat de volgende lijnen op de correcte plaats worden ingevoegd.
CFLOnBeforeAddTaxToDocument
Via de functie CFLAddTaxToDocument wordt op bepaalde PDF-Tools rapporten (bvb. factuur, creditnota) de tax-informatie ingevoegd.
Via dit event is het mogelijk om een eigen invoeging te voorzien. Dit kan door de Handled-parameter op true te zetten. In deergelijk geval zal de functie CFLAddTaxToDocument niet worden uitgevoerd.
CFLOnAfterAddTaxToDocument
Via dit event is het mogelijk om na de standaard invoeging nog aanpassingen of extra velden te voorzien.
Je hebt hierbij toegang tot de parameter PDFProgram alsook de intCounter.
De intCounter is de lijnteller. Als je dus een extra lijn gaat invoegen, dan dien je deze intCounter te gaan verhogen zodat de volgende lijnen op de correcte plaats worden ingevoegd.
CFLOnBeforeAddExpressionToDocument
Via de functie CFLAddExpressionToDocument wordt op bepaalde PDF-Tools rapporten (bvb. factuur, creditnota) extra informatie via uitdrukkingen ingevoegd.
Via dit event is het mogelijk om een eigen invoeging te voorzien. Dit kan door de Handled-parameter op true te zetten. In deergelijk geval zal de functie CFLAddExpressionToDocument niet worden uitgevoerd.
CFLOnAfterAddExpressionToDocument
Via dit event is het mogelijk om na de standaard invoeging nog aanpassingen of extra velden te voorzien.
Je hebt hierbij toegang tot de parameter PDFProgram alsook de intCounter.
De intCounter is de lijnteller. Als je dus een extra lijn gaat invoegen, dan dien je deze intCounter te gaan verhogen zodat de volgende lijnen op de correcte plaats worden ingevoegd.
CFLOnBeforeInsertDocumentFixedText
Via de functie CFLInsertDocumentFixedText wordt op de PDF-Tools rapporten extra informatie via document vaste teksten ingevoegd.
Via dit event is het mogelijk om een eigen invoeging te voorzien. Dit kan door de Handled-parameter op true te zetten. In deergelijk geval zal de functie CFLInsertDocumentFixedText niet worden uitgevoerd.
CFLOnAfterInsertDocumentFixedText
Via dit event is het mogelijk om na de standaard invoeging nog aanpassingen of extra velden te voorzien.
Je hebt hierbij toegang tot de parameter PDFProgram alsook de intCounter.
De intCounter is de lijnteller. Als je dus een extra lijn gaat invoegen, dan dien je deze intCounter te gaan verhogen zodat de volgende lijnen op de correcte plaats worden ingevoegd.
CFLOnBeforeAddTotalsToDocument
Via de functie CFLAddTotalsToDocument wordt op bepaalde PDF-Tools rapporten (bvb. factuur, creditnota) totaalbedragen ingevoegd.
Via dit event is het mogelijk om een eigen invoeging te voorzien. Dit kan door de Handled-parameter op true te zetten. In deergelijk geval zal de functie CFLAddTotalsToDocument niet worden uitgevoerd.
CFLOnAfterAddTotalsToDocument
Via dit event is het mogelijk om na de standaard invoeging nog aanpassingen of extra velden te voorzien.
Je hebt hierbij toegang tot de parameter PDFProgram alsook de intCounter.
De intCounter is de lijnteller. Als je dus een extra lijn gaat invoegen, dan dien je deze intCounter te gaan verhogen zodat de volgende lijnen op de correcte plaats worden ingevoegd.
CFLBeforeNewPage
Via de functie CFLNewPage wordt in de PDF-Tools rapporten een nieuwe pagina gestart. Het is in deze functie dat bvb. hoofding velden worden ingevuld.
Via dit event is het mogelijk om aanpassingen of extra velden op te vullen. Je hebt hierbij toegang tot de parameter PDFProgram.
Via de Handled-parameters is het mogelijk een eigen verwerking te voorzien en de standaard BoCount code niet te laten uitvoeren.
CFLOnAfterNewPage
Via de functie CFLNewPage wordt in de PDF-Tools rapporten een nieuwe pagina gestart. Het is in deze functie dat bvb. hoofding velden worden ingevuld.
Via dit event is het mogelijk om aanpassingen of extra velden op te vullen. Je hebt hierbij toegang tot de parameter PDFProgram.
CFLOnBeforeAddPDF
Via de functie CFLAddPDF wordt een pagina toegevoegd en/of een nieuwe pagina gestart. Het is in deze functie dat de template en briefpapier worden geladen.
Via dit event kan je ingrijpen in dit proces en kan je de functie CFLAddPDF vervangen. Dit kan door de Handled-parameter op true te zetten. In dergelijk geval wordt de functie CFLAddPDF niet uitgevoerd.
CFLOnAfterGetBackgroundDocument
Gebruik dit event om in te grijpen in het gebruikte briefpapier. Via de parameter bgDocument kan je dit instellen op een ander document dan het standaard briefpapier.
CFLOnBeforeEndFillePage
Voordat een pagina wordt afgesloten en toegevoegd aan de pdf, kan je via dit event ingrijpen in het
- toepassen van briefpapier. Dit kan via de parameter ApplyBackground
- formflattening. Dit is het verwijderen van de velden en enkel de ingevulde teksten te laten staan. Lege velden worden verwijderd. Dit kan via de parameter FormFlattening.
CFLOnAfterAddPDF
Dit event geeft je toegang tot de PDFProgram, nadat een pagina is toegevoegd aan de pdf.
CFLOnBeforeCloseOutPutFile
Dit event geeft je toegang tot de PDFProgram, net voordat de file wordt gemaakt en afgesloten.
CFLOnClosePDFOnAfterInvoke
Dit event geeft je toegang tot de gecreëerde file, in base64-string.
CFLOnBeforePageNumberOutputFile - OBSOLETED IN BC20 - Replaced by CFLOnBeforeAddPageNumbersToOutputFile
Via dit event krijg je toegang tot de parameter PageNoFormat.
De standaardwaarde voor deze parameter is %1/%2. Dit zorgt voor het plaatsen van pagina-nummering op de pdf.
Je kan ingrijpen in deze paginanummering door aanpassen van PageNoFormat.
%1 is hierbij de huidige pagina.
%2 is het totaal aantal pagina's.
Via de Handled parameter kan je het toevoegen van paginanummers vermijden.
Via de PDFProgram parameter krijg je toegang tot de codeunit CFL PDFProgram.
CFLOnBeforeAddPageNumbersToOutputFile
Via dit event krijg je toegang tot de parameter PageNoFormat.
De standaardwaarde voor deze parameter is %1/%2. Dit zorgt voor het plaatsen van pagina-nummering op de pdf.
Je kan ingrijpen in deze paginanummering door aanpassen van PageNoFormat.
%1 is hierbij de huidige pagina.
%2 is het totaal aantal pagina's.
Via de Handled parameter kan je het toevoegen van paginanummers vermijden.
Via de PDFProgram parameter krijg je toegang tot de codeunit CFL PDFProgram.
CFLOnBeforeAddPageNumbersToOutputFile
Via dit event krijg je toegang tot de parameter PageNoFormat.
De standaardwaarde voor deze parameter is %1/%2. Dit zorgt voor het plaatsen van pagina-nummering op de pdf.
Je kan ingrijpen in deze paginanummering door aanpassen van PageNoFormat.
%1 is hierbij de huidige pagina.
%2 is het totaal aantal pagina's.
Via de Handled parameter kan je het toevoegen van paginanummers vermijden.
Via de PDFProgram parameter krijg je toegang tot de codeunit CFL PDFProgram.
CFLOnBeforeAddSalesConditionsAttachment
Via dit event krijg je toegang tot de bijlagen voordat de verkoopsvoorwaarden worden toegevoegd.
Er is toegang tot de
- Attachments : codeunit Temp Blob List die de bijlagen bevat.
- AttachmentNames : list of [text] die de bestandsnamen van de bijlagen bevat.
- Handled
Het is dus mogelijk om extra bijlagen toe te voegen.
Via de Handled parameter is het mogelijk het toevoegen van de verkoopsvoorwaarden te verhinderen.
CFLOnBeforeShowShippingAddr
Via dit event is het mogelijk het weergeven van het Ship-To adres aan te passen.
CFLOnAfterGetCFLDocument
Via dit event is het mogelijk de gebruikte document aan te passen.
CFLOnBeforeInitializeRequest
Via dit event is het mogelijk in te grijpen in de parameters die worden gezet bij het aanroepen van de functie InitializeRequest.
Deze procedure wordt aangeroepen als het rapport wordt uitgevoerd zonder request-page en de gebruiker dus niet zelf de waarden kan opgeven.
CFLOnAfterGetSalesConditionsDocument
Via dit event is het mogelijk de gebruikte document aan te passen.
Codeunits
CFL Report Management
procedure CFLGetLanguageForCustomer
procedure CFLGetLanguageForCustomer(Customer: record customer) languagecode: code[10]
Haalt de taal van de klant op. Deze functie wordt gebruikt in alle PDF-Tools rapporten om de taal te bepalen.
event CFLOnAfterGetLanguageForCustomer
[EventSubscriber(ObjectType::Codeunit, Codeunit::"CFL Report Management",'CFLOnAfterGetLanguageForCustomer', '', false, false)]
local procedure CFLOnAfterGetLanguageForContact(Customer: record Customer; var languagecode: code[10])
begin
end
procedure CFLGetLanguageForVendor
procedure CFLGetLanguageForVendor(Vendor: record vendor) languagecode: code[10]
Haalt de taal van de leverancier op. Deze functie wordt gebruikt in alle PDF-Tools rapporten om de taal te bepalen.
event CFLOnAfterGetLanguageForVendor
[EventSubscriber(ObjectType::Codeunit, Codeunit::"CFL Report Management",'CFLOnAfterGetLanguageForVendor', '', false, false)]
local procedure CFLOnAfterGetLanguageForContact(Vendor: record Vendor; var languagecode: code[10])
begin
end
procedure CFLGetLanguageForContact
procedure CFLGetLanguageForContact(Contact: record contact) languagecode: code[10]
Haalt de taal van de contact op. Deze functie wordt gebruikt in alle PDF-Tools rapporten om de taal te bepalen.
event CFLOnAfterGetLanguageForContact
[EventSubscriber(ObjectType::Codeunit, Codeunit::"CFL Report Management",'CFLOnAfterGetLanguageForContact', '', false, false)]
local procedure CFLOnAfterGetLanguageForContact(Contact: record Contact; var languagecode: code[10])
begin
end
procedure CFLGetPrinterForReport
procedure CFLGetPrinterForReport(Reportid: integer; var PrinterName: text) PrinterFound: boolean;
Wordt gebruikt in alle PDF-Tools rapporten.
Haalt de printer op voor het rapport. Daarbij wordt gekeken naar de printerselecties. Indien geen printerselectie gekend, dan wordt een lijst van de printers weergegeven zodat een printer kan geselecteerd worden.
Dit gebeurd enkel indien direct printing met printnode is ingesteld in de BoCount Systeeminstellingen (PrintNode API Token).
Indien PrinterFound false is zullen de PDF-Tools rapporten gestopt worden.
event CFLOnBeforeCFLGetPrinterForReport
[EventSubscriber(ObjectType::Codeunit, Codeunit::"CFL Report Management",'CFLOnBeforeCFLGetPrinterForReport', '', false, false)]
local procedure CFLOnBeforeCFLGetPrinterForReport(Reportid: integer; var PrinterName: text; var isHandled: boolean; var PrinterFound: boolean)
begin
end;
Event om in te grijpen op het opzoeken van de printer voor een rapport.
Indien isHandled op true wordt geplaatst zal de standaard BoCount code niet meer doorlopen worden.
PrinterFound is de return-value van de procedure CFLGetPrinterForReport.
procedure CFLIsPrintNodeActivated
procedure CFLIsPrintNodeActivated(): boolean;
Functie voor het nagaan indien direct printing met PrintNode is ingesteld in de BoCount Systeeminstellingen.
procedure CFLLoadTranslationsInDictionary
procedure CFLLoadTranslationsInDictionary(LanguageCode: code[10]; TableFilter: enum "CFL Translation Table"; KeyFilter: text) Dict: Dictionary of [text, text]
Functie voor het opladen van alle vertalingen in een dictionary.
event CFLOnAfterLoadTranslationsInDictionary
[EventSubscriber(ObjectType::Codeunit, Codeunit::"CFL Report Management",'CFLOnAfterLoadTranslationsInDictionary', '', false, false)]
local procedure CFLOnAfterLoadTranslationsInDictionary(LanguageCode: code[10]; TableFilter: enum "CFL Translation Table"; KeyFilter: text; var Dict: Dictionary of [text, text])
begin
end;
event CFLOnAfterGetEmailBodyTemplate
Gebruik dit event om het mailsjabloon voor de body van de mail aan te passen.
event CFLOnAfterGetEmailSubjectTemplate
Gebruik dit event om het mailsjabloon voor het onderwerp van de mail aan te passen.
Codeunit CFL PDFProgram
Deze codeunit bevat alle functies die gebruikt worden binnen PDF-Tools rapporten en doet ook de communicatie naar de Azure Function.
Indien je een nieuw PDF-Tools rapport dient te maken, dan zal je deze codeunit en de functies hierin moeten gebruiken.
SetCompanyPaper
Deze functie heeft 1parameter:
- String CompanyPaperBase64: base64-string van het briefpapier pdf-bestand.
SetTemplate
Deze functie heeft 1 parameter:
- String TemplateBase64: base64-string van de template pdf die wordt gebruikt voor aanmaak van een pagina.
UpdateTemplate
Deze functie heeft 1 parameter:
- Integer NoOfLines: aantal lijnen
Deze functie gaat de template overlopen naar velden en voor alle velden met in de veldnaam een “.” Gevolgd door een getal (bvb artref.0) zal dit de velden kopiëren in evenveel lijnen als de parameter opgeeft.
De lijnen starten bij eerste veld met “.0” en worden naar beneden gekopieerd en naar boven indien het veld een getalwaarde heeft groter dan 0. (bvb langeomschrijving.1 wordt 1 x naar boven gekopieerd als langeomschrijving.0 en verder een aantal keer naar beneden).
CFLSetOutputFile
Deze functie heeft een string als parameter. Deze parameter wordt echter niet meer gebruikt en je geeft dus best een lege string door.
CFLStartOutputFile
Deze functie heeft 4 parameters:
- String Creator: zet de creator op de outputfile
- String Author: zet de author op de output file
- Sting Title: zet de title op de output file
- String Subject: zet de subject op de output file
CFLStartFillPage
Deze functie start het opvullen van een nieuwe pagina.
CFLEndFillPage
Deze functie eindigt het opvullen van een pagina.
Deze functie heeft 2 parameters:
- Boolean AddBackground: bij true zal dit de pdf die is ingesteld via de functie SetCompanyPaper toepassen als achtergrond op de pdf.
- Boolean FormFlattening: bij true worden alle invulvelden op de pdf vervangen door hun waarde (standaard). Bij false blijven alle velden als invulbare velden bestaan op de pdf.
CFLAddPageToOutputFile
Deze functie gaat de ingevulde pagina gaan toevoegen aan de outputfile.
CFLCloseOutputFile
Deze functie finaliseert de outputfile tot leesbare pdf.
CFLPageNoOutPutFile
Deze functie voegt paginanummers toe aan het pdf bestand.
Deze functie heeft 1 parameter:
- PageNoText: text De PageNoText kan 2 placeholders bevatten:
- %1: huidige pagina
- %2: totaal aantal pagina's Zo zal een PageNoText 'Pagina %1 van %2' leiden tot bvb 'Pagina 1 van 2'.
Veldfuncties
CFLSetField
Deze functie heeft 2 parameters:
- String FieldName: veldnaam van het veld dat je wenst in te vullen
- String FieldValue: de waarde die je wenst in te vullen in het veld
PDFProgram.CFLSetField('TypeDocument', (txtPurchReceipt));
CFLSetFieldColor
Deze functie heeft 4 parameters:
- String FieldName: veldnaam van het veld dat je wenst aan te passen
- Integer R : red value van RGB-kleur
- Integer G: green value van RGB-kleur
- Integer B: blue value van RGB-kleur
PDFProgram.CFLSetFieldColor('TypeDocument',255,0,0);
CFLSetFieldBackgroundColor
Deze functie heeft 4 parameters:
- String FieldName: veldnaam van het veld dat je wenst aan te passen
- Integer R : red value van RGB-kleur
- Integer G: green value van RGB-kleur
- Integer B: blue value van RGB-kleur
PDFProgram.CFLSetFieldBackgroundColor('TypeDocument',0,0,255);
CFLSetFieldBorderColor
Deze functie heeft 4 parameters:
- String FieldName: veldnaam van het veld dat je wenst aan te passen
- Integer R : red value van RGB-kleur
- Integer G: green value van RGB-kleur
- Integer B: blue value van RGB-kleur
PDFProgram.CFLSetFieldBorderColor('TypeDocument',0,0,255);
CFLSetFieldBold
Deze functie zal de tekst van het veld in vet plaatsen.
Deze functie heeft 1 parameter:
- String FieldName: veldnaam van het veld dat je wenst aan te passen
PDFProgram.CFLSetFieldBold('TypeDocument');
CFLSetFieldItalic
Deze functie zal de tekst van het veld in italic plaatsen.
Deze functie heeft 1 parameter:
- String FieldName: veldnaam van het veld dat je wenst aan te passen
PDFProgram.CFLSetFieldItalic('TypeDocument');
CFLSetFieldBoldItalic
Deze functie zal de tekst van het veld in bold en italic plaatsen.
Deze functie heeft 1 parameter:
- String FieldName: veldnaam van het veld dat je wenst aan te passen
PDFProgram.CFLSetFieldBoldItalic('TypeDocument');
CFLSetFieldFont
Met deze functie kan je zowel font als kleur als stijl van het veld gaan bepalen.
De functie heeft 4 parameters:
- String FieldName: veldnaam van het veld dat je wenst aan te passen
- String FontBase64: base64-string van het font dat je wil gebruiken
- Integer fontsize: tekstgrootte
- Integer fontstyle:
o 0 = normaal
o 1 = bold
o 2 = italic
o 3 = bold italic
PDFProgram.CFLSetFieldFont('TypeDocument',FontBase64,12,1);
CFLSetFieldImage
Met deze functie is het mogelijk om op de plaats van een veld een afbeelding in te voegen
Deze functie heeft 3 parameters:
- String FieldName: veldnaam van het veld dat je wenst aan te passen
- String ImageBase64 : base64-string van de afbeelding die je wenst in te voegen
- Integer Height: de hoogte van de afbeelding die je wenst in het bestand. Scaling gebeurt proportioneel volgens de hoogte.
PDFProgram.CFLSetFieldImage('Afbeelding.' + FORMAT(intCounter), ImageBase64, 100);
CFLSetFieldBarcode
Met deze functie is het mogelijk om op de plaats van een veld een barcode in te voegen
Deze functie heeft 6 parameters:
- String FieldName: veldnaam van het veld dat je wenst aan te passen
- BarcodeData : de gegevens die je in de vorm van een barcode wil weergeven.
- BarcodeType : het type van de barcode. De mogelijke opties zijn Code39, EAN13, EAN128, QR Code.
- Integer Height: de hoogte van de barcode die je wenst in het bestand. Scaling gebeurt proportioneel volgens de hoogte.
- HumanReadable : de tekst die onder de barcode wordt weergegeven. Dit is alleen van toepassing voor Code39, EAN128. Voor andere barcodetypes laat je de parameter leeg.
- FNC1 : hiermee geef je het FNC1 karakter mee, die in je gebruikt in de BarcodeData ,dit zal normaalgezien de waarde uit het veld FNC1 karakter zijn uit de barcode-tabel. Dit zal vervangen worden door het effectieve FNC1-karakter uit de barcode symbologie. Dit is enkel van toepassing voor EAN128, voor andere barcodetypes laat je de parameter leeg.
PDFProgram.CFLSetFieldBarcode('Afbeelding.' + FORMAT(intCounter), '5434765498010',BarcodeType::"CFL EAN13" ,40,'','');
CFLSetFieldHyperlink
Met deze functie is het mogelijk een klikbare link te plaatsen op een veld.
Deze functie heeft 2 paramaters:
- String FieldName: veldnaam van het veld dat je wenst te voorzien van link
- String Hyperlink: de link die je wenst toe te passen op het veld
CFLSetFont
Met deze functie is het mogelijk om in1 beweging het lettertype van alle invulvelden aan te passen.
Deze functie dient aangeroepen te worden alvorens de functie “UpdateTemplate” wordt uitgevoerd.
Deze functie heeft 3 parameters:
- String FontBase64: base64-string van het font dat je wil gebruiken
- Integer fontsize: tekstgrootte
- Integer fontstyle:
o 0 = normaal
o 1 = bold
o 2 = italic
o 3 = bold italic
PDFProgram.CFLSetFont(FontBase64, 12, 0);
Voorbeeld
Voor een correcte afhandeling dienen de verschillende functies in de juiste volgorde te worden aangeroepen.
Bij starten van een pagina:
PDFProgram.CFLSetTemplate(txtPdfFolder + CFLDocument."CFL File"); //instellen van de template
PDFProgram.CFLSetCompanyPaper(txtPdfFolder + bgDocument."CFL File"); //instellen van het briefpapier
PDFProgram.CFLUpdateTemplate(txtPdfFolder + CFLDocument."CFL File", CFLDocument."CFL Lines per Page"); //template aanpassen voor meerdere regels
PDFProgram.CFLSetOutputFile(OutputFile); //instellen van output file
PDFProgram.CFLStartOutputFile(CFLBoCountDynamicsMgt.GetExtensionName(), CompanyName); //aanmaak van de outputfile
PDFProgram.CFLStartFillPage(); //start opvullen van de velden
Op einde van een pagina:
PDFProgram.CFLEndFillPage(true, true); //afsluiten van de pagina, met eventueel toepassen van het briefpapier
PDFProgram.CFLAddPageToOutputFile(); //de gemaakte pagina toevoegen aan het output bestand
Op einde van het document:
PDFProgram.CFLCloseOutputFile(); //output bestand sluiten.
Deze sequentie van functies zit in elk PDF-Tools rapport vervat in deze functies:
- CFLAddPDF: deze functie beëindigt de reeds opgevulde pdf en voegt die toe aan het output pdf bestand en die start een nieuwe pagina.
- CFLClosePDF: deze functie beëindigt de pdf en roept de Azure function aan. de functie retourneert het pdf-bestand in een tempBlob-codeunit.
local procedure CFLAddPDF()
var
bgDocument: record "CFL Document";
ApplyBackground: boolean;
CFLBoCountDynamicsMgt: Codeunit "CFL BoCount Dynamics Mgmt";
CFLBase64Convert: codeunit "CFL Base64 Convert";
IStream: instream;
CFLFile: record "CFL Files";
CLFRootFolderMgt: codeunit "CFL Root Folder Mgt";
cflRootFolderType: enum "CFL Root Sub Folder Type";
OStream: OutStream;
tempBlob: Codeunit "Temp Blob";
Handled: boolean;
FormFlattening: boolean;
begin
CFLOnBeforeAddPDF(PDFProgram, Handled);
If Handled then exit;
CFLBoCountDynamicsSetup.get;
IF (intPage = 0) and ((RecordCounter = 0) or ((not BatchOutput) or (optPrint = optPrint::Automatic))) THEN BEGIN
if CFLDocument."CFL Company paper" and (CFLBoCountDynamicsSetup."CFL Company Paper" <> '') then begin
bgDocument.get(CFLBoCountDynamicsSetup."CFL Company Paper");
PDFProgram.CFLSetCompanyPaper(bgDocument.CFLGetFileBase64());
end;
PDFProgram.CFLSetTemplate(CFLDocument.CFLGetFileBase64());
//PDFProgram.CFLSetFont('C:\Windows\Fonts\segoeui.ttf', 12, 0);
PDFProgram.CFLUpdateTemplate(CFLDocument."CFL Lines per Page");
if ((not BatchOutput) or (optPrint = optPrint::Automatic)) or (RecordCounter = 0) then begin
PDFProgram.CFLSetOutputFile(OutputFile);
PDFProgram.CFLStartOutputFile(CFLBoCountDynamicsMgt.GetExtensionName(), CompanyName, txtDocumentName, '');
end;
PDFProgram.CFLStartFillPage();
end else begin
ApplyBackground := true;
IF (CFLBoCountDynamicsSetup."CFL Company Paper" = '') or (not CFLDocument."CFL Company paper") then ApplyBackground := false;
IF ((optPrint = optPrint::Print) OR
((optPrint = optPrint::Automatic) AND ((NOT Customer."CFL Electronic Invoicing") OR
(Customer."CFL E-Mail Invoices" = '') OR (NOT CFLBoCountDynamicsSetup."CFL Electronic Invoicing"))))
AND (CFLDocument."CFL Company paper" AND (CFLDocument."CFL Print on Company paper")) THEN BEGIN
ApplyBackground := false;
end;
FormFlattening := true;
CFLOnBeforeEndFillePage(PDFProgram, ApplyBackground, FormFlattening);
PDFProgram.CFLEndFillPage(ApplyBackground, FormFlattening);
PDFProgram.CFLAddPageToOutputFile();
PDFProgram.CFLStartFillPage();
end;
CFLOnAfterAddPDF(PDFProgram);
end;
local procedure CFLClosePDF() OutputFile: codeunit "Temp Blob"
var
Base64Output: Text;
base64: Codeunit "Base64 Convert";
file: File;
OStream: OutStream;
PageNoFormat: text;
Handled: boolean;
begin
CFLAddPDF();
PDFProgram.CFLCloseOutputFile();
PageNoFormat := '%1/%2';
CFLOnBeforeAddPageNumbersToOutputFile2(PageNoFormat, Position, MarginHorizontal, MaringVertical, Size, Rotation, FontName, Color, Opacity, Handled, PDFProgram);
if not handled then
PDFProgram.CFLPageNumberOutputFile(PageNoFormat);
Base64Output := PDFProgram.CFLInvoke();
OutputFile.CreateOutStream(OStream);
base64.FromBase64(Base64Output, OStream);
end;
[IntegrationEvent(true, false)]
local procedure CFLOnBeforeAddPageNumbersToOutputFile2(var PageNoFormat: text; var Position: enum "CFL Watermark Position"; var MarginHorizontal: text; var MarginVertical: text; var Size: text; var Rotation: text; var FontName: text; var Color: text; var Opacity: text; var Handled: boolean; var PDFProgram: codeunit "CFL PDFProgram")
begin
end;
CFLInvoke
Alle vorige functies gaan op zich een json vullen. Bij deze functie wordt de Azure Function aangeroepen en wordt de opgebouwde json, die de sequentie van functions bevat, mee doorgestuurd. Op basis van deze json zal de Azure Function de pdf aanmaken en die retourneren in base64.
CFLGetNoOfRowsForImageHeight
Deze functie heeft 3 parameters:
- String FieldName: veldnaam van het veld dat je wenst aan te passen
- Integer Height: de hoogte van de afbeelding
- TemplateBas64 : base64-string van de template
Deze functie heeft een integer retourwaarde met daarin het aantal lijnen dat je moet overslaan voor invoegen van de afbeelding/Barcode.
CFLMergePDF
Deze functie heeft 5 parameters:
- PDFFilesINBase64 : list of [text], bevat de base64-strings van de bestanden, in de volgorde zoals ze in de outputfile moeten zitten.
- String Creator: zet de creator op de outputfile
- String Author: zet de author op de output file
- Sting Title: zet de title op de output file
- String Subject: zet de subject op de output file
CFLAddWatermark2
Deze functie heeft parameters:
- PDFBase64: text bevat de base64-string van de PDF waarop je een watermark will toepassen
- WatermarkText: text
bevat de text die als watermark op document moet geplaatst worden
De WatermarkText kan 2 placeholders bevatten:
- %1: huidige pagina
- %2: totaal aantal pagina's - Position: enum "CFL Watermark Position" bevat de positie van het watermark. De mogelijke opties zijn: topleft,top,topright,bottomleft,bottom,bottomright,middle
- Margin: text Marge van de watermark tekst
- Size: text fontsize van de watermark tekst
- Rotation: text Rotatie in graden van watermark
- FontName: text Naam van het font van de watermark tekst. Enkel de standaard pdf fonts zijn beschikbaar. de standaard pdf fonts zijn: Courier, Courier-Bold, Courier-Oblique, Courier-BoldOblique, Helvetica, Helvetica-Bold, Helvetica-Oblique, Helvetica-BoldOblique, Times-Roman, Times-Bold, Times-Italic, Times-BoldItalic, Symbol, ZapfDingbats
- Color: text Kleur van de watermark tekst.
- Opacity: text Opacity van de watermark tekst
CFLAddDocumentNo
Deze functie heeft 2 overloads:
- CFLAddDocumentNo(PDFBase64: text; DocNo: text; var tempblob: codeunit "Temp Blob")
- CFLAddDocumentNo(PDFBase64: text; DocNo: text): text
Deze functie voegt het documentnummer toe in de rechterbovenhoek van de pdf.
Deze functie gebruikt hiervoor de CFLAddWatermark2-functie.
CFLAddCopyWatermark
Deze functie heeft 2 parameters:
- PDFBase64: text, base64-string van de pdf
- LanguageCode: code[10], taalcode voor de copy-tekst
Deze functie gaat de KOPIE-uitdrukking gebruiken in de gewenste taal en die toepassen als watermark, in het midden van de pagina in grote rode letters onder hoek van 45 graden.
Deze functie gebruikt hiervoor de CFLAddWatermark2-functie.
CFLExtractPDFText
Deze functie heeft 1 parameter:
- PDFBase64: text, base64-string van de pdf De functie retourneert alle tekst die aanwezig is in de pdf.
PDF-Tools mailen
Alle PDF-Tools rapporten zijn voorzien van een mail-optie en daarvoor is waar nodig een e-mailscenario voorzien.
Dit zijn alle enum-extensions op het standaard mailscenario:
- 2098100 "CFL Sales Shipment"
- 2098101 "CFL Purchase Receipt"
- 2098102 "CFL Purchase Return Order"
- 2098103 "CFL Purchase Return Shipment"
- 2098104 "CFL Sales Return Order"
- 2098105 "CFL Sales Return Receipt"
- 2098106 "CFL Sales Blanket Order"
- 2098107 "CFL Purchase Blanket Order"
- 2098108 "CFL Purchase Invoice"
- 2098109 "CFL Purchase Credit Memo"
- 2098110 "CFL Service Shipment"
- 2098111 "CFL Service Contract"
PDF-Tools rapport vervangen
BoCount Dynamics Base gaat op een aantal plaatsen uit van zijn standaard-rapporten. Hoewel deze extendable zijn, kan het in sommige gevallen toch nodig zijn om die te vervangen door andere rapporten.
In dergelijke gevallen is het belangrijk te weten dat op een aantal plaatsen zal moeten ingegrepen worden om te vermijden dat BoCount de standaard rapporten zal runnen.
WARNING
Het is niet voldoende om het rapport in de rapportselecties aan te passen. op een aantal plaatsen zit het PDF-Tools rapport hardcoded.
WARNING
Vanaf BC22 is dit niet meer nodig. De PDF-Tools rapporten zijn dan volledig geintegreerd in de standaard afhandeling van rapporten. Dit betekent dat alle onderstaande aanpassingen niet nodig zijn. Enkel de rapportselecties aanpassen is voldoende (indien je rapport aan de nieuwe werkwijze van PDF-Tools rapporten voldoet).
Bijvoegen als pdf op de lijst en kaartschermen.
De standaard knoppen hiervoor zijn door BoCount vervangen door eigen knoppen. Deze gaan uit van het standaard BoCount PDF-Tools rapport. Bij gebruik van een ander rapport zullen de BoCount acties dan ook moeten vervangen worden.
WARNING
Obsolete vanaf BC22. PDF-Tools rapporten integreren in standaard rapport afhandeling.
Ook grijpt BoCount Dynamics Base in op een aantal events.
codeunit CFL Attach PDF
event CFLSalesInvHeaderCFLOnBeforeCFLOnBeforePrintToDocumentAttachment
local procedure CFLSalesInvHeaderCFLOnBeforeCFLOnBeforePrintToDocumentAttachment(var SalesInvHeader: record "Sales Invoice Header"; var Handled: boolean)
begin
end;
WARNING
Obsolete vanaf BC22. PDF-Tools rapporten integreren in standaard rapport afhandeling.
event CFLSalesCrMemoHeaderCFLOnBeforeCFLOnBeforePrintToDocumentAttachment
local procedure CFLSalesCrMemoHeaderCFLOnBeforeCFLOnBeforePrintToDocumentAttachment(var SalesCrMemoHeader: record "Sales Cr.Memo Header"; var Handled: boolean)
begin
end;
WARNING
Obsolete vanaf BC22. PDF-Tools rapporten integreren in standaard rapport afhandeling.
event CFLServiceInvHeaderCFLOnBeforeCFLOnBeforePrintToDocumentAttachment
local procedure CFLServiceInvHeaderCFLOnBeforeCFLOnBeforePrintToDocumentAttachment(var ServiceInvHeader: record "Service Invoice Header"; var Handled: boolean)
begin
end;
WARNING
Obsolete vanaf BC22. PDF-Tools rapporten integreren in standaard rapport afhandeling.
event CFLServiceCrMemoHeaderCFLOnBeforeCFLOnBeforePrintToDocumentAttachment
local procedure CFLServiceCrMemoHeaderCFLOnBeforeCFLOnBeforePrintToDocumentAttachment(var ServiceCrMemoHeader: record "Service Cr.Memo Header"; var Handled: boolean)
begin
end;
WARNING
Obsolete vanaf BC22. PDF-Tools rapporten integreren in standaard rapport afhandeling.
codeunit CFL DocSendingProfile Subs
In deze codeunit wordt ingehaakt op een aantal events in het proces van verzendprofielen en worden de standaard BoCount PDF-Tools rapporten uitgevoerd.
Indien je de rapportselectie hebt aangepast naar een eigen PDF-Tools rapport, dan zal je gelijkaardige subscribers met gelijkaardige code moeten voorzien zodat je eigen rapport zal worden uitgevoerd.
Voor een rdlc of word rapport zal dit niet nodig zijn en zal de standaard dit kunnen afhandelen.
WARNING
Obsolete vanaf BC22. PDF-Tools rapporten integreren in standaard rapport afhandeling.
codeunit CFL Base Report Management
In deze codeunit wordt ingehaakt op een aantal events in het proces van mailen van een rapport.
Hierbij wordt de standaard BC werking overruled, en de BoCount PDF-Tools rapporten gemaild.
Indien je een eigen rapport hebt, dan kan het nodig zijn om in te haken op een van de events, waarbij het dan mogelijks is de standaard BoCount werking te overrulen. Je zal dan gelijkaardige code moeten voorzien, die je eigen rapport gaat mailen.
event OnBeforeCFLSalesShipmentHeaderOnBeforeEmailRecords
local procedure OnBeforeCFLSalesShipmentHeaderOnBeforeEmailRecords(VAR SalesShipmentHeader: Record "Sales Shipment Header"; SendDialog: Boolean; VAR IsHandled: Boolean)
begin
end;
Gebruik dit event om het PDF-Tools rapport voor de verkoopverzending aan te passen.
WARNING
Obsolete vanaf BC22. PDF-Tools rapporten integreren in standaard rapport afhandeling.
event OnBeforeCFLSalesCrMemoHeaderOnBeforeEmailRecords
local procedure OnBeforeCFLSalesCrMemoHeaderOnBeforeEmailRecords(VAR ReportSelections: Record "Report Selections"; VAR SalesCrMemoHeader: Record "Sales Cr.Memo Header"; DocTxt: Text; ShowDialog: Boolean; VAR IsHandled: Boolean)
begin
end;
Gebruik dit event om het PDF-Tools rapport voor de verkoopcreditnota aan te passen.
WARNING
Obsolete vanaf BC22. PDF-Tools rapporten integreren in standaard rapport afhandeling.
event OnBeforeCFLSalesInvoiceHeaderOnBeforeEmailRecords
local procedure OnBeforeCFLSalesInvoiceHeaderOnBeforeEmailRecords(VAR ReportSelections: Record "Report Selections"; VAR SalesInvoiceHeader: Record "Sales Invoice Header"; DocTxt: Text; ShowDialog: Boolean; VAR IsHandled: Boolean)
begin
end;
Gebruik dit event om het PDF-Tools rapport voor de verkoopfactuur aan te passen.
WARNING
Obsolete vanaf BC22. PDF-Tools rapporten integreren in standaard rapport afhandeling.
event CFLOnBeforeDoPrintSalesHeader
local procedure CFLOnBeforeDoPrintSalesHeader(VAR SalesHeader: Record "Sales Header"; ReportUsage: Integer; SendAsEmail: Boolean; VAR IsPrinted: Boolean)
begin
end;
Gebruik dit event om het PDF-Tools rapport voor de verkoopofferte, orderbevestiging, verkoopraamcontract, pro-forma factuur aan te passen.
WARNING
Obsolete vanaf BC22. PDF-Tools rapporten integreren in standaard rapport afhandeling.
codeunit CFL Issued Reminder Hdr. Subs
event CFLIssuedReminderHeaderOnBeforePrintRecords
local procedure CFLIssuedReminderHeaderOnBeforePrintRecords(var IssuedReminderHeader: Record "Issued Reminder Header"; ShowRequestForm: Boolean; SendAsEmail: Boolean; HideDialog: Boolean; var IsHandled: Boolean; var CFLIsHandled: boolean)
begin
end;
Gebruik dit event om het PDF-Tools rapport voor de aanmaning aan te passen.
WARNING
Obsolete vanaf BC22. PDF-Tools rapporten integreren in standaard rapport afhandeling.
QR-code om mobiel te betalen op een PDF-Tools-verkoopfactuur
Op een verkoopfatuur kan een QR-code afgedrukt worden, zodat klanten die factuur gemakkelijk kunnen betalen door die QR-code te scannen. Momenteel wordt het type EPC QR (meer informatie) ondersteund, later kunnen andere types toegevoegd worden.
Enums
CFL Document Barcode Type
Deze enum bevat alle ondersteunde QR-types (momenteel enkel EPC QR), maar die enum is uitbreidbaar. Om een ander type QR-code af te drukken dient de functie "CFLGetContent" van de interface "CFLDocumentBarcodeTypeInterface" de juiste inhoud terug te geven.
Events
CFLOnBeforeAddBarcodeToDocument
Gebruik dit event om in te grijpen vóór het plaatsen van de barcode (om bijvoorbeeld de plaats of de grootte van de standaardbarcode aan te passen).
[IntegrationEvent(true, false)]
local procedure CFLOnBeforeAddBarcodeToDocument(SalesInvHeader: record "Sales Invoice Header"; var intCounter: integer; var PDFProgram: codeunit "CFL PDFProgram"; var handled: Boolean; TranslationDict: Dictionary of [text, text])
begin
end;