mirror of
https://github.com/abapGit/abapGit.git
synced 2025-04-30 20:03:20 +08:00
Merge pull request #751 from bigld/master
Add Object FORM SAPScript form #39
This commit is contained in:
commit
e0472a8f49
419
src/zabapgit_object_form.prog.abap
Normal file
419
src/zabapgit_object_form.prog.abap
Normal file
|
@ -0,0 +1,419 @@
|
|||
*&---------------------------------------------------------------------*
|
||||
*& Include ZABAPGIT_OBJECT_FORM
|
||||
*&---------------------------------------------------------------------*
|
||||
*----------------------------------------------------------------------*
|
||||
* CLASS lcl_object_form DEFINITION
|
||||
*----------------------------------------------------------------------*
|
||||
CLASS lcl_object_form DEFINITION INHERITING FROM lcl_objects_super FINAL.
|
||||
|
||||
PUBLIC SECTION.
|
||||
INTERFACES lif_object.
|
||||
ALIASES mo_files FOR lif_object~mo_files.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS: c_objectname_form TYPE thead-tdobject VALUE 'FORM' ##NO_TEXT.
|
||||
CONSTANTS: c_objectname_tdlines TYPE thead-tdobject VALUE 'TDLINES' ##NO_TEXT.
|
||||
CONSTANTS: c_extension_xml TYPE string VALUE 'xml' ##NO_TEXT.
|
||||
|
||||
TYPES: BEGIN OF tys_form_data,
|
||||
form_header TYPE itcta,
|
||||
text_header TYPE thead,
|
||||
orig_language TYPE sy-langu,
|
||||
pages TYPE STANDARD TABLE OF itctg WITH DEFAULT KEY,
|
||||
page_windows TYPE STANDARD TABLE OF itcth WITH DEFAULT KEY,
|
||||
paragraphs TYPE STANDARD TABLE OF itcdp WITH DEFAULT KEY,
|
||||
strings TYPE STANDARD TABLE OF itcds WITH DEFAULT KEY,
|
||||
tabs TYPE STANDARD TABLE OF itcdq WITH DEFAULT KEY,
|
||||
windows TYPE STANDARD TABLE OF itctw WITH DEFAULT KEY,
|
||||
END OF tys_form_data,
|
||||
tyt_form_data TYPE STANDARD TABLE OF tys_form_data WITH DEFAULT KEY,
|
||||
tyt_form_header TYPE STANDARD TABLE OF itcta WITH DEFAULT KEY,
|
||||
tys_form_header TYPE LINE OF tyt_form_header,
|
||||
tyt_text_header TYPE STANDARD TABLE OF thead WITH DEFAULT KEY,
|
||||
tys_text_header TYPE LINE OF tyt_text_header,
|
||||
tyt_lines TYPE tline_tab.
|
||||
|
||||
METHODS _get_last_changes
|
||||
IMPORTING
|
||||
iv_form_name TYPE ty_item-obj_name
|
||||
RETURNING
|
||||
VALUE(es_last_changed) TYPE tys_form_header.
|
||||
|
||||
METHODS _build_extra_from_header
|
||||
IMPORTING
|
||||
ls_header TYPE tys_form_header
|
||||
RETURNING
|
||||
VALUE(r_result) TYPE string.
|
||||
|
||||
METHODS _save_form
|
||||
IMPORTING
|
||||
it_lines TYPE lcl_object_form=>tyt_lines
|
||||
CHANGING
|
||||
cs_form_data TYPE lcl_object_form=>tys_form_data.
|
||||
|
||||
METHODS _extract_tdlines
|
||||
IMPORTING
|
||||
is_form_data TYPE lcl_object_form=>tys_form_data
|
||||
RETURNING
|
||||
VALUE(et_lines) TYPE lcl_object_form=>tyt_lines
|
||||
RAISING
|
||||
lcx_exception.
|
||||
|
||||
METHODS _clear_changed_fields
|
||||
CHANGING
|
||||
cs_form_data TYPE lcl_object_form=>tys_form_data.
|
||||
|
||||
METHODS _compress_lines
|
||||
IMPORTING
|
||||
is_form_data TYPE lcl_object_form=>tys_form_data
|
||||
it_lines TYPE lcl_object_form=>tyt_lines
|
||||
RAISING
|
||||
lcx_exception.
|
||||
|
||||
METHODS _find_form
|
||||
IMPORTING
|
||||
iv_object_name TYPE ty_item-obj_name
|
||||
RETURNING
|
||||
VALUE(et_text_header) TYPE lcl_object_form=>tyt_text_header.
|
||||
|
||||
METHODS _read_form
|
||||
IMPORTING
|
||||
is_text_header TYPE lcl_object_form=>tys_text_header
|
||||
EXPORTING
|
||||
ev_form_found TYPE flag
|
||||
es_form_data TYPE lcl_object_form=>tys_form_data
|
||||
et_lines TYPE lcl_object_form=>tyt_lines.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
* CLASS lcl_object_form IMPLEMENTATION
|
||||
*----------------------------------------------------------------------*
|
||||
CLASS lcl_object_form IMPLEMENTATION.
|
||||
|
||||
METHOD lif_object~has_changed_since.
|
||||
|
||||
DATA: ls_last_changed TYPE tys_form_header.
|
||||
DATA: lv_last_changed_ts TYPE timestamp.
|
||||
|
||||
ls_last_changed = _get_last_changes( ms_item-obj_name ).
|
||||
|
||||
CONVERT DATE ls_last_changed-tdldate TIME ls_last_changed-tdltime
|
||||
INTO TIME STAMP lv_last_changed_ts TIME ZONE sy-zonlo.
|
||||
|
||||
rv_changed = boolc( sy-subrc <> 0 OR lv_last_changed_ts > iv_timestamp ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~changed_by.
|
||||
|
||||
DATA: ls_last_changed TYPE tys_form_header.
|
||||
|
||||
ls_last_changed = _get_last_changes( ms_item-obj_name ).
|
||||
|
||||
IF ls_last_changed-tdluser IS NOT INITIAL.
|
||||
rv_user = ls_last_changed-tdluser.
|
||||
ELSE.
|
||||
rv_user = c_user_unknown.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~get_metadata.
|
||||
|
||||
rs_metadata = get_metadata( ).
|
||||
rs_metadata-delete_tadir = abap_true.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~exists.
|
||||
|
||||
DATA: lv_form_name TYPE thead-tdform.
|
||||
|
||||
lv_form_name = ms_item-obj_name.
|
||||
|
||||
CALL FUNCTION 'READ_FORM'
|
||||
EXPORTING
|
||||
form = lv_form_name
|
||||
read_only_header = abap_true
|
||||
IMPORTING
|
||||
found = rv_bool.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~jump.
|
||||
|
||||
DATA: lt_bdcdata TYPE TABLE OF bdcdata.
|
||||
|
||||
FIELD-SYMBOLS: <ls_bdcdata> LIKE LINE OF lt_bdcdata.
|
||||
|
||||
APPEND INITIAL LINE TO lt_bdcdata ASSIGNING <ls_bdcdata>.
|
||||
<ls_bdcdata>-program = 'SAPMSSCF' ##NO_TEXT.
|
||||
<ls_bdcdata>-dynpro = '1102' ##NO_TEXT.
|
||||
<ls_bdcdata>-dynbegin = abap_true.
|
||||
|
||||
APPEND INITIAL LINE TO lt_bdcdata ASSIGNING <ls_bdcdata>.
|
||||
<ls_bdcdata>-fnam = 'BDC_OKCODE' ##NO_TEXT.
|
||||
<ls_bdcdata>-fval = '=SHOW' ##NO_TEXT.
|
||||
|
||||
APPEND INITIAL LINE TO lt_bdcdata ASSIGNING <ls_bdcdata>.
|
||||
<ls_bdcdata>-fnam = 'RSSCF-TDFORM' ##NO_TEXT.
|
||||
<ls_bdcdata>-fval = ms_item-obj_name.
|
||||
|
||||
CALL FUNCTION 'ABAP4_CALL_TRANSACTION'
|
||||
STARTING NEW TASK 'GIT'
|
||||
EXPORTING
|
||||
tcode = 'SE71'
|
||||
mode_val = 'E'
|
||||
TABLES
|
||||
using_tab = lt_bdcdata
|
||||
EXCEPTIONS
|
||||
OTHERS = 1
|
||||
##fm_subrc_ok. "#EC CI_SUBRC
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~delete.
|
||||
|
||||
DATA: lv_name TYPE itcta-tdform.
|
||||
|
||||
lv_name = ms_item-obj_name.
|
||||
|
||||
CALL FUNCTION 'DELETE_FORM'
|
||||
EXPORTING
|
||||
form = lv_name
|
||||
language = '*'.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~serialize.
|
||||
|
||||
DATA: lt_form_data TYPE tyt_form_data.
|
||||
DATA: ls_form_data TYPE tys_form_data.
|
||||
DATA: lt_text_header TYPE tyt_text_header.
|
||||
DATA: lt_lines TYPE tyt_lines.
|
||||
DATA: lo_xml TYPE REF TO lcl_xml_output.
|
||||
DATA: lv_form_found TYPE flag.
|
||||
FIELD-SYMBOLS: <ls_text_header> LIKE LINE OF lt_text_header.
|
||||
|
||||
lt_text_header = _find_form( ms_item-obj_name ).
|
||||
|
||||
LOOP AT lt_text_header ASSIGNING <ls_text_header>.
|
||||
CLEAR lt_lines.
|
||||
CLEAR ls_form_data.
|
||||
FREE lo_xml.
|
||||
|
||||
_read_form( EXPORTING is_text_header = <ls_text_header>
|
||||
IMPORTING ev_form_found = lv_form_found
|
||||
es_form_data = ls_form_data
|
||||
et_lines = lt_lines ).
|
||||
|
||||
IF lv_form_found = abap_true.
|
||||
|
||||
_clear_changed_fields( CHANGING cs_form_data = ls_form_data ).
|
||||
|
||||
_compress_lines( is_form_data = ls_form_data
|
||||
it_lines = lt_lines ).
|
||||
|
||||
INSERT ls_form_data INTO TABLE lt_form_data.
|
||||
|
||||
ENDIF.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
IF lt_form_data IS NOT INITIAL.
|
||||
|
||||
io_xml->add( iv_name = c_objectname_form
|
||||
ig_data = lt_form_data ).
|
||||
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~deserialize.
|
||||
|
||||
DATA: lt_form_data TYPE tyt_form_data.
|
||||
DATA: lt_lines TYPE tyt_lines.
|
||||
FIELD-SYMBOLS: <ls_form_data> TYPE LINE OF tyt_form_data.
|
||||
|
||||
io_xml->read( EXPORTING iv_name = c_objectname_form
|
||||
CHANGING cg_data = lt_form_data ).
|
||||
|
||||
LOOP AT lt_form_data ASSIGNING <ls_form_data>.
|
||||
|
||||
lt_lines = _extract_tdlines( <ls_form_data> ).
|
||||
|
||||
|
||||
_save_form( EXPORTING it_lines = lt_lines
|
||||
CHANGING cs_form_data = <ls_form_data> ).
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
CALL FUNCTION 'SAPSCRIPT_DELETE_LOAD'
|
||||
EXPORTING
|
||||
delete = abap_true
|
||||
form = '*'
|
||||
write = space.
|
||||
|
||||
tadir_insert( iv_package ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~compare_to_remote_version.
|
||||
CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD _build_extra_from_header.
|
||||
r_result = c_objectname_tdlines && '_' && ls_header-tdspras.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD _get_last_changes.
|
||||
|
||||
DATA: lv_form_name TYPE thead-tdform.
|
||||
|
||||
CLEAR es_last_changed.
|
||||
|
||||
lv_form_name = iv_form_name.
|
||||
|
||||
CALL FUNCTION 'READ_FORM'
|
||||
EXPORTING
|
||||
form = lv_form_name
|
||||
read_only_header = abap_true
|
||||
IMPORTING
|
||||
form_header = es_last_changed.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD _save_form.
|
||||
|
||||
CALL FUNCTION 'SAVE_FORM'
|
||||
EXPORTING
|
||||
form_header = cs_form_data-form_header
|
||||
TABLES
|
||||
form_lines = it_lines
|
||||
pages = cs_form_data-pages
|
||||
page_windows = cs_form_data-page_windows
|
||||
paragraphs = cs_form_data-paragraphs
|
||||
strings = cs_form_data-strings
|
||||
tabs = cs_form_data-tabs
|
||||
windows = cs_form_data-windows.
|
||||
|
||||
CALL FUNCTION 'SAPSCRIPT_CHANGE_OLANGUAGE'
|
||||
EXPORTING
|
||||
forced = abap_true
|
||||
name = cs_form_data-text_header-tdname
|
||||
object = cs_form_data-text_header-tdobject
|
||||
olanguage = cs_form_data-orig_language
|
||||
EXCEPTIONS
|
||||
OTHERS = 1
|
||||
##fm_subrc_ok. "#EC CI_SUBRC
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD _extract_tdlines.
|
||||
|
||||
DATA lv_string TYPE string.
|
||||
DATA lo_xml TYPE REF TO lcl_xml_input.
|
||||
|
||||
lv_string = mo_files->read_string( iv_extra =
|
||||
_build_extra_from_header( is_form_data-form_header )
|
||||
iv_ext = c_extension_xml ).
|
||||
|
||||
CREATE OBJECT lo_xml EXPORTING iv_xml = lv_string.
|
||||
lo_xml->read( EXPORTING iv_name = c_objectname_tdlines
|
||||
CHANGING cg_data = et_lines ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD _clear_changed_fields.
|
||||
|
||||
CLEAR: cs_form_data-form_header-tdfuser,
|
||||
cs_form_data-form_header-tdfdate,
|
||||
cs_form_data-form_header-tdftime,
|
||||
cs_form_data-form_header-tdfreles,
|
||||
cs_form_data-form_header-tdluser,
|
||||
cs_form_data-form_header-tdldate,
|
||||
cs_form_data-form_header-tdltime,
|
||||
cs_form_data-form_header-tdlreles.
|
||||
CLEAR: cs_form_data-text_header-tdfuser,
|
||||
cs_form_data-text_header-tdfdate,
|
||||
cs_form_data-text_header-tdftime,
|
||||
cs_form_data-text_header-tdfreles,
|
||||
cs_form_data-text_header-tdluser,
|
||||
cs_form_data-text_header-tdldate,
|
||||
cs_form_data-text_header-tdltime,
|
||||
cs_form_data-text_header-tdlreles.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD _compress_lines.
|
||||
|
||||
DATA lv_string TYPE string.
|
||||
DATA lo_xml TYPE REF TO lcl_xml_output.
|
||||
|
||||
CREATE OBJECT lo_xml.
|
||||
lo_xml->add( iv_name = c_objectname_tdlines
|
||||
ig_data = it_lines ).
|
||||
lv_string = lo_xml->render( ).
|
||||
IF lv_string IS NOT INITIAL.
|
||||
mo_files->add_string( iv_extra =
|
||||
_build_extra_from_header( is_form_data-form_header )
|
||||
iv_ext = c_extension_xml
|
||||
iv_string = lv_string ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD _find_form.
|
||||
|
||||
DATA: lv_text_name TYPE thead-tdname.
|
||||
|
||||
lv_text_name = iv_object_name.
|
||||
|
||||
CALL FUNCTION 'SELECT_TEXT'
|
||||
EXPORTING
|
||||
database_only = abap_true
|
||||
id = 'TXT'
|
||||
language = '*'
|
||||
name = lv_text_name
|
||||
object = c_objectname_form
|
||||
TABLES
|
||||
selections = et_text_header
|
||||
EXCEPTIONS
|
||||
OTHERS = 1
|
||||
##fm_subrc_ok ##NO_TEXT. "#EC CI_SUBRC
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD _read_form.
|
||||
|
||||
CLEAR es_form_data.
|
||||
|
||||
CALL FUNCTION 'READ_FORM'
|
||||
EXPORTING
|
||||
form = is_text_header-tdform
|
||||
language = is_text_header-tdspras
|
||||
status = ' '
|
||||
IMPORTING
|
||||
form_header = es_form_data-form_header
|
||||
found = ev_form_found
|
||||
header = es_form_data-text_header
|
||||
olanguage = es_form_data-orig_language
|
||||
TABLES
|
||||
form_lines = et_lines
|
||||
pages = es_form_data-pages
|
||||
page_windows = es_form_data-page_windows
|
||||
paragraphs = es_form_data-paragraphs
|
||||
strings = es_form_data-strings
|
||||
tabs = es_form_data-tabs
|
||||
windows = es_form_data-windows.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS. "lcl_object_FORM IMPLEMENTATION
|
25
src/zabapgit_object_form.prog.xml
Normal file
25
src/zabapgit_object_form.prog.xml
Normal file
|
@ -0,0 +1,25 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<PROGDIR>
|
||||
<NAME>ZABAPGIT_OBJECT_FORM</NAME>
|
||||
<STATE>A</STATE>
|
||||
<VARCL>X</VARCL>
|
||||
<DBAPL>S</DBAPL>
|
||||
<DBNA>D$</DBNA>
|
||||
<SUBC>I</SUBC>
|
||||
<FIXPT>X</FIXPT>
|
||||
<LDBNAME>D$S</LDBNAME>
|
||||
<UCCHECK>X</UCCHECK>
|
||||
</PROGDIR>
|
||||
<TPOOL>
|
||||
<item>
|
||||
<ID>R</ID>
|
||||
<ENTRY>ZABAPGIT_OBJECT_FORM</ENTRY>
|
||||
<LENGTH>20</LENGTH>
|
||||
</item>
|
||||
</TPOOL>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
|
@ -18,6 +18,7 @@ INCLUDE zabapgit_object_enho.
|
|||
INCLUDE zabapgit_object_enhs.
|
||||
INCLUDE zabapgit_object_enqu.
|
||||
INCLUDE zabapgit_object_ensc.
|
||||
INCLUDE zabapgit_object_form.
|
||||
INCLUDE zabapgit_object_fugr.
|
||||
INCLUDE zabapgit_object_iarp.
|
||||
INCLUDE zabapgit_object_iasp.
|
||||
|
|
|
@ -1645,7 +1645,12 @@ CLASS lcl_objects_super IMPLEMENTATION.
|
|||
obj_type = i_obj_type.
|
||||
|
||||
TRY.
|
||||
li_object = cl_wb_object=>create_from_transport_key( p_object = obj_type p_obj_name = obj_name ).
|
||||
cl_wb_object=>create_from_transport_key( EXPORTING p_object = obj_type p_obj_name = obj_name
|
||||
RECEIVING p_wb_object = li_object
|
||||
EXCEPTIONS OTHERS = 1 ).
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( 'ADT Jump Error' ).
|
||||
ENDIF.
|
||||
|
||||
CALL METHOD ('CL_ADT_TOOLS_CORE_FACTORY')=>('GET_INSTANCE')
|
||||
RECEIVING
|
||||
|
|
Loading…
Reference in New Issue
Block a user