¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Criação dinâmica de estruturas aninhadas com XCO para SAP

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 3 Vistas
0
Cargando...

Olá Especialistas SAP,

Estou tentando criar uma estrutura profundamente aninhada usando as bibliotecas XCO para um dos meus casos de uso, mas não consigo encontrar uma biblioteca relevante para fazê-lo. Basicamente, o que quero alcançar é criar a seguinte declaração de dados de forma dinâmica usando a biblioteca XCO.

No código acima, ZA_SALESORDER é minha Entidade Abstrata de Cabeçalho e ZA_SALESORDERITEM é a Entidade Abstrata de Item.

image.png
Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

Olá Pavan!

Obrigado pela resposta!

Meu requisito não é criar uma estrutura profunda no DDIC, mas localmente dentro de uma classe, pois é dinâmico e criaria objetos DDIC desnecessários no sistema.

Posso criar estruturas locais, tipos de tabela dentro de uma classe, mas quando se trata de criar estruturas aninhadas profundas, me deparo com um problema.

Também revisei o blog de @sebastianmichler, mas não consegui encontrar uma maneira de realizar isso em particular.

Obrigado.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Olá anuragsrivastava ,

Já tentou criar uma estrutura global no Dicionário de Dados (DDIC)?

Também confira esta postagem e a resposta de Sebastian:

Biblioteca XCO: Adicionar componente a estruturas | Comunidade SAP

Trecho de código abaixo para criar uma tabela usando a biblioteca XCO:

CONSTANTS:
  co_package   TYPE sxco_package VALUE 'ZDEMO'.

DATA(lo_transport_target) = xco_abap_repository=>package->for( co_package
        )->read(
        )-property-transport_layer->get_transport_target( ).

"Criar uma TR
DATA(lo_transport_request) = xco_cp_cts=>transports->workbench( lo_transport_target->value
        )->create_request( 'Solicitação de transporte gerada' ).


DATA(lo_put_operation) = xco_cp_generation=>environment->dev_system( lo_transport_request->value
  )->create_put_operation( ).

"Adicionar a tabela de banco de dados à operação PUT.
DATA(lo_database_table) = lo_put_operation->for-tabl-for-database_table->add_object( 'ZTBL_XCO_DEMO'
  )->set_package( co_package
  )->create_form_specification( ).
lo_database_table->set_short_description( 'Minha tabela de banco de dados gerada' ).
lo_database_table->set_delivery_class( xco_cp_database_table=>delivery_class->l ).
lo_database_table->set_data_maintenance( xco_cp_database_table=>data_maintenance->allowed ).

lo_database_table->add_field( 'CAMPO_CHAVE'
  )->set_key_indicator(
  )->set_type( xco_cp_abap_dictionary=>built_in_type->char( 30 )
  )->set_not_null( ).

"Outros campos (incluindo informações sobre chaves estrangeiras, ajudas de pesquisa, etc.) podem ser
" adicionados seguindo o mesmo padrão.
        
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Obrigado Matt!

Isso é perfeito e exatamente o que eu estava procurando ?

Claro, no meu caso estou lidando com Entidades Abstratas em vez de entidades de visualização e, portanto, também está trazendo Associações inversas, por exemplo - Elemento para Cabeçalho, que não preciso e, portanto, excluo essas, caso contrário, continua encontrando as associações e entra em um loop infinito.

Obrigado pela ajuda!

Cumprimentos,

Anurag

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Olá Anurag,

O truque aqui é usar uma combinação das classes CL_ABAP_TYPEDESCR e XCO_CP_CDS. Você precisa da primeira para tipar dinamicamente uma variável local e precisa da segunda para navegar pelas entidades de visualização e ler suas composições. Abaixo está um exemplo funcional de /DMO/FLIGHT, onde começamos com uma entidade de visualização raiz conhecida e usamos o método GET_TABLE_DESC_FROM_VIEW para construir dinamicamente um tipo de tabela a partir da visualização. O método chama a si mesmo recursivamente para lidar com visualizações aninhadas.

CLASS zmd_cl_dyn_struct_from_bo DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC .

  PUBLIC SECTION.

    INTERFACES if_oo_adt_classrun .

  PROTECTED SECTION.

    METHODS: get_table_desc_from_view
               IMPORTING iv_view TYPE sxco_cds_object_name
               RETURNING VALUE(ro_table_desc) TYPE REF TO cl_abap_tabledescr.

  PRIVATE SECTION.
ENDCLASS.



CLASS zmd_cl_dyn_struct_from_bo IMPLEMENTATION.

  METHOD if_oo_adt_classrun~main.

    CONSTANTS: lc_view TYPE sxco_cds_object_name VALUE '/DMO/I_Travel_M'.

    DATA: lr_data TYPE REF TO data.

    FIELD-SYMBOLS: <lt_data> TYPE STANDARD TABLE.

    " obter descrição dinâmica da tabela
    DATA(lo_table_desc) = get_table_desc_from_view( lc_view ).

    " criar referência de dados a partir da descrição da tabela
    CREATE DATA lr_data TYPE HANDLE lo_table_desc.
    ASSIGN lr_data->* TO <lt_data>.


    " apenas para mostrar a saída
    FIELD-SYMBOLS: <lt_booking> TYPE STANDARD TABLE,
                   <lt_suppl> TYPE STANDARD TABLE.

    APPEND INITIAL LINE TO <lt_data> ASSIGNING FIELD-SYMBOL(<ls_data>).
    ASSIGN COMPONENT '_BOOKING' OF STRUCTURE <ls_data> TO <lt_booking>.
    APPEND INITIAL LINE TO <lt_booking> ASSIGNING
        
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?