- Creación de entradas
Voy a intentar que la creación de entradas sea de la forma más sencilla posible, con los campos clave crearemos la entrada en la tabla y luego volvemos a recuperar la tabla en los objetos. Debemos ampliar el método IF_GENIL_APPL_INTLAY~CREATE OBJECTS
DATA: ls_parameters TYPE crmt_name_value_pair,
ls_estructura TYPE ztabla_bol,
lt_request_obj TYPE crmt_request_obj_tab..
* Creo una entrada en la tabla con los datos que van en la tabla de parámetros
READ TABLE it_parameters INTO ls_parameters WITH KEY name = 'ACT_GUID'.
IF sy-subrc = 0.
ls_estructura-act_guid = ls_parameters-value.
ENDIF.
READ TABLE it_parameters INTO ls_parameters WITH KEY name = 'ID'.
IF sy-subrc = 0.
ls_estrucutra-id = ls_parameters-value.
ENDIF.
* Inserto la entrada en la tabla
INSERT ztabla_bol FROM ls_estrucutra.
me->if_genil_appl_intlay~get_objects( it_request_objects = lt_request_obj
iv_root_list = iv_root_list ). - Modificación de datos
Para modificar los datos primero es necesario bloquearlos, para eso ampliaremos el método IF_GENIL_ALTERNATIVE_DSIL~LOCK_OBJECTS y luego modificarlos ampliando el método IF_GENIL_APPL_INTLAY~MODIFY_OBJECTS- Método IF_GENIL_ALTERNATIVE_DSIL~LOCK_OBJECTS
El objetivo de este método es bloquear el objeto para que no pueda ser modificado en el mismo momento por otra sesión. Realmente del bloqueo se encarga el objeto al que está asociado nuestro bloque, en este caso una tarea. Por lo tanto lo único que necesitamos es que el método informe de que todo es OK.FIELD-SYMBOLS <ls_object> LIKE LINE OF ct_object_list.
LOOP AT ct_object_list ASSIGNING <ls_object>.
<ls_object>-success = abap_true.
ENDLOOP. - Método IF_GENIL_APPL_INTLAY~MODIFY_OBJECTS
Este método obtiene los campos modificados y modifica la BD. Si tenemos datos obligatorios en este método también podemos controlarlos para no modificar la BD si no se están informando.DATA: lv_objeto TYPE REF TO if_genil_cont_root_object,
lv_id TYPE ztabla_bol-id,
lv_props_obj TYPE REF TO if_genil_obj_attr_properties,
lt_changed_attr TYPE crmt_attr_name_tab,
ls_attributes TYPE zestructura_bol,
ls_objeto TYPE ztabla_bol.
FIELD-SYMBOLS: <new> TYPE simple,
<old> TYPE simple,
<name> TYPE name_komp.
lv_expo = iv_root_list->get_first( ).
WHILE lv_objeto IS BOUND.
* Comprobamos si han habido modificaciones
IF lv_expo->get_delta_flag( ) = if_genil_cont_simple_object=>delta_changed.
* Obtenemos las propiedades de los atributos
lv_props_obj = lv_expo->get_attr_props_obj( ).
* Comprobamos cuales se han modificado
CALL METHOD lv_props_obj->get_name_tab_4_property
EXPORTING
iv_property = if_genil_obj_attr_properties=>modified
IMPORTING
et_names = lt_changed_attr.
* ID
CALL METHOD lv_objeto->get_key
IMPORTING
es_key = lv_id.
* Atributos de la estrucutra
CALL METHOD lv_objeto->get_attributes
IMPORTING
es_attributes = ls_attributes.
* Obtengo la entrada en la tabla
SELECT SINGLE * INTO ls_objeto
FROM ztabla_bol
WHERE id = lv_id.
LOOP AT lt_changed_attr ASSIGNING <name>.
ASSIGN COMPONENT <name> OF STRUCTURE ls_objeto TO <old>.
ASSIGN COMPONENT <name> OF STRUCTURE ls_attributes TO <new>.
<old> = <new>.
ENDLOOP.
UPDATE ztabla_bol FROM ls_objeto.
ENDIF.
lv_objeto = iv_root_list->get_next( ).
ENDWHILE. - Borrado de entradas
Para borrar simplemente obtendremos el ID y borramos sin más. Hay que ampliar el método IF_GENIL_APPL_ALTERNATIVE_DSIL~DELETE_OBJECTS
DATA: lv_id TYPE ztabla_bol-id.
FIELD-SYMBOLS: <obj> TYPE crmt_genil_obj_inst_line.
LOOP AT ct_object_list ASSIGNING <obj>.
* Obtengo el ID de la tabla
CALL METHOD cl_crm_genil_container_tools=>get_key_from_object_id
EXPORTING
iv_object_name = <obj>-object_name
iv_object_id = <obj>-object_id
IMPORTING
es_key = lv_id.
* Borro la entrada en la tabla
DELETE FROM ztabla_bol WHERE id = lv_id.
ENDLOOP.
- Método IF_GENIL_ALTERNATIVE_DSIL~LOCK_OBJECTS
Relacionado:
Programación BOL/GenIL (1/.)
Programación BOL/GenIL (2/.)
Programación BOL/GenIL (3/.)
Programación BOL/GenIL (5/.)
Programación BOL/GenIL.(7/7)
No hay comentarios:
Publicar un comentario