Exercice : fonctions personnalisées

Effectué

Vous êtes développeur de systèmes métier pour CRONUS International Ltd. Vous découvrez comment développer des personnalisations pour Business Central et programmer en AL pour personnaliser des solutions client. Vous souhaitez personnaliser la page Fiche client en ajoutant une action qui ajuste le crédit autorisé d’un client en fonction de l’historique des ventes précédentes du client ou réinitialise la limite à zéro si aucune transaction n’a eu lieu.

Vous avez reçu les exigences suivantes :

  • Le crédit autorisé d’un client ne peut pas dépasser 50 % du chiffre d’affaires total du client au cours des 12 derniers mois.

  • Le crédit autorisé du client doit toujours être arrondi au 10 000 le plus proche.

  • Si le crédit autorisé est arrondi au cours du processus, l’application doit envoyer une notification à l’utilisateur.

  • Si le nouveau crédit autorisé ne diffère pas de l’ancien, l’application doit envoyer une notification à l’utilisateur.

  • Si le client n’a aucun historique des ventes au cours des 12 derniers mois, le crédit autorisé doit être remis à zéro.

  • La fonction qui définit le crédit autorisé doit être disponible pour d’autres objets.

  • La page Fiche client doit inclure une action qui appelle la fonction.

  • Si la fonction est appelée à partir de l’action de la page et que le crédit autorisé serait augmenté, la fonction doit demander à l’utilisateur une confirmation avant de mettre à jour le crédit autorisé.

Tâches

  • Créez une extension.

  • Créez une extension de table.

  • Créez une extension de page.

Étapes

  1. Démarrez Visual Studio Code.

  2. Créez un projet d’extension AL. Sélectionnez Afficher > Palette de commandes... (Ctrl+Shift+P).

  3. Saisissez AL: Go! dans la zone de recherche, puis sélectionnez la commande dans la liste.

  4. Acceptez le chemin d’accès suggéré mais redéfinissez le nom sur CreditLimit (ou saisissez un autre chemin d’accès).

  5. Sélectionnez la plateforme cible la plus récente.

  6. Sélectionnez Bac à sable cloud Microsoft comme point de terminaison de développement.

  7. Téléchargez les symboles d’application. Sélectionnez Afficher > Palette de commandes... (Ctrl+Shift+P).

  8. Saisissez AL: Download symbols dans la zone de recherche, puis sélectionnez la commande dans la liste.

  9. Si vous y êtes invité, fournissez vos informations d’identification professionnelles (compte Microsoft 365/compte Microsoft Entra ID).

  10. Ouvrez le fichier app.json et redéfinissez le paramètre name sur Crédit autorisé. Redéfinissez le paramètre publisher sur Cronus International Ltd.

  11. Redéfinissez le paramètre idRanges en remplaçant 50400 par 50450.

  12. Supprimez le fichier HelloWorld.al.

  13. Ajoutez un dossier nommé src.

  14. Dans le dossier src, créez un fichier nommé Customer.TableExt.al.

  15. Créez une extension de table dans ce fichier à l’aide d’extraits de code. Saisissez ttableext, puis appuyez sur la touche de tabulation.

  16. Redéfinissez le paramètre ID sur 50400 et le paramètre name sur Customer.

  17. Définissez le paramètre Extends sur Customer pour étendre la table Customer.

  18. Ajoutez une procédure non locale à l’extension de table Customer et nommez-la UpdateCreditLimit.

  19. Modifiez la fonction UpdateCreditLimit afin qu’elle reçoive un paramètre nommé NewCreditLimit, de type Décimal, par référence.

  20. Ajoutez une autre procédure non locale et nommez-la CalculateCreditLimit, ce qui renvoie une valeur de type Décimal.

  21. Dans le dossier src, créez un fichier nommé CustomerCard.PageExt.al.

  22. Créez une extension de page dans ce fichier à l’aide d’extraits de code. Saisissez tpageext, puis appuyez sur la touche de tabulation.

  23. Redéfinissez le paramètre ID sur 50130 et le paramètre name sur CustomerCard.

  24. Définissez le paramètre Extends sur Customer Card.

  25. Créez une procédure locale et nommez-la CallUpdateCreditLimit.

  26. Ajoutez une action au groupe d’actions Fonction du conteneur d’action ActionItems. Dans la section Actions, saisissez addAfter("F&unctions).

  27. Ajoutez une action nommée UpdateCreditLimit dans la section addafter, puis définissez les propriétés Caption et Tooltip sur Update Credit Limit. Définissez la propriété Image sur CalculateCost.

  28. Dans le déclencheur OnAction, appelez l’action CallUpdateCreditLimit.

  29. Modifier la fonction CalculateCreditLimit de l’extension de table. Ajoutez une variable locale nommée Customer de type Enregistrer le client.

  30. Ajoutez du code à la fonction CalculateCreditLimit qui calcule le champ Sales (LCY) pour les 12 derniers mois.

    Cust := Rec;
    Cust.SetRange("Date Filter",CalcDate('<-12M>',WorkDate()),WorkDate());
    Cust.CalcFields("Sales (LCY)","Balance (LCY)");
    exit(Round(Cust."Sales (LCY)" * 0.5));
    

    Voici l’une des exigences : le crédit autorisé d’un client ne peut pas dépasser 50 % du produit des ventes total du client au cours des 12 derniers mois.

  31. Ajoutez du code à la fonction UpdateCreditLimit pour arrondir le paramètre formel NewCreditLimit au 10 000 le plus proche, afin de valider la valeur de NewCreditLimit dans le champ Credit Limit (LCY) et modifier l’enregistrement.

    NewCreditLimit := Round(NewCreditLimit, 10000);
    Rec.Validate("Credit Limit (LCY)", NewCreditLimit);
    Rec.Modify();
    

    Voici l’une des exigences : le crédit autorisé du client doit toujours être arrondi au 10 000 le plus proche.

  32. Ajoutez trois libellés globaux à l’extension de page avec le texte suivant :

    • Message de confirmation

    • Informations sur le crédit autorisé arrondi

    • Informations sur un crédit autorisé à jour

    Nom ConstValue
    AreYouSureQst Voulez-vous vraiment définir le %1 sur %2 ?
    CreditLimitRoundedTxt Le crédit autorisé a été arrondi à %1 pour se conformer aux stratégies d’entreprise.
    CreditLimitUpToDateTxt Le crédit autorisé est à jour.
  33. Ajoutez deux variables décimales locales à la fonction CallUpdateCreditLimit et appelez-les CreditLimitCalculated et CreditLimitActual, toutes deux de type Décimal.

  34. Ajoutez le code suivant à la fonction CallUpdateCreditLimit :

    CreditLimitCalculated := Rec.CalculateCreditLimit();
    if CreditLimitCalculated = Rec."Credit Limit (LCY)" then begin
        Message(CreditLimitUpToDateTxt);
        exit;
    end;
    
    if GuiAllowed() then
        if not Confirm(AreYouSureQst, false, FieldCaption("Credit Limit (LCY)"),CreditLimitCalculated) then
            exit;
    
    CreditLimitActual := CreditLimitCalculated;
    Rec.UpdateCreditLimit(CreditLimitActual);
    if CreditLimitActual <> CreditLimitCalculated then
        Message(CreditLimitROundedTxt, CreditLimitActual);
    

    Si le nouveau crédit autorisé ne diffère pas de l’ancien, l’application doit envoyer une notification à l’utilisateur.

  35. L’extension de table Customer devrait désormais ressembler au bloc de code suivant :

    tableextension 50400 Customer extends Customer
    {
        procedure UpdateCreditLimit(var NewCreditLimit: Decimal)
        begin
            NewCreditLimit := Round(NewCreditLimit, 10000);
            Rec.Validate("Credit Limit (LCY)", NewCreditLimit);
            Rec.Modify();
        end;
    
        procedure CalculateCreditLimit(): Decimal
        var
            Customer: Record Customer;
        begin
            Customer := Rec;
            Customer.SetRange("Date Filter", CalcDate('<-12M>', WorkDate()), WorkDate());
            Customer.CalcFields("Sales (LCY)", "Balance (LCY)");
            exit(Round(Customer."Sales (LCY)" * 0.5));
        end;
    }
    
  36. L’extension de page CustomerCard devrait désormais ressembler au bloc de code suivant :

    pageextension 50400 CustomerCard extends "Customer Card"
    {
        layout
        {
            // Add changes to page layout here
        }
    
        actions
        {
            // Add changes to page actions here
            addafter("F&unctions")
            {
                action(UpdateCreditLimit)
                {
                    ApplicationArea = All;
                    Caption = 'Update Credit Limit';
                    Image = CalculateCost;
                    ToolTip = 'Update Credit Limit';
    
                    trigger OnAction()
                    begin
                        CallUpdateCreditLimit();
                    end;
                }
            }
        }
        var
            AreYouSureQst: Label 'Are you sure that you want to set the %1 to %2?',  Comment = '%1 is Credit Limit caption and %2 is the new Credit Limit value.' ;
            CreditLimitRoundedTxt: Label 'The credit limit was rounded to %1 to comply with company policies.',  Comment = '%1 is new Credit Limit value';
            CreditLimitUpToDateTxt: Label 'The credit limit is up to date.';
    
        local procedure CallUpdateCreditLimit()
        var
            CreditLimitCalculated, CreditLimitActual : Decimal;
        begin
            CreditLimitCalculated := Rec.CalculateCreditLimit();
            if CreditLimitCalculated = Rec."Credit Limit (LCY)" then begin
                Message(CreditLimitUpToDateTxt);
                exit;
            end;
    
            if GuiAllowed() then
                if not Confirm(AreYouSureQst, false, Rec.FieldCaption("Credit Limit (LCY)"), CreditLimitCalculated) then
                    exit;
    
            CreditLimitActual := CreditLimitCalculated;
            Rec.UpdateCreditLimit(CreditLimitActual);
            if CreditLimitActual <> CreditLimitCalculated then
                Message(CreditLimitROundedTxt, CreditLimitActual);
        end;
    }
    

    Si le client n’a aucun historique des ventes au cours des 12 derniers mois, le crédit autorisé doit être remis à zéro.

  37. Ouvrez le fichier launch.json dans le dossier .vscode. Définissez le paramètre startupObjectId sur 22 et le paramètre startupObjectType sur Page.

  38. Publiez votre extension dans le bac à sable. Sélectionnez Afficher > Palette de commandes... (Ctrl+Shift+P).

  39. Saisissez AL: Publish dans la zone de recherche (ou appuyez sur la touche F5), puis sélectionnez la commande dans la liste.

  40. Vérifiez que l’application Microsoft Dynamics 365 Business Central démarre et que la page Liste des clients s’affiche.

  41. Ouvrez une fiche client aléatoire. sur la page Customer Card, recherchez l’action Update Credit Limit dans le menu Actions, après Fonctions.

  42. Testez l’action.