• Inicio
  • Novedades
  • Academia SAP
  • FAQ
  • Blog
  • Contacto
S4PCADEMY_Logo
Twitter Linkedin Instagram
S4PCADEMY_Logo
Twitter Linkedin Instagram
FORMACIÓN SAP

ABAP RAP: parámetros de acción predeterminados con lógica empresarial compleja en una aplicación de Fiori Elements

By s4pcademy 


En el ámbito del desarrollo de SAP, el modelo de programación de aplicaciones (RAP) ABAP RESTful ha surgido como un marco poderoso para crear aplicaciones Fiori Elements eficientes y escalables. El desarrollador puede centrarse en la lógica empresarial personalizada, ya que el marco RAP se ocupa de las características comunes/estándar. Las operaciones no estándar pueden ser una acción o una función en un objeto comercial. En la mayoría de los casos, las acciones/operaciones requieren algunos parámetros para ejecutar la lógica empresarial.

El objetivo principal de los parámetros de acción predeterminados es mejorar la eficiencia del usuario al completar previamente los campos del formulario con valores relevantes y contextuales. Esto reduce la entrada manual de datos, minimiza los errores y garantiza la coherencia de los datos en toda la aplicación. La implementación de una lógica empresarial compleja dentro de estas acciones predeterminadas agrega una capa de inteligencia a la aplicación, lo que le permite adaptarse a diversos escenarios y requisitos específicos del usuario.

Esta publicación de blog describe las diferentes formas de establecer parámetros de acción predeterminados en una aplicación Fiori Elements creada en el marco RAP. Publicación anterior del blog Se puede hacer referencia a él para habilitar los parámetros de una acción.
  1. Parámetro de acción predeterminado con un valor constante.
    @EndUserText.label: 'Abstract entity for Supplier'
    @Metadata.allowExtensions: true
    define root abstract entity zrk_a_supplier 
     {
        @UI.defaultValue: 'S000000003'
        ToBesupplier : zrk_sup_no;
        
    }​
  2. Parámetro de acción predeterminado con un mapeo directo de la entidad.
    Syntax:
    @UI.defaultValue : #( 'ELEMENT_OF_REFERENCED_ENTITY: <field from entity>')
    
    Example:
    
    @EndUserText.label: 'Abstract entity for Supplier'
    @Metadata.allowExtensions: true
    define root abstract entity zrk_a_supplier 
     {
        @UI.defaultValue : #( 'ELEMENT_OF_REFERENCED_ENTITY: Supplier')
        ToBesupplier : zrk_sup_no;   
    }
    

  3. Parámetro de acción predeterminado con lógica empresarial compleja:Este es el enfoque principal de esta publicación de blog para enriquecer la lógica empresarial en este contexto. La verdadera fortaleza de las acciones de incumplimiento ABAP RAP radica en su capacidad para manejar una lógica empresarial compleja. Los desarrolladores pueden incorporar algoritmos, condiciones y cálculos complejos dentro de las acciones predeterminadas, lo que permite la determinación dinámica de los valores predeterminados. Esto garantiza que la aplicación Fiori Elements no solo proporcione una experiencia de usuario optimizada sino que también cumpla con los requisitos únicos de la empresa. Esto implica una combinación de declaraciones condicionales, cálculos y consultas de datos para determinar dinámicamente los valores predeterminados.
    Por ejemplo, incumplir un precio de venta basado en datos históricos, tipos de cambio de divisas y tendencias actuales del mercado.

Ejemplo de negocio:

El caso de negocio es convertir una solicitud de compra en un contrato de compra. Podrían darse diferentes casos.

  • Algunos de los campos en un PR son opcionales pero obligatorios para crear una PC y, por lo tanto, deben completarse previamente.
    Ex. Fechas de validez
  • Algunos de los campos se pueden modificar antes de crear una PC.
    Ex. Descripción de una computadora
  • Algunos de los campos requieren una lógica empresarial para determinarlos.
    Ej: Determinación de fuente de suministro si el proveedor no está llenado en PR


Implementación:

La definición de acción debe enriquecerse con una función en la definición de comportamiento base y la función debe consumirse en la capa de proyección. A continuación se detallan los pasos.

  1. Defina la acción en el comportamiento base con una función.
    Nota: El nombre de la función debe comenzar con Obtener valores predeterminados para y seguido por nombre de la acción.
      action ( features : instance, precheck ) Convert_Into_PC
        parameter ZRK_A_ActionParam_PR_To_PC result [1] $self
        { default function GetDefaultsForConvert_Into_PC; }​
  2. El asistente de reparación rápida se puede utilizar para crear la definición e implementación del método.
        METHODS convert_into_pc FOR MODIFY
          IMPORTING keys FOR ACTION _prhead~convert_into_pc RESULT result .​
        METHODS GetDefaultsForConvert_Into_PC FOR READ
          IMPORTING keys FOR FUNCTION _PRHead~GetDefaultsForConvert_Into_PC RESULT result.​
  3. [ Optional ] Observe que el parámetro de la acción se convierte en el resultado de la función, de modo que cualquier cambio en el parámetro de la acción puede reflejarse en el resultado de la función.
  4. Enriquezca la implementación del método con lógica empresarial en la función para establecer los valores predeterminados.
    Nota: Si se trata de una acción de creación o creación por asociación, entonces se debe utilizar %cid en lugar de %tky.
      METHOD GetDefaultsForConvert_Into_PC.
    
        " Read the requisition header
        READ ENTITIES OF zrk_i_pur_req_h IN LOCAL MODE
          ENTITY _PRHead
          ALL FIELDS WITH CORRESPONDING #( keys )
          RESULT DATA(lt_pur_req).
    
        CHECK lt_pur_req IS NOT INITIAL.
    
        " Read the requisition item
        READ ENTITIES OF zrk_i_pur_req_h IN LOCAL MODE
            ENTITY _PRHead BY \_PRItem
            ALL FIELDS WITH CORRESPONDING #( keys )
            RESULT DATA(lt_pur_req_item).
    
        CHECK lt_pur_req_item IS NOT INITIAL.
    
        
        LOOP AT lt_pur_req ASSIGNING FIELD-SYMBOL(<fs_pur_req>).
          APPEND INITIAL LINE TO result ASSIGNING FIELD-SYMBOL(<fs_result>).
          
          " If it is create operation, then %cid needs to be used instead of %tky
          <fs_result>-%tky = <fs_pur_req>-%tky.
          
          <fs_result>-%param-description = |Created from { <fs_pur_req>-ObjectId }|.
                
          <fs_result>-%param-buyer = COND #( WHEN <fs_pur_req>-Buyer IS NOT INITIAL
                                             THEN <fs_pur_req>-Buyer
                                             ELSE sy-uname ).
                                             
          " Default the company code from the user attributes in the Org structure
          <fs_result>-%param-Company_code = zrk_cl_mng_pur_con=>determine_company_code( ).
          
          " Calculate the validity dates
          <fs_result>-%param-valid_from = cl_abap_context_info=>get_system_date( ).           
          <fs_result>-%param-valid_to = cl_abap_context_info=>get_system_date( ) + 365.
    
          " Take the first supplier from the requisition item
          LOOP AT lt_pur_req_item ASSIGNING FIELD-SYMBOL(<fs_item>)
            WHERE Supplier IS NOT INITIAL.
            <fs_result>-%param-supplier = <fs_item>-Supplier.
            EXIT.
          ENDLOOP.
          
          " If the supplier is not assigned to any item in PR, then determine from source of supply
          IF <fs_result>-%param-supplier IS INITIAL.
            <fs_result>-%param-supplier =
                zrk_cl_mng_pur_con=>determine_supplier_material( iv_material = VALUE #( lt_pur_req_item[ 1 ]-PartNo ) ).
          ENDIF.
        ENDLOOP.
    
      ENDMETHOD.​
  5. Consuma la función en el comportamiento de proyección para el uso de la interfaz de usuario.
      use function GetDefaultsForConvert_Into_PC ;
  6. Proceder con la implementación de la acción a ejecutar en base a los insumos. Para obtener más detalles sobre el enfoque de implementación, consulte la blog anterior.
  7. La aplicación de vista previa está lista para ser probada.
  8. [ Optional ] Tenga en cuenta que la siguiente anotación ya está asignada en los metadatos que se supone que los desarrolladores deben escribir en BAS/WebIDE.
    <Annotations Target="SAP__self.Convert_Into_PC(SAP__self.PRHeadType)">
    <Annotation Term="SAP__core.OperationAvailable" Path="_it/__OperationControl/Convert_Into_PC"/>
    <Annotation Term="SAP__common.DefaultValuesFunction" String="com.sap.gateway.srvd.zrk_ui_pur_req.v0001.GetDefaultsForConvert_Into_PC"/>
    </Annotations>​

Notas adicionales:

  • Si hay varios registros seleccionados en una página de informe de lista y se determinan diferentes valores predeterminados, el marco ignora el campo y estará en blanco.
  • El nombre de la función debe comenzar con Obtener valores predeterminados para y seguido por nombre de la acción.
  • Si se trata de una acción de creación o creación por asociación, entonces se debe utilizar %cid en lugar de %tky.
  • Esta función se lanza como parte de la versión 2311 BTP.

Conclusión:

ABAP RAP Los parámetros de acción predeterminados con una lógica empresarial compleja permiten que las aplicaciones de Fiori Elements no sólo sean fáciles de usar sino también inteligentes y adaptables a la naturaleza dinámica de los procesos empresariales. La capacidad de personalizar las acciones predeterminadas según las necesidades comerciales específicas garantiza una experiencia de usuario más fluida y eficiente.

Referencias:

https://help.sap.com/docs/abap-cloud/abap-rap/operación-defaulting

https://community.sap.com/topics/abap/rap

Para más contenido similar, sígueme en comunidad o LinkedIn


Cómo encajan los conectores abiertos en SAP Integration Suite
Previo
Integración de datos con SAP S/4HANA
Siguiente

Madrid

Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010

México

Paseo de la Reforma 26
Colonia Juárez,  Cuauhtémoc
Ciudad de México 06600

Costa Rica

Real Cariari
Autopista General Cañas, 
San José, SJ 40104

Perú

Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073

Twitter Linkedin Instagram
Copyright 2022 | All Right Reserved.