Guia de introdução
Aplicação de técnicas básicas e conceitos
Trabalhar com classes locais
Ler dados do banco de dados
Trabalhar com objetos de dados estruturados
Trabalhar com tabelas internas complexas
Implementar atualizações do banco de dados utilizando business objects
Descrição do modelo de programação de aplicativos ABAP RESTful

Definição e chamada de métodos

Objective

After completing this lesson, you will be able to definir e chamar métodos.

Definição do método

Na parte de definição de uma classe, você usa METHODS para definir um método de instância e CLASS-METHODS para definir um método estático. O nome do método é seguido pela assinatura do método, ou seja, o conjunto de valores que o método troca com seu chamador e as exceções que podem surgir durante o método.

A assinatura de um método consiste em parâmetros e exceções. Cada parâmetro tem um nome e um tipo.

O ABAP conhece os seguintes tipos de parâmetros:

Parâmetros de importação

Parâmetros de importação são valores que o método recebe do chamador. Um método pode ter qualquer número de parâmetros de importação.

Por padrão, parâmetros de importação são obrigatórios, mas existem duas formas de torná-los opcionais:

  • Usando o suplemento OPTIONAL. O parâmetro é opcional e seu valor proposto é o valor inicial adequado ao tipo do parâmetro
  • Usando o suplemento DEFAULT <val>. O parâmetro é opcional e seu valor proposto é o valor que você especificou como <val>.

Dentro de um método, você não pode alterar os parâmetros de importação. Se você tentar fazer isso, causará um erro de sintaxe.

Parâmetros de exportação

Parâmetros de exportação são resultados que são retornados pelo método. Um método pode ter qualquer número de parâmetros de exportação. Todos os parâmetros de exportação são opcionais - um programa de chamada só utiliza os valores que ele realmente necessita.

Parâmetros de modificação

Os parâmetros de modificação são valores que o método recebe do chamador. Ao contrário dos parâmetros de importação, o método pode modificar os valores desses parâmetros. Eles são, então, retornados ao chamador com o mesmo nome. Um método pode ter qualquer número de parâmetros de modificação. Parâmetros de modificação são obrigatórios por padrão; você pode torná-los opcionais da mesma forma que os parâmetros de importação.

Parâmetros de retorno

Um parâmetro de retorno é um resultado de método que pode ser usado diretamente em uma expressão. Um método só pode ter um parâmetro de retorno. Os parâmetros de retorno devem usar uma forma especial de transferência de parâmetro, que é chamada pass-by-value. Esta forma de transferência de parâmetro é definida ao cercar o nome do parâmetro entre parênteses (sem espaços em branco). e precedendo com a palavra-chave VALUE.

A palavra-chave RAISING é usada para listar as exceções que o método pode criar para indicar uma situação de erro. Em seguida, o programa de chamada pode reagir ao erro.

Como exemplo, adicione dois métodos à nossa classe lcl_connection.

Um método set_attributes( ) para definir os valores para o atributo carrier_id e connection_id e um método get_attributes( ) para retornar os valores desses atributos. Onde set_attributes( ) precisa de dois parâmetros de importação, um para cada atributo, o método get_attributes( ) precisa de dois parâmetros de exportação.

Para cada método que você definir, você também deve criar uma implementação na parte de implementação da classe. Até isso, você vê erros de sintaxe em sua classe; a verificação de sintaxe informa que a implementação do método está em falta.

Dica

O ADT oferece uma correção rápida para adicionar a implementação em falta. Para utilizar esta correção rápida, proceda da seguinte forma:
  1. Posicione o cursor em uma instrução METHODS com um erro e pressione Ctrl + 1.
  2. A partir da lista de correções rápidas possíveis, selecione Adicionar implementação para … e pressione Enter. Se a implementação estiver em falta para vários métodos, o título Correção rápida lê Adicionar … métodos não implementados.

Como definir métodos

Implementação de método

Você deve implementar cada método que definir. Você efetua isso na parte de implementação da classe, adicionando um par de instruções METHOD <nome do método> e ENDMETHOD.

A implementação do método contém instruções ABAP que podem acessar os parâmetros do método (você não tem autorização para modificar parâmetros de importação) e todos os tipos, atributos e constantes que você declarou na classe, independentemente da sua visibilidade. Os métodos de instância podem acessar tanto os atributos de instância quanto os atributos estáticos. Os métodos estáticos só podem acessar componentes estáticos.

Dentro da parte de implementação de uma classe, você pode acessar os atributos dessa classe sem uma variável de referência e '->' (ou o nome da classe e '=>', no caso de atributos estáticos).

Somente na implementação de métodos de instância, o ABAP oferece ME de variável integrada. ME é uma variável de referência, tipificada com a classe atual e preenchida no momento da execução com o endereço da instância atual. A utilização de ME é opcional e deve ser evitada, a menos que o nome de um atributo colida com o nome de outro objeto de dados, por exemplo, um nome de parâmetro.

No exemplo, os parâmetros de importação do método set_attributes( ) têm os mesmos nomes que os atributos correspondentes. Em uma situação desse tipo, o nome por si só indica o parâmetro. Somente ao colocar me-> na frente fica claro que um atributo da instância atual deve ser acessado.

Se ocorrer um erro durante a execução de um método, o método pode acionar uma exceção usando a instrução RAISE EXCEPTION TYPE, seguida pelo nome da exceção.

Nota

Tecnicamente, os nomes de exceção são os nomes de classes ABAP especiais e a instrução RAISE EXCEPTION TYPE cria uma instância da classe referenciada. A instância é referida como objeto de exceção e o tipo especial de classes ABAP são chamadas classes de exceção.

No momento em que uma exceção é criada, a execução do método é cancelada.

O controle é retornado ao programa de chamada se todos os pré-requisitos forem cumpridos. Caso contrário, o programa completo é cancelado com um erro em tempo de execução.

Os pré-requisitos para continuar o programa são os seguintes:

  • A exceção acionada é declarada na cláusula RAISING da assinatura do método
  • A chamada de método está rodeada por uma estrutura de controle TRY … ENDTRY
  • A estrutura de controle TRY … ENDTRY contém um bloco CATCH para a exceção

Nota

Para algumas exceções, o editor ABAP exibe uma advertência de sintaxe com uma correção rápida quando você aciona uma exceção que ainda não está declarada na cláusula RAISING do método.

Como implementar métodos

Chamadas de método

Você chama um método de instância utilizando uma variável de referência e o seletor de componente de instância (->). O seletor de componentes é seguido pelo nome do método que você deseja chamar. Para métodos estáticos, você utiliza o nome da classe e o seletor de componente estático (=>). Em ambos os casos, a transferência de parâmetros ocorre em um par de parênteses. Os parênteses são necessários em qualquer caso. Eles permanecem em branco caso não devam ser transferidos parâmetros.

Nota

Não é permitido nenhum espaço em branco entre o nome do método e o parêntese de abertura. Por outro lado, você precisa de pelo menos um espaço em branco após o parêntese de abertura e antes do parêntese de fechamento.

Os parâmetros de importação são listados após a palavra-chave EXPORTING porque os valores importados pelo método chamado são exportados pelo programa de chamada. Os nomes de parâmetro são listados no lado esquerdo de um sinal de igual (=) e uma expressão no lado direito. Esta expressão pode ser tão simples como uma literal, constante ou variável, mas quaisquer outras expressões também são permitidas, desde que o tipo da expressão corresponda ao tipo do parâmetro.

Os parâmetros de exportação são listados após a palavra-chave IMPORTING. Considere que, para o parâmetro de exportação, o nome do parâmetro também é listado no lado esquerdo do sinal de igual. A variável do lado direito deve ter o mesmo tipo que o parâmetro.

Os parâmetros de modificação são listados após a palavra-chave CHANGING. O tipo da variável no lado direito deve corresponder ao tipo do parâmetro no lado esquerdo.

O exemplo ilustra a chamada dos métodos de instância set_attributes( ) e get_attributes( ). Os nomes de parâmetro estão sempre no lado esquerdo do sinal de igual (=).

Dica

Você pode utilizar o code completion no ADT para gerar a chamada de método, incluindo a transferência de parâmetros. Para isso, proceda da seguinte forma:

  1. Digite a variável de referência (ou nome da classe) e o seletor de componentes.
  2. Depois de digitar o seletor de componentes, pressione Ctrl + espaço para exibir uma lista de componentes que você pode abordar.
  3. Escolha um método e pressione Shift + Enter para inserir o nome do método e sua assinatura completa em seu código. Os parâmetros opcionais são listados em linhas de comentário.

Ao chamar um método, a palavra-chave IMPORTING é sempre necessária para receber o valor dos parâmetros de exportação. Mas a palavra-chave EXPORTING se torna opcional, se você só quiser fornecer parâmetros de importação.

Para métodos com somente um parâmetro de importação obrigatório, você pode até omitir a atribuição explícita de parâmetros. No exemplo, o parâmetro i_carrier_id é opcional com o valor proposto 'LH'. Por isso, o valor entre parênteses é atribuído ao parâmetro de importação obrigatório restante i_connection_id.

Como chamar métodos

Tratamento de exceções

Em uma seção anterior deste curso, você aprendeu a lidar com erros em tempo de execução com estruturas de controle TRY … ENDTRY.

As exceções declaradas na cláusula RAISING de uma definição de método são tratadas exatamente da mesma forma:

  • Coloque a chamada de método no bloco TRY da estrutura de controle TRY … ENDTRY.
  • Defina um bloco CATCH com o nome da exceção que você quer tratar.

Nota

Se existir um código que você quer ignorar caso a chamada de método tenha falhado, você pode colocar esse código dentro do bloco TRY, após a chamada de método.

Testar: chamadas de método e tratamento de exceções

  1. Como no primeiro exercício deste curso, crie uma nova classe global que implemente a interface IF_OO_ADT_CLASSRUN.
  2. Copie o seguinte snippet de código para a parte de implementação do método if_oo_adt_classrun~main( ):
    Code Snippet
    123456789101112131415161718192021222324252627282930
    CONSTANTS c_carrier_id TYPE /dmo/carrier_id VALUE 'LH'. CONSTANTS c_connection_id TYPE /dmo/connection_id VALUE '0400'. DATA connection TYPE REF TO lcl_connection. DATA connections TYPE TABLE OF REF TO lcl_connection. * Create Instance ********************************************************************** connection = NEW #( ). * Call Method and Handle Exception ********************************************************************** out->write( |i_carrier_id = '{ c_carrier_id }' | ). out->write( |i_connection_id = '{ c_connection_id }'| ). TRY. connection->set_attributes( EXPORTING i_carrier_id = c_carrier_id i_connection_id = c_connection_id ). APPEND connection TO connections. out->write( `Method call successful` ). CATCH cx_abap_invalid_value. out->write( `Method call failed` ). ENDTRY.
  3. Navegue para a guia Tipos locais e insira aí o seguinte snippet de código:
    Code Snippet
    12345678910111213141516171819202122232425262728293031323334
    CLASS lcl_connection DEFINITION. PUBLIC SECTION. * Attributes DATA carrier_id TYPE /dmo/carrier_id. DATA connection_id TYPE /dmo/connection_id. * Methods METHODS set_attributes IMPORTING i_carrier_id TYPE /dmo/carrier_id DEFAULT 'LH' i_Connection_id TYPE /dmo/connection_id RAISING cx_abap_invalid_value. ENDCLASS. CLASS lcl_connection IMPLEMENTATION. METHOD set_attributes. IF i_carrier_id IS INITIAL OR i_connection_id IS INITIAL. RAISE EXCEPTION TYPE cx_abap_invalid_value. ENDIF. carrier_id = i_carrier_id. connection_id = i_connection_id. ENDMETHOD. ENDCLASS.
  4. Pressione CTRL + F3 para ativar a classe e F9 para executá-la como um aplicativo de console.
  5. Analise a saída do console. Depurar o programa, brincar com o código-fonte para se familiarizar com os conceitos. Em particular, modifique os valores das duas constantes para depurar o aumento da exceção.

Métodos funcionais

Os métodos que têm um parâmetro de retorno são chamados de métodos funcionais. Não é possível definir mais de um parâmetro de retorno para o mesmo método. É obrigatório que você defina o parâmetro de retorno na forma VALUE(<parameter_name>). Além do parâmetro de retorno, um método funcional pode ter qualquer combinação de outros parâmetros. No entanto, é mais comum adicionar somente parâmetros de importação. O motivo é que, com parâmetros adicionais de exportação ou modificação, você perde a maior vantagem dos métodos funcionais, nomeadamente, que você pode usar o resultado de um método funcional diretamente em outras expressões ABAP.

A figura mostra dois exemplos de como você pode utilizar métodos funcionais em expressões; o primeiro é um exemplo simples no qual o parâmetro de retorno é atribuído diretamente a uma variável. O segundo exemplo mostra como a chamada do método funcional é utilizada como entrada para outro método. O sistema executa o método funcional e, em seguida, utiliza o valor do parâmetro de retorno como entrada para o método write( ).

Experimente: métodos funcionais

  1. Como no primeiro exercício deste curso, crie uma nova classe global que implemente a interface IF_OO_ADT_CLASSRUN.
  2. Copie o seguinte snippet de código para a parte de implementação do método if_oo_adt_classrun~main( ):
    Code Snippet
    123456789101112131415161718192021222324252627282930313233343536
    DATA connection TYPE REF TO lcl_connection. DATA connections TYPE TABLE OF REF TO lcl_connection. * Create Instance ********************************************************************** connection = NEW #( ). connection->set_attributes( EXPORTING i_carrier_id = 'LH' i_connection_id = '0400' ). APPEND connection TO connections. * Calling Functional Method ********************************************************************** " in a value assignment (with inline declaration for result) DATA(result) = connection->get_output( ). " in logical expression IF connection->get_output( ) IS NOT INITIAL. " as operand in a statement LOOP AT connection->get_output( ) INTO DATA(line). ENDLOOP. " to supply input parameter of another method out->write( data = connection->get_output( ) name = ` ` ). ENDIF.
  3. Navegue para a guia Tipos locais e insira aí o seguinte snippet de código:
    Code Snippet
    12345678910111213141516171819202122232425262728293031323334353637383940414243
    CLASS lcl_connection DEFINITION. PUBLIC SECTION. * Attributes DATA carrier_id TYPE /dmo/carrier_id. DATA connection_id TYPE /dmo/connection_id. * Methods METHODS set_attributes IMPORTING i_carrier_id TYPE /dmo/carrier_id DEFAULT 'LH' i_Connection_id TYPE /dmo/connection_id. " Functional Method METHODS get_output RETURNING VALUE(r_output) TYPE string_table. * PROTECTED SECTION. * PRIVATE SECTION. ENDCLASS. CLASS lcl_connection IMPLEMENTATION. METHOD set_attributes. carrier_id = i_carrier_id. connection_id = i_connection_id. ENDMETHOD. METHOD get_output. APPEND |------------------------------| TO r_output. APPEND |Carrier: { carrier_id }| TO r_output. APPEND |Connection: { connection_id }| TO r_output. ENDMETHOD. ENDCLASS.
  4. Pressione CTRL + F3 para ativar a classe e F9 para executá-la como um aplicativo de console.
  5. Analise a saída do console. Depurar o programa, brincar com o código-fonte para se familiarizar com os conceitos. Em particular, depure as diferentes chamadas do método funcional get_output( ).

Definir e chamar métodos

Neste exercício, você definirá e implementará métodos em sua classe local lcl_connection. Em seguida, você chamará esses métodos a partir do método main( ) de sua classe global.

Modelo:

  • /LRN/CL_S4D400_CLS_INSTANCES (classe global)

Solução:

  • /LRN/CL_S4D400_CLS_METHODS (classe global)

Tarefa 1: Copiar modelo (opcional)

Copie a classe modelo. Se você concluiu o exercício anterior, pode ignorar esta tarefa e continuar processando sua classe ZCL_##_LOCAL_CLASS ou sua classe ZCL_##_INSTANCES.

Etapas

  1. Abra o texto fonte da classe global /LRN/CL_S4D400_CLS_INSTANCES no editor ABAP.

    1. Na barra de ferramentas Eclipse, selecione Abrir objeto de desenvolvimento ABAP. Como alternativa, pressione Ctrl + Shift + A.

    2. Insira /LRN/CL_S4D400_CLS como cadeia de pesquisa.

    3. Na lista de objetos de desenvolvimento, selecione /LRN/CL_S4D400_CLS_INSTANCES e, em seguida, OK.

  2. Vincule a visão Explorador de projetos ao editor.

    1. Na barra de ferramentas do Explorador de projetos, localize o botão Link com editor. Se ainda não estiver pressionado, selecione-o. Como resultado, o objeto de desenvolvimento, que está aberto no editor, deve ser destacado no Explorador de projetos.

  3. Copie a classe /LRN/CL_S4D400_CLS_INSTANCES para uma classe em seu próprio pacote (nome sugerido: ZCL_##_METHODS, onde ## representa seu número de grupo).

    1. Na visão Explorador de projetos, clique com o botão direito do mouse na classe /LRN/CL_S4D400_CLS_INSTANCES para abrir o menu de conteúdo.

    2. No menu de contexto, selecione Duplicar ....

    3. Insira o nome do seu pacote no campo Pacote. No campo Nome, insira o nome ZCL_##_METHODS, onde ## representa seu número de grupo.

    4. Ajuste a descrição e selecione Seguinte.

    5. Confirme a ordem de transporte e selecione Concluir.

Tarefa 2: Definir métodos

Em sua classe local lcl_connection, defina os métodos de instância get_output e set_attributes.

Etapas

  1. Navegue para a definição da classe local lcl_connection.

    1. Na classe global, selecione Tipos locais.

  2. Adicione um método get_output à seção pública da classe. Ele deve ter um parâmetro de retorno r_output do tipo de tabela global STRING_TABLE.

    Nota

    Lembre-se de cercar o nome do parâmetro de retorno com VALUE( ).
    1. Ajuste o código da seguinte forma:

      Code Snippet
      1234567891011121314
      PUBLIC SECTION. DATA carrier_id TYPE /dmo/carrier_id. DATA connection_id TYPE /DMO/Connection_id. CLASS-DATA conn_counter TYPE i. METHODS get_output returning value(r_output) type string_table. PROTECTED SECTION.

      Nota

      De momento, ignorar o erro de sintaxe Implementação em falta para o método "GET_OUTPUT".
  3. Adicione um método set_attributes à seção pública da classe. Ele deve ter um parâmetro de importação para cada atributo de instância da classe. Utilize os mesmos tipos para os parâmetros que você utilizou para digitar os atributos. Para distinguir os parâmetros dos atributos, adicione o prefixo i_ aos nomes de parâmetro. Além disso, o método deve acionar a exceção CX_ABAP_INVALID_VALUE.

    1. Ajuste o código da seguinte forma:

      Code Snippet
      123456789101112131415161718192021
      PUBLIC SECTION. DATA carrier_id TYPE /dmo/carrier_id. DATA connection_id TYPE /DMO/Connection_id. CLASS-DATA conn_counter TYPE i. METHODS set_attributes IMPORTING i_carrier_id TYPE /dmo/carrier_id i_connection_id TYPE /dmo/connection_id RAISING cx_abap_invalid_value. METHODS get_output returning value(r_output) type string_table. PROTECTED SECTION.

      Nota

      Por enquanto, ignore o erro de sintaxe Implementação em falta para o método "SET_ATTRIBUTES".

Tarefa 3: Implementar métodos

Etapas

  1. Utilize uma correção rápida para adicionar as implementações de método à classe.

    1. Posicione o cursor no nome de um dos métodos no editor e pressione Ctrl + 1.

    2. Clique duas vezes na sugestão Adicionar 2 métodos não implementados.

  2. Implemente o método get_output. Anexe alguns modelos de string ao parâmetro de retorno r_output. Nos modelos de string, use expressões incorporadas para adicionar os valores dos atributos carrier_id e connection_id.

    1. Na classe local, adicione o seguinte código entre as instruções METHOD get_output. e ENDMETHOD.

      Code Snippet
      12345
      APPEND |------------------------------| TO r_output. APPEND |Carrier: { carrier_id }| TO r_output. APPEND |Connection: { connection_id }| TO r_output.
  3. Implemente o método set_attributes. Se um dos dois parâmetros de importação estiver vazio (IS INITIAL), crie a exceção CX_ABAP_INVALID_VALUE. Caso contrário, preencha os dois atributos de instância com os valores dos parâmetros de importação.

    1. Ajuste o código da seguinte forma:

      Code Snippet
      123456789101112
      METHOD set_attributes. IF i_carrier_id IS INITIAL OR i_connection_id IS INITIAL. RAISE EXCEPTION TYPE cx_abap_invalid_value. ENDIF. carrier_id = i_carrier_id. connection_id = i_connection_id. ENDMETHOD.
  4. Ative sua classe.

    1. Selecione Ctrl + F3 para ativar a classe.

Tarefa 4: Chamar um método funcional

No método principal de sua classe global, chame o método funcional get_output.

Etapas

  1. Mude para a implementação do método if_oo_adt_classrun~main na classe global.

    1. Na classe global, selecione Classe global e role para baixo até a implementação do método if_oo_adt_classrun~main.

  2. No final do método, adicione um loop sobre as conexões de tabela interna com conexão de variável de referência como área de trabalho.

    1. Adicione o seguinte código antes de ENDMETHOD..

      Code Snippet
      12345
      LOOP AT connections INTO connection. ENDLOOP.
  3. No loop, chame o método funcional get_output para cada instância e escreva o resultado no console.

    Dica

    Você pode usar a chamada do método get_output diretamente como entrada para out->write( ).
    1. Ajuste o código da seguinte forma:

      Code Snippet
      1234567
      LOOP AT connections INTO connection. out->write( connection->get_output( ) ). ENDLOOP.
  4. Ative a classe. Execute-o como um aplicativo de console e analise a saída do console.

    1. Pressione Ctrl + F3 para ativar a classe.

    2. Pressione F9 para executar a classe.

    3. Analise a saída na janela Console.

Tarefa 5: Utilizar code completion e tratar exceções

Utilize o code completion para chamar o método set_attributes e tratar a exceção que o método gera.

Etapas

  1. Para a primeira instância da classe lcl_connection, substitua o acesso direto aos atributos carrier_id e connection_id por uma chamada do método de instância set_attributes( ). Use o preenchimento de código para inserir a assinatura completa do método.

    Dica

    Pressione Ctrl + espaço depois de digitar o componente selecionado (->) para exibir uma lista de atributos e métodos disponíveis. Selecione o método e pressione Shift + Enter para inserir a assinatura completa do método.
    1. Posicione o cursor na linha seguinte após o primeiro connection = NEW #( )..

    2. Digite connection-> e pressione Ctrl + espaço.

    3. Selecione set_attributes e pressione Shift + Enter.

    4. Transfira valores para os parâmetros de importação. Utilize os mesmos literais que você utilizou anteriormente para definir os atributos desta instância.

    5. Remova ou comente o acesso direto aos atributos de instância para esta instância.

  2. Trate a exceção. Envolva a chamada de método com TRY. e ENDTRY.. Adicione um bloqueio CATCH para tratar a exceção CX_ABAP_INVALID_VALUE. Certifique-se de que a nova instância só é adicionada a conexões de tabela internas se a chamada de método tiver sido efetuada com êxito.

    1. Anule o comentário da linha de código gerada CATCH cx_abap_invalid_value..

    2. Adicione TRY. antes da chamada de método.

    3. Adicione ENDTRY. após a instrução CATCH.

    4. Entre a instrução CATCH e a instrução ENDTRY, adicione out->write( `Method call failed` ).

    5. Mova a instrução APPEND para cima entre a chamada de método e a instrução CATCH.

    6. A chamada completa do método deve ter o seguinte aspecto:

      Code Snippet
      1234567891011121314151617
      TRY. connection->set_attributes( EXPORTING i_carrier_id = 'LH' i_connection_id = '0400' ). * connection->carrier_id = 'LH'. * connection->connection_id = '0400'. APPEND connection TO connections. CATCH cx_abap_invalid_value. out->write( `Method call failed` ). ENDTRY.
  3. Repita a etapa anterior para as outras duas instâncias da classe lcl_connection.

    1. Após esta etapa, a implementação do método if_oo_adt_classrun~main deve ter um aspecto semelhante a este:

      Code Snippet
      12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
      METHOD if_oo_adt_classrun~main. DATA connection TYPE REF TO lcl_connection. DATA connections TYPE TABLE OF REF TO lcl_connection. * First Instance ********************************************************************** connection = NEW #( ). TRY. connection->set_attributes( EXPORTING i_carrier_id = 'LH' i_connection_id = '0400' ). * connection->carrier_id = 'LH'. * connection->connection_id = '0400'. APPEND connection TO connections. CATCH cx_abap_invalid_value. out->write( `Method call failed` ). ENDTRY. * Second instance ********************************************************************** connection = NEW #( ). TRY. connection->set_attributes( EXPORTING i_carrier_id = 'AA' i_connection_id = '0017' ). * connection->carrier_id = 'AA'. * connection->connection_id = '0017'. APPEND connection TO connections. CATCH cx_abap_invalid_value. out->write( `Method call failed` ). ENDTRY. * Third instance ********************************************************************** connection = NEW #( ). TRY. connection->set_attributes( EXPORTING i_carrier_id = 'SQ' i_connection_id = '0001' ). * connection->carrier_id = 'SQ'. * connection->connection_id = '0001'. APPEND connection TO connections. CATCH cx_abap_invalid_value. out->write( `Method call failed` ). ENDTRY. * Output ********************************************************************** LOOP AT connections INTO connection. out->write( connection->get_output( ) ). ENDLOOP. ENDMETHOD.
  4. Ative a classe. Execute-o e depure as chamadas de método.

    1. Pressione Ctrl + F3 para ativar a classe.

    2. Pressione F9 para executar a classe.