Exercício — Criar uma interface

Concluído

Neste exercício, você é um desenvolvedor que trabalha para a CRONUS International Ltd. Você deseja criar e implementar uma interface, IAddressProvider, que tem um método getAddress com determinada assinatura.

Tarefas

  • Criar uma interface.

  • Criar dois codeunits que implementam a interface.

  • Criar uma página com uma ação que testa a interface.

  • Criar uma enumeração para dar suporte à inicialização da interface.

Etapas

Siga estas etapas para concluir o exercício:

  1. Crie um novo arquivo .al com o seguinte código que define uma interface IAddressProvider, que tem um método getAddress com determinada assinatura:

    
    interface IAddressProvider
    {
    procedure GetAddress(): Text;
    }
    
    
  2. Crie dois novos arquivos .al para criar dois codeunits: CompanyAddressProvider e PrivateAddressProvider. Ambos os codeunits implementarão a interface IAddressProvider, e cada uma definirá uma implementação diferente do método getAddress, que, nesse caso, é uma variação simples do valor do endereço:

    
    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. Crie um novo arquivo .al para criar uma página com uma ação que captura a escolha do endereço e chama, com base nessa escolha, uma implementação da 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. Crie um novo arquivo .al para criar uma enumeração que contém dois valores, Company e Private.

    
    enum 65100 SendTo
    {
        Extensible = true;
    
        value(0; Company)
        {
        }
    
        value(1; Private)
        {
        }
    }
    
    
  5. Publique sua extensão e abra a página MyAddress.

    Captura de tela da página MyAddress mostrando a guia Ações.

  6. Selecione a ação Enviar para Casa.

  7. Selecione a ação Qual é o Endereço e verifique se o resultado é semelhante à captura de tela a seguir.

    Captura da caixa de mensagem Meu endereço residencial.

  8. Selecione a ação Enviar para o Trabalho.

  9. Selecione a ação Qual é o Endereço e verifique se o resultado é semelhante à captura de tela a seguir.

    Captura da caixa de mensagem Meu endereço comercial.