Aller au contenu

Codeunit d'affectation dynamique d'exemple

La codeunit 5138174 "SIM_DPS Sample Dyn. Mapping CU" montre comment une logique AL personnalisée peut fournir une valeur à une affectation de données Simova CORE utilisée par Business Portals.

Elle utilise SIM_CORE Temp Table comme table source. Le moteur transmet le contexte via cet enregistrement temporaire, exécute la fonction sélectionnée et utilise Dyn Mapping Return Value.

Quand utiliser une codeunit d'affectation

Une ligne normale obtient une valeur depuis un champ, une constante, un filtre ou une fonction prédéfinie. Utilisez CODEUNIT lorsque la valeur nécessite une logique AL pour combiner des enregistrements, effectuer des calculs ou résoudre une valeur impossible à exprimer avec les lignes standard.

Voir Création d'affectations de données.

Découverte et distribution

Lors du lookup du paramètre, Rec.Param est vide. OnRun utilise GETFUNCTIONS et renvoie Execute dans Rec."Function List".

AL
'GETFUNCTIONS':
    Rec."Function List" := 'Execute';

Pendant l'exécution, CORE copie Execute Codeunit Param dans Rec.Param. L'exemple distribue Execute à la procédure publique Execute. Ajoutez toute fonction supplémentaire à Function List et à case.

Contexte d'exécution

Champ Objectif
RecID Identifie l'enregistrement source.
Company Identifie la société Business Central.
Param Contient le nom de fonction, tel que Execute.
Function List Renvoie les fonctions proposées lors de la configuration.
Dyn Mapping Return Value Renvoie le résultat sous forme de texte.

Le champ de retour est Text[250]. Convertissez les autres types dans une représentation texte adaptée.

Comportement de l'exemple

L'exemple renvoie THIS RETURN WILL BE SHOWN ON PAGE, ce qui confirme uniquement l'appel et le chemin de retour.

AL
ParamRecordSIMCORETempTable."Dyn Mapping Return Value" := 'THIS RETURN WILL BE SHOWN ON PAGE';

LocalRecordId n'est jamais affecté avant LocalRecordRef.Get(LocalRecordId) ; l'enregistrement du contexte n'est donc pas chargé. Une implémentation réelle doit utiliser ParamRecordSIMCORETempTable.RecID, éventuellement ParamRecordSIMCORETempTable.Company, vérifier la table et calculer la valeur.

Configuration

  1. Ouvrez CORE Data Mapping et créez ou ouvrez l'affectation utilisée par Business Portals.
  2. Ajoutez une ligne et définissez Type sur CODEUNIT.
  3. Définissez Execute Codeunit sur 5138174 ou sur la copie personnalisée.
  4. Ouvrez Execute Codeunit Param et sélectionnez Execute.
  5. Affectez le code au champ, field mapping, espace réservé ou autre configuration concernée.
  6. Testez des enregistrements et sociétés représentatifs.

La codeunit doit appartenir aux jeux d'autorisations de l'utilisateur ou du compte de service. L'exemple standard est déjà inclus dans les autorisations Business Portals.

Considérations d'implémentation

  • Conservez TableNo = "SIM_CORE Temp Table".
  • CORE transmet le contexte d'affectation via Rec.
  • Lisez l'ID dans Rec.RecID, et non dans une RecordId locale non initialisée.
  • Respectez Rec.Company et utilisez RecordRef.Open avec la société requise.
  • Vérifiez RecID.TableNo, les enregistrements absents et la limite de 250 caractères.
  • Formatez les valeurs de façon cohérente.
  • Évitez les appels d'interface, confirmations et actions de page.
  • N'accordez que les autorisations de lecture nécessaires.

Code d'exemple complet

AL
codeunit 5138174 "SIM_DPS Sample Dyn. Mapping CU"
{
    TableNo = "SIM_CORE Temp Table";

    trigger OnRun()
    var
        LocalParamText: Text;
    begin
        LocalParamText := 'GETFUNCTIONS';

        if (Rec.Param <> '') then
            LocalParamText := Rec.Param;

        case LocalParamText of
            'Execute':
                Execute(Rec);

            'GETFUNCTIONS':
                Rec."Function List" := 'Execute';
        end;
    end;

    procedure Execute(var ParamRecordSIMCORETempTable: Record "SIM_CORE Temp Table")
    var
        LocalRecordRef: RecordRef;
        LocalRecordId: RecordId;
    begin
        if LocalRecordRef.Get(LocalRecordId) then;

        ParamRecordSIMCORETempTable."Dyn Mapping Return Value" := 'THIS RETURN WILL BE SHOWN ON PAGE';
    end;
}