Aller au contenu

Codeunit d'action d'exemple

La codeunit 5138156 "SIM_DPS Sample CU" montre comment une codeunit Business Central peut fournir une logique d'action personnalisée à Business Portals. L'exemple utilise SIM_DPS OL comme table source et couvre la découverte des fonctions, l'exécution des actions, les événements du frontend et la navigation vers les enregistrements sources ou nouvellement créés.

Cette codeunit est une implémentation de référence. Copiez les modèles nécessaires dans une codeunit propre au client et remplacez la logique de vente, les messages, les codes de champs de saisie et les calculs selon les besoins.

Fonctions disponibles

Lorsque Business Portals exécute la codeunit sans contexte d'action, OnRun utilise GETFUNCTIONS et renvoie dans Rec."Function List" les valeurs suivantes, séparées par des virgules :

Fonction Objectif
MakeOrderFromQuote Met à jour les lignes du devis à partir des saisies du portail et transforme le devis en commande vente.
MakeOrderFromItem Crée une commande vente avec une ligne pour l'article sélectionné.
MakeQuoteFromItem Crée un devis avec une ligne pour l'article sélectionné.

Ces valeurs peuvent être sélectionnées comme paramètres lorsque la codeunit est affectée à une action ou à un statut de processus.

AL
'GETFUNCTIONS':
    Rec."Function List" := 'MakeOrderFromQuote,MakeOrderFromItem,MakeQuoteFromItem';

Flux d'exécution

Le déclencheur OnRun distribue tous les appels.

  1. Pour une action normale, il lit l'action de la table de dataset et sa configuration. Une action de processus prend son paramètre dans le statut suivant ; les autres le prennent dans l'action.
  2. Pour une sous-fonction, il lit l'action affectée à la table d'en-tête et ajoute un suffixe dérivé de Rec."Sub Function Execute".
  3. La valeur obtenue est traitée par l'instruction case finale.
Sub Function Execute Suffixe Utilisation
SAVE Save Logique d'enregistrement personnalisée.
CHECK Check Validation avant exécution.
EVENT Event Traiter un événement du frontend et renvoyer des données.
HASEVENT HasEvent Indiquer au frontend si l'événement est implémenté.
OPENDOCPAGE OpenDocPage Ouvrir l'enregistrement représenté par la ligne.
OPENNEWPAGE OpenNewPage Ouvrir l'enregistrement créé par l'action.
BASKETCHECK BasketCheck Valider une opération de panier.

Par exemple, MakeOrderFromQuote et EVENT produisent MakeOrderFromQuoteEvent.

Seuls les gestionnaires suivants contiennent une logique :

  • MakeOrderFromQuoteEvent
  • MakeOrderFromQuoteHasEvent
  • MakeOrderFromQuoteOpenDocPage
  • MakeOrderFromQuoteOpenNewPage
  • MakeOrderFromItemOpenDocPage
  • MakeOrderFromItemOpenNewPage
  • MakeQuoteFromItemOpenDocPage
  • MakeQuoteFromItemOpenNewPage

Les branches Save, Check et BasketCheck, ainsi que les événements des fonctions basées sur les articles, sont des espaces réservés.

Exemples de documents vente

Transformer un devis en commande

MakeOrderFromQuote reçoit l'enregistrement courant via un RecordRef. La procédure recherche les lignes associées dans SIM_DPS OL, lit QUANTITY et met à jour les lignes vente. Une quantité vide prend la valeur 1.

Elle exécute ensuite le contrôle d'approbation standard, demande une confirmation si une interface est disponible, exécute Sales-Quote to Order, copie le numéro de commande Business Portals dans Your Reference, puis stocke l'ID du nouvel enregistrement et l'ID de page.

Créer une commande ou un devis depuis un article

MakeOrderFromItem et MakeQuoteFromItem utilisent l'article sélectionné et le numéro d'entreprise associé à la commande du portail. Chaque procédure crée un en-tête et une ligne, lit QUANTITY et utilise 1 si la saisie est vide.

Pour les actions de processus, le lien est enregistré dans SIM_DPS OL Status ; pour les autres types, dans SIM_DPS OL.

Événements du frontend

Événement Comportement de l'exemple
SELECTLINE Renvoie les ID des lignes du même document ayant la même quantité.
UNSELECTLINE Renvoie le même groupe afin que le frontend supprime la sélection.
INPUTLINE Lit QUANTITY, BRUTTO, NETTO et PRICE et renvoie les valeurs calculées.

MakeOrderFromQuoteHasEvent définit Sub Function Has Event sur true pour ces événements.

Le gestionnaire lit le XML du BLOB Sub Function Event Data, extrait EVENTVALUE de ROOT/EVENT et écrit la réponse UTF-8 dans Sub Function Event Return.

Le calcul INPUTLINE est volontairement illustratif : PRICE correspond à la quantité multipliée par le prix unitaire, BRUTTO à la quantité multipliée par 10, NETTO à la quantité multipliée par 5, et les saisies numériques vides valent zéro.

Voir Événement de sélection, Événement de désélection et Événement de saisie.

Ouvrir des pages Business Central

OpenDocPage ouvre l'enregistrement référencé par Dataset Table Record avec la page configurée. OpenNewPage ouvre l'enregistrement créé ; les actions de processus lisent les identifiants dans SIM_DPS OL Status, les autres dans SIM_DPS OL.

Une interface Business Central est requise ; cette fonctionnalité ne convient pas aux sessions en arrière-plan ni aux services web.

Considérations d'implémentation

  • Conservez TableNo = "SIM_DPS OL" ; Business Portals transmet le contexte via Rec.
  • Ajoutez chaque fonction sélectionnable à GETFUNCTIONS et au distributeur.
  • Respectez exactement la convention paramètre de base plus suffixe.
  • Validez les enregistrements requis ; plusieurs lookups omettent volontairement la gestion explicite des erreurs.
  • Remplacez les messages, codes et multiplicateurs BRUTTO/NETTO codés en dur.
  • Utilisez des labels localisés pour les textes visibles.
  • Vérifiez la limite de transaction créée par Commit.
  • Si de nombreuses lignes correspondent, ne renvoyez que les enregistrements nécessaires.

Résumé de la configuration

  1. Créez ou sélectionnez les tables de dataset.
  2. Créez une action ou un statut de processus et affectez la codeunit.
  3. Sélectionnez un paramètre renvoyé par GETFUNCTIONS.
  4. Affectez l'action à la table requise.
  5. Configurez les codes de saisie, les ID de page et les événements.
  6. Testez l'exécution normale, les sous-fonctions, les statuts, l'accès intersociétés et l'exécution sans interface.