Exercice : utiliser des instructions de manipulation de données

Effectué

Vous êtes développeur pour CRONUS International Ltd. Vous avez découvert comment utiliser les instructions de manipulation de données dans AL et souhaitez maintenant mettre en pratique cette nouvelle compétence dans l’environnement de développement. Vous souhaitez être en mesure d’exporter des enregistrements d’écriture comptable vers une table spécifique. Le client doit effectuer cette tâche et le code source afin que vous disposiez d’une vue d’ensemble des montants totaux par client et code source.

Tâches

  • Créer une extension AL

  • Créer une table

  • Créer une page liée à la table

  • Créer un codeunit pour copier les données de différentes tables vers la table qui vient d’être créée

Étapes

  1. Dans Visual Studio Code, dans le projet que vous avez créé précédemment dans ce parcours d’apprentissage, créez un dossier nommé CustomerOverview.

  2. Créez tous les fichiers .al mentionnés dans les étapes suivantes dans le dossier CustomerOverview.

  3. Cliquez sur Fichier > Nouveau fichier, puis enregistrez ce fichier en cliquant sur Fichier > Enregistrer. Nommez le fichier CustomerOverview.Table.al.

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

  5. Redéfinissez le paramètre ID sur 50120 et le paramètre name sur Customer Overview.

  6. Définissez la propriété DataClassification sur CustomerContent et la propriété Caption sur Customer Overview.

  7. Supprimez le champ MyField.

  8. Créez les champs suivants. Vous pouvez utiliser l’extrait de code tfield.

    N° de champ Nom du champ Type de données Longueur
    1 Entry No. Integer
    2 Customer No. Code 20
    3 Customer Name Text 100
    4 Source Code Code 20
    5 Amount Decimal
    6 LastRunDate DateTime
  9. Définissez la propriété DataClassification pour chaque champ de la table sur CustomerContent.

  10. Définissez la propriété Caption pour chaque champ de la table.

  11. Définissez le champ Clé primaire sur Entry No.

  12. Supprimez la section des variables globales.

  13. Supprimez les déclencheurs de table.

  14. Votre fichier devrait maintenant ressembler à ce bloc de code :

    table 50120 "Customer Overview"
    {
        DataClassification = CustomerContent;
        Caption = 'Customer Overview';
    
        fields
        {
            field(1; "Entry No."; Integer)
            {
                DataClassification = CustomerContent;
                Caption = 'Entry No.';
            }
            field(2; "Customer No."; code[20])
            {
                DataClassification = CustomerContent;
                Caption = 'Customer No.';
            }
            field(3; "Customer Name"; Text[100])
            {
                DataClassification = CustomerContent;
                Caption = 'Customer Name';
            }
            field(4; "Source Code"; Code[20])
            {
                DataClassification = CustomerContent;
                Caption = 'Source Code';
            }
            field(5; "Amount"; Decimal)
            {
                DataClassification = CustomerContent;
                Caption = 'Amount';
            }
            field(6; "LastRunDate"; DateTime)
            {
                DataClassification = CustomerContent;
                Caption = 'LastRunDate';
            }
        }
    
        keys
        {
            key(Pk; "Entry No.")
            {
                Clustered = true;
            }
        }
    }
    
  15. Créez un fichier nommé CustomerOverviewList.Page.al.

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

  17. Redéfinissez le paramètre ID sur 50120 et le paramètre name sur Customer Overview List.

  18. Définissez la propriété SourceTable sur Customer Overview et la propriété Caption sur Customer Overview List.

  19. Définissez la propriété PageType sur List et la propriété UsageCategory sur Lists. Vérifiez que la propriété ApplicationArea est définie sur All.

  20. Définissez la propriété Editable sur false.

  21. Vérifiez qu’une zone content est créée dans la section Disposition. Sinon, créez une zone nommée content.

  22. Redéfinissez le nom du répéteur sur General.

  23. Ajoutez tous les champs de la table Customer Overview que vous avez créée précédemment dans le répéteur.

  24. Vérifiez que la propriété ApplicationArea est définie sur All pour tous les champs de la page.

  25. Ajoutez des info-bulles parlantes à tous les champs de la page.

  26. Supprimez la zone factboxes.

  27. Supprimez la zone Actions.

  28. Votre fichier devrait maintenant ressembler à ce bloc de code :

    page 50120 "Customer Overview List"
    {
        PageType = List;
        ApplicationArea = All;
        UsageCategory = Lists;
        SourceTable = "Customer Overview";
        Caption = 'Customer Overview List';
        Editable = false;
    
        layout
        {
            area(Content)
            {
                repeater(General)
                {
    
                    field("Entry No."; Rec."Entry No.")
                    {
                        ToolTip = 'Specifies the value of the Entry No. field.';
                        ApplicationArea = All;
                    }
                    field("Customer No."; Rec."Customer No.")
                    {
                        ToolTip = 'Specifies the value of the Customer No. field.';
                        ApplicationArea = All;
                    }
                    field("Customer Name"; Rec."Customer Name")
                    {
                        ToolTip = 'Specifies the value of the Customer Name field.';
                        ApplicationArea = All;
                    }
                    field("Source Code"; Rec."Source Code")
                    {
                        ToolTip = 'Specifies the value of the Source Code field.';
                        ApplicationArea = All;
                    }
                    field(Amount; Rec.Amount)
                    {
                        ToolTip = 'Specifies the value of the Amount field.';
                        ApplicationArea = All;
                    }
                    field(LastRunDate; Rec.LastRunDate)
                    {
                        ToolTip = 'Specifies the value of the LastRunDate field.';
                        ApplicationArea = All;
                    }
                }
            }
        }
    }
    
  29. Créez un fichier nommé CustomerOverviewMgmt.CodeUnit.al.

  30. Créez un codeunit dans ce fichier à l’aide d’extraits de code. Saisissez tcodeunit, puis appuyez sur la touche de tabulation.

  31. Redéfinissez le paramètre ID sur 50120 et le paramètre name sur Customer Overview Mgmt.

  32. Ajoutez les variables globales suivantes :

    Nom Type de données Sous-type
    CustomerOverview Enregistrement Présentation client
    Customer Enregistrement Client
    SourceCode Enregistrement Source Code
    GLEntry Enregistrement Écriture comptable
    NextEntryNo Integer
  33. Dans le déclencheur OnRun, ajoutez le code suivant :

    Clear(SourceCode);
    Clear(CustomerOverview);
    Clear(GLEntry);
    
    if CustomerOverview.FindLast() then
        NextEntryNo := CustomerOverview."Entry No." + 1
    else
        NextEntryNo := 1;
    
    if SourceCode.FindSet() then
        repeat
            if Customer.FindSet() then
                repeat
                    GLEntry.SetRange("Source Type", GLEntry."Source Type"::Customer);
                    GLEntry.SetRange("Source Code", SourceCode.Code);
                    GLEntry.SetRange("Source No.", Customer."No.");
                    if GLEntry.FindSet() then begin
                        GLEntry.CalcSums(GLEntry.Amount);
                        CustomerOverview."Entry No." := NextEntryNo;
                        CustomerOverview."Customer No." := Customer."No.";
                        CustomerOverview."Customer Name" := Customer.Name;
                        CustomerOverview."Source Code" := SourceCode.Code;
                        CustomerOverview.Amount := GLEntry.Amount;
                        CustomerOverview.LastRunDate := CurrentDateTime();
                        CustomerOverview.Insert();
                        NextEntryNo += 1;
                    end;
                until Customer.Next() = 0;
        until SourceCode.Next() = 0
    
  34. Ouvrez le fichier CustomerOverviewList.Page.al.

  35. Ajoutez une zone actions à la page.

  36. Dans la zone actions, ajoutez une section Processing.

  37. Dans la section Processing, ajoutez une action.

  38. Redéfinissez le nom de l’action sur Import Records, puis définissez les propriétés suivantes sur l’action :

    • Caption : Import Records

    • Image : Import

    • ApplicationArea : All

  39. Dans le déclencheur OnAction, créez une variable locale.

    Nom Type de données Sous-type
    UpdateCustomerOverview Codeunit Customer Overview Mgmt
  40. Appelez le codeunit RunTrigger à partir du déclencheur OnAction.

  41. Votre code devrait maintenant ressembler à ce bloc de code :

    page 50120 "Customer Overview List"
    {
        PageType = List;
        ApplicationArea = All;
        UsageCategory = Lists;
        SourceTable = "Customer Overview";
        Caption = 'Customer Overview List';
        Editable = false;
    
        layout
        {
            area(Content)
            {
                repeater(General)
                {
    
                    field("Entry No."; Rec."Entry No.")
                    {
                        ToolTip = 'Specifies the value of the Entry No. field.';
                        ApplicationArea = All;
                    }
                    field("Customer No."; Rec."Customer No.")
                    {
                        ToolTip = 'Specifies the value of the Customer No. field.';
                        ApplicationArea = All;
                    }
                    field("Customer Name"; Rec."Customer Name")
                    {
                        ToolTip = 'Specifies the value of the Customer Name field.';
                        ApplicationArea = All;
                    }
                    field("Source Code"; Rec."Source Code")
                    {
                        ToolTip = 'Specifies the value of the Source Code field.';
                        ApplicationArea = All;
                    }
                    field(Amount; Rec.Amount)
                    {
                        ToolTip = 'Specifies the value of the Amount field.';
                        ApplicationArea = All;
                    }
                    field(LastRunDate; Rec.LastRunDate)
                    {
                        ToolTip = 'Specifies the value of the LastRunDate field.';
                        ApplicationArea = All;
                    }
                }
            }
        }
        actions
        {
            area(Processing)
            {
                action("Import Records ")
                {
                    Caption = 'Import Records';
                    ToolTip = 'Import Records';
                    ApplicationArea = All;
                    Image = Import;
    
                    trigger OnAction()
                    var
                        CustomerOverviewMgmt: Codeunit "Customer Overview Mgmt";
                    begin
                        CustomerOverviewMgmt.Run();
                    end;
                }
            }
        }
    }
    
  42. Ouvrez le fichier launch.json dans le dossier .vscode. Définissez le paramètre startupObjectId sur 50120 et le paramètre startupObjectType sur Page.

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

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

  45. Vérifiez que l’application Microsoft Dynamics 365 Business Central démarre et que la page Customer Overview List s’affiche.

  46. Testez votre extension en sélectionnant l’action Importer des enregistrements.