Exercice : créer une interface

Effectué

Dans cet exercice, vous êtes un développeur travaillant pour CRONUS International Ltd. Vous souhaitez créer et implémenter une interface nommée IAddressProvider, qui a une méthode getAddress avec une certaine signature.

Tâches

  • Créer une interface

  • Créer deux codeunits implémentant l’interface

  • Créer une page avec une action testant l’interface

  • Créer une enum pour prendre en charge l’initialisation de l’interface

Étapes

Pour effectuer cet exercice, procédez comme suit :

  1. Créez un fichier .al avec le code suivant qui définit une interface IAddressProvider ayant une méthode getAddress avec une certaine signature :

    
    interface IAddressProvider
    {
    procedure GetAddress(): Text;
    }
    
    
  2. Créez deux fichiers .al pour créer deux codeunits : CompanyAddressProvider et PrivateAddressProvider. Les deux codeunits vont implémenter l’interface IAddressProvider, et chacun va définir une implémentation différente de la méthode getAddress ; dans ce cas, il s’agit d’une simple variation de valeur d’adresse :

    
    codeunit 65100 CompanyAddressProvider implements IAddressProvider
    {
        procedure GetAddress(): Text;
        begin
            exit('Company address \ Denmark 2800')
        end;
    }
    
    
    
    codeunit 65101 PrivateAddressProvider implements IAddressProvider
    {
        procedure GetAddress(): Text;
        begin
            exit('My Home address \ Denmark 2800')
        end;
    }
    
    
  3. Créez un fichier .al pour créer une page avec une action capturant le choix de l’adresse et appelant, sur la base de ce choix, une implémentation de l’interface IAddressProvider :

    
    page 65100 MyAddress
    {
        PageType = Card;
        ApplicationArea = All;
        UsageCategory = Administration;
    
        layout
        {
            area(Content)
            {
                group(GroupName)
                {
                }
            }
        }
    
        actions
        {
            area(Processing)
            {
                action(WhatsTheAddress)
                {
                    ApplicationArea = All;
                    Caption = 'What's the Address?';
                    ToolTip = 'Select the address.';
                    Image = Addresses;
    
                    trigger OnAction()
                    var
                        iAddressProvider: Interface IAddressProvider;
                    begin
                        AddressproviderFactory(iAddressProvider);
                        Message(iAddressProvider.GetAddress());
                    end;
                }
    
                action(SendToHome)
                {
                    ApplicationArea = All;
                    Image = Home;
                    Caption = 'Send to Home.';
                    ToolTip = 'Set the interface implementation to Home.';
                    trigger OnAction()
                    begin
                        sendTo := sendTo::Private
                    end;
                }
    
                action(SendToWork)
                {
                    Image = WorkCenter;
                    Caption = 'Send to Work.';
                    ToolTip = 'Set the interface implementation to Work.';
                    ApplicationArea = All;
    
                    trigger OnAction()
                    begin
                        sendTo := sendTo::Company
                    end;
                }
            }
        }
    
        local procedure AddressproviderFactory(var iAddressProvider: Interface IAddressProvider)
        var
            CompanyAddressProvider: Codeunit CompanyAddressProvider;
            PrivateAddressProvider: Codeunit PrivateAddressProvider;
        begin
    
            if sendTo = sendTo::Company then
                iAddressProvider := CompanyAddressProvider;
    
            if sendTo = sendTo::Private then
                iAddressProvider := PrivateAddressProvider;
    
        end;
    
        var
            sendTo: enum SendTo;
    }
    
    
  4. Créez un fichier .al pour créer une enum contenant deux valeurs : Company et Private.

    
    enum 65100 SendTo
    {
        Extensible = true;
    
        value(0; Company)
        {
        }
    
        value(1; Private)
        {
        }
    }
    
    
  5. Publiez votre extension, puis ouvrez la page MyAddress.

    Capture d’écran de la page MyAddress affichant l’onglet Actions.

  6. Sélectionnez l’action Envoyer au domicile.

  7. Sélectionnez l’action Quelle est l’adresse, puis vérifiez que le résultat ressemble à la capture d’écran suivante :

    Capture d’écran de la boîte de message Mon adresse personnelle.

  8. Sélectionnez l’action Envoyer au travail.

  9. Sélectionnez l’action Quelle est l’adresse, puis vérifiez que le résultat ressemble à la capture d’écran suivante :

    Capture d’écran de la boîte de message Adresse de la société.