Individueller Objekt-Aufruf (Lohnabrechnung etc.)

Task #6937 und #10748 | 5058.000 

 

1.)Wie funktionieren Events?
Das Grundprinzip besteht darin, dass Publisher-Events in der Anwendung programmiert wurden, um dann bei ihrem Auftreten ein benutzerdefiniertes Verhalten auszuführen.

2.)Ab welcher Version sind Events verfügbar?
Events werden ab der Version NAV 2016 bis und mit der neusten BC Version unterstützt.

3.)Anwendungsfälle welche SwissSalary publiziert hat
Die SwissSalary hat zwei Anwendungsfälle publiziert.
Die Partner können die Vorteile der veröffentlichten Publisher-Events in ihren Lösungen nutzen.

Die Partner können dazu ein Subscriber-Event programmieren, welcher dann auf einen veröffentlichten Publisher-Event wartet und diesen dann abhandelt. Ein Subscriber ermöglicht es Partnern, sich in die Kernfunktionalität der Anwendung einzuklinken, ohne traditionelle Codeänderungen vornehmen zu müssen.

-Anwendungsfall angepasste Lohnabrechung

Angepasste Lohnabrechnung als PDF speichern

Angepasste Lohnabrechnung an Direct versenden

-Anwendungsfall angepasster Lohnausweis

Angepassten Lohnausweis als PDF speichern

Angepassten Lohnausweis an Direct versenden

4.)Code Beispiele für Subscriber-Events

[EventSubscriber(ObjectType::Codeunit, Codeunit::"SwS Bulk Report Management", 'OnBeforeSavePaycheckAsPdf', '', false, false)]

local procedure HandleOnBeforeSavePaycheckAsPdf(pPayrollHead: Record "SwS Payroll Head"; pReportID: Integer; pReportParams: Record "SwS Working Table"; var pDescription: Text[1024]; var pHandled: Boolean; var pPaycheckTempBlob: Record "SwS TempBlob")

begin

   SaveCustomPaycheckAsPdf(pPayrollHead, pReportParams, pPaycheckTempBlob, pDescription);

   pHandled := true;

end;

local procedure SaveCustomPaycheckAsPdf(pPayrollHead: Record "SwS Payroll Head"; pReportParams: Record "SwS Working Table" temporary; var pPaycheckTempBlob: Record "SwS TempBlob"; var pDescription: Text[1024])

var

   CustomReport: Report "SwS Custom Paycheck";

   Employee: Record "SwS Employee";

   PayrollHeadWithNoFilters: Record "SwS Payroll Head";

   FileTempBlobOutStream: OutStream;

begin

   // Template for custom paycheck report

   if (pPayrollHead."Payroll No." = 0) or (pPayrollHead."Employee No." = '') then

       Error('Kein Lohnlauf gefunden. Fehlercode %1', 1005);

 

   Clear(CustomReport);

   CustomReport.SetTableView(PayrollHeadWithNoFilters);  // Set all user specific filters on DataItem back to empty

   CustomReport.UseRequestPage(false);

   CustomReport.SetReportParams(pReportParams);

   CustomReport.SetSinglePaycheckFilter(pPayrollHead."Payroll No.", pPayrollHead."Employee No.");

 

   Clear(FileTempBlobOutStream);

   pPaycheckTempBlob.Blob.CreateOutStream(FileTempBlobOutStream);

   CustomReport.SaveAs('', REPORTFORMAT::Pdf, FileTempBlobOutStream);

   Employee.Get(pPayrollHead."Employee No.");

   pDescription := 'Lohnabrechnung Custom';

end;

 

5.)Weiteres Code Beispiele für Subscriber-Events
 
Zuerst werden alle von uns hinzugefügten Empfänger entfernt und dann die Empfänger hinzugefügt, welche die E-Mail erhalten sollen.
Der Paramter «pHandled» muss nur dann gesetzt werden, falls die E-Mail Message im Event Subscriber erstellt wird.
Wenn pHandled auf «false» gelassen wird, dann arbeiten wir lediglich mit den geänderten Parametern weiter und erstellen die E-Mail.

 Theoretisch gibt es so auch die Möglichkeit den Betreff oder den E-Mail Text (Body) anzupassen:
 [EventSubscriber(ObjectType::Codeunit, Codeunit::"SwS Mail", 'OnCreateMessageAuto', '', false, false)]

           local procedure HandleOnCreateMessageAuto(var pToRecipients: List of [Text]; var pSubject: Text; var pBody: Text; var pHandled: Boolean)

          begin

               pToRecipients.RemoveRange(1, pToRecipients.Count());

 

               pToRecipients.Add('max.muster@gmail.com');

               pToRecipients.Add('peter.mueller@kunde.ch');

           end;

 

 Da die gleiche Funktion auch vom Bericht «Lohnabrechnung PDF» verwendet wird, müsste man den Code ein wenig anpassen

 falls die Empfänger bei der Lohnabrechnung als Mail senden nicht geändert werden sollen.

 
 
 

6.)Microsoft Event-Publisher nutzen um Report Aufrufe zu ersetzen
Microsoft bietet diesen Publisher erst ab der Version BC13 an.
Falls der Partner alle Lohnabrechnungsaufrufe mit der benutzerdefinierten Lohnabrechnung ersetzen möchte, kann folgender Publisher von Microsoft genutzt werden:
 
[EventSubscriber(ObjectType::Codeunit, Codeunit::ReportManagement, 'OnAfterSubstituteReport', '', false, false)]

local procedure HandleOnAfterSubstitueReport(ReportId: Integer; var NewReportId: Integer)

begin

   IF ReportId = REPORT::"SwS Paycheck" THEN

       NewReportId := REPORT::"SwS Custom Paycheck";

end;