Übung – Eine Schnittstelle erstellen

Abgeschlossen

In dieser Übung arbeiten Sie als Entwickler für CRONUS International Ltd. Sie möchten eine Schnittstelle IAddressProvider erstellen und implementieren, die eine Methode getAddress mit einer bestimmten Signatur hat.

Aufgaben

  • Erstellen Sie eine Schnittstelle.

  • Erstellen Sie zwei Codeunits, die die Schnittstelle implementieren.

  • Erstellen Sie eine Seite mit einer Aktion, die die Schnittstelle testet.

  • Erstellen Sie eine Enumeration, um die Schnittstelleninitialisierung zu unterstützen.

Schritte

Befolgen Sie die folgenden Schritte, um diese Übung abzuschließen:

  1. Erstellen Sie eine neue .al-Datei mit folgendem Code, der eine Schnittstelle IAddressProvider definiert, die eine Methode getAddress mit einer bestimmten Signatur hat:

    
    interface IAddressProvider
    {
    procedure GetAddress(): Text;
    }
    
    
  2. Erstellen Sie zwei neue .al-Dateien, um diese zwei Codeunits zu erstellen: CompanyAddressProvider und PrivateAddressProvider. Beide Codeunits implementieren die Schnittstelle IAddressProvider und definieren jeweils eine unterschiedliche Implementierung der Methode getAddress; in diesem Fall eine einfache Variation des Adresswertes:

    
    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. Erstellen Sie eine neue .al-Datei, um eine Seite mit einer Aktion zu erstellen, die die Wahl der Adresse erfasst und basierend auf dieser Auswahl eine Implementierung der IAddressProvider-Schnittstelle:

    
    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. Erstellen Sie eine neue .al-Datei, um eine Enumeration zu erstellen, die zwei Werte enthält, Company und Private.

    
    enum 65100 SendTo
    {
        Extensible = true;
    
        value(0; Company)
        {
        }
    
        value(1; Private)
        {
        }
    }
    
    
  5. Veröffentlichen Sie Ihre Erweiterung, und öffnen Sie die Seite Meine Adresse.

    Screenshot der Seite „Meine Adresse“ mit der Registerkarte „Aktionen“

  6. Wählen Sie die Aktion Nach Hause senden aus.

  7. Wählen Sie die Aktion Wie ist die Adresse aus, und überprüfen Sie, ob das Ergebnis wie im folgenden Screenshot ist.

    Screenshot des Nachrichtenfelds für meine Privatadresse

  8. Wählen Sie die Aktion Zur Arbeit senden aus.

  9. Wählen Sie die Aktion Wie ist die Adresse aus, und überprüfen Sie, ob das Ergebnis wie im folgenden Screenshot ist.

    Screenshot des Nachrichtenfelds für die Unternehmensadresse