¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Creación dinámica de estructuras anidadas con XCO para SAP

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

Hola Expertos de SAP,

Estoy intentando crear una estructura profundamente anidada utilizando las bibliotecas XCO para uno de mis casos de uso, pero no puedo encontrar una biblioteca relevante para hacerlo. Básicamente, lo que quiero lograr es crear la siguiente declaración de datos de forma dinámica utilizando la biblioteca XCO.

En el código anterior, ZA_SALESORDER es mi Entidad Abstracta de Encabezado y ZA_SALESORDERITEM es la Entidad Abstracta de Ítem.

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

4 Respuestas

0
Cargando...

¡Hola Pavan!

¡Gracias por la respuesta!

Mi requerimiento no es crear una estructura profunda en el DDIC, sino localmente dentro de una clase ya que es dinámica y creará demasiados objetos DDIC innecesarios en el sistema.

Puedo crear estructuras locales, tipos de tabla dentro de una clase, pero cuando se trata de crear estructuras anidadas profundas, me enfrento a un problema.

También revisé el blog de @sebastianmichler pero no pude encontrar una manera de lograr esto en particular.

Gracias.

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

Hola anuragsrivastava ,

¿Ya intentaste crear una estructura global en el Diccionario de Datos (DDIC)?

También revisa esta publicación y la respuesta de Sebastian:

Biblioteca XCO: Agregar componente a estructuras | Comunidad SAP

Fragmento de código a continuación para crear una tabla usando la 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( ).

"Crear una TR
DATA(lo_transport_request) = xco_cp_cts=>transports->workbench( lo_transport_target->value
        )->create_request( 'Solicitud de transporte generada' ).


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

"Agregar la tabla de base de datos a la operación 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( 'Mi tabla de base de datos generada' ).
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_CLAVE'
  )->set_key_indicator(
  )->set_type( xco_cp_abap_dictionary=>built_in_type->char( 30 )
  )->set_not_null( ).

"Otros campos (incluyendo información sobre claves foráneas, ayudas de búsqueda, etc.) se pueden
" agregar siguiendo el mismo patrón.
        
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

¡Gracias Matt!

Esto es perfecto y exactamente lo que estaba buscando 🙂

Por supuesto, en mi caso estoy tratando con Entidades Abstractas en lugar de entidades de vista y por lo tanto también está trayendo Asociaciones inversas, por ejemplo - Elemento a Encabezado, que no necesito y por lo tanto excluyo esos, de lo contrario sigue encontrando las asociaciones y se ejecuta en un bucle infinito.

¡Gracias por la ayuda!

Saludos,

Anurag

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

Hi Anurag,

The trick here is to use a combination of CL_ABAP_TYPEDESCR and XCO_CP_CDS classes. You need the first to dynamically type a local variable, and you need the second to navigate through the view entities to read their compositions. Below is a working example from /DMO/FLIGHT, where we start with a known root view entity and use the method GET_TABLE_DESC_FROM_VIEW to dynamically construct a table type from the view. The method recursively calls itself to handle nested views.

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.

    " get dynamic table description
    DATA(lo_table_desc) = get_table_desc_from_view( lc_view ).

    " create data reference from table description
    CREATE DATA lr_data TYPE HANDLE lo_table_desc.
    ASSIGN lr_data->* TO <lt_data>.


    " just to show the output
    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?