Aller au contenu

Renseigner les espaces réservés de Document Dispatch avec une codeunit personnalisée

Utilisez une codeunit personnalisée pour construire la valeur textuelle complète d’un espace réservé de Document Dispatch. La codeunit reçoit le document actuel et peut renvoyer une combinaison du numéro de facture, du nom du client et de vos propres calculs. Document Dispatch insère ensuite ce texte dans l’espace réservé affecté du modèle d’e-mail.

L’affectation s’effectue dans le profil d’envoi via Configuration du type de sortie → Espaces réservés d’e-mail → Data Mapping Code. Le mappage de données CORE sélectionné contient une ligne de type CODEUNIT qui appelle votre codeunit. Sélectionnez le mappage approprié pour chaque espace réservé nécessaire, par exemple %1 ou %2, afin d’en définir le contenu. L’exemple suivant montre la configuration complète pour une facture vente enregistrée.

Document actuel → mappage de données CORE (CODEUNIT) → codeunit personnalisée → texte renvoyé → espace réservé du modèle d’e-mail.

Conditions préalables

  • Une extension AL personnalisée avec une dépendance envers CORE by Simova et ses symboles.
  • Les autorisations nécessaires pour configurer les mappages CORE, exécuter votre codeunit et lire les enregistrements utilisés.
  • Pour l’exemple d’e-mail : Document Dispatch avec un modèle d’e-mail et un profil d’envoi pour Sales Invoice Header (table 112, en-tête de facture vente enregistrée).

1. Implémenter la codeunit

Ajoutez la codeunit suivante à votre extension. Adaptez l’identifiant et le nom de l’objet à votre extension, puis publiez celle-ci avant de sélectionner la codeunit dans le mappage.

codeunit 50100 "My Placeholder Mapping"
{
    TableNo = "SIM_CORE Temp Table";

    trigger OnRun()
    var
        SalesInvoiceHeader: Record "Sales Invoice Header";
        SourceRecordRef: RecordRef;
        DocumentTextLbl: Label '%1 | %2', Locked = true;
        UnsupportedFunctionErr: Label 'Unsupported function: %1.', Comment = '%1 = Function name';
        MissingRecordErr: Label 'The source record could not be found.';
        WrongTableErr: Label 'This function requires a posted sales invoice.';
    begin
        Rec."Function List" := 'DOCUMENTTEXT';
        Clear(Rec."Dyn Mapping Return Value");

        if Rec.Param = '' then
            exit;

        if Rec.Param <> 'DOCUMENTTEXT' then
            Error(UnsupportedFunctionErr, Rec.Param);

        if not SourceRecordRef.Get(Rec.RecID) then
            Error(MissingRecordErr);
        if SourceRecordRef.Number <> Database::"Sales Invoice Header" then
            Error(WrongTableErr);
        SourceRecordRef.SetTable(SalesInvoiceHeader);
        SourceRecordRef.Close();

        Rec."Dyn Mapping Return Value" := CopyStr(
            StrSubstNo(DocumentTextLbl,
                SalesInvoiceHeader."No.",
                SalesInvoiceHeader."Bill-to Name"),
            1, MaxStrLen(Rec."Dyn Mapping Return Value"));
    end;
}

Pour une facture enregistrée portant le numéro INV-1001 et le nom de facturation Contoso, le résultat est INV-1001 | Contoso. Votre codeunit définit le séparateur et la composition du texte.

CORE exécute la codeunit via son déclencheur OnRun avec un tampon de la table SIM_CORE Temp Table :

Champ Utilisation
RecID Identifiant de l’enregistrement source actuel, par exemple la facture vente enregistrée.
Param Valeur de Execute Codeunit Param, ici DOCUMENTTEXT (50 caractères maximum).
Company Nom de la société actuelle, limité à 30 caractères. L’exemple lit dans la société actuelle.
Function List Noms des fonctions séparés par des virgules pour la sélection du paramètre. Avec un paramètre vide, l’exemple remplit uniquement cette liste.
Dyn Mapping Return Value Texte renvoyé à l’espace réservé, 250 caractères maximum.

Écrivez le résultat dans Rec."Dyn Mapping Return Value". Cette sortie texte ne nécessite ni enregistrement de retour ni valeur dans le BLOB Return Value. L’exemple utilise CopyStr pour tronquer les résultats trop longs à la longueur du champ. Pour prendre en charge d’autres tables sources, adaptez le traitement et la validation de l’enregistrement.

2. Configurer le mappage de données CORE

  1. Recherchez CORE - Data Mappings et choisissez Nouveau.
  2. Saisissez DOC-TEXT dans Code et une Description explicite.
  3. Définissez la table de départ (Starting Table) de la fiche sur Sales Invoice Header (112).
  4. Ajoutez exactement une ligne de mappage et sélectionnez d’abord Type CODEUNIT.
  5. Renseignez la ligne comme suit. Les noms des champs correspondent au client en anglais.
Champ de la ligne de mappage Valeur
Type CODEUNIT
Starting Table Sales Invoice Header (112)
Execute Codeunit 50100 (ou votre propre identifiant d’objet)
Execute Codeunit Param DOCUMENTTEXT

Saisissez DOCUMENTTEXT directement ou sélectionnez-le à l’aide de la recherche du paramètre. Cette recherche exécute la codeunit avec un paramètre vide et lit Function List. L’exemple traite donc cet appel sans lire d’enregistrement source.

Laissez Source Table, Source Field, Starting Field et Field Filter vides pour cet exemple. N’ajoutez pas de lignes RETURN, RETURNFIELD ou CODEUNITRECORD : ce mappage renvoie son texte directement via la codeunit. Utilisez la même table de départ sur la ligne et sur la fiche pour que Test Data Mapping propose les enregistrements de la bonne table.

3. Affecter le mappage à un espace réservé

  1. Ouvrez le profil d’envoi Document Dispatch pour les factures vente enregistrées et sa configuration du type de sortie.
  2. Choisissez Espaces réservés d’e-mail (Email Placeholders) et sélectionnez ou créez un espace réservé, par exemple %1.
  3. Sélectionnez DOC-TEXT dans Data Mapping Code. Laissez Champ vide et Remplir avec la formule de salutation BC (Fill with BC Salutation) désactivé pour cet espace réservé.
  4. Utilisez %1 dans le modèle d’e-mail affecté, par exemple Document : %1.

Lors de la résolution de l’espace réservé, CORE transmet l’enregistrement actuel à la codeunit et utilise le texte renvoyé. Le texte du modèle de l’exemple devient Document : INV-1001 | Contoso.

4. Vérifier le résultat

  1. Sur la fiche de mappage, choisissez Test Data Mapping et sélectionnez une facture vente enregistrée. Comparez le texte affiché avec son numéro et son nom de facturation.
  2. Préparez un e-mail via le profil Document Dispatch configuré et vérifiez la valeur de l’espace réservé dans le corps avant l’envoi.
  3. Répétez l’opération avec une autre facture pour vérifier que la valeur provient du document actuel.

Si la valeur est vide, vérifiez le code de mappage sélectionné, le Type, l’identifiant de codeunit, le paramètre et l’affectation à Dyn Mapping Return Value. Si aucune sélection d’enregistrement ne s’affiche pendant le test, vérifiez Starting Table sur la ligne de mappage. En cas d’erreur, vérifiez aussi la table source et les autorisations d’exécution de la codeunit et de lecture de l’enregistrement. Raccourcissez le résultat s’il dépasse 250 caractères ; l’objet de l’e-mail est également soumis à une limite de longueur totale.

Documentation associée