/
Implementación Modelo de Datos en eFolder.

Implementación Modelo de Datos en eFolder.

En este apartado de la Guía se comentan cada uno de los desarrollos llevados a cabo para la adaptación del Sistema eFolder al Modelo de Datos del Cliente y su utilización desde la capa de Presentación SAP Gui. Independientemente de la capa de Presentación que se utilice, SAP Gui o Web Dynpro, este apartado de la Guía describe en profundidad los desarrollos llevados a cabo en el Sistema eFolder en sí para adaptarlo al Modelo de Datos del Cliente y que van a ser imprescindibles para obtener una correcta funcionalidad. 

Aunque en este apartado se centra en los desarrollos necesarios para utilizar el Sistema eFolder desde la capa de Presentación SAP Gui, estos desarrollos van a ser necesarios también para obtener una correcta funcionalidad del Sistema eFolder desde la capa de Presentación Web Dynpro, ya que al fin y al cabo Web Dynpro no dejaría de ser una capa de Presentación desde la cual lanzar procesos de trabajo hacia el Servidor del Sistema eFolder, por lo que se terminaría recurriendo a los desarrollos que se va a detallar en este apartado.

Todos los desarrollos sobre los que se basa esta Guía se encuentran en el paquete ZDEMOAECID2:

 

 Badi IF_CUSTOMER_DATA_MODEL.

            En este paquete se encuentran la clase que implementa la Badi /EFOL/BADI_CUSTOMER_DATA_MODEL, el grupo de funciones ZGF_DEMOAECID2 que contiene las Dynpros “Datos Expedientes” y “Datos Adjudicación”, los módulos de función para acceder a ellas y por último los componentes Web Dynpro ZDEMOAECID2 Y ZDEMOAECID3 correspondientes.

            Este apartado de Implementación comienza  analizando el concepto de Badi. Es muy importante asociar el significado y uso de Badi al concepto de Ampliación, ya que es el punto de entrada al Sistema eFolder que nos va a permitir ampliar su funcionalidad y adaptarnos al Modelo de Datos del Cliente que se quiere implantar.

 

Implementación de Ampliación para Badi.

            A través de la Interface IF_CUSTOMER_DATA_MODEL, es posible adaptar y ampliar el Sistema eFolder al Modelo de Datos del Cliente, para poder implementar y dar código a cada uno de los métodos de esta interface, es necesario llevar a cabo una Implementación de Ampliación a través de la Badi  /EFOL/BADI_CUSTOMER_DATA_MODEL y desarrollar por tanto una clase para esta Badi. La Implementación de Ampliación sobre esta Badi sería Z_AECID2_BADI_CUSTOMER_DATA_M:

 

            Dentro de esta Implementación de Ampliación, la clase implementadora de los métodos sería ZCL_IM_AECID2_BADI_CUST_DATA_M:

 

 

            Llegados a este punto es necesario aclarar que una misma Badi puede tener varias clases Z que den código a sus métodos, es decir, es posible establecer varias Implementaciones de Ampliación sobre una misma Badi. Es aquí donde se llevaría a cabo la funcionalidad del Filtro, asociado a cada Badi. Para estar seguros de ejecutar los métodos asociados a la clase implementadora ZCL_IM_AECID2_BADI_CUST_DATA_M, en los valores del Filtro será necesario establecer como parámetro TIPEX y como valor AECID2:

 

A continuación se describen cada uno de los métodos de la clase implementadora, visualizando su código y detallando aquellos cuya función sea más importante.

            El método GET_DYNPRO_HEAD_BASICO tendría la siguiente Firma:

  • Importing:

I_TIPEX de tipo /EFOL/DE_TIPEX, Tipo de Expediente.

I_CPROG de tipo /EFOL/DE_CPROG, Código de Programa.

I_CPTRN de tipo /EFOL/DE_CPTRN, Código de Patrón.

I_NKEY, de tipo /EFOL/DE_ NODE_KEY, Clave de Nodo.

I_MANT_MODE, de tipo /EFOL/DE_MNTMD, Modo de Mantenimiento.

 

  • Exporting:

E_PROGN, de tipo PROGNAME, Nombre de Programa ABAP.

E_DYNNR, de tipo DYNNAME, Número de Dynpro.

E_CPWDA, de tipo WDY_FEATURE_NAME, Nombre de SubComponente WD.

E_VWWDA, de tipo WDY_VIEW_NAME, Nombre de Vista WD.

 

            El código del método sería:

 

METHOD /EFOL/IF_CUSTOMER_DATA_MODEL~GET_DYNPRO_HEAD_BASICO.

  CALL FUNCTION '/EFOL/FM_GET_PROGN'
    EXPORTING
      i_cprog = i_cprog
    IMPORTING
      e_progn = e_progn
      e_dynnr = e_dynnr
      e_cpwda = e_cpwda
      e_vwwda = e_vwwda.

ENDMETHOD.

      A través de este método se obtienen los datos básicos sobre la Dynpro que va a cargar los datos de cabecera de nuestro expediente, es decir, a través de este método indicándole el código de programa es posible a obtener el resto de valores que se haya Parametrizado. En nuestro caso, al indicarle como parámetro de entrada en código de programa /EFOL/HEAD se obtienen los siguientes parámetros de salida: /EFOL/SAPL_FG_DATA_MANAGEMENT y 0901 como valor de Dynpro. Para el resto de parámetros de salida no se obtiene nada ya que no se indica desde la parametrización que tuviera algún componente Web Dynpro asociado:

 

            El método CREATE_CONTROLS es utilizado para crear el árbol que se visualizará a la izquierda de la pantalla de tratamiento del expediente y tendrá la siguiente Firma:

  • Importing:

IW_EXPEDIENTE, de tipo /EFOL/TB_100, Cabecera de Expediente.

I_MNTMD, de tipo /EFOL/DE_MNTMD, Modo de Mantenimiento.

  • Exporting:

E_NO_CHECK, de tipo XFELD, Flag para chequear la creación.

 

            El código del método sería:

 

method /EFOL/if_customer_data_model~create_controls.

  clear e_no_check.

endmethod.

 

      El método SET_OKCODE consiste en establecer el ok_code de la Dynpro, es decir, saltaría al pulsar por ejemplo el botón grabar tras inicial el programa de Apertura de Expediente. En el caso de pulsar el botón grabar tras abrir un nuevo expediente a introducir los datos de cabecera, en el atributo ok_code de la clase se almacenaría el valor PF11. La Firma del método sería:

  • Importing:

I_OKCODE, de tipo SYUCOMM, Código de Función.

El código del método sería el siguiente:

method /EFOL/IF_CUSTOMER_DATA_MODEL~SET_OKCODE.

  me->okcode = i_okcode.

endmethod.

 

      El siguiente método sería GET_DYNPRO_DATO_BASICO. A través de este método es posible recuperar aquellos valores que han sido Parametrizados a través del programa Códigos de Programa – Dynpros. Aquí se va a recuperar por consiguiente los valores asociados al código de programa que fue establecido para la Dynpro “Datos Expedientes”, por lo que el método recibe como valor de entrada ZAECID2_01, al ser la primera Dynpro a visualizar en este patrón, y va a establecer como parámetros de salida los siguientes: SAPLZGF_DEMODAECID2, Dynpro 0001, ZDEMODAECID2 y IF_VI_BODY:

      La Firma del Método sería:

  • Importing:

I_TIPEX de tipo /EFOL/DE_TIPEX, Tipo de Expediente.

I_CPROG de tipo /EFOL/DE_CPROG, Código de Programa.

I_CPTRN de tipo /EFOL/DE_CPTRN, Código de Patrón.

I_NKEY, de tipo /EFOL/DE_ NODE_KEY, Clave de Nodo.

I_MANT_MODE, de tipo /EFOL/DE_MNTMD, Modo de Mantenimiento.

  • Exporting:

E_PROGN, de tipo PROGNAME, Nombre de Programa ABAP.

E_DYNNR, de tipo DYNNAME, Número de Dynpro.

E_CPWDA, de tipo WDY_FEATURE_NAME, Nombre de SubComponente WD.

E_VWWDA, de tipo WDY_VIEW_NAME, Nombre de Vista WD.

Y el código de este Método es el siguiente:

method /EFOL/if_customer_data_model~get_dynpro_dato_basico.


  call function '/EFOL/FM_GET_PROGN'
    exporting
      i_cprog = i_cprog
    importing
      e_progn = e_progn
      e_dynnr = e_dynnr
      e_cpwda = e_cpwda
      e_vwwda = e_vwwda.

  node_key = i_nkey.

endmethod.

 

       El método SET_DATA sería el más importante ya que es el que se ejecutaría justo antes de mostrar la Dynpro “Datos Expedientes”, por lo que método inicializa los atributos de la clase implementadora de la Badi (en caso de ser el primer acceso) o los actualiza en caso de ir navegando entre las diferentes pantallas que encapsulen los campos del Modelo de Datos del Cliente. Tiene la siguiente Firma:

  • Importing:

IW_EXPEDIENTE, de tipo /EFOL/TB_100, Cabecera de Expediente.

I_MNTMD, de tipo /EFOL/DE_MNTMD, Modo de Mantenimiento.

IW_PASO, de tipo /EFOL/TB_401, pasos de Tramitación.

I_EXP_VINC, de tipo /EFOL/DE_RECID, Código de Expediente a Vincular.

 

El código del método sería el siguiente:

method /EFOL/if_customer_data_model~set_data.

  data_exp  = iw_expediente.
  data_paso = iw_paso.
  mant_mode = i_mntmd.
  exp_vinc  = i_exp_vinc.

 call function 'ZFM_DEMODAECID2_SET'
    exporting

      iw_expediente  = data_exp
      i_mntmd = mant_mode.

endmethod.

 

      Este método llama al módulo de función ZFM_DEMOAECID2_SET, que se detalla más adelante, y cuyo objetivo fundamental es establecer el valor a mostrar en los campos de las Dynpros del Grupo de Función a través de sus variables en INCLUDETOP, por lo que accede a Base de Datos en caso de tratarse del primer acceso, o actualiza los valores según se realizan modificaciones en los campos situados en las Dynpros del Grupo de Función.

            El objetivo de este método en su primera invocación también es trasladar al expediente aquellos datos que proceden de su tratamiento interno por parte del Sistema eFolder.

            El siguiente método a tratar sería el método GET_DATA. Este método se ejecuta tras la interacción del usuario con las Dynpros, ya que se ejecuta en el proceso PAI de la Screen que contiene a nuestras Dynpros (Datos Expediente y Datos Adjudicación) como SubScreens.

            La Firma del Método sería:

  • Exporting:

EX_EXPEDIENTE, de tipo /EFOL/TB_100, Cabecera de Expediente.

E_MODIF_DATA, de tipo ABAP_BOOL, Variable Booleana.

            El código de este método es el siguiente:

method /EFOL/if_customer_data_model~get_data.

  ew_expediente = data_exp.
endmethod.

           

            Por lo que el principal objetivo de este método es transferir los datos relativos al expediente desde el Cliente al Sistema eFolder para que el Sistema eFolder pueda continuar con la gestión interna asociada al expediente.

            Por último, el método SAVE está asociado a pulsar el botón grabar, necesario tanto en la Apertura de un expediente así como en la Modificación de un expediente ya existente. La Firma del Método sería:

 

  • Importing:

IW_EXPEDIENTE, de tipo /EFOL/TB_100, Cabecera de Expediente.

El código de este método sería el siguiente:

 

method /EFOL/if_customer_data_model~save.

data ls_zexpediente type zexpediente.

  call function 'ZFM_DEMODAECID2_GET'
    importing
      ew_zexpediente  = ls_zexpediente.

  if sy-subrc = 0.

  ls_zexpediente-tipex = iw_expediente-tipex.
  ls_zexpediente-gjahr = iw_expediente-gjahr.
  ls_zexpediente-numex = iw_expediente-numex.

  call function 'ZFM_DEMODAECID2_UPD' in update task
    exporting
      iw_zexpediente = ls_zexpediente.

endif.

endmethod.

 

      El método en un primer paso realiza una llamada al módulo de función ZFM_DEMOAECID2_GET, con la idea de almacenar en un estructura los datos que se encuentran actualizados en la variable global del INCLUDETOP de las Dynpros, y por tanto se corresponden con los datos que actualmente muestran estas Dynpros. Una vez obtenida esa información, se añaden a la estructura tres valores fundamentales para su correcta inserción o modificación en Base de Datos: TIPEX, GJAHR y NUMEX, que identifican de manera inequívoca a un expediente en la tabla donde se almacenan los datos del Modelo de Datos del Cliente.

            El último paso de este método sería por tanto la interacción con Base de Datos, para ello se realizada una llamada al módulo de función ZFM_DEMOAECID2_UPD. Es de suma importancia que la llamada a este módulo de función de realice de forma IN UPDATE TASK, de manera que se lleve a cabo la interacción con Base de Datos de forma atómica, respetando por tanto así el Principio de Atomicidad de SAP.

 

Avvale 2024