Esercizio - Creazione di un'interfaccia

Completato

In questo esercizio, uno sviluppatore che lavora per CRONUS International Ltd. desidera creare e implementare un'interfaccia, IAddressProvider, che contiene un metodo getAddress con una certa firma.

Attività

  • Creare un'interfaccia.

  • Creare due codeunit che implementino l'interfaccia.

  • Creare una pagina con un'azione che testi l'interfaccia.

  • Creare un'enumerazione per supportare l'inizializzazione dell'interfaccia.

Passaggi

Seguire questi passaggi per completare l'esercizio:

  1. Creare un nuovo file .al con il seguente codice che definisce un'interfaccia IAddressProvider, la quale ha un metodo getAddress con una certa firma:

    
    interface IAddressProvider
    {
    procedure GetAddress(): Text;
    }
    
    
  2. Creare due nuovi file .al per creare due codeunit: CompanyAddressProvider e PrivateAddressProvider. Entrambe le codeunit implementeranno l'interfaccia IAddressProvider e ciascuna definirà un'implementazione diversa del metodo getAddress che, in questo caso, è una semplice variazione del valore dell'indirizzo:

    
    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. Creare un nuovo file .al per creare una pagina con un'azione che acquisisca la scelta dell'indirizzo e chiami, in base a quella scelta, un'implementazione dell'interfaccia 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. Creare un nuovo file .al per creare un'enumerazione che contenga due valori: Azienda e Privato.

    
    enum 65100 SendTo
    {
        Extensible = true;
    
        value(0; Company)
        {
        }
    
        value(1; Private)
        {
        }
    }
    
    
  5. Pubblicare l'estensione e aprire la pagina MyAddress.

    Screenshot della pagina MyAddress con la scheda Azioni.

  6. Selezionare l'azione Invia a casa.

  7. Selezionare l'azione Qual è l'indirizzo e verificare che il risultato sia simile allo screenshot seguente.

    Screenshot della finestra di messaggio dell'indirizzo abitazione.

  8. Selezionare l'azione Invia al lavoro.

  9. Selezionare l'azione Qual è l'indirizzo e verificare che il risultato sia simile allo screenshot seguente.

    Screenshot della finestra di messaggio Indirizzo società.