SwissSalary | Événements d'éditeur

Task #6937 und #10748 | 5058.000 

 

1.)Comment fonctionnent les événements ?
Le principe de base consiste à programmer des événements d’éditeur (Publisher-Events) dans l’application afin de générer un comportement défini par l’utilisateur lorsqu’ils se produisent.

1.)À partir de quelle version les événements sont-ils disponibles ?
Les événements sont pris en charge à partir de la version NAV 2016 jusqu’à la dernière version BC incluse.

2.)Cas d’application publiés par SwissSalary
SwissSalary a publié deux cas d’utilisation.
Les partenaires peuvent profiter des avantages des événements d’éditeur dans leurs solutions.

Les partenaires peuvent aussi programmer un événement d’abonné (Subscriber event), qui attendra ensuite un événement d’éditeur publié, puis le traitera. Un abonné permet aux partenaires de s’enclencher au cœur de la fonctionnalité de l’application, sans avoir à procéder à la classique modification de code.

-cas d’application de décompte salaire ajusté

Enregistrer le décompte salaire ajusté comme PDF

Envoyer le décompte salaire ajusté à Direct

-cas d’application du certificat de salaire ajusté

Enregistrer le certificat de salaire remanié en PDF

Envoyer le certificat de salaire ajusté à Direct

3.)Exemples de code pour les événements d’abonné (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('Aucun traitement de salaire n’a été trouvé. Code d’erreur %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;

 

4.)Autres exemples de code pour les événements d’abonné (Subscriber-Events)
 
Pour commencer, tous les destinataires que nous avons ajoutés sont supprimés, puis les destinataires qui doivent recevoir l’e-mail sont ajoutés.
Le paramètre «pHandled» ne doit ensuite être défini que si le message électronique est créé dans l’événement d’abonné.
Si pHandled est laissé sur «false», nous continuerons alors à travailler uniquement avec les paramètres modifiés et créerons l’adresse e-mail.

 Théoriquement, il est également possible de personnaliser l’objet ou le corps du message (Body) :
 [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('aziz.mulaj@swisssalary.ch');

           end;

 

 Étant donné que la même fonction est aussi utilisée par le rapport « Décompte salaire PDF », il a fallu transformer un peu le code au cas où les destinataires ne devraient pas être modifiés lors de l’envoi du décompte salaire par courrier électronique.

 
 
 

5.)Utiliser Microsoft Event Publisher pour remplacer les consultations de rapport
Microsoft propose cet éditeur à partir de la version BC13 seulement.
Si le partenaire souhaite remplacer toutes les consultations de décompte salaire par le décompte salaire défini par l’utilisateur, l’éditeur Microsoft suivant peut être utilisé :
 
[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;