PROG: Support dynpros with splitter control (#7035)

This commit is contained in:
Marc Bernard 2024-09-04 10:23:50 -04:00 committed by GitHub
parent be5ec9ed29
commit 84656774fd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -49,6 +49,9 @@ CLASS zcl_abapgit_objects_program DEFINITION
fields TYPE dyfatc_tab,
flow_logic TYPE swydyflow,
spaces TYPE ty_spaces_tt,
nat_header TYPE d020s,
nat_fields TYPE STANDARD TABLE OF d021s WITH DEFAULT KEY,
nat_texts TYPE STANDARD TABLE OF d021t WITH DEFAULT KEY,
END OF ty_dynpro .
TYPES:
ty_dynpro_tt TYPE STANDARD TABLE OF ty_dynpro WITH DEFAULT KEY .
@ -304,6 +307,7 @@ CLASS zcl_abapgit_objects_program IMPLEMENTATION.
DATA: lv_name TYPE dwinactiv-obj_name,
lt_d020s_to_delete TYPE TABLE OF d020s,
ls_d020s LIKE LINE OF lt_d020s_to_delete,
lt_params TYPE TABLE OF d023s,
ls_dynpro LIKE LINE OF it_dynpros.
FIELD-SYMBOLS: <ls_field> TYPE rpy_dyfatc.
@ -371,6 +375,28 @@ CLASS zcl_abapgit_objects_program IMPLEMENTATION.
ENDLOOP.
IF ls_dynpro-header-type = 'N'.
DELETE FROM d021t WHERE prog = ls_dynpro-header-program AND dynr = ls_dynpro-header-screen ##SUBRC_OK.
INSERT d021t FROM TABLE ls_dynpro-nat_texts ##SUBRC_OK.
ls_dynpro-nat_header-dgen = sy-datum.
ls_dynpro-nat_header-tgen = sy-uzeit.
CALL FUNCTION 'RPY_DYNPRO_INSERT_NATIVE'
EXPORTING
header = ls_dynpro-nat_header
dynprotext = ls_dynpro-header-descript
TABLES
fieldlist = ls_dynpro-nat_fields
flowlogic = ls_dynpro-flow_logic
params = lt_params
EXCEPTIONS
cancelled = 1
already_exists = 2
program_not_exists = 3
not_executed = 4
OTHERS = 5.
ELSE.
CALL FUNCTION 'RPY_DYNPRO_INSERT'
EXPORTING
header = ls_dynpro-header
@ -391,10 +417,10 @@ CLASS zcl_abapgit_objects_program IMPLEMENTATION.
not_generated = 8
illegal_field_position = 9
OTHERS = 10.
ENDIF.
IF sy-subrc <> 2 AND sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
* todo, RPY_DYNPRO_UPDATE?
CONCATENATE ls_dynpro-header-program ls_dynpro-header-screen
INTO lv_name RESPECTING BLANKS.
@ -717,6 +743,7 @@ CLASS zcl_abapgit_objects_program IMPLEMENTATION.
lt_fields_to_containers TYPE dyfatc_tab,
lt_flow_logic TYPE swydyflow,
lt_d020s TYPE TABLE OF d020s,
lt_texts TYPE TABLE OF d021t,
lt_fieldlist_int TYPE TABLE OF d021s. "internal format
FIELD-SYMBOLS: <ls_d020s> LIKE LINE OF lt_d020s,
@ -780,8 +807,8 @@ CLASS zcl_abapgit_objects_program IMPLEMENTATION.
progname = iv_program_name
dynnr = <ls_d020s>-dnum
TABLES
fieldlist = lt_fieldlist_int.
fieldlist = lt_fieldlist_int
fieldtexts = lt_texts.
LOOP AT lt_fields_to_containers ASSIGNING <ls_field>.
* output style is a NUMC field, the XML conversion will fail if it contains invalid value
@ -824,10 +851,18 @@ CLASS zcl_abapgit_objects_program IMPLEMENTATION.
APPEND INITIAL LINE TO rt_dynpro ASSIGNING <ls_dynpro>.
<ls_dynpro>-header = ls_header.
<ls_dynpro>-flow_logic = lt_flow_logic.
IF ls_header-type = 'N'.
" In particular for dynpros with splitter
<ls_dynpro>-nat_header = <ls_d020s>.
CLEAR: <ls_dynpro>-nat_header-dgen, <ls_dynpro>-nat_header-tgen.
<ls_dynpro>-nat_fields = lt_fieldlist_int.
<ls_dynpro>-nat_texts = lt_texts.
ELSE.
<ls_dynpro>-containers = lt_containers.
<ls_dynpro>-fields = lt_fields_to_containers.
<ls_dynpro>-flow_logic = lt_flow_logic.
ENDIF.
ENDLOOP.