GSaha567/seq_level_training_data
052
1text,length,is_long_context,metric_val,label_metric2"CLASS zcl_abapgit_object_tabl DEFINITION3 PUBLIC4 INHERITING FROM zcl_abapgit_objects_super5 FINAL6 CREATE PUBLIC .7 8 PUBLIC SECTION.9 10 INTERFACES zif_abapgit_object .11 PROTECTED SECTION.12 TYPES: BEGIN OF ty_segment_definition,13 segmentheader TYPE edisegmhd,14 segmentdefinition TYPE edisegmdef,15 segmentstructures TYPE STANDARD TABLE OF edisegstru WITH DEFAULT KEY,16 END OF ty_segment_definition.17 TYPES: ty_segment_definitions TYPE STANDARD TABLE OF ty_segment_definition WITH DEFAULT KEY.18 19 TYPES: BEGIN OF ty_tabl_extras,20 tddat TYPE tddat,21 END OF ty_tabl_extras.22 23 ""! get additional data like table authorization group24 ""! @parameter iv_tabname | name of the table25 METHODS read_extras IMPORTING iv_tabname TYPE ddobjname26 RETURNING VALUE(rs_tabl_extras) TYPE ty_tabl_extras.27 28 ""! Update additional data29 ""! @parameter iv_tabname | name of the table30 ""! @parameter is_tabl_extras | additional table data31 METHODS update_extras IMPORTING iv_tabname TYPE ddobjname32 is_tabl_extras TYPE ty_tabl_extras.33 34 ""! Delete additional data35 ""! @parameter iv_tabname | name of the table36 METHODS delete_extras IMPORTING iv_tabname TYPE ddobjname.37 38 ""! Serialize IDoc Segment type/definition if exits39 ""! @parameter io_xml | XML writer40 ""! @raising zcx_abapgit_exception | Exceptions41 METHODS serialize_idoc_segment IMPORTING io_xml TYPE REF TO zif_abapgit_xml_output42 RAISING zcx_abapgit_exception.43 44 ""! Deserialize IDoc Segment type/definition if exits45 ""! @parameter io_xml | XML writer46 ""! @parameter iv_package | Target package47 ""! @parameter rv_deserialized | It's a segment and was desserialized48 ""! @raising zcx_abapgit_exception | Exceptions49 METHODS deserialize_idoc_segment IMPORTING io_xml TYPE REF TO zif_abapgit_xml_input50 iv_package TYPE devclass51 RETURNING VALUE(rv_deserialized) TYPE abap_bool52 RAISING zcx_abapgit_exception.53 ""! Delete the IDoc Segment type if exists54 ""! @parameter rv_deleted | It's a segment and was deleted55 ""! @raising zcx_abapgit_exception | Exceptions56 METHODS delete_idoc_segment RETURNING VALUE(rv_deleted) TYPE abap_bool57 RAISING zcx_abapgit_exception.58 PRIVATE SECTION.59 60 TYPES:61 ty_dd03p_tt TYPE STANDARD TABLE OF dd03p .62 TYPES:63 BEGIN OF ty_dd02_text,64 ddlanguage TYPE dd02t-ddlanguage,65 ddtext TYPE dd02t-ddtext,66 END OF ty_dd02_text .67 TYPES:68 ty_dd02_texts TYPE STANDARD TABLE OF ty_dd02_text .69 70 CONSTANTS c_longtext_id_tabl TYPE dokil-id VALUE 'TB' ##NO_TEXT.71 CONSTANTS:72 BEGIN OF c_s_dataname,73 segment_definition TYPE string VALUE 'SEGMENT_DEFINITION',74 tabl_extras TYPE string VALUE 'TABL_EXTRAS',75 END OF c_s_dataname .76 77 METHODS deserialize_indexes78 IMPORTING79 !io_xml TYPE REF TO zif_abapgit_xml_input80 RAISING81 zcx_abapgit_exception .82 METHODS clear_dd03p_fields83 CHANGING84 !ct_dd03p TYPE ty_dd03p_tt .85 ""! Check if structure is an IDoc segment86 ""! @parameter rv_is_idoc_segment | It's an IDoc segment or not87 METHODS is_idoc_segment88 RETURNING89 VALUE(rv_is_idoc_segment) TYPE abap_bool .90 METHODS clear_dd03p_fields_common91 CHANGING92 !cs_dd03p TYPE dd03p .93 METHODS clear_dd03p_fields_dataelement94 CHANGING95 !cs_dd03p TYPE dd03p .96 METHODS serialize_texts97 IMPORTING98 !io_xml TYPE REF TO zif_abapgit_xml_output99 RAISING100 zcx_abapgit_exception .101 METHODS deserialize_texts102 IMPORTING103 !io_xml TYPE REF TO zif_abapgit_xml_input104 !is_dd02v TYPE dd02v105 RAISING106 zcx_abapgit_exception .107 METHODS is_db_table_category108 IMPORTING109 !iv_tabclass TYPE dd02l-tabclass110 RETURNING111 VALUE(rv_is_db_table_type) TYPE dd02l-tabclass .112ENDCLASS.113 114 115 116CLASS zcl_abapgit_object_tabl IMPLEMENTATION.117 118 119 METHOD clear_dd03p_fields.120 121 CONSTANTS lc_comptype_dataelement TYPE comptype VALUE 'E'.122 123 DATA: lv_masklen TYPE c LENGTH 4.124 125 FIELD-SYMBOLS: <ls_dd03p> TYPE dd03p.126 127* remove nested structures128 DELETE ct_dd03p WHERE depth <> '00'.129* remove fields from .INCLUDEs130 DELETE ct_dd03p WHERE adminfield <> '0'.131 132 LOOP AT ct_dd03p ASSIGNING <ls_dd03p> WHERE NOT rollname IS INITIAL.133 134 clear_dd03p_fields_common( CHANGING cs_dd03p = <ls_dd03p> ).135 136 lv_masklen = <ls_dd03p>-masklen.137 IF lv_masklen = '' OR NOT lv_masklen CO '0123456789'.138* make sure the field contains valid data, or the XML will dump139 CLEAR <ls_dd03p>-masklen.140 ENDIF.141 142 IF <ls_dd03p>-comptype = lc_comptype_dataelement.143 clear_dd03p_fields_dataelement( CHANGING cs_dd03p = <ls_dd03p> ).144 ENDIF.145 146 IF <ls_dd03p>-shlporigin = 'D'.147* search help from domain148 CLEAR: <ls_dd03p>-shlpfield,149 <ls_dd03p>-shlpname.150 ENDIF.151 152* XML output assumes correct field content153 IF <ls_dd03p>-routputlen = ' '.154 CLEAR <ls_dd03p>-routputlen.155 ENDIF.156 157 ENDLOOP.158 159 "" Clear position to avoid issues with include structures that contain different number of fields160 LOOP AT ct_dd03p ASSIGNING <ls_dd03p>.161 CLEAR: <ls_dd03p>-position, <ls_dd03p>-tabname, <ls_dd03p>-ddlanguage.162 ENDLOOP.163 164 ENDMETHOD.165 166 167 METHOD clear_dd03p_fields_common.168 169 CLEAR: cs_dd03p-ddlanguage,170 cs_dd03p-dtelmaster,171 cs_dd03p-logflag,172 cs_dd03p-ddtext,173 cs_dd03p-reservedte,174 cs_dd03p-reptext,175 cs_dd03p-scrtext_s,176 cs_dd03p-scrtext_m,177 cs_dd03p-scrtext_l.178 179 ENDMETHOD.180 181 182 METHOD clear_dd03p_fields_dataelement.183 184* type specified via data element185 CLEAR: cs_dd03p-domname,186 cs_dd03p-inttype,187 cs_dd03p-intlen,188 cs_dd03p-mask,189 cs_dd03p-memoryid,190 cs_dd03p-headlen,191 cs_dd03p-scrlen1,192 cs_dd03p-scrlen2,193 cs_dd03p-scrlen3,194 cs_dd03p-datatype,195 cs_dd03p-leng,196 cs_dd03p-outputlen,197 cs_dd03p-deffdname,198 cs_dd03p-convexit,199 cs_dd03p-entitytab,200 cs_dd03p-dommaster,201 cs_dd03p-domname3l,202 cs_dd03p-decimals,203 cs_dd03p-lowercase,204 cs_dd03p-signflag.205 206 ENDMETHOD.207 208 209 METHOD delete_extras.210 211 DELETE FROM tddat WHERE tabname = iv_tabname.212 213 ENDMETHOD.214 215 216 METHOD delete_idoc_segment.217 218 DATA lv_segment_type TYPE edilsegtyp.219 DATA lv_result LIKE sy-subrc.220 221 IF is_idoc_segment( ) = abap_false.222 rv_deleted = abap_false.223 RETURN. ""previous XML version or no IDoc segment224 ENDIF.225 226 rv_deleted = abap_true.227 lv_segment_type = ms_item-obj_name.228 229 CALL FUNCTION 'SEGMENT_DELETE'230 EXPORTING231 segmenttyp = lv_segment_type232 IMPORTING233 result = lv_result234 EXCEPTIONS235 OTHERS = 1.236 IF sy-subrc <> 0 OR lv_result <> 0.237 zcx_abapgit_exception=>raise_t100( ).238 ENDIF.239 ENDMETHOD.240 241 242 METHOD deserialize_idoc_segment.243 244 DATA lv_result LIKE sy-subrc.245 DATA lt_segment_definitions TYPE ty_segment_definitions.246 DATA lv_package TYPE devclass.247 DATA lv_uname TYPE sy-uname.248 FIELD-SYMBOLS <ls_segment_definition> TYPE ty_segment_definition.249 250 rv_deserialized = abap_false.251 252 TRY.253 254 io_xml->read( EXPORTING iv_name = c_s_dataname-segment_definition255 CHANGING cg_data = lt_segment_definitions ).256 257 CATCH zcx_abapgit_exception.258 RETURN. ""previous XML version or no IDoc segment259 ENDTRY.260 261 IF lines( lt_segment_definitions ) = 0.262 RETURN. ""no IDoc segment263 ENDIF.264 265 rv_deserialized = abap_true.266 267 lv_package = iv_package.268 269 LOOP AT lt_segment_definitions ASSIGNING <ls_segment_definition>.270 <ls_segment_definition>-segmentheader-presp = cl_abap_syst=>get_user_name( ).271 <ls_segment_definition>-segmentheader-pwork = cl_abap_syst=>get_user_name( ).272 273 CALL FUNCTION 'SEGMENT_READ'274 EXPORTING275 segmenttyp = <ls_segment_definition>-segmentheader-segtyp276 IMPORTING277 result = lv_result278 EXCEPTIONS279 OTHERS = 1.280 IF sy-subrc <> 0 OR lv_result <> 0.281 CALL FUNCTION 'SEGMENT_CREATE'282 IMPORTING283 segmentdefinition = <ls_segment_definition>-segmentdefinition284 TABLES285 segmentstructure = <ls_segment_definition>-segmentstructures286 CHANGING287 segmentheader = <ls_segment_definition>-segmentheader288 devclass = lv_package289 EXCEPTIONS290 OTHERS = 1.291 ELSE.292 293 CALL FUNCTION 'SEGMENT_MODIFY'294 CHANGING295 segmentheader = <ls_segment_definition>-segmentheader296 devclass = lv_package297 EXCEPTIONS298 OTHERS = 1.299 IF sy-subrc = 0.300 CALL FUNCTION 'SEGMENTDEFINITION_MODIFY'301 TABLES302 segmentstructure = <ls_segment_definition>-segmentstructures303 CHANGING304 segmentdefinition = <ls_segment_definition>-segmentdefinition305 EXCEPTIONS306 OTHERS = 1.307 ENDIF.308 ENDIF.309 310 IF sy-subrc <> 0.311 zcx_abapgit_exception=>raise_t100( ).312 ENDIF.313 314 ENDLOOP.315 316 lv_uname = cl_abap_syst=>get_user_name( ).317 318 CALL FUNCTION 'TR_TADIR_INTERFACE'319 EXPORTING320 wi_test_modus = abap_false321 wi_tadir_pgmid = 'R3TR'322 wi_tadir_object = ms_item-obj_type323 wi_tadir_obj_name = ms_item-obj_name324 wi_tadir_author = lv_uname325 wi_tadir_devclass = iv_package326 wi_tadir_masterlang = mv_language327 iv_set_edtflag = abap_true328 iv_delflag = abap_false329 EXCEPTIONS330 OTHERS = 1.331 IF sy-subrc <> 0.332 zcx_abapgit_exception=>raise_t100( ).333 ENDIF.334 ENDMETHOD.335 336 337 METHOD deserialize_indexes.338 339 DATA:340 lv_tname TYPE trobj_name,341 lt_dd12v TYPE dd12vtab,342 ls_dd12v LIKE LINE OF lt_dd12v,343 lt_dd17v TYPE dd17vtab,344 ls_dd17v LIKE LINE OF lt_dd17v,345 lt_secondary LIKE lt_dd17v.346 347 io_xml->read( EXPORTING iv_name = 'DD12V'348 CHANGING cg_data = lt_dd12v ).349 io_xml->read( EXPORTING iv_name = 'DD17V'350 CHANGING cg_data = lt_dd17v ).351 352 LOOP AT lt_dd12v INTO ls_dd12v.353 354* todo, call corr_insert?355 356 CLEAR lt_secondary.357 LOOP AT lt_dd17v INTO ls_dd17v358 WHERE sqltab = ls_dd12v-sqltab AND indexname = ls_dd12v-indexname.359 APPEND ls_dd17v TO lt_secondary.360 ENDLOOP.361 362 CALL FUNCTION 'DDIF_INDX_PUT'363 EXPORTING364 name = ls_dd12v-sqltab365 id = ls_dd12v-indexname366 dd12v_wa = ls_dd12v367 TABLES368 dd17v_tab = lt_secondary369 EXCEPTIONS370 indx_not_found = 1371 name_inconsistent = 2372 indx_inconsistent = 3373 put_failure = 4374 put_refused = 5375 OTHERS = 6.376 IF sy-subrc <> 0.377 zcx_abapgit_exception=>raise_t100( ).378 ENDIF.379 380 CALL FUNCTION 'DD_DD_TO_E071'381 EXPORTING382 type = 'INDX'383 name = ls_dd12v-sqltab384 id = ls_dd12v-indexname385 IMPORTING386 obj_name = lv_tname.387 388 zcl_abapgit_objects_activation=>add( iv_type = 'INDX'389 iv_name = lv_tname ).390 391 ENDLOOP.392 393 ENDMETHOD.394 395 396 METHOD deserialize_texts.397 398 DATA: lv_name TYPE ddobjname,399 ls_dd02v_tmp TYPE dd02v,400 lt_i18n_langs TYPE TABLE OF langu,401 lt_dd02_texts TYPE ty_dd02_texts.402 403 FIELD-SYMBOLS: <lv_lang> LIKE LINE OF lt_i18n_langs,404 <ls_dd02_text> LIKE LINE OF lt_dd02_texts.405 406 lv_name = ms_item-obj_name.407 408 io_xml->read( EXPORTING iv_name = 'I18N_LANGS'409 CHANGING cg_data = lt_i18n_langs ).410 411 io_xml->read( EXPORTING iv_name = 'DD02_TEXTS'412 CHANGING cg_data = lt_dd02_texts ).413 414 SORT lt_i18n_langs.415 SORT lt_dd02_texts BY ddlanguage. "" Optimization416 417 LOOP AT lt_i18n_langs ASSIGNING <lv_lang>.418 419 "" Table description420 ls_dd02v_tmp = is_dd02v.421 READ TABLE lt_dd02_texts ASSIGNING <ls_dd02_text> WITH KEY ddlanguage = <lv_lang>.422 IF sy-subrc <> 0.423 zcx_abapgit_exception=>raise( |DD02_TEXTS cannot find lang { <lv_lang> } in XML| ).424 ENDIF.425 MOVE-CORRESPONDING <ls_dd02_text> TO ls_dd02v_tmp.426 CALL FUNCTION 'DDIF_TABL_PUT'427 EXPORTING428 name = lv_name429 dd02v_wa = ls_dd02v_tmp430 EXCEPTIONS431 tabl_not_found = 1432 name_inconsistent = 2433 tabl_inconsistent = 3434 put_failure = 4435 put_refused = 5436 OTHERS = 6.437 IF sy-subrc <> 0.438 zcx_abapgit_exception=>raise_t100( ).439 ENDIF.440 ENDLOOP.441 442 ENDMETHOD.443 444 445 METHOD is_db_table_category.446 447 "" values from domain TABCLASS448 rv_is_db_table_type = boolc( iv_tabclass = 'TRANSP'449 OR iv_tabclass = 'CLUSTER'450 OR iv_tabclass = 'POOL' ).451 452 ENDMETHOD.453 454 455 METHOD is_idoc_segment.456 457 DATA lv_segment_type TYPE edilsegtyp.458 459 lv_segment_type = ms_item-obj_name.460 461 SELECT SINGLE segtyp462 FROM edisegment463 INTO lv_segment_type464 WHERE segtyp = lv_segment_type.465 rv_is_idoc_segment = boolc( sy-subrc = 0 ).466 467 ENDMETHOD.468 469 470 METHOD read_extras.471 472 SELECT SINGLE * FROM tddat INTO rs_tabl_extras-tddat WHERE tabname = iv_tabname.473 474 ENDMETHOD.475 476 477 METHOD serialize_idoc_segment.478 479 DATA lv_segment_type TYPE edilsegtyp.480 DATA lv_result LIKE sy-subrc.481 DATA lv_devclass TYPE devclass.482 DATA lt_segmentdefinitions TYPE STANDARD TABLE OF edisegmdef.483 DATA ls_segment_definition TYPE ty_segment_definition.484 DATA lt_segment_definitions TYPE ty_segment_definitions.485 FIELD-SYMBOLS: <ls_segemtndefinition> TYPE edisegmdef.486 487 IF is_idoc_segment( ) = abap_false.488 RETURN.489 ENDIF.490 491 lv_segment_type = ms_item-obj_name.492 CALL FUNCTION 'SEGMENT_READ'493 EXPORTING494 segmenttyp = lv_segment_type495 IMPORTING496 result = lv_result497 TABLES498 segmentdefinition = lt_segmentdefinitions499 EXCEPTIONS500 OTHERS = 1.501 IF sy-subrc <> 0 OR lv_result <> 0.502 zcx_abapgit_exception=>raise_t100( ).503 ENDIF.504 505 LOOP AT lt_segmentdefinitions ASSIGNING <ls_segemtndefinition>.506 CLEAR ls_segment_definition.507 CALL FUNCTION 'SEGMENTDEFINITION_READ'508 EXPORTING509 segmenttyp = <ls_segemtndefinition>-segtyp510 IMPORTING511 result = lv_result512 devclass = lv_devclass513 segmentheader = ls_segment_definition-segmentheader514 segmentdefinition = ls_segment_definition-segmentdefinition515 TABLES516 segmentstructure = ls_segment_definition-segmentstructures517 CHANGING518 version = <ls_segemtndefinition>-version519 EXCEPTIONS520 no_authority = 1521 segment_not_existing = 2522 OTHERS = 3.523 IF sy-subrc <> 0 OR lv_result <> 0.524 zcx_abapgit_exception=>raise_t100( ).525 ENDIF.526 527 zcl_abapgit_object_idoc=>clear_idoc_segement_fields(528 CHANGING cg_structure = ls_segment_definition-segmentdefinition ).529 zcl_abapgit_object_idoc=>clear_idoc_segement_fields(530 CHANGING cg_structure = ls_segment_definition-segmentheader ).531 532 APPEND ls_segment_definition TO lt_segment_definitions.533 ENDLOOP.534 535 io_xml->add( iv_name = c_s_dataname-segment_definition536 ig_data = lt_segment_definitions ).537 538 ENDMETHOD.539 540 541 METHOD serialize_texts.542 543 DATA: lv_name TYPE ddobjname,544 lv_index TYPE i,545 ls_dd02v TYPE dd02v,546 lt_dd02_texts TYPE ty_dd02_texts,547 lt_i18n_langs TYPE TABLE OF langu,548 lt_language_filter TYPE zif_abapgit_environment=>ty_system_language_filter.549 550 FIELD-SYMBOLS: <lv_lang> LIKE LINE OF lt_i18n_langs,551 <ls_dd02_text> LIKE LINE OF lt_dd02_texts.552 553 IF io_xml->i18n_params( )-main_language_only = abap_true.554 RETURN.555 ENDIF.556 557 lv_name = ms_item-obj_name.558 559 "" Collect additional languages, skip main lang - it was serialized already560 lt_language_filter = zcl_abapgit_factory=>get_environment( )->get_system_language_filter( ).561 SELECT DISTINCT ddlanguage AS langu INTO TABLE lt_i18n_langs562 FROM dd02v563 WHERE tabname = lv_name564 AND ddlanguage IN lt_language_filter565 AND ddlanguage <> mv_language. ""#EC CI_SUBRC566 567 LOOP AT lt_i18n_langs ASSIGNING <lv_lang>.568 lv_index = sy-tabix.569 CALL FUNCTION 'DDIF_TABL_GET'570 EXPORTING571 name = lv_name572 langu = <lv_lang>573 IMPORTING574 dd02v_wa = ls_dd02v575 EXCEPTIONS576 illegal_input = 1577 OTHERS = 2.578 IF sy-subrc <> 0 OR ls_dd02v-ddlanguage IS INITIAL.579 DELETE lt_i18n_langs INDEX lv_index. "" Don't save this lang580 CONTINUE.581 ENDIF.582 583 APPEND INITIAL LINE TO lt_dd02_texts ASSIGNING <ls_dd02_text>.584 MOVE-CORRESPONDING ls_dd02v TO <ls_dd02_text>.585 586 ENDLOOP.587 588 SORT lt_i18n_langs ASCENDING.589 SORT lt_dd02_texts BY ddlanguage ASCENDING.590 591 IF lines( lt_i18n_langs ) > 0.592 io_xml->add( iv_name = 'I18N_LANGS'593 ig_data = lt_i18n_langs ).594 595 io_xml->add( iv_name = 'DD02_TEXTS'596 ig_data = lt_dd02_texts ).597 ENDIF.598 599 ENDMETHOD.600 601 602 METHOD update_extras.603 604 IF is_tabl_extras-tddat IS INITIAL.605 delete_extras( iv_tabname ).606 ELSE.607 MODIFY tddat FROM is_tabl_extras-tddat.608 ENDIF.609 610 ENDMETHOD.611 612 613 METHOD zif_abapgit_object~changed_by.614 615 TYPES: BEGIN OF ty_data,616 as4user TYPE dd02l-as4user,617 as4date TYPE dd02l-as4date,618 as4time TYPE dd02l-as4time,619 END OF ty_data.620 621 DATA: lt_data TYPE STANDARD TABLE OF ty_data WITH DEFAULT KEY,622 ls_data LIKE LINE OF lt_data.623 624 625 SELECT as4user as4date as4time626 FROM dd02l INTO TABLE lt_data627 WHERE tabname = ms_item-obj_name628 AND as4local = 'A'629 AND as4vers = '0000'.630 631 SELECT as4user as4date as4time632 APPENDING TABLE lt_data633 FROM dd09l634 WHERE tabname = ms_item-obj_name635 AND as4local = 'A'636 AND as4vers = '0000'.637 638 SELECT as4user as4date as4time639 APPENDING TABLE lt_data640 FROM dd12l641 WHERE sqltab = ms_item-obj_name642 AND as4local = 'A'643 AND as4vers = '0000'.644 645 SORT lt_data BY as4date DESCENDING as4time DESCENDING.646 647 READ TABLE lt_data INDEX 1 INTO ls_data.648 IF sy-subrc = 0.649 rv_user = ls_data-as4user.650 ELSE.651 rv_user = c_user_unknown.652 ENDIF.653 654 ENDMETHOD.655 656 657 METHOD zif_abapgit_object~delete.658 659 DATA: lv_objname TYPE rsedd0-ddobjname,660 lv_no_ask TYPE abap_bool,661 lv_subrc TYPE sy-subrc,662 BEGIN OF ls_dd02l,663 tabname TYPE dd02l-tabname,664 tabclass TYPE dd02l-tabclass,665 sqltab TYPE dd02l-sqltab,666 END OF ls_dd02l.667 668 IF zif_abapgit_object~exists( ) = abap_false.669 "" Proxies e.g. delete on its own, nothing todo here then.670 RETURN.671 ENDIF.672 673 lv_objname = ms_item-obj_name.674 675 IF delete_idoc_segment( ) = abap_false.676 677 lv_no_ask = abap_true.678 SELECT SINGLE tabname tabclass sqltab FROM dd02l679 INTO CORRESPONDING FIELDS OF ls_dd02l680 WHERE tabname = ms_item-obj_name681 AND as4local = 'A'682 AND as4vers = '0000'.683 IF sy-subrc = 0 AND is_db_table_category( ls_dd02l-tabclass ) = abap_true.684 685 CALL FUNCTION 'DD_EXISTS_DATA'686 EXPORTING687 reftab = ls_dd02l-sqltab688 tabclass = ls_dd02l-tabclass689 tabname = ls_dd02l-tabname690 IMPORTING691 subrc = lv_subrc692 EXCEPTIONS693 missing_reftab = 1694 sql_error = 2695 buffer_overflow = 3696 unknown_error = 4697 OTHERS = 5.698 699 IF sy-subrc = 0 AND lv_subrc = 0.700 lv_no_ask = abap_false.701 ENDIF.702 703 ENDIF.704 705 delete_ddic( iv_objtype = 'T'706 iv_no_ask = lv_no_ask ).707 708 delete_longtexts( c_longtext_id_tabl ).709 710 delete_extras( lv_objname ).711 712 ENDIF.713 714 ENDMETHOD.715 716 717 METHOD zif_abapgit_object~deserialize.718 719 DATA: lv_name TYPE ddobjname,720 ls_dd02v TYPE dd02v,721 ls_dd09l TYPE dd09l,722 lt_dd03p TYPE TABLE OF dd03p,723 lt_dd05m TYPE TABLE OF dd05m,724 lt_dd08v TYPE TABLE OF dd08v,725 lt_dd35v TYPE TABLE OF dd35v,726 lt_dd36m TYPE dd36mttyp,727 ls_extras TYPE ty_tabl_extras.728 729 FIELD-SYMBOLS: <ls_dd03p> TYPE dd03p,730 <ls_dd05m> TYPE dd05m,731 <ls_dd08v> TYPE dd08v,732 <ls_dd35v> TYPE dd35v,733 <ls_dd36m> TYPE dd36m,734 <lg_roworcolst> TYPE any.735 736 lv_name = ms_item-obj_name. "" type conversion737 738 IF deserialize_idoc_segment( io_xml = io_xml739 iv_package = iv_package ) = abap_false.740 741 io_xml->read( EXPORTING iv_name = 'DD02V'742 CHANGING cg_data = ls_dd02v ).743 io_xml->read( EXPORTING iv_name = 'DD09L'744 CHANGING cg_data = ls_dd09l ).745 io_xml->read( EXPORTING iv_name = 'DD03P_TABLE'746 CHANGING cg_data = lt_dd03p ).747 ASSIGN COMPONENT 'ROWORCOLST' OF STRUCTURE ls_dd09l TO <lg_roworcolst>.748 IF sy-subrc = 0 AND <lg_roworcolst> IS INITIAL.749 <lg_roworcolst> = 'C'. ""Reverse fix from serialize750 ENDIF.751 752 "" Number fields sequentially and fill table name753 LOOP AT lt_dd03p ASSIGNING <ls_dd03p>.754 <ls_dd03p>-position = sy-tabix.755 <ls_dd03p>-tabname = lv_name.756 <ls_dd03p>-ddlanguage = mv_language.757 ENDLOOP.758 759 io_xml->read( EXPORTING iv_name = 'DD05M_TABLE'760 CHANGING cg_data = lt_dd05m ).761 io_xml->read( EXPORTING iv_name = 'DD08V_TABLE'762 CHANGING cg_data = lt_dd08v ).763 io_xml->read( EXPORTING iv_name = 'DD35V_TALE'764 CHANGING cg_data = lt_dd35v ).765 io_xml->read( EXPORTING iv_name = 'DD36M'766 CHANGING cg_data = lt_dd36m ).767 768 LOOP AT lt_dd05m ASSIGNING <ls_dd05m>.769 <ls_dd05m>-tabname = lv_name.770 ENDLOOP.771 LOOP AT lt_dd08v ASSIGNING <ls_dd08v>.772 <ls_dd08v>-tabname = lv_name.773 <ls_dd08v>-ddlanguage = mv_language.774 ENDLOOP.775 LOOP AT lt_dd35v ASSIGNING <ls_dd35v>.776 <ls_dd35v>-tabname = lv_name.777 ENDLOOP.778 LOOP AT lt_dd36m ASSIGNING <ls_dd36m>.779 <ls_dd36m>-tabname = lv_name.780 ENDLOOP.781 782 "" DDIC Step: Remove references to search helps and foreign keys783 IF iv_step = zif_abapgit_object=>gc_step_id-ddic.784 CLEAR: lt_dd08v, lt_dd35v, lt_dd36m.785 ENDIF.786 787 IF iv_step = zif_abapgit_object=>gc_step_id-late788 AND lines( lt_dd35v ) = 0 AND lines( lt_dd08v ) = 0.789 RETURN. "" already active790 ENDIF.791 792 corr_insert( iv_package = iv_package793 ig_object_class = 'DICT' ).794 795 CALL FUNCTION 'DD_TABL_EXPAND'796 EXPORTING797 dd02v_wa = ls_dd02v798 TABLES799 dd03p_tab = lt_dd03p800 dd05m_tab = lt_dd05m801 dd08v_tab = lt_dd08v802 dd35v_tab = lt_dd35v803 dd36m_tab = lt_dd36m804 EXCEPTIONS805 illegal_parameter = 1806 OTHERS = 2.807 IF sy-subrc <> 0.808 zcx_abapgit_exception=>raise_t100( ).809 ENDIF.810 811 CALL FUNCTION 'DDIF_TABL_PUT'812 EXPORTING813 name = lv_name814 dd02v_wa = ls_dd02v815 dd09l_wa = ls_dd09l816 TABLES817 dd03p_tab = lt_dd03p818 dd05m_tab = lt_dd05m819 dd08v_tab = lt_dd08v820 dd35v_tab = lt_dd35v821 dd36m_tab = lt_dd36m822 EXCEPTIONS823 tabl_not_found = 1824 name_inconsistent = 2825 tabl_inconsistent = 3826 put_failure = 4827 put_refused = 5828 OTHERS = 6.829 IF sy-subrc <> 0.830 zcx_abapgit_exception=>raise_t100( ).831 ENDIF.832 833 zcl_abapgit_objects_activation=>add_item( ms_item ).834 835 deserialize_indexes( io_xml ).836 837 deserialize_texts( io_xml = io_xml838 is_dd02v = ls_dd02v ).839 840 deserialize_longtexts( io_xml ).841 842 io_xml->read( EXPORTING iv_name = c_s_dataname-tabl_extras843 CHANGING cg_data = ls_extras ).844 update_extras( iv_tabname = lv_name845 is_tabl_extras = ls_extras ).846 847 ENDIF.848 849 ENDMETHOD.850 851 852 METHOD zif_abapgit_object~exists.853 854 DATA: lv_tabname TYPE dd02l-tabname.855 856 lv_tabname = ms_item-obj_name.857 858 "" Check nametab because it's fast859 CALL FUNCTION 'DD_GET_NAMETAB_HEADER'860 EXPORTING861 tabname = lv_tabname862 EXCEPTIONS863 not_found = 1864 OTHERS = 2.865 IF sy-subrc <> 0.866 "" Check for new, inactive, or modified versions that might not be in nametab867 SELECT SINGLE tabname FROM dd02l INTO lv_tabname868 WHERE tabname = lv_tabname.869 ENDIF.870 rv_bool = boolc( sy-subrc = 0 ).871 872 ENDMETHOD.873 874 875 METHOD zif_abapgit_object~get_comparator.876 877 DATA: li_local_version_output TYPE REF TO zif_abapgit_xml_output,878 li_local_version_input TYPE REF TO zif_abapgit_xml_input.879 880 881 CREATE OBJECT li_local_version_output TYPE zcl_abapgit_xml_output.882 883 zif_abapgit_object~serialize( li_local_version_output ).884 885 CREATE OBJECT li_local_version_input886 TYPE zcl_abapgit_xml_input887 EXPORTING888 iv_xml = li_local_version_output->render( ).889 890 CREATE OBJECT ri_comparator TYPE zcl_abapgit_object_tabl_compar891 EXPORTING892 ii_local = li_local_version_input.893 894 ENDMETHOD.895 896 897 METHOD zif_abapgit_object~get_deserialize_steps.898 APPEND zif_abapgit_object=>gc_step_id-ddic TO rt_steps.899 APPEND zif_abapgit_object=>gc_step_id-late TO rt_steps.900 ENDMETHOD.901 902 903 METHOD zif_abapgit_object~get_metadata.904 rs_metadata = get_metadata( ).905 ENDMETHOD.906 907 908 METHOD zif_abapgit_object~is_active.909 rv_active = is_active( ).910 ENDMETHOD.911 912 913 METHOD zif_abapgit_object~is_locked.914 915 rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'ESDICT'916 iv_argument = |{ ms_item-obj_type }{ ms_item-obj_name }| ).917 918 ENDMETHOD.919 920 921 METHOD zif_abapgit_object~jump.922 "" Covered by ZCL_ABAPGIT_OBJECT=>JUMP923 ENDMETHOD.924 925 926 METHOD zif_abapgit_object~serialize.927 928 DATA: lv_name TYPE ddobjname,929 lv_state TYPE ddgotstate,930 ls_dd02v TYPE dd02v,931 ls_dd09l TYPE dd09l,932 lt_dd03p TYPE ty_dd03p_tt,933 lt_dd05m TYPE TABLE OF dd05m,934 lt_dd08v TYPE TABLE OF dd08v,935 lt_dd12v TYPE dd12vtab,936 lt_dd17v TYPE dd17vtab,937 lt_dd35v TYPE TABLE OF dd35v,938 lv_index LIKE sy-index,939 lt_dd36m TYPE dd36mttyp,940 ls_extras TYPE ty_tabl_extras.941 942 FIELD-SYMBOLS: <ls_dd12v> LIKE LINE OF lt_dd12v,943 <ls_dd05m> LIKE LINE OF lt_dd05m,944 <ls_dd08v> LIKE LINE OF lt_dd08v,945 <ls_dd35v> LIKE LINE OF lt_dd35v,946 <ls_dd36m> LIKE LINE OF lt_dd36m,947 <lg_roworcolst> TYPE any.948 949 lv_name = ms_item-obj_name.950 951 CALL FUNCTION 'DDIF_TABL_GET'952 EXPORTING953 name = lv_name954 langu = mv_language955 IMPORTING956 gotstate = lv_state957 dd02v_wa = ls_dd02v958 dd09l_wa = ls_dd09l959 TABLES960 dd03p_tab = lt_dd03p961 dd05m_tab = lt_dd05m962 dd08v_tab = lt_dd08v963 dd12v_tab = lt_dd12v964 dd17v_tab = lt_dd17v965 dd35v_tab = lt_dd35v966 dd36m_tab = lt_dd36m967 EXCEPTIONS968 illegal_input = 1969 OTHERS = 2.970 IF sy-subrc <> 0.971 zcx_abapgit_exception=>raise( 'error from DDIF_TABL_GET' ).972 ENDIF.973 974 "" Check if any active version was returned975 IF lv_state <> 'A'.976 RETURN.977 ENDIF.978 979 CLEAR: ls_dd02v-as4user,980 ls_dd02v-as4date,981 ls_dd02v-as4time.982 983* reset numeric field, so XML does not crash984 IF ls_dd02v-prozpuff = ''.985 CLEAR ls_dd02v-prozpuff.986 ENDIF.987 IF ls_dd02v-datmin = ''.988 CLEAR ls_dd02v-datmin.989 ENDIF.990 IF ls_dd02v-datmax = ''.991 CLEAR ls_dd02v-datmax.992 ENDIF.993 IF ls_dd02v-datavg = ''.994 CLEAR ls_dd02v-datavg.995 ENDIF.996 997 CLEAR: ls_dd09l-as4user,998 ls_dd09l-as4date,999 ls_dd09l-as4time.1000 1001 ASSIGN COMPONENT 'ROWORCOLST' OF STRUCTURE ls_dd09l TO <lg_roworcolst>.1002 IF sy-subrc = 0 AND <lg_roworcolst> = 'C'.1003 CLEAR <lg_roworcolst>. ""To avoid diff errors. This field doesn't exists in all releases1004 ENDIF.1005 1006 1007 LOOP AT lt_dd12v ASSIGNING <ls_dd12v>.1008 CLEAR: <ls_dd12v>-as4user,1009 <ls_dd12v>-as4date,1010 <ls_dd12v>-as4time,1011 <ls_dd12v>-dbindex.1012 ENDLOOP.1013 1014 clear_dd03p_fields( CHANGING ct_dd03p = lt_dd03p ).1015 1016* remove foreign keys inherited from .INCLUDEs1017 DELETE lt_dd08v WHERE noinherit = 'N'.1018 LOOP AT lt_dd05m ASSIGNING <ls_dd05m>.1019 CLEAR <ls_dd05m>-tabname.1020 CLEAR <ls_dd05m>-leng.1021 lv_index = sy-tabix.1022 READ TABLE lt_dd08v WITH KEY fieldname = <ls_dd05m>-fieldname TRANSPORTING NO FIELDS.1023 IF sy-subrc <> 0.1024 DELETE lt_dd05m INDEX lv_index.1025 ENDIF.1026 ENDLOOP.1027 1028 LOOP AT lt_dd08v ASSIGNING <ls_dd08v>.1029 CLEAR: <ls_dd08v>-tabname, <ls_dd08v>-ddlanguage.1030 ENDLOOP.1031 LOOP AT lt_dd35v ASSIGNING <ls_dd35v>.1032 CLEAR <ls_dd35v>-tabname.1033 ENDLOOP.1034 1035* remove inherited search helps1036 DELETE lt_dd35v WHERE shlpinher = abap_true.1037 LOOP AT lt_dd36m ASSIGNING <ls_dd36m>.1038 CLEAR <ls_dd36m>-tabname.1039 lv_index = sy-tabix.1040 READ TABLE lt_dd35v WITH KEY fieldname = <ls_dd36m>-fieldname TRANSPORTING NO FIELDS.1041 IF sy-subrc <> 0.1042 DELETE lt_dd36m INDEX lv_index.1043 ENDIF.1044 ENDLOOP.1045 1046 io_xml->add( iv_name = 'DD02V'1047 ig_data = ls_dd02v ).1048 IF NOT ls_dd09l IS INITIAL.1049 io_xml->add( iv_name = 'DD09L'1050 ig_data = ls_dd09l ).1051 ENDIF.1052 io_xml->add( iv_name = 'DD03P_TABLE'1053 ig_data = lt_dd03p ).1054 io_xml->add( iv_name = 'DD05M_TABLE'1055 ig_data = lt_dd05m ).1056 io_xml->add( iv_name = 'DD08V_TABLE'1057 ig_data = lt_dd08v ).1058 io_xml->add( iv_name = 'DD12V'1059 ig_data = lt_dd12v ).1060 io_xml->add( iv_name = 'DD17V'1061 ig_data = lt_dd17v ).1062 io_xml->add( iv_name = 'DD35V_TALE'1063 ig_data = lt_dd35v ).1064 io_xml->add( iv_name = 'DD36M'1065 ig_data = lt_dd36m ).1066 1067 serialize_texts( io_xml ).1068 1069 serialize_longtexts( ii_xml = io_xml1070 iv_longtext_id = c_longtext_id_tabl ).1071 1072 serialize_idoc_segment( io_xml ).1073 1074 ls_extras = read_extras( lv_name ).1075 io_xml->add( iv_name = c_s_dataname-tabl_extras1076 ig_data = ls_extras ).1077 1078 ENDMETHOD.1079ENDCLASS.1080",9115,False,2060.4205012934003,median1081"CLASS zcl_bw_trfn_tester DEFINITION1082 PUBLIC1083 CREATE PUBLIC .1084 1085 PUBLIC SECTION.1086 1087 ""! <p class=""shorttext synchronized"" lang=""en""></p>1088 ""! Create global DDIC Tables if not exists1089 CLASS-METHODS create_global_ddic.1090 1091 ""! <p class=""shorttext synchronized"" lang=""en""></p>1092 ""!1093 ""! @parameter pa_trfnid | <p class=""shorttext synchronized"" lang=""en"">Transformation ID</p>1094 ""! @raising zcx_bw_trfn_tester | <p class=""shorttext synchronized"" lang=""en"">Invalid TRFN ID</p>1095 METHODS constructor1096 IMPORTING iv_strfn TYPE sobj_name1097 iv_ttrfn TYPE sobj_name1098 RAISING zcx_bw_trfn_tester.1099 1100 ""! <p class=""shorttext synchronized"" lang=""en""></p>1101 ""! Calculate program ID based on TRFN ID1102 ""! @parameter rv_progid | <p class=""shorttext synchronized"" lang=""en""></p>1103 METHODS caluclate_program_id1104 RETURNING VALUE(rv_progid) TYPE string.1105 1106 ""! <p class=""shorttext synchronized"" lang=""en""></p>1107 ""! Test new scenario - input->calculation->compare result with provided result data1108 ""! @parameter ir_source_user_table | <p class=""shorttext synchronized"" lang=""en"">Source table to compare</p>1109 ""! @parameter ir_result_user_table | <p class=""shorttext synchronized"" lang=""en"">Result table to compare</p>1110 METHODS test_new_scenario1111 IMPORTING iv_source_ddic_table TYPE string OPTIONAL1112 iv_result_ddic_table TYPE string OPTIONAL1113 ir_source_user_table TYPE REF TO data OPTIONAL1114 ir_result_user_table TYPE REF TO data OPTIONAL.1115 1116 1117 ""! <p class=""shorttext synchronized"" lang=""en""></p>1118 ""! Get data from DDIC table name1119 ""! @parameter iv_table_name | <p class=""shorttext synchronized"" lang=""en"">DDIC Table name</p>1120 ""! @parameter et_table | <p class=""shorttext synchronized"" lang=""en"">Table data</p>1121 METHODS get_data_from_table1122 IMPORTING iv_table_name TYPE string1123 EXPORTING et_table TYPE ANY TABLE.1124 1125 ""! <p class=""shorttext synchronized"" lang=""en""></p>1126 ""!1127 ""! @parameter rr_log | <p class=""shorttext synchronized"" lang=""en"">Log reference</p>1128 METHODS create_log1129 RETURNING VALUE(rr_log) TYPE REF TO cl_rsbm_log_cursor_step_dtp.1130 1131 ""! <p class=""shorttext synchronized"" lang=""en""></p>1132 ""!1133 ""! @parameter iv_source_ddic_table | <p class=""shorttext synchronized"" lang=""en"">DDIC source table name</p>1134 ""! @parameter iv_result_ddic_table | <p class=""shorttext synchronized"" lang=""en"">DDIC result table name</p>1135 ""! @parameter er_src_str_trfn | <p class=""shorttext synchronized"" lang=""en"">Source TRFN structure</p>1136 ""! @parameter er_res_str_trfn | <p class=""shorttext synchronized"" lang=""en"">Result TRFN structure</p>1137 ""! @parameter er_src_tab_trfn | <p class=""shorttext synchronized"" lang=""en"">Source TRFN table</p>1138 ""! @parameter er_source_table | <p class=""shorttext synchronized"" lang=""en"">User source table</p>1139 ""! @parameter er_result_table | <p class=""shorttext synchronized"" lang=""en"">User result table to compare</p>1140 METHODS create_data_references1141 IMPORTING iv_source_ddic_table TYPE string1142 iv_result_ddic_table TYPE string1143 EXPORTING er_src_str_trfn TYPE REF TO data1144 er_res_str_trfn TYPE REF TO data1145 er_src_tab_trfn TYPE REF TO data1146 er_source_table TYPE REF TO data1147 er_result_table TYPE REF TO data.1148 1149 ""! <p class=""shorttext synchronized"" lang=""en""></p>1150 ""!1151 ""! @parameter ir_trfn_result | <p class=""shorttext synchronized"" lang=""en"">TRFN result data</p>1152 ""! @parameter ir_user_result | <p class=""shorttext synchronized"" lang=""en"">User result data</p>1153 ""! @parameter iv_user_table_name | <p class=""shorttext synchronized"" lang=""en"">User result DDIC table name</p>1154 METHODS compare_trfn_to_user_table1155 IMPORTING ir_trfn_result TYPE REF TO cl_rsbk_data_segment1156 ir_user_result TYPE REF TO data1157 iv_user_table_name TYPE string.1158 1159 ""! <p class=""shorttext synchronized"" lang=""en""></p>1160 ""! Create type based on basic description1161 ""! @parameter iv_intype | <p class=""shorttext synchronized"" lang=""en""></p>1162 ""! @parameter iv_leng | <p class=""shorttext synchronized"" lang=""en""></p>1163 ""! @parameter iv_decim | <p class=""shorttext synchronized"" lang=""en""></p>1164 ""! @parameter rv_type | <p class=""shorttext synchronized"" lang=""en""></p>1165 CLASS-METHODS create_type1166 IMPORTING iv_intype TYPE string1167 iv_leng TYPE ddleng1168 iv_decim TYPE decimals1169 RETURNING VALUE(rv_type) TYPE REF TO cl_abap_datadescr.1170 1171 1172 PROTECTED SECTION.1173 1174 DATA: gv_trfnid TYPE rstranid,1175 gv_dtp TYPE rsbkdtpnm.1176 1177 PRIVATE SECTION.1178ENDCLASS.1179 1180 1181CLASS zcl_bw_trfn_tester IMPLEMENTATION.1182 1183 1184 METHOD constructor.1185 1186 SELECT SINGLE tranid1187 FROM rstran1188 INTO @DATA(lv_trfn_id)1189 WHERE sourcename = @iv_strfn1190 AND targetname = @iv_ttrfn1191 AND objvers = 'A'1192 AND objstat = 'ACT'.1193 1194 IF sy-subrc = 0.1195 gv_trfnid = lv_trfn_id.1196 ELSE.1197 RAISE EXCEPTION TYPE zcx_bw_trfn_tester.1198 ENDIF.1199 1200 SELECT SINGLE dtp