Archivo para Julio 14th, 2008
Añadir un campo a una iView Standard
Lo haremos a través de la BAdI HRPAD00INFTYUI y la personalización de iViews que el portal nos permite.
1) Primero crearemos una implementación para la BAdI. Lo haremos a través de la SE19 en “Create Implementation”, “New BAdI”. Introduciremos el nombre de la BAdI que queremos implementar, en este caso: “HRPAD00INFTYUI”.
En el siguiente paso daremos un nombre a la implementación (ej: ZLINX_HRPAD00INFTYUI) y una descripción.
A continuación rellenaremos el siguiente formulario. En la primera casilla, introduciremos un nombre para la implementación de la BAdI, distinto al anterior y que no usaremos en adelante (ej: ZLINX_BADI_ESS); en la segunda casilla, introduciremos un nombre para la clase de la implementación (ej: Z_CL_EX_HRPAD00INFTYUI); en la tercera casilla, por último, seleccionaremos el nombre de la BAdI que queremos implementar (ej: HRPAD00INFTYUI).
Con esto ya tenemos creada la implementación y podemos desarrollar los métodos que nos hagan falta. Para nuestro propósito, desarrollaremos el método IF_EX_HRPAD00INFTYUI~INPUT_CONVERSION.
Pero dejemos esto a un lado un segundo.
2) Debemos tener claro qué estructura queremos/debemos modificar. Para ello, podemos usar varios métodos; en mi caso, para estar perféctamente seguros de qué estructura se usaba, implementamos un código en el método antes creado, que tomaba el nombre de la estructura y lo guardaba en una tabla. Seguro que a desarrolladores más expertos se les ocurrirán mejores maneras o lo podrán leer sin problemas de la parametrización del sistema… Pero yo propongo un código similar a este:
METHOD if_ex_hrpad00inftyui~input_conversion.
DATA wa_log TYPE zhr_xss_log.
CASE screen_structure_name.
WHEN ‘HCMT_BSP_PA_PREF’.
MOVE-CORRESPONDING screen_structure TO pref.
WHEN OTHERS.
ASSIGN screen_structure TO <screen_structure_0021>.
wa_log-caseval = screen_structure_name.
INSERT into zhr_xss_log values wa_log.
ENDCASE.
IF pnnnn2 IS REQUESTED.
MOVE-CORRESPONDING screen_structure TO pnnnn2.
ENDIF.
ENDMETHOD.
De esta forma obtendremos tras la ejecución de nuestro iView, el nombre de la estructura utilizada, como una entrada en la tabla que hemos creado para este fin. De esta forma, sabremos que, por ejemplo, necesitamos modificar la estructura “HCMT_BSP_PA_CH_R0021″.
3) Nos dirigimos a la estructura “HCMT_BSP_PA_CH_R0021″, en nuestro ejemplo, y lo que hacemos es ampliarla con los campos nuevos que queramos mostrar en el espacio para usuario reservado por SAP en la estructura. Una vez hecha esta ampliación, es imprescindible reiniciar el portal.
4) Con un usuario administrador, nos dirigimos al portal, y volvemos a lanzar la preview del iView. Si el iView se compone de varias pantallas, tendremos que usar la técnica de CTRL+RIGHT_CLICK en todas ellas. Con esta combinación aplicada sobre un campo del iView, accederemos a un panel de personalización de los campos. Pulsando sobre el contenedor, veremos un enlace llamado “Edit Custom Extension Fields“, dentro del cual, pordremos hacer visibles nuestros nuevos campos y realizar alguna personalización sobre los textos, por ejemplo.
5) Volvemos a nuestro método “input_conversion” y nos disponemos a introducir el código que definitivamente capturará nuestros nuevos campos para ser insertados en el Infotipo correspondiente. Como ejemplo, podemos ver este código.
METHOD if_ex_hrpad00inftyui~input_conversion.
DATA wa_log TYPE zhr_xss_log.
CASE screen_structure_name.
WHEN ‘HCMT_BSP_PA_PREF’.
MOVE-CORRESPONDING screen_structure TO pref.
WHEN ‘HCMT_BSP_PA_CH_R0021′.
FIELD-SYMBOLS: <screen_structure_0021> TYPE hcmt_bsp_pa_ch_r0021,
<p0021> TYPE p0021.
ASSIGN: pnnnn TO <p0021> CASTING,
screen_structure TO <screen_structure_0021>.
MOVE-CORRESPONDING screen_structure TO pnnnn.
MOVE <screen_structure_0021>-z_fasin TO <p0021>-fasin.
ENDCASE.
IF pnnnn2 IS REQUESTED.
MOVE-CORRESPONDING screen_structure TO pnnnn2.
ENDIF.
ENDMETHOD.
Siendo Z_FASIN el campo que introdujimos previamente en la estructura.
Si hemos dado todos los pasos de forma correcta, tendremos como resultado nuestro iView ampliado con los campos que deseemos, de tal forma que la información que el usuario introduzca, será guardada en el Infotipo adecuado.
———
Bibliografía: