NOTE_1741024

Embed Size (px)

Citation preview

  • 7/22/2019 NOTE_1741024

    1/70

    *&---------------------------------------------------------------------**& Report NOTE_1741024*&*&---------------------------------------------------------------------**&*&*&---------------------------------------------------------------------*

    REPORT NOTE_1741024.

    TYPE-POOLS: seox, seoc, seok, seex, bcwbn.

    TYPES: t_switch_id TYPE char30, "sfw_switch_id does not exist in SAP_BASIS 640 t_bfunction TYPE char30, "sfw_bfunction does not exist in SAP_BASIS 640 BEGIN OF t_bf_sw, "sfw_bf_sw switch_id TYPE t_switch_id, version, bfunction TYPE t_bfunction, no_check, END OF t_bf_sw. TYPES: tt_dd17v TYPE TABLE OF dd17v, tt_dd30v TYPE TABLE OF dd30v,

    tt_dd30tv TYPE TABLE OF dd30tv, tt_dd31v TYPE TABLE OF dd31v, tt_dd32v TYPE TABLE OF dd32v, tt_dd32p TYPE TABLE OF dd32p, tt_dd33v TYPE TABLE OF dd33v, tt_dd36m TYPE TABLE OF dd36m, tt_dd42v TYPE TABLE OF dd42v, tt_langu TYPE TABLE OF sylangu, tt_sta TYPE TABLE OF rsmpe_stat, tt_fun TYPE TABLE OF rsmpe_funt, tt_men TYPE TABLE OF rsmpe_men, tt_mtx TYPE TABLE OF rsmpe_mnlt, tt_act TYPE TABLE OF rsmpe_act,

    tt_but TYPE TABLE OF rsmpe_but, tt_pfk TYPE TABLE OF rsmpe_pfk, tt_set TYPE TABLE OF rsmpe_staf, tt_doc TYPE TABLE OF rsmpe_atrt, tt_tit TYPE TABLE OF rsmpe_titt, tt_biv TYPE TABLE OF rsmpe_buts.

    DATA: gr_domname TYPE RANGE OF domname, gr_rollname TYPE RANGE OF rollname, gr_tabname TYPE RANGE OF tabname, gr_indexes TYPE RANGE OF trobj_name, gr_indxtab TYPE RANGE OF tabname, gr_indxname TYPE RANGE OF indexid,

    gr_shlpname TYPE RANGE OF shlpname, gr_viewname TYPE RANGE OF viewname, gr_tabtname TYPE RANGE OF ttypename, gr_guistatus TYPE RANGE OF progname, gr_switchname TYPE RANGE OF t_switch_id, gv_trkorr TYPE trkorr, gv_translation, gv_log_handle TYPE balloghndl, gv_msgxtra_txt(100) TYPE c.

  • 7/22/2019 NOTE_1741024

    2/70

    CONSTANTS: c_bal_object TYPE balobj_d VALUE 'SNOTE', c_bal_subobj TYPE balsubobj VALUE space, c_bal_context TYPE tabname VALUE 'ADIR_KEY', c_include TYPE fieldname VALUE '.INCLUDE'.

    PARAMETERS: testrun RADIOBUTTON GROUP mode DEFAULT 'X' MODIF ID lcl, update RADIOBUTTON GROUP mode MODIF ID lcl, showlogs RADIOBUTTON GROUP mode MODIF ID lcl.

    *----------------------------------------------------------------------** CLASS lcl_wb DEFINITION*----------------------------------------------------------------------*CLASS lcl_wb DEFINITION. PUBLIC SECTION.

    CLASS-METHODS init IMPORTING i_note TYPE clike OPTIONAL "note which indicates that reportis not needed anymore i_trkorr_list TYPE string OPTIONAL "list of support packages which indicates that report is not needed anymore i_cinst TYPE cwbcialeid OPTIONAL "correction instruction which describes the validity of the report i_component TYPE dlvunit OPTIONAL "software component without which

    report makes no sense EXCEPTIONS stop_processing.

    CLASS-METHODS get_object_text IMPORTING i_object TYPE e071-object "e.g. TABD i_obj_name TYPE c OPTIONAL "for DOCU RETURNING VALUE(r_text) TYPE string.

    CLASS-METHODS create_package IMPORTING i_devclass TYPE devclass

    i_langu TYPE sylangu DEFAULT 'E' i_ctext TYPE as4text i_dlvunit TYPE dlvunit i_parentcl TYPE packparent "super package i_pdevclass TYPE tdevc-pdevclass "transport layer i_comp_posid TYPE akhkompo i_tpclass TYPE tpclass i_srv_check TYPE srv_check EXCEPTIONS package_not_created.

    CLASS-METHODS create_switch "SFW1 IMPORTING

    i_switch TYPE t_switch_id i_devclass TYPE devclass i_langu TYPE sylangu DEFAULT 'E' i_text TYPE string OPTIONAL i_bfunction TYPE t_bfunction OPTIONAL.

    CLASS-METHODS create_doma IMPORTING i_domname TYPE domname i_datatype TYPE dd01v-datatype OPTIONAL

  • 7/22/2019 NOTE_1741024

    3/70

    i_leng TYPE dd01v-leng OPTIONAL i_outputlen TYPE dd01v-outputlen OPTIONAL i_convexit TYPE dd01v-convexit OPTIONAL i_appendname TYPE domname OPTIONAL "appendname not known in all releases i_devclass TYPE devclass i_langu TYPE sylangu OPTIONAL i_ddtext TYPE ddtext OPTIONAL i_domvalue TYPE dd07v-domvalue_l OPTIONAL i_valpos TYPE dd07v-valpos OPTIONAL i_valtext TYPE dd07v-ddtext OPTIONAL.

    CLASS-METHODS create_dtel IMPORTING i_rollname TYPE rollname i_domname TYPE domname i_datatype TYPE dd04v-domname OPTIONAL "only needed if domain is initial i_decimals TYPE dd04v-decimals OPTIONAL "only needed if rollname is initial i_leng TYPE dd04v-leng OPTIONAL "only needed if domain is initial i_devclass TYPE devclass i_logflag TYPE logflag DEFAULT 'X'

    i_headlen TYPE dd04v-headlen OPTIONAL "defaulted with fieldlen i_scrlen1 TYPE dd04v-scrlen1 DEFAULT 10 i_scrlen2 TYPE dd04v-scrlen2 DEFAULT 15 i_scrlen3 TYPE dd04v-scrlen3 DEFAULT 20 i_langu TYPE sylangu i_ddtext TYPE ddtext i_reptext TYPE reptext OPTIONAL i_scrtext_m TYPE scrtext_m i_scrtext_l TYPE scrtext_l i_scrtext_s TYPE scrtext_s i_shlpname TYPE shlpname OPTIONAL i_shlpfield TYPE shlpfield OPTIONAL i_deffdname TYPE deffdname OPTIONAL.

    CLASS-METHODS create_search_help IMPORTING i_shlpname TYPE ddobjname i_langu TYPE sylangu DEFAULT 'E' "Default EN i_ddtext TYPE ddtext OPTIONAL i_devclass TYPE devclass i_issimple TYPE dd30v-issimple DEFAULT 'X' i_elemexi TYPE dd30v-elemexi OPTIONAL i_nofields TYPE dd30v-nofields OPTIONAL i_attachexi TYPE dd30v-attachexi OPTIONAL i_selmethod TYPE dd30v-selmethod i_selmtype TYPE dd30v-selmtype DEFAULT 'T'

    i_texttab TYPE dd30v-texttab i_selmexit TYPE dd30v-selmexit OPTIONAL "name of function module i_function_group TYPE tlibg-area OPTIONAL "name of function groupfor new selmexit i_hotkey TYPE dd30v-hotkey OPTIONAL i_dialogtype TYPE dd30v-dialogtype DEFAULT 'D' it_dd31v TYPE tt_dd31v it_dd33v TYPE tt_dd33v it_dd32p TYPE tt_dd32p.

  • 7/22/2019 NOTE_1741024

    4/70

    CLASS-METHODS create_table_type "create or change table without sorting IMPORTING i_typename TYPE dd40v-typename i_rowtype TYPE dd40v-rowtype i_accessmode TYPE dd40v-accessmode DEFAULT 'T' i_keydef TYPE dd40v-keydef DEFAULT 'D' i_keykind TYPE dd40v-keykind DEFAULT 'N' it_dd42v TYPE tt_dd42v OPTIONAL "only needed for sorted tables i_langu TYPE sylangu DEFAULT 'E' "Default EN i_devclass TYPE devclass OPTIONAL "only needed for new table type i_ddtext TYPE ddtext OPTIONAL. "only needed for new table type

    CLASS-METHODS create_table "or structure or append IMPORTING i_tabname TYPE tabname i_devclass TYPE devclass i_exclass TYPE dd02v-exclass OPTIONAL i_langu TYPE sylangu DEFAULT 'E' "Default EN i_ddtext TYPE ddtext OPTIONAL "can be taken from tabname i_tabclass TYPE tabclass DEFAULT 'INTTAB'

    i_sqltab TYPE sqlappdtab OPTIONAL. CLASS-METHODS add_field_to_table IMPORTING i_tabname TYPE tabname i_keyflag TYPE keyflag DEFAULT space i_fieldname TYPE fieldname i_rollname TYPE rollname i_datatype TYPE dd03p-datatype OPTIONAL "only needed if rollname is initial i_decimals TYPE dd03p-decimals OPTIONAL "only needed if rollname is initial i_leng TYPE dd03p-leng OPTIONAL "only needed if rollname is in

    itial i_reftable TYPE dd03p-reftable OPTIONAL i_reffield TYPE dd03p-reffield OPTIONAL i_groupname TYPE ddgroup OPTIONAL i_context TYPE fieldname OPTIONAL. "leave blank if field shall be appended at end

    CLASS-METHODS add_shlp_to_table IMPORTING i_tabname TYPE tabname i_fieldname TYPE fieldname it_dd36m TYPE tt_dd36m.

    CLASS-METHODS add_field_to_view IMPORTING i_viewname TYPE viewname i_viewfield TYPE viewfield OPTIONAL "omit if same like fieldname i_tabname TYPE tabname i_fieldname TYPE fieldname i_rollname TYPE rollname OPTIONAL "can be taken from tabfield i_context TYPE fieldname OPTIONAL. "leave blank if field shall be appended at end

  • 7/22/2019 NOTE_1741024

    5/70

    CLASS-METHODS regenerate_maint_view "SE54 IMPORTING i_viewname TYPE viewname.

    CLASS-METHODS create_message_class IMPORTING i_devclass TYPE devclass i_msgid TYPE msgid i_langu TYPE sylangu DEFAULT 'E' "Default EN i_text TYPE natxt.

    CLASS-METHODS create_message IMPORTING i_msgid TYPE msgid i_msgno TYPE msgno i_langu TYPE sylangu DEFAULT 'E' "Default EN i_text TYPE natxt i_selfdef TYPE doku_selfd DEFAULT 'X'.

    CLASS-METHODS create_dtel_docu IMPORTING i_rollname TYPE rollname i_langu TYPE sylangu DEFAULT 'E' "Default EN i_line TYPE string OPTIONAL. "all lines get collected until i_line

    is omitted CLASS-METHODS create_mess_docu IMPORTING i_msgid TYPE msgid i_msgno TYPE msgno i_langu TYPE sylangu DEFAULT 'E' "Default EN i_line TYPE string OPTIONAL. "all lines get collected until i_lineis omitted

    CLASS-METHODS create_other_docu IMPORTING i_docname TYPE doku_obj "e.g. TXCDESK_PARAM, where TX represent

    s general text i_langu TYPE sylangu DEFAULT 'E' "Default EN i_line TYPE string OPTIONAL. "all lines get collected until i_lineis omitted

    CLASS-METHODS create_function_group IMPORTING i_area TYPE tlibg-area i_devclass TYPE devclass i_langu TYPE sylangu DEFAULT 'E' i_text TYPE tlibt-areat OPTIONAL.

    CLASS-METHODS create_program_text

    IMPORTING i_progname TYPE progname i_langu TYPE sylangu DEFAULT 'E' "Default EN i_id TYPE textpool-id DEFAULT 'I' "I = Text element, S = Selection Text, R = Title i_key TYPE textpool-key "space for title i_text TYPE textpool-entry i_length TYPE textpool-length OPTIONAL. "can be defaulted from length of text

  • 7/22/2019 NOTE_1741024

    6/70

    CLASS-METHODS create_user_interface IMPORTING i_progname TYPE program i_devclass TYPE devclass OPTIONAL it_sta TYPE tt_sta it_men TYPE tt_men it_act TYPE tt_act it_but TYPE tt_but it_pfk TYPE tt_pfk it_biv TYPE tt_biv it_set TYPE tt_set i_langu TYPE sylangu DEFAULT 'E' it_fun TYPE tt_fun it_mtx TYPE tt_mtx it_doc TYPE tt_doc it_tit TYPE tt_tit. CLASS-METHODS create_index IMPORTING i_devclass TYPE devclass i_tabname TYPE tabname i_indexname TYPE indexid i_text TYPE ddtext OPTIONAL i_langu TYPE sylangu DEFAULT 'E' i_isextind TYPE xfeld OPTIONAL

    it_fields TYPE tt_dd17v. CLASS-METHODS modify_stcs IMPORTING i_devclass TYPE devclass i_langu TYPE sylangu DEFAULT 'E' "Default EN VALUE(is_hdr) TYPE any it_hdt TYPE ANY TABLE it_tsk TYPE ANY TABLE.

    CLASS-METHODS add_to_transport IMPORTING i_object TYPE e071-object "TABD i_obj_name TYPE c

    i_devclass TYPE devclass OPTIONAL i_langu TYPE sylangu OPTIONAL EXCEPTIONS error simulation.

    CLASS-METHODS activate IMPORTING i_result_auth_check TYPE sysubrc OPTIONAL.

    CLASS-METHODS log_message.

    CLASS-METHODS display_log.

    CLASS-METHODS set_context IMPORTING i_object TYPE e071-object i_obj_name TYPE c i_obj_name2 TYPE c OPTIONAL i_text TYPE c OPTIONAL.

    CLASS-METHODS support_pack_applied IMPORTING i_trkorr_list TYPE string RETURNING VALUE(r_applied) TYPE xfeld.

  • 7/22/2019 NOTE_1741024

    7/70

    CLASS-METHODS software_comp_applied IMPORTING i_component TYPE dlvunit EXPORTING e_cvers TYPE cvers EXCEPTIONS not_applied.

    CLASS-METHODS write_msg_to_log IMPORTING i_object TYPE e071-object "TABD i_obj_name TYPE c i_mode TYPE c "added, not added, exist already i_tkorr TYPE trkorr OPTIONAL i_langu TYPE sylangu OPTIONAL i_extra TYPE c OPTIONAL.

    ENDCLASS. "lcl_dcm_to_po_bridge DEFINITION*----------------------------------------------------------------------** CLASS lcl_dcm_to_po_bridge IMPLEMENTATION*----------------------------------------------------------------------*CLASS lcl_wb IMPLEMENTATION.

    METHOD init.

    IF showlogs IS NOT INITIAL. CALL METHOD display_log. LEAVE PROGRAM.

    ENDIF. DATA: ls_log TYPE bal_s_log. "prepare application log ls_log-object = c_bal_object. ls_log-subobject = c_bal_subobj. ls_log-extnumber = sy-repid. ls_log-aldate = sy-datum. ls_log-altime = sy-uzeit. ls_log-aluser = sy-uname. ls_log-alprog = sy-repid. ls_log-altcode = sy-tcode. "create standard application log handle

    CALL FUNCTION 'BAL_LOG_CREATE' EXPORTING i_s_log = ls_log IMPORTING e_log_handle = gv_log_handle EXCEPTIONS log_header_inconsistent = 1 OTHERS = 2. IF sy-subrc 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF.

    CALL METHOD set_context EXPORTING i_object = space i_obj_name = space.

    "check software component and SP level DATA: ls_cvers TYPE cvers, l_applied TYPE xfeld, l_line(255). IF i_component IS SUPPLIED.

  • 7/22/2019 NOTE_1741024

    8/70

    CALL METHOD software_comp_applied "#EC * EXPORTING i_component = i_component IMPORTING e_cvers = ls_cvers EXCEPTIONS not_applied = 1 OTHERS = 2. IF sy-subrc IS NOT INITIAL. MESSAGE e319(01) WITH 'Software Component' i_component 'not installed! Execution stopped!' INTO sy-lisel. "#EC * CALL METHOD lcl_wb=>log_message. CALL METHOD lcl_wb=>display_log. RAISE stop_processing. ELSE. "further check if possible IF i_trkorr_list IS SUPPLIED. CALL METHOD support_pack_applied EXPORTING i_trkorr_list = i_trkorr_list RECEIVING r_applied = l_applied. IF l_applied EQ 'X'.

    CONCATENATE i_component '/' ls_cvers-extrelease INTO l_line. MESSAGE e319(01) WITH 'The system contains software component/support pack level' l_line '. Report execution not required anymore.' INTO sy-lisel. "#EC * CALL METHOD lcl_wb=>log_message. CALL METHOD lcl_wb=>display_log. RAISE stop_processing. ENDIF. ENDIF. ENDIF. ENDIF. " i_component IS SUPPLIED.

    IF i_note IS NOT INITIAL.* that that note is not already implemented DATA l_status TYPE c. CALL FUNCTION 'SCWB_NOTE_IMPL_STATUS_SIMPLE' EXPORTING iv_numm = i_note IMPORTING ev_status = l_status EXCEPTIONS OTHERS = 1. CASE l_status. WHEN 'E'. MESSAGE e319(01) WITH 'SAP Note' i_note 'completely implemented;' 'Rep

    ort execution not required anymore.' INTO sy-lisel. "#EC * CALL METHOD lcl_wb=>log_message. CALL METHOD lcl_wb=>display_log. RAISE stop_processing. WHEN 'O'. MESSAGE e319(01) WITH 'SAP Note' i_note 'is obsolete;' 'Report execution not required anymore.' INTO sy-lisel. "#EC * CALL METHOD lcl_wb=>log_message.

  • 7/22/2019 NOTE_1741024

    9/70

    CALL METHOD lcl_wb=>display_log. RAISE stop_processing. WHEN OTHERS. "okay DATA: ls_note TYPE bcwbn_note. ls_note-key-numm = i_note. CALL FUNCTION 'SCWB_NOTE_READ' EXPORTING iv_read_corr_instructions = 'X' CHANGING cs_note = ls_note EXCEPTIONS note_not_found = 1 language_not_found = 2 unreadable_text_format = 3 corr_instruction_not_found = 4 OTHERS = 5. IF sy-subrc 0. MESSAGE e319(01) WITH 'SAP Note' i_note 'cannot be read;' 'Ensure correct download of note first.' INTO sy-lisel. "#EC * CALL METHOD lcl_wb=>log_message. CALL METHOD lcl_wb=>display_log. RAISE stop_processing. ENDIF.

    FIELD-SYMBOLS: TYPE bcwbn_corr_instruction. LOOP AT ls_note-corr_instructions ASSIGNING WHERE key-aleid= i_cinst. DATA: l_valid TYPE bcwbn_bool. CALL FUNCTION 'SCWB_CINST_CHECK_VALID' IMPORTING ev_valid = l_valid CHANGING cs_corr_instruction = EXCEPTIONS corr_inst_not_found = 1 inconsistent_delivery_data = 2 undefined = 3

    OTHERS = 4. IF sy-subrc 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. IF l_valid IS INITIAL. MESSAGE e319(01) WITH 'Manual changes cannot be applied;' 'Correction instruction invalid' 'for current patch level' '' INTO sy-lisel. "#EC * CALL METHOD lcl_wb=>log_message. CALL METHOD lcl_wb=>display_log. RAISE stop_processing.

    ENDIF. ENDLOOP. ENDCASE. ENDIF.

    "no SSCR keys are necessary for a note implementation CALL FUNCTION 'SCWG_TOOLFLAG_SET'. "Reset will happen at leave of program

    IF testrun IS INITIAL.

  • 7/22/2019 NOTE_1741024

    10/70

    MESSAGE i319(01) WITH 'Running in Update Mode' INTO sy-lisel. "#EC * ELSE. MESSAGE i319(01) WITH 'Running in Test Mode' INTO sy-lisel. "#EC * ENDIF. CALL METHOD log_message.

    ENDMETHOD. "init

    METHOD get_object_text.

    STATICS: lt_object_text TYPE TABLE OF ko100, lt_doktypes TYPE TABLE OF dd07v.

    DATA: ls_object_text TYPE ko100, ls_doktype TYPE dd07v.

    IF lt_object_text IS INITIAL. CALL FUNCTION 'TR_OBJECT_TABLE' TABLES wt_object_text = lt_object_text. SORT lt_object_text BY object.

    CALL FUNCTION 'DDIF_DOMA_GET' EXPORTING

    name = 'DOK_ID' langu = sy-langu TABLES dd07v_tab = lt_doktypes EXCEPTIONS OTHERS = 0. SORT lt_doktypes BY domvalue_l. ENDIF.

    IF i_object EQ 'DOCU'. READ TABLE lt_doktypes INTO ls_doktype BINARY SEARCH WITH KEY domvalue_l = i_obj_name(2). IF sy-subrc EQ 0.

    r_text = ls_doktype-ddtext. ENDIF. ELSEIF i_object IS NOT INITIAL. READ TABLE lt_object_text INTO ls_object_text BINARY SEARCH WITH KEY object = i_object. "ignore PGMID! IF sy-subrc EQ 0. r_text = ls_object_text-text. ENDIF. ENDIF.

    ENDMETHOD. "get_object_text

    METHOD create_package.

    DATA: lo_package TYPE REF TO if_package, ls_package_data TYPE scompkdtln.

    CALL METHOD set_context EXPORTING i_object = 'DEVC' i_obj_name = i_devclass.

    SELECT SINGLE * FROM tdevc INTO CORRESPONDING FIELDS OF ls_package_data

  • 7/22/2019 NOTE_1741024

    11/70

    WHERE devclass EQ i_devclass. IF sy-subrc EQ 0 AND* ls_package_data-ctext EQ i_ctext AND "ctext in TDEVC leer! ls_package_data-dlvunit EQ i_dlvunit AND ls_package_data-parentcl EQ i_parentcl AND* ls_package_data-comp_posid EQ i_comp_posid AND "COMP_POSID kommt nicht in TDEVC vor! ls_package_data-tpclass EQ i_tpclass AND ls_package_data-srv_check EQ i_srv_check.

    CALL METHOD lcl_wb=>write_msg_to_log EXPORTING i_object = 'DEVC' i_obj_name = i_devclass i_mode = 'exist' i_langu = i_langu.

    RETURN. ENDIF.

    CHECK testrun IS INITIAL.

    ls_package_data-devclass = i_devclass. ls_package_data-ctext = i_ctext.

    ls_package_data-masterlang = i_langu. ls_package_data-dlvunit = i_dlvunit. ls_package_data-parentcl = i_parentcl. ls_package_data-comp_posid = i_comp_posid. ls_package_data-pdevclass = i_pdevclass. ls_package_data-tpclass = i_tpclass. ls_package_data-srv_check = i_srv_check. ls_package_data-as4user = sy-uname.

    CALL METHOD cl_package=>create_new_package IMPORTING e_package = lo_package CHANGING

    c_package_data = ls_package_data EXCEPTIONS object_already_existing = 1 object_just_created = 2 not_authorized = 3 wrong_name_prefix = 4 undefined_name = 5 reserved_local_name = 6 invalid_package_name = 7 short_text_missing = 8 software_component_invalid = 9 layer_invalid = 10 author_not_existing = 11

    component_not_existing = 12 component_missing = 13 prefix_in_use = 14 unexpected_error = 15 intern_err = 16 OTHERS = 17. IF sy-subrc EQ 1. "already exists RETURN. ELSEIF sy-subrc NE 0. CALL METHOD log_message.

  • 7/22/2019 NOTE_1741024

    12/70

  • 7/22/2019 NOTE_1741024

    13/70

    ls_opt-dismode = 'E'.

    "------------------------------------------- ls_bdcp-program = 'SAPLSFW_TOOL'. ls_bdcp-dynpro = '0050'. ls_bdcp-dynbegin = 'X'. APPEND ls_bdcp TO lt_bdc.

    ls_bdc-fnam = 'BDC_CURSOR'. ls_bdc-fval = 'SFW_SWITCH-SWITCH_ID'. APPEND ls_bdc TO lt_bdc.

    ls_bdc-fnam = 'SFW_SWITCH-SWITCH_ID'. ls_bdc-fval = i_switch. APPEND ls_bdc TO lt_bdc.

    ls_bdc-fnam = 'BDC_OKCODE'. ls_bdc-fval = '=WB_CREATE'. APPEND ls_bdc TO lt_bdc.

    "------------------------------------------- ls_bdcp-dynpro = '0550'. ls_bdcp-dynbegin = 'X'.

    APPEND ls_bdcp TO lt_bdc. ls_bdc-fnam = 'BDC_CURSOR'. ls_bdc-fval = 'HEADER_DATA-NAME32'. APPEND ls_bdc TO lt_bdc.

    ls_bdc-fnam = 'HEADER_DATA-NAME32'. IF i_text IS INITIAL. ls_bdc-fval = i_switch. ELSE. ls_bdc-fval = i_text. ENDIF. APPEND ls_bdc TO lt_bdc.

    ls_bdc-fnam = 'BDC_OKCODE'. ls_bdc-fval = '=GO35'. APPEND ls_bdc TO lt_bdc.

    "------------------------------------------- CALL TRANSACTION 'SFW1' USING lt_bdc OPTIONS FROM ls_opt. "automatciallyask for transport request CALL METHOD log_message.

    IF i_langu NE sy-langu. "align redundant field DTELMASTER with TADIR-MASTERLANG SELECT SINGLE * FROM tadir INTO ls_tadir

    WHERE pgmid EQ 'R3TR' AND object EQ 'SFSW' AND obj_name EQ i_switch. IF sy-subrc IS INITIAL AND i_langu NE ls_tadir-masterlang. ls_tadir-masterlang = i_langu. UPDATE tadir FROM ls_tadir. ENDIF. ENDIF.

    IF i_bfunction IS NOT INITIAL.

  • 7/22/2019 NOTE_1741024

    14/70

    SELECT SINGLE * FROM ('SFW_BF_SW') INTO ls_sfw_bf_sw WHERE switch_id = i_switch AND bfunction = i_bfunction. IF sy-subrc NE 0. CLEAR: ls_sfw_bf_sw. ls_sfw_bf_sw-switch_id = i_switch. ls_sfw_bf_sw-version = 'I'. ls_sfw_bf_sw-bfunction = i_bfunction. INSERT ('SFW_BF_SW') FROM ls_sfw_bf_sw. ENDIF. ENDIF.

    ls_dwinactiv-object = 'SFSW'. ls_dwinactiv-obj_name = i_switch. ls_dwinactiv-uname = sy-uname. INSERT dwinactiv FROM ls_dwinactiv. ELSE. "exist CALL METHOD lcl_wb=>write_msg_to_log EXPORTING i_object = 'SFSW' i_obj_name = i_switch i_mode = 'exist' i_langu = i_langu.

    ENDIF. ENDMETHOD. "create_switch

    METHOD create_doma. DATA: ls_dd01v TYPE dd01v, lt_dd07v TYPE TABLE OF dd07v, ls_dd07v TYPE dd07v, l_update, ls_dwinactiv TYPE dwinactiv, ls_domname LIKE LINE OF gr_domname VALUE 'IEQ'.

    FIELD-SYMBOLS: TYPE c,

    LIKE LINE OF lt_dd07v.

    CALL METHOD set_context EXPORTING i_object = 'DOMA' i_obj_name = i_domname.

    ls_domname-low = i_domname. COLLECT ls_domname INTO gr_domname.

    CALL FUNCTION 'DDIF_DOMA_GET' EXPORTING name = i_domname

    langu = i_langu "reads all values, returns value without language/text if text does not exist in i_langu state = 'M' "newest version (e.g. inactive) IMPORTING dd01v_wa = ls_dd01v TABLES dd07v_tab = lt_dd07v EXCEPTIONS OTHERS = 0.

  • 7/22/2019 NOTE_1741024

    15/70

    IF ls_dd01v IS INITIAL OR ls_dd01v-ddtext NE i_ddtext. l_update = 'X'. ENDIF.

    ls_dd01v-domname = i_domname. ls_dd01v-datatype = i_datatype. ls_dd01v-leng = i_leng. IF i_outputlen IS INITIAL. ls_dd01v-outputlen = i_leng. ELSE. ls_dd01v-outputlen = i_outputlen. ENDIF. ls_dd01v-convexit = i_convexit. ASSIGN ('LS_DD01V-APPENDNAME') TO . IF sy-subrc EQ 0. = i_appendname. ENDIF. ls_dd01v-ddlanguage = i_langu. ls_dd01v-ddtext = i_ddtext. IF i_domvalue IS SUPPLIED. "INITIAL value shall be possible fix value READ TABLE lt_dd07v ASSIGNING WITH KEY domvalue_l = i_domvalue. IF sy-subrc EQ 0. "value exists -> compare text IF -ddtext NE i_valtext.

    -ddlanguage = i_langu. -ddtext = i_valtext. l_update = 'X'. ENDIF. ELSE. "value does not exist -> insert READ TABLE lt_dd07v TRANSPORTING NO FIELDS WITH KEY valpos = i_valpos. IF sy-subrc EQ 0. "insert new value and increase valpos of exiting entries LOOP AT lt_dd07v ASSIGNING WHERE valpos GE i_valpos. ADD 1 TO -valpos. ENDLOOP. ENDIF.

    CLEAR ls_dd07v. ls_dd07v-domname = i_domname. ls_dd07v-domvalue_l = i_domvalue. IF i_valpos IS INITIAL. DESCRIBE TABLE lt_dd07v. ls_dd07v-valpos = sy-tfill + 1. ELSE. ls_dd07v-valpos = i_valpos. ENDIF. ls_dd07v-ddlanguage = i_langu. ls_dd07v-ddtext = i_valtext. APPEND ls_dd07v TO lt_dd07v. SORT lt_dd07v BY valpos.

    l_update = 'X'. ENDIF. IF lt_dd07v[] IS NOT INITIAL. ls_dd01v-valexi = 'X'. ENDIF. ENDIF.

    IF l_update = 'X'. CHECK testrun IS INITIAL.

  • 7/22/2019 NOTE_1741024

    16/70

    CALL METHOD add_to_transport EXPORTING i_object = 'DOMA' i_obj_name = i_domname i_devclass = i_devclass i_langu = i_langu EXCEPTIONS OTHERS = 1. CHECK sy-subrc EQ 0.

    "align redundant field DOMMASTER with TADIR-MASTERLANG SELECT SINGLE masterlang FROM tadir INTO ls_dd01v-dommaster WHERE pgmid EQ 'R3TR' AND object EQ 'DOMA' AND obj_name EQ i_domname.

    CALL FUNCTION 'DDIF_DOMA_PUT' EXPORTING name = i_domname dd01v_wa = ls_dd01v TABLES dd07v_tab = lt_dd07v EXCEPTIONS doma_not_found = 1

    name_inconsistent = 2 doma_inconsistent = 3 put_failure = 4 put_refused = 5 OTHERS = 6.

    IF sy-subrc 0. MESSAGE e010(c_) WITH 'WRITE' INTO sy-lisel. CALL METHOD log_message. RETURN. ENDIF.

    ls_dwinactiv-object = 'DOMA'.

    ls_dwinactiv-obj_name = i_domname. ls_dwinactiv-uname = sy-uname. INSERT dwinactiv FROM ls_dwinactiv. ELSE. "exist CALL METHOD lcl_wb=>write_msg_to_log EXPORTING i_object = 'DOMA' i_obj_name = i_domname i_mode = 'exist' i_langu = i_langu. ENDIF.

    ENDMETHOD. "create_doma

    METHOD create_dtel. DATA: ls_dd04v TYPE dd04v, ls_dwinactiv TYPE dwinactiv, ls_rollname LIKE LINE OF gr_domname VALUE 'IEQ'.

    CALL METHOD set_context EXPORTING i_object = 'DTEL'

  • 7/22/2019 NOTE_1741024

    17/70

    i_obj_name = i_rollname.

    ls_rollname-low = i_rollname. COLLECT ls_rollname INTO gr_rollname.

    CALL FUNCTION 'DDIF_DTEL_GET' EXPORTING name = i_rollname langu = i_langu state = 'M' "newest version (e.g. inactive) IMPORTING dd04v_wa = ls_dd04v EXCEPTIONS OTHERS = 1. IF sy-subrc EQ 0 AND ls_dd04v-rollname = i_rollname AND ls_dd04v-domname = i_domname AND ls_dd04v-datatype = i_datatype AND ls_dd04v-leng = i_leng AND ls_dd04v-logflag = i_logflag AND ls_dd04v-ddlanguage = i_langu AND ls_dd04v-ddtext = i_ddtext AND ls_dd04v-shlpname = i_shlpname AND ls_dd04v-shlpfield = i_shlpfield AND

    ls_dd04v-deffdname = i_deffdname. "data element already exists with that properties CALL METHOD lcl_wb=>write_msg_to_log EXPORTING i_object = 'DTEL' i_obj_name = i_rollname i_mode = 'exist' i_langu = i_langu. RETURN. ENDIF.

    CHECK testrun IS INITIAL.

    ls_dd04v-rollname = i_rollname. ls_dd04v-domname = i_domname. IF ls_dd04v-domname IS INITIAL. ls_dd04v-datatype = i_datatype. ls_dd04v-decimals = i_decimals. ls_dd04v-leng = i_leng. ENDIF. ls_dd04v-logflag = i_logflag. ls_dd04v-ddlanguage = i_langu. ls_dd04v-ddtext = i_ddtext. ls_dd04v-scrtext_s = i_scrtext_s. ls_dd04v-scrlen1 = i_scrlen1. ls_dd04v-scrtext_m = i_scrtext_m.

    ls_dd04v-scrlen2 = i_scrlen2. ls_dd04v-scrtext_l = i_scrtext_l. ls_dd04v-scrlen3 = i_scrlen3. ls_dd04v-shlpname = i_shlpname. ls_dd04v-shlpfield = i_shlpfield. ls_dd04v-deffdname = i_deffdname. IF i_reptext IS NOT INITIAL. ls_dd04v-reptext = i_reptext. IF i_headlen IS INITIAL. ls_dd04v-headlen = strlen( i_reptext ).

  • 7/22/2019 NOTE_1741024

    18/70

    ELSE. ls_dd04v-headlen = i_headlen. ENDIF. ENDIF.

    CALL METHOD add_to_transport EXPORTING i_object = 'DTEL' i_obj_name = i_rollname i_devclass = i_devclass i_langu = i_langu "masterlanguage (only relevant during first call) EXCEPTIONS OTHERS = 1. CHECK sy-subrc EQ 0.

    "align redundant field DTELMASTER with TADIR-MASTERLANG SELECT SINGLE masterlang FROM tadir INTO ls_dd04v-dtelmaster WHERE pgmid EQ 'R3TR' AND object EQ 'DTEL' AND obj_name EQ i_rollname.

    CALL FUNCTION 'DDIF_DTEL_PUT' EXPORTING name = i_rollname

    dd04v_wa = ls_dd04v EXCEPTIONS dtel_not_found = 1 name_inconsistent = 2 dtel_inconsistent = 3 put_failure = 4 put_refused = 5 OTHERS = 6. IF sy-subrc 0. CALL METHOD log_message. RETURN. ENDIF.

    ls_dwinactiv-object = 'DTEL'. ls_dwinactiv-obj_name = i_rollname. ls_dwinactiv-uname = sy-uname. INSERT dwinactiv FROM ls_dwinactiv.

    ENDMETHOD. "create_dtel

    METHOD create_table_type.

    DATA: ls_dd40v TYPE dd40v, lt_dd42v TYPE tt_dd42v, l_rowkind TYPE dd40v-rowkind VALUE 'S', l_datatype TYPE dd40v-datatype VALUE 'STRU',

    ls_dwinactiv TYPE dwinactiv, ls_tabtname LIKE LINE OF gr_tabtname VALUE 'IEQ'.

    CALL METHOD set_context EXPORTING i_object = 'TTYP' i_obj_name = i_typename.

    ls_tabtname-low = i_typename. COLLECT ls_tabtname INTO gr_tabtname.

  • 7/22/2019 NOTE_1741024

    19/70

    CALL FUNCTION 'DDIF_TTYP_GET' EXPORTING name = i_typename state = 'M' IMPORTING dd40v_wa = ls_dd40v TABLES dd42v_tab = lt_dd42v EXCEPTIONS illegal_input = 1 OTHERS = 2. IF sy-subrc EQ 0 AND "exists ls_dd40v-rowtype = i_rowtype AND ls_dd40v-rowkind = l_rowkind AND ls_dd40v-datatype = l_datatype AND ls_dd40v-accessmode = i_accessmode AND ls_dd40v-keydef = i_keydef AND ls_dd40v-keykind = i_keykind AND lt_dd42v = it_dd42v. "exist CALL METHOD lcl_wb=>write_msg_to_log EXPORTING i_object = 'TTYP'

    i_obj_name = i_typename i_mode = 'exist'. RETURN. ENDIF.

    CHECK testrun IS INITIAL.

    ls_dd40v-typename = i_typename. ls_dd40v-rowtype = i_rowtype. ls_dd40v-rowkind = l_rowkind. ls_dd40v-datatype = l_datatype. ls_dd40v-accessmode = i_accessmode. ls_dd40v-keydef = i_keydef.

    ls_dd40v-keykind = i_keykind. IF i_ddtext IS NOT INITIAL. ls_dd40v-ddtext = i_ddtext. ls_dd40v-ddlanguage = sy-langu. ENDIF.

    CALL METHOD add_to_transport EXPORTING i_object = 'TTYP' i_langu = i_langu i_obj_name = i_typename i_devclass = i_devclass EXCEPTIONS

    OTHERS = 1. CHECK sy-subrc EQ 0.

    CALL FUNCTION 'DDIF_TTYP_PUT' EXPORTING name = i_typename dd40v_wa = ls_dd40v TABLES dd42v_tab = it_dd42v EXCEPTIONS

  • 7/22/2019 NOTE_1741024

    20/70

    ttyp_not_found = 1 name_inconsistent = 2 ttyp_inconsistent = 3 put_failure = 4 put_refused = 5 OTHERS = 6. IF sy-subrc 0. CALL METHOD log_message. RETURN. ENDIF.

    ls_dwinactiv-object = 'TTYP'. ls_dwinactiv-obj_name = i_typename. ls_dwinactiv-uname = sy-uname. INSERT dwinactiv FROM ls_dwinactiv.

    ENDMETHOD. "create_table_type

    METHOD create_search_help.

    DATA: ls_shlpname LIKE LINE OF gr_shlpname VALUE 'IEQ', ls_dwinactiv TYPE dwinactiv, ls_dd30v TYPE dd30v, ls_dd30tv TYPE dd30tv,

    ls_dd32v TYPE dd32v, ls_dd33v TYPE dd33v, lt_dd30v TYPE tt_dd30v, lt_dd30tv TYPE tt_dd30tv, lt_dd31v TYPE tt_dd31v, lt_dd32v TYPE tt_dd32v, lt_dd33v TYPE tt_dd33v, lt_dd32p TYPE tt_dd32p, ls_dd32p TYPE dd32p, l_text TYPE tftit-stext, l_namespace TYPE rs38l-namespace, l_area TYPE tlibg-area, l_object_name TYPE vrsd-objname.

    CALL METHOD set_context EXPORTING i_object = 'SHLP' i_obj_name = i_shlpname.

    ls_shlpname-low = i_shlpname. COLLECT ls_shlpname INTO gr_shlpname.

    "CALL FUNCTION 'DDIF_SHLP_GET' has different result l_object_name = i_shlpname. CALL FUNCTION 'SVRS_GET_VERSION_SHLD_40' EXPORTING

    object_name = l_object_name versno = 0 TABLES dd30tv_tab = lt_dd30tv dd30v_tab = lt_dd30v dd31v_tab = lt_dd31v dd32v_tab = lt_dd32v dd33v_tab = lt_dd33v EXCEPTIONS no_version = 1

  • 7/22/2019 NOTE_1741024

    21/70

    system_failure = 2 communication_failure = 3 OTHERS = 4. IF sy-subrc EQ 0 AND lt_dd30v[] IS NOT INITIAL. " search help exist LOOP AT lt_dd32v INTO ls_dd32v. MOVE-CORRESPONDING ls_dd32v TO ls_dd32p. APPEND ls_dd32p TO lt_dd32p. ENDLOOP. READ TABLE lt_dd30v INTO ls_dd30v INDEX 1. READ TABLE lt_dd30tv INTO ls_dd30tv WITH KEY ddlanguage = i_langu. IF lt_dd31v EQ it_dd31v AND lt_dd32p EQ it_dd32p AND lt_dd33v EQ it_dd33v AND ls_dd30v-elemexi EQ i_elemexi AND ls_dd30v-nofields EQ i_nofields AND ls_dd30v-attachexi EQ i_attachexi AND ls_dd30v-selmethod EQ i_selmethod AND ls_dd30v-selmtype EQ i_selmtype AND ls_dd30v-texttab EQ i_texttab AND ls_dd30v-selmexit EQ i_selmexit AND ls_dd30v-hotkey EQ i_hotkey AND ls_dd30v-issimple EQ i_issimple AND ls_dd30v-dialogtype EQ i_dialogtype AND ls_dd30tv-ddtext EQ i_ddtext.

    "exist CALL METHOD lcl_wb=>write_msg_to_log EXPORTING i_object = 'SHLP' i_obj_name = i_shlpname i_mode = 'exist' i_langu = i_langu.

    RETURN. ENDIF. ENDIF.

    CHECK testrun IS INITIAL.

    ls_dd30v-shlpname = i_shlpname. ls_dd30v-ddlanguage = i_langu. ls_dd30v-elemexi = i_elemexi. ls_dd30v-nofields = i_nofields. ls_dd30v-attachexi = i_attachexi. ls_dd30v-selmethod = i_selmethod. ls_dd30v-selmtype = i_selmtype. ls_dd30v-texttab = i_texttab. ls_dd30v-selmexit = i_selmexit. ls_dd30v-hotkey = i_hotkey. ls_dd30v-issimple = i_issimple. ls_dd30v-dialogtype = i_dialogtype.

    IF i_ddtext IS INITIAL. ls_dd30v-ddtext = i_shlpname. ELSE. ls_dd30v-ddtext = i_ddtext. ENDIF.

    IF i_selmexit IS NOT INITIAL. "check if function module exists. CALL FUNCTION 'FUNCTION_EXISTS'

  • 7/22/2019 NOTE_1741024

    22/70

    EXPORTING funcname = i_selmexit EXCEPTIONS function_not_exist = 1 OTHERS = 0. IF sy-subrc EQ 1. "create empty function module on the fly CALL METHOD add_to_transport EXPORTING i_object = 'FUNC' i_obj_name = i_selmexit EXCEPTIONS OTHERS = 1. CHECK sy-subrc EQ 0.

    l_text = i_selmexit. IF i_function_group+1 CA '/'. ADD 2 TO sy-fdpos. l_namespace = i_function_group(sy-fdpos). l_area = i_function_group+sy-fdpos. ELSE. l_area = i_function_group. ENDIF.

    DATA: lt_tables TYPE TABLE OF rstbl, ls_tables TYPE rstbl, lt_changing TYPE TABLE OF rscha, ls_changing TYPE rscha.

    CLEAR ls_tables. ls_tables-parameter = 'SHLP_TAB'. ls_tables-typ = 'SHLP_DESCT'. APPEND ls_tables TO lt_tables. CLEAR ls_tables. ls_tables-parameter = 'RECORD_TAB'. ls_tables-dbstruct = 'SEAHLPRES'. APPEND ls_tables TO lt_tables.

    CLEAR ls_changing. ls_changing-parameter = 'SHLP'. ls_changing-typ = 'SHLP_DESCR'. ls_changing-types = 'X'. ls_changing-reference = 'X'. APPEND ls_changing TO lt_changing. CLEAR ls_changing. ls_changing-parameter = 'CALLCONTROL'. ls_changing-typ = 'DDSHF4CTRL'. ls_changing-types = 'X'. ls_changing-reference = 'X'. APPEND ls_changing TO lt_changing.

    CALL FUNCTION 'RS_FUNCTIONMODULE_INSERT' EXPORTING funcname = i_selmexit function_pool = l_area namespace = l_namespace short_text = l_text suppress_corr_check = ' ' suppress_language_check = 'X' authority_check = 'X'

  • 7/22/2019 NOTE_1741024

    23/70

    suppress_upgrade_check = 'X' TABLES tables_parameter = lt_tables changing_parameter = lt_changing EXCEPTIONS OTHERS = 1. IF sy-subrc NE 0. CALL METHOD log_message. RETURN. ENDIF. ENDIF. ENDIF.

    CALL METHOD add_to_transport EXPORTING i_object = 'SHLP' i_langu = i_langu i_obj_name = i_shlpname i_devclass = i_devclass EXCEPTIONS OTHERS = 1. CHECK sy-subrc EQ 0.

    CALL FUNCTION 'DDIF_SHLP_PUT'

    EXPORTING name = i_shlpname dd30v_wa = ls_dd30v TABLES dd31v_tab = it_dd31v dd32p_tab = it_dd32p dd33v_tab = it_dd33v EXCEPTIONS shlp_not_found = 1 name_inconsistent = 2 shlp_inconsistent = 3 put_failure = 4 put_refused = 5

    OTHERS = 6. IF sy-subrc 0. CALL METHOD log_message. RETURN. ENDIF.

    ls_dwinactiv-object = 'SHLP'. ls_dwinactiv-obj_name = i_shlpname. ls_dwinactiv-uname = sy-uname. INSERT dwinactiv FROM ls_dwinactiv.

    ENDMETHOD. "create_search_help

    METHOD create_table. DATA: ls_dd02v TYPE dd02v, ls_dd09l TYPE dd09l, lt_dd03p TYPE TABLE OF dd03p, lt_dd05m TYPE TABLE OF dd05m, lt_dd08v TYPE TABLE OF dd08v, lt_dd12v TYPE TABLE OF dd12v, lt_dd17v TYPE TABLE OF dd17v, lt_dd35v TYPE TABLE OF dd35v, lt_dd36m TYPE TABLE OF dd36m,

  • 7/22/2019 NOTE_1741024

    24/70

    l_tabix TYPE sytabix, ls_dwinactiv TYPE dwinactiv, ls_tabname LIKE LINE OF gr_tabname VALUE 'IEQ'.

    FIELD-SYMBOLS: TYPE dd03p.

    CALL METHOD set_context EXPORTING i_object = 'TABD' i_obj_name = i_tabname.

    ls_tabname-low = i_tabname. COLLECT ls_tabname INTO gr_tabname.

    CALL FUNCTION 'DDIF_TABL_GET' EXPORTING name = i_tabname state = 'M' "newest version (e.g. inactive) langu = i_langu IMPORTING* GOTSTATE = GOTSTATE dd02v_wa = ls_dd02v dd09l_wa = ls_dd09l TABLES

    dd03p_tab = lt_dd03p dd05m_tab = lt_dd05m dd08v_tab = lt_dd08v dd12v_tab = lt_dd12v dd17v_tab = lt_dd17v dd35v_tab = lt_dd35v dd36m_tab = lt_dd36m EXCEPTIONS illegal_input = 1 OTHERS = 2.

    IF sy-subrc EQ 0 AND ls_dd02v-tabname IS NOT INITIAL "existing. AND ( ls_dd02v-ddtext EQ i_ddtext ). "Text not changed

    "exist CALL METHOD lcl_wb=>write_msg_to_log EXPORTING i_object = 'TABD' i_obj_name = i_tabname i_mode = 'exist' i_langu = i_langu.

    RETURN. ENDIF.

    CHECK testrun IS INITIAL.

    "new table ls_dd02v-tabname = i_tabname. ls_dd02v-ddlanguage = i_langu. ls_dd02v-exclass = i_exclass. ls_dd02v-tabclass = i_tabclass. ls_dd02v-sqltab = i_sqltab.

    IF i_ddtext IS INITIAL. ls_dd02v-ddtext = i_tabname. ELSE.

  • 7/22/2019 NOTE_1741024

    25/70

    ls_dd02v-ddtext = i_ddtext. ENDIF.

    CALL METHOD add_to_transport EXPORTING i_object = 'TABD' i_langu = i_langu i_obj_name = i_tabname i_devclass = i_devclass EXCEPTIONS OTHERS = 1. CHECK sy-subrc EQ 0.

    CALL FUNCTION 'DDIF_TABL_PUT' EXPORTING name = i_tabname dd02v_wa = ls_dd02v dd09l_wa = ls_dd09l TABLES dd03p_tab = lt_dd03p dd05m_tab = lt_dd05m dd08v_tab = lt_dd08v dd35v_tab = lt_dd35v dd36m_tab = lt_dd36m

    EXCEPTIONS tabl_not_found = 1 name_inconsistent = 2 tabl_inconsistent = 3 put_failure = 4 put_refused = 5 OTHERS = 6. IF sy-subrc 0. CALL METHOD log_message. RETURN. ENDIF.

    ls_dwinactiv-object = 'TABL'.

    ls_dwinactiv-obj_name = i_tabname. ls_dwinactiv-uname = sy-uname. INSERT dwinactiv FROM ls_dwinactiv.

    ENDMETHOD. "create_table

    METHOD add_field_to_table.

    DATA: ls_dd02v TYPE dd02v, ls_dd09l TYPE dd09l, lt_dd03p TYPE TABLE OF dd03p, lt_dd05m TYPE TABLE OF dd05m, lt_dd08v TYPE TABLE OF dd08v,

    lt_dd12v TYPE TABLE OF dd12v, lt_dd17v TYPE TABLE OF dd17v, lt_dd35v TYPE TABLE OF dd35v, lt_dd36m TYPE TABLE OF dd36m, lt_dd32p TYPE tt_dd32p, ls_dd32p TYPE dd32p, l_tabix TYPE sytabix, ls_dwinactiv TYPE dwinactiv, ls_tabname LIKE LINE OF gr_tabname VALUE 'IEQ'.

  • 7/22/2019 NOTE_1741024

    26/70

    FIELD-SYMBOLS: TYPE dd03p.

    CALL METHOD set_context EXPORTING i_text = 'Add field to table' "#EC NOTEXT i_object = 'TABD' i_obj_name = i_tabname.

    ls_tabname-low = i_tabname. COLLECT ls_tabname INTO gr_tabname.

    CALL FUNCTION 'DDIF_TABL_GET' EXPORTING name = i_tabname state = 'M' "newest version (e.g. inactive) IMPORTING* GOTSTATE = GOTSTATE dd02v_wa = ls_dd02v dd09l_wa = ls_dd09l TABLES dd03p_tab = lt_dd03p dd05m_tab = lt_dd05m dd08v_tab = lt_dd08v dd12v_tab = lt_dd12v

    dd17v_tab = lt_dd17v dd35v_tab = lt_dd35v dd36m_tab = lt_dd36m EXCEPTIONS illegal_input = 1 OTHERS = 2.

    IF sy-subrc NE 0 OR ls_dd02v-tabname IS INITIAL. "not existing. CONCATENATE 'Error while reading' 'table information from DDIC' INTO gv_msgxtra_txt SEPARATED BY space. CALL METHOD lcl_wb=>write_msg_to_log EXPORTING i_object = 'TABD'

    i_obj_name = i_tabname i_mode = 'extra' i_extra = gv_msgxtra_txt. RETURN. ENDIF.

    "Find field to insert/change IF i_fieldname EQ c_include. READ TABLE lt_dd03p ASSIGNING WITH KEY fieldname = i_fieldname precfield = i_rollname groupname = i_groupname. IF sy-subrc EQ 0.

    "INCLUDE already exists CONCATENATE 'Include' i_rollname 'already exists' INTO gv_msgxtra_txt SEPARATED BY space. CALL METHOD lcl_wb=>write_msg_to_log EXPORTING i_object = 'TABD' i_obj_name = i_tabname i_mode = 'extra' i_extra = gv_msgxtra_txt.

  • 7/22/2019 NOTE_1741024

    27/70

    RETURN. ENDIF. ELSE. READ TABLE lt_dd03p ASSIGNING WITH KEY fieldname = i_fieldname. IF sy-subrc EQ 0. "Check if fields already has data element IF -rollname EQ i_rollname. "field already has correct data element CONCATENATE 'Field' i_fieldname 'already exists' INTO gv_msgxtra_txt SEPARATED BY space. CALL METHOD lcl_wb=>write_msg_to_log EXPORTING i_object = 'TABD' i_obj_name = i_tabname i_mode = 'extra' i_extra = gv_msgxtra_txt.

    RETURN. ELSE. "change data element -rollname = i_rollname. CONCATENATE 'Data element of field' i_fieldname 'will be changed to' i

    _rollname

    INTO gv_msgxtra_txt SEPARATED BY space. CALL METHOD lcl_wb=>write_msg_to_log EXPORTING i_object = 'TABD' i_obj_name = i_tabname i_mode = 'extra' i_extra = gv_msgxtra_txt. ENDIF. ENDIF. ENDIF. IF sy-subrc NE 0. "new field "Find context (one field is enough since fieldname is unique) IF i_context IS NOT INITIAL.

    READ TABLE lt_dd03p TRANSPORTING NO FIELDS WITH KEY fieldname = i_context. IF sy-subrc NE 0 AND sy-tfill NE 0. MESSAGE i319(01) WITH 'Context' i_context 'not found in TABD' i_tabname. "#EC NOTEXT RETURN. ENDIF.

    "insert new field after context l_tabix = sy-tabix + 1. ELSE. "no context -> insert field at end l_tabix = lines( lt_dd03p ) + 1.

    ENDIF.

    INSERT INITIAL LINE INTO lt_dd03p INDEX l_tabix ASSIGNING .

    -tabname = i_tabname. -fieldname = i_fieldname. -groupname = i_groupname. -keyflag = i_keyflag. IF i_fieldname EQ c_include. -precfield = i_rollname.

  • 7/22/2019 NOTE_1741024

    28/70

    -comptype = 'S'. ELSEIF i_rollname IS INITIAL. -datatype = i_datatype. -decimals = i_decimals. -leng = i_leng. ELSE. -rollname = i_rollname. ENDIF. -reftable = i_reftable. -reffield = i_reffield.

    LOOP AT lt_dd03p ASSIGNING FROM l_tabix. -position = sy-tabix. ENDLOOP. "field will be added CONCATENATE 'Field:' i_fieldname 'will be added to table' i_tabname INTO gv_msgxtra_txt SEPARATED BY space. CALL METHOD lcl_wb=>write_msg_to_log EXPORTING i_object = 'TABD' i_obj_name = i_tabname i_mode = 'extra' i_extra = gv_msgxtra_txt. ENDIF.

    CHECK testrun IS INITIAL.

    CALL METHOD add_to_transport EXPORTING i_object = 'TABL' i_obj_name = i_tabname EXCEPTIONS OTHERS = 1. CHECK sy-subrc EQ 0.

    CALL FUNCTION 'DDIF_TABL_PUT' EXPORTING

    name = i_tabname dd02v_wa = ls_dd02v dd09l_wa = ls_dd09l TABLES dd03p_tab = lt_dd03p dd05m_tab = lt_dd05m dd08v_tab = lt_dd08v dd35v_tab = lt_dd35v dd36m_tab = lt_dd36m EXCEPTIONS tabl_not_found = 1 name_inconsistent = 2 tabl_inconsistent = 3

    put_failure = 4 put_refused = 5 OTHERS = 6. IF sy-subrc 0. CALL METHOD log_message. RETURN. ENDIF.

    ls_dwinactiv-object = 'TABL'. ls_dwinactiv-obj_name = i_tabname.

  • 7/22/2019 NOTE_1741024

    29/70

    ls_dwinactiv-uname = sy-uname. INSERT dwinactiv FROM ls_dwinactiv.

    ENDMETHOD. "add_field_to_table

    METHOD add_shlp_to_table.

    DATA: ls_dd02v TYPE dd02v, ls_dd09l TYPE dd09l, lt_dd03p TYPE TABLE OF dd03p, lt_dd05m TYPE TABLE OF dd05m, lt_dd08v TYPE TABLE OF dd08v, lt_dd12v TYPE TABLE OF dd12v, lt_dd17v TYPE TABLE OF dd17v, lt_dd35v TYPE TABLE OF dd35v, ls_dd35v TYPE dd35v, lt_dd36m TYPE TABLE OF dd36m, ls_dd36m TYPE dd36m, lt_dd36m_comp TYPE TABLE OF dd36m, lt_dd32p TYPE tt_dd32p, ls_dd32p TYPE dd32p, l_tabix TYPE sytabix, ls_dwinactiv TYPE dwinactiv, ls_tabname LIKE LINE OF gr_tabname VALUE 'IEQ'.

    FIELD-SYMBOLS TYPE dd35v.

    CALL METHOD set_context EXPORTING i_text = 'Assign Search Help to Table' "#EC NOTEXT i_object = 'TABD' i_obj_name = i_tabname.

    ls_tabname-low = i_tabname. COLLECT ls_tabname INTO gr_tabname.

    CALL FUNCTION 'DDIF_TABL_GET'

    EXPORTING name = i_tabname state = 'M' "newest version (e.g. inactive) IMPORTING* GOTSTATE = GOTSTATE dd02v_wa = ls_dd02v dd09l_wa = ls_dd09l TABLES dd03p_tab = lt_dd03p dd05m_tab = lt_dd05m dd08v_tab = lt_dd08v dd12v_tab = lt_dd12v dd17v_tab = lt_dd17v

    dd35v_tab = lt_dd35v dd36m_tab = lt_dd36m EXCEPTIONS illegal_input = 1 OTHERS = 2.

    IF sy-subrc NE 0 OR ls_dd02v-tabname IS INITIAL. "not existing. CONCATENATE 'Error while reading' 'table information from DDIC' INTO gv_msgxtra_txt SEPARATED BY space. CALL METHOD lcl_wb=>write_msg_to_log

  • 7/22/2019 NOTE_1741024

    30/70

    EXPORTING i_object = 'TABD' i_obj_name = i_tabname i_mode = 'extra' i_extra = gv_msgxtra_txt. RETURN. ENDIF.

    lt_dd36m_comp = lt_dd36m.

    DELETE lt_dd36m_comp WHERE fieldname NE i_fieldname.

    IF lt_dd36m_comp EQ it_dd36m. "shlp assignment already like requested CONCATENATE 'Search help assignment' 'already ok' INTO gv_msgxtra_txt SEPARATED BY space. CALL METHOD lcl_wb=>write_msg_to_log EXPORTING i_object = 'TABD' i_obj_name = i_tabname i_mode = 'extra' i_extra = gv_msgxtra_txt. RETURN. ENDIF.

    DELETE lt_dd35v WHERE fieldname EQ i_fieldname.

    READ TABLE it_dd36m INDEX 1 INTO ls_dd36m. IF sy-subrc EQ 0. CLEAR ls_dd35v. ls_dd35v-tabname = i_tabname. ls_dd35v-fieldname = i_fieldname. ls_dd35v-shlpname = ls_dd36m-shlpname. APPEND ls_dd35v TO lt_dd35v. ELSE. "shlp assignment will be removed CONCATENATE 'Search help assignment' 'removed'

    INTO gv_msgxtra_txt SEPARATED BY space. CALL METHOD lcl_wb=>write_msg_to_log EXPORTING i_object = 'TABD' i_obj_name = i_tabname i_mode = 'extra' i_extra = gv_msgxtra_txt. ENDIF.

    CHECK testrun IS INITIAL.

    DELETE lt_dd36m WHERE fieldname EQ i_fieldname. APPEND LINES OF it_dd36m TO lt_dd36m.

    CALL FUNCTION 'DDIF_TABL_PUT' EXPORTING name = i_tabname dd02v_wa = ls_dd02v dd09l_wa = ls_dd09l TABLES dd03p_tab = lt_dd03p dd05m_tab = lt_dd05m dd08v_tab = lt_dd08v

  • 7/22/2019 NOTE_1741024

    31/70

    dd35v_tab = lt_dd35v dd36m_tab = lt_dd36m EXCEPTIONS tabl_not_found = 1 name_inconsistent = 2 tabl_inconsistent = 3 put_failure = 4 put_refused = 5 OTHERS = 6. IF sy-subrc 0. CALL METHOD log_message. RETURN. ELSE. CONCATENATE 'Search help assignment' 'successfully updated' INTO gv_msgxtra_txt SEPARATED BY space. CALL METHOD lcl_wb=>write_msg_to_log EXPORTING i_object = 'TABD' i_obj_name = i_tabname i_mode = 'extra' i_extra = gv_msgxtra_txt. ENDIF.

    ls_dwinactiv-object = 'TABL'.

    ls_dwinactiv-obj_name = i_tabname. ls_dwinactiv-uname = sy-uname. INSERT dwinactiv FROM ls_dwinactiv.

    ENDMETHOD. "add_shlp_to_table

    METHOD add_field_to_view. DATA: ls_dd25v TYPE dd25v, ls_dd09l TYPE dd09l, lt_dd26v TYPE TABLE OF dd26v, lt_dd27p TYPE TABLE OF dd27p, lt_dd28j TYPE TABLE OF dd28j, lt_dd28v TYPE TABLE OF dd28v,

    ls_dwinactiv TYPE dwinactiv.

    FIELD-SYMBOLS: LIKE LINE OF lt_dd27p.

    DATA: l_viewfield LIKE i_viewfield, l_rollname LIKE i_rollname, l_tabix TYPE sytabix, ls_viewname LIKE LINE OF gr_viewname VALUE 'IEQ'.

    CALL METHOD set_context EXPORTING i_text = 'Add Field to View' "#EC NOTEXT i_object = 'VIEW'

    i_obj_name = i_viewname.

    ls_viewname-low = i_viewname. COLLECT ls_viewname INTO gr_viewname.

    CALL FUNCTION 'DDIF_VIEW_GET' EXPORTING name = i_viewname state = 'M' "most recent, e.g. inactive IMPORTING

  • 7/22/2019 NOTE_1741024

    32/70

    dd25v_wa = ls_dd25v dd09l_wa = ls_dd09l TABLES dd26v_tab = lt_dd26v dd27p_tab = lt_dd27p dd28j_tab = lt_dd28j dd28v_tab = lt_dd28v EXCEPTIONS illegal_input = 1 OTHERS = 2. IF sy-subrc 0. CONCATENATE 'Error while reading' 'table information from DDIC' INTO gv_msgxtra_txt SEPARATED BY space. CALL METHOD lcl_wb=>write_msg_to_log EXPORTING i_object = 'VIEW' i_obj_name = i_viewname i_mode = 'extra' i_extra = gv_msgxtra_txt. RETURN. ENDIF.

    IF i_viewfield IS INITIAL. l_viewfield = i_fieldname.

    ELSE. l_viewfield = i_viewfield. ENDIF.

    IF i_rollname IS INITIAL. SELECT SINGLE rollname FROM dd03l INTO l_rollname WHERE tabname EQ i_tabname AND fieldname EQ i_fieldname. IF sy-subrc NE 0. MESSAGE i319(01) WITH 'Field' i_fieldname 'not found in ' i_tabname INTOsy-lisel. "#EC NOTEXT CALL METHOD log_message. RETURN.

    ENDIF. ELSE. l_rollname = i_rollname. ENDIF.

    "Check if fields already exists READ TABLE lt_dd27p TRANSPORTING NO FIELDS WITH KEY viewfield = l_viewfield. IF sy-subrc EQ 0. "field already exists CONCATENATE 'Field already exists' 'in view' INTO gv_msgxtra_txt SEPARATED BY space. CALL METHOD lcl_wb=>write_msg_to_log

    EXPORTING i_object = 'VIEW' i_obj_name = i_viewname i_mode = 'extra' i_extra = gv_msgxtra_txt. RETURN. ENDIF.

    "Find context (one field is enough since fieldname is unique) READ TABLE lt_dd27p TRANSPORTING NO FIELDS

  • 7/22/2019 NOTE_1741024

    33/70

    WITH KEY viewfield = i_context. IF sy-subrc NE 0. MESSAGE i319(01) WITH 'Context' i_context 'not found in VIED' i_viewname INTO sy-lisel. "#EC NOTEXT CALL METHOD log_message. RETURN. ENDIF.

    CHECK testrun IS INITIAL.

    "insert new field after context l_tabix = sy-tabix + 1. INSERT INITIAL LINE INTO lt_dd27p INDEX l_tabix ASSIGNING .

    -viewname = i_viewname. -viewfield = l_viewfield. -tabname = i_tabname. -fieldname = i_fieldname. -rollnamevi = l_rollname.

    LOOP AT lt_dd27p ASSIGNING FROM l_tabix. -objpos = sy-tabix. ENDLOOP.

    CALL METHOD add_to_transport EXPORTING i_object = 'VIEW' i_obj_name = i_viewname EXCEPTIONS OTHERS = 1. CHECK sy-subrc EQ 0.

    CALL FUNCTION 'DDIF_VIEW_PUT' EXPORTING name = i_viewname dd25v_wa = ls_dd25v dd09l_wa = ls_dd09l

    TABLES dd26v_tab = lt_dd26v dd27p_tab = lt_dd27p dd28j_tab = lt_dd28j dd28v_tab = lt_dd28v EXCEPTIONS view_not_found = 1 name_inconsistent = 2 view_inconsistent = 3 put_failure = 4 put_refused = 5 OTHERS = 6.

    IF sy-subrc 0. CALL METHOD log_message. RETURN. ENDIF.

    ls_dwinactiv-object = 'VIEW'. ls_dwinactiv-obj_name = i_viewname. ls_dwinactiv-uname = sy-uname. INSERT dwinactiv FROM ls_dwinactiv.

  • 7/22/2019 NOTE_1741024

    34/70

    ENDMETHOD. "add_field_to_view

    METHOD regenerate_maint_view.

    "regenerate maintaince view vua barch input of SE54 "assumptions: "- maint view dialog is based on view (not table) "- new fields have been added "- no screen changes needed or done via separate corr instruction

    DATA: lt_bdc TYPE TABLE OF bdcdata, ls_bdc TYPE bdcdata, ls_bdcp TYPE bdcdata, ls_radio LIKE ls_bdc-fnam, ls_opt TYPE ctu_params.

    CALL METHOD set_context EXPORTING i_text = 'Regenerate Maintainance View' "#EC NOTEXT i_object = 'VIEW' i_obj_name = i_viewname.

    CHECK testrun IS INITIAL.

    ls_opt-dismode = 'E'. "------------------------------------------- ls_bdcp-program = 'SAPMSVIM'. ls_bdcp-dynpro = '0050'. ls_bdcp-dynbegin = 'X'. APPEND ls_bdcp TO lt_bdc.

    ls_bdc-fnam = 'VIMDYNFLDS-VIEWNAME'. ls_bdc-fval = i_viewname. APPEND ls_bdc TO lt_bdc.

    ls_bdc-fnam = 'BDC_CURSOR'.

    ls_bdc-fval = 'VIMDYNFLDS-ELEM_GEN'. APPEND ls_bdc TO lt_bdc.

    ls_bdc-fnam = 'VIMDYNFLDS-ELEM_GEN'. ls_bdc-fval = 'X'. APPEND ls_bdc TO lt_bdc.

    ls_bdc-fnam = 'BDC_OKCODE'. ls_bdc-fval = '=CRMO'. APPEND ls_bdc TO lt_bdc.

    "------------------------------------------- ls_bdcp-dynpro = '0120'.

    ls_bdcp-dynbegin = 'X'. APPEND ls_bdcp TO lt_bdc.

    ls_bdc-fnam = 'BDC_OKCODE'. ls_bdc-fval = '=RESE'. APPEND ls_bdc TO lt_bdc.

    "------------------------------------------- ls_bdcp-dynpro = '1240'. ls_bdcp-dynbegin = 'X'.

  • 7/22/2019 NOTE_1741024

    35/70

    APPEND ls_bdcp TO lt_bdc.

    ls_bdc-fnam = 'BDC_CURSOR'. ls_bdc-fval = 'VIMDYNFLDS-NEW_FIELD'. APPEND ls_bdc TO lt_bdc.

    ls_bdc-fnam = 'VIMDYNFLDS-NEW_FIELD'. ls_bdc-fval = 'X'. APPEND ls_bdc TO lt_bdc.

    ls_bdc-fnam = 'BDC_OKCODE'. ls_bdc-fval = '=O.K.'. APPEND ls_bdc TO lt_bdc.

    "------------------------------------------- ls_bdcp-dynpro = '1243'. ls_bdcp-dynbegin = 'X'. APPEND ls_bdcp TO lt_bdc.

    ls_bdc-fnam = 'BDC_CURSOR'. ls_bdc-fval = 'VIMDYNFLDS-FIELD_NORM'. APPEND ls_bdc TO lt_bdc.

    ls_bdc-fnam = 'VIMDYNFLDS-FIELD_NORM'.

    ls_bdc-fval = 'X'. APPEND ls_bdc TO lt_bdc.

    ls_bdc-fnam = 'BDC_OKCODE'. ls_bdc-fval = '=O.K.'. APPEND ls_bdc TO lt_bdc.

    ls_opt-dismode = 'E'. ls_opt-racommit = 'X'. ls_opt-nobinpt = 'X'. ls_opt-nobiend = 'X'.

    "-------------------------------------------

    ls_bdcp-dynpro = '0120'. ls_bdcp-dynbegin = 'X'. APPEND ls_bdcp TO lt_bdc.

    ls_bdc-fnam = 'BDC_OKCODE'. ls_bdc-fval = '=BACK'. APPEND ls_bdc TO lt_bdc.

    "------------------------------------------- ls_bdcp-dynpro = '0050'. ls_bdcp-dynbegin = 'X'. APPEND ls_bdcp TO lt_bdc.

    ls_bdc-fnam = 'BDC_OKCODE'. ls_bdc-fval = '=BACK'. APPEND ls_bdc TO lt_bdc.

    "------------------------------------------- CALL TRANSACTION 'SE54' USING lt_bdc OPTIONS FROM ls_opt.

    CALL METHOD log_message. ENDMETHOD. "regenerate_maint_view

  • 7/22/2019 NOTE_1741024

    36/70

    METHOD activate.

    DATA: lt_dwinactiv TYPE TABLE OF dwinactiv, lv_answer, l_request TYPE trkorr, l_logname TYPE string, ls_job TYPE tbtcjob, lv_rc TYPE sysubrc.

    FIELD-SYMBOLS: LIKE LINE OF lt_dwinactiv.

    CALL METHOD set_context EXPORTING i_object = space i_obj_name = space.

    "activate switches "online" IF gr_switchname IS NOT INITIAL. SELECT * FROM dwinactiv INTO TABLE lt_dwinactiv WHERE obj_name IN gr_switchname. IF lt_dwinactiv[] IS NOT INITIAL. LOOP AT lt_dwinactiv ASSIGNING WHERE uname NE sy-uname AND obj_name IN gr_switchname.

    -uname = sy-uname. ENDLOOP. INSERT dwinactiv FROM TABLE lt_dwinactiv ACCEPTING DUPLICATE KEYS. ENDIF.

    MESSAGE s357(scwn). CALL FUNCTION 'RS_WORKING_OBJECT_ACTIVATE' EXPORTING dictionary_only = 'X' TABLES objects = lt_dwinactiv EXCEPTIONS OTHERS = 5.

    ENDIF.

    "make sure that ranges are not empty APPEND 'IEQ' TO: gr_domname, gr_rollname, gr_tabname, gr_shlpname, gr_viewname, gr_tabtname, gr_guistatus, gr_indexes, gr_indxtab, gr_indxname.

    SELECT * FROM dwinactiv INTO TABLE lt_dwinactiv WHERE ( object NE space ) "dummy AND ( obj_name IN gr_domname OR obj_name IN gr_rollname OR obj_name IN gr_tabname OR obj_name IN gr_shlpname OR obj_name IN gr_viewname OR obj_name IN gr_tabtname OR obj_name IN gr_guistatus

  • 7/22/2019 NOTE_1741024

    37/70

    OR obj_name IN gr_indexes ). IF lt_dwinactiv[] IS INITIAL. MESSAGE i319(01) WITH 'No repository changes made' '' '' '' INTO sy-lisel."#EC NOTEXT CALL METHOD log_message. IF gv_translation EQ 'X'. MESSAGE i319(01) WITH 'Translation has been updated' '' '' '' INTO sy-lisel. "#EC NOTEXT CALL METHOD log_message. ENDIF. ELSE. "add all relevant inactive objects also to current user's worklist "gets relevant if a different user is doing the activation. "entries for all users will be deleted if any user activates the object LOOP AT lt_dwinactiv ASSIGNING WHERE uname NE sy-uname. -uname = sy-uname. ENDLOOP. INSERT dwinactiv FROM TABLE lt_dwinactiv ACCEPTING DUPLICATE KEYS.

    IF i_result_auth_check IS INITIAL. CALL FUNCTION 'POPUP_TO_CONFIRM' EXPORTING titlebar = 'Activation' "#EC NOTEXT

    text_question = 'How do you want to activate DDIC?' "#EC NOTEXT text_button_1 = 'Online' "#EC NOTEXT text_button_2 = 'Batch' "#EC NOTEXT display_cancel_button = 'X' IMPORTING answer = lv_answer EXCEPTIONS OTHERS = 1. IF sy-subrc 0. MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. CALL METHOD log_message.

    ENDIF.

    IF lv_answer = '2'. "DDIC via RADMASG0 "remove DDIC objects from worklist DELETE lt_dwinactiv WHERE object = 'DOMA' OR object = 'DTEL' OR object = 'TABL' OR object = 'INDX' OR object = 'VIEW' OR object = 'TTYP' OR object = 'SHLP'. ENDIF.

    IF lv_answer NE 'A' AND lt_dwinactiv[] IS NOT INITIAL. "1) activate non DDIC objects online MESSAGE s357(scwn). CALL FUNCTION 'RS_WORKING_OBJECT_ACTIVATE' EXPORTING dictionary_only = 'X' TABLES objects = lt_dwinactiv EXCEPTIONS OTHERS = 5.

  • 7/22/2019 NOTE_1741024

    38/70

    IF sy-subrc 0. MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. CALL METHOD log_message. ENDIF.

    MESSAGE s357(scwn). CALL FUNCTION 'RS_WORKING_OBJECT_ACTIVATE' EXPORTING dictionary_only = ' ' TABLES objects = lt_dwinactiv EXCEPTIONS OTHERS = 5. IF sy-subrc 0. CALL METHOD log_message. MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDIF.

    IF lv_answer = '2'. "2) activate DDIC objects online ls_job-jobname = sy-repid.

    CALL FUNCTION 'JOB_OPEN' EXPORTING jobname = ls_job-jobname IMPORTING jobcount = ls_job-jobcount CHANGING ret = lv_rc EXCEPTIONS cant_create_job = 1 invalid_job_data = 2 jobname_missing = 3 OTHERS = 4.

    IF sy-subrc 0 OR lv_rc NE 0. MESSAGE e026(bt) WITH ls_job-jobname INTO sy-lisel. CALL METHOD log_message. ELSE. CONCATENATE sy-repid '_&DATE&&TIME&' INTO l_logname. SUBMIT radmasg0 WITH domname IN gr_domname WITH rollname IN gr_rollname WITH tabname IN gr_tabname WITH indxtab IN gr_indxtab WITH indxname IN gr_indxname WITH viewname IN gr_viewname WITH tabtname IN gr_tabtname WITH shlpname IN gr_shlpname

    WITH logname EQ l_logname VIA JOB ls_job-jobname NUMBER ls_job-jobcount AND RETURN.

    CALL FUNCTION 'JOB_CLOSE' EXPORTING jobcount = ls_job-jobcount jobname = ls_job-jobname strtimmed = 'X'

  • 7/22/2019 NOTE_1741024

    39/70

    EXCEPTIONS OTHERS = 1. IF sy-subrc EQ 0. MESSAGE s305(ut) WITH ls_job-jobname INTO sy-lisel. CALL METHOD log_message. MESSAGE s319(01) WITH 'Use Report RADPROTB to view activation log' 'after job has finished' 'in transaction SMX.' ''. "#EC NOTEXT CALL METHOD log_message. ELSE. MESSAGE e026(bt) WITH ls_job-jobname INTO sy-lisel. CALL METHOD log_message. ENDIF. ENDIF. ENDIF. ELSE. MESSAGE i319(01) WITH 'No authorization to activate the DDIC changes.' 'Call transaction SU53 for details' '' ''. "#EC NOTEXT sy-msgty = 'E'. CALL METHOD log_message. ENDIF. ENDIF.

    CALL METHOD display_log. ENDMETHOD. "activate

    METHOD add_to_transport.

    STATICS: s_object LIKE i_object, s_obj_name TYPE string, s_subrc TYPE sysubrc.

    DATA: l_tadir_name TYPE tadir-obj_name, l_object_name TYPE string, l_object_class TYPE string,

    l_extend, l_global_lock, ls_trkey TYPE trkey, lv_msgty TYPE symsgty.

    IF i_object NE s_object OR i_obj_name NE s_obj_name.

    s_object = i_object. s_obj_name = i_obj_name.

    CASE i_object. WHEN 'REPT' OR 'FUNC' OR 'CUAD' OR 'DOCU'.

    l_object_class = i_object. l_object_name = i_obj_name. WHEN 'DOCV' OR 'DOCT' OR 'DSYS' OR 'STCS' OR 'MSAG'. l_object_class = i_object. l_object_name = i_obj_name. l_global_lock = 'X'. l_extend = 'X'. l_tadir_name = i_obj_name. WHEN 'MESS'. l_object_class = 'T100'.

  • 7/22/2019 NOTE_1741024

    40/70

    l_object_name = i_obj_name. WHEN 'CLAS' OR 'FUGR'. l_object_class = i_object. l_object_name = i_obj_name. l_tadir_name = i_obj_name. l_global_lock = 'X'. WHEN OTHERS. l_object_class = 'DICT'. CONCATENATE i_object i_obj_name INTO l_object_name. l_tadir_name = i_obj_name. ENDCASE.

    "create TADIR entry in advance avoid popup IF l_tadir_name IS NOT INITIAL. IF i_langu CA 'ED'. "set correct language and package on first call per object "skip this for other languages than EN/DE. CALL FUNCTION 'TR_TADIR_INTERFACE' EXPORTING* WI_DELETE_TADIR_ENTRY = ' ' wi_test_modus = space wi_tadir_pgmid = 'R3TR' wi_tadir_object = i_object

    wi_tadir_obj_name = l_tadir_name wi_tadir_devclass = i_devclass wi_tadir_masterlang = i_langu EXCEPTIONS OTHERS = 25. IF sy-subrc 0. ENDIF. ENDIF. IF i_devclass IS NOT INITIAL. "set correct package in memory FREE MEMORY ID 'EUK'. SET PARAMETER ID 'EUK' FIELD i_devclass. ENDIF.

    ENDIF.

    CALL FUNCTION 'RS_CORR_INSERT' "and create TADIR-entry EXPORTING object = l_object_name object_class = l_object_class devclass = i_devclass korrnum = gv_trkorr global_lock = l_global_lock* AUTHOR = ' ' master_language = i_langu* GENFLAG = ' '* PROGRAM = ' '

    * OBJECT_CLASS_SUPPORTS_MA = ' ' extend = l_extend* SUPPRESS_DIALOG = ' '* MOD_LANGU = ' '* ACTIVATION_CALL = ' ' IMPORTING korrnum = gv_trkorr* ORDERNUM =* NEW_CORR_ENTRY =* AUTHOR =

  • 7/22/2019 NOTE_1741024

    41/70

    transport_key = ls_trkey* NEW_EXTEND = EXCEPTIONS cancelled = 1 permission_failure = 2 unknown_objectclass = 3 OTHERS = 4. s_subrc = sy-subrc. ENDIF.

    IF s_subrc IS INITIAL. CALL METHOD lcl_wb=>write_msg_to_log EXPORTING i_object = i_object i_obj_name = i_obj_name i_mode = 'add' i_tkorr = gv_trkorr i_langu = i_langu. ELSE. CALL METHOD lcl_wb=>write_msg_to_log EXPORTING i_object = i_object i_obj_name = i_obj_name i_mode = 'notadd'

    i_tkorr = gv_trkorr i_langu = i_langu. RAISE error. ENDIF.

    ENDMETHOD. "add_to_transport

    METHOD create_message_class. "will be activated immediately

    DATA: ls_t100a TYPE t100a, ls_t100t TYPE t100t, l_obj_name TYPE e071-obj_name.

    CALL METHOD set_context EXPORTING i_object = 'MSAG' i_obj_name = i_msgid.

    "check if message class exists SELECT SINGLE * FROM t100a INTO ls_t100a WHERE arbgb = i_msgid. IF sy-subrc NE 0. CHECK testrun IS INITIAL.

    CALL METHOD add_to_transport "and create TADIR EXPORTING i_object = 'MSAG'

    i_obj_name = i_msgid i_devclass = i_devclass i_langu = i_langu EXCEPTIONS OTHERS = 1.

    CHECK sy-subrc EQ 0.

    ls_t100a-lastuser = sy-uname. ls_t100a-ldate = sy-datum.

  • 7/22/2019 NOTE_1741024

    42/70

    ls_t100a-ltime = sy-uzeit. ls_t100a-masterlang = i_langu. ls_t100a-arbgb = i_msgid. MODIFY t100a FROM ls_t100a. "no activation needed

    ls_t100t-sprsl = ls_t100a-masterlang. ls_t100t-arbgb = ls_t100a-arbgb. ls_t100t-stext = i_msgid. "take any text MODIFY t100t FROM ls_t100t. ELSE. CONCATENATE 'Message Class' 'already exists' INTO gv_msgxtra_txt SEPARATED BY space. CALL METHOD lcl_wb=>write_msg_to_log EXPORTING i_object = 'MSAG' i_obj_name = i_msgid i_langu = i_langu i_mode = 'extra' i_extra = gv_msgxtra_txt. ENDIF.

    ENDMETHOD. "create_message_class

    METHOD create_message.

    DATA: lt_bdc TYPE TABLE OF bdcdata, ls_bdc TYPE bdcdata, ls_bdcp TYPE bdcdata, ls_radio LIKE ls_bdc-fnam, ls_opt TYPE ctu_params. DATA: ls_t100 TYPE t100, ls_t100u TYPE t100u, l_obj_name TYPE dokil-object.

    CALL METHOD set_context EXPORTING i_object = 'MESS'

    i_obj_name = i_msgid i_obj_name2 = i_msgno.

    SELECT SINGLE * FROM t100 INTO ls_t100 WHERE sprsl EQ i_langu AND arbgb EQ i_msgid AND msgnr EQ i_msgno.

    SELECT SINGLE * FROM t100u INTO ls_t100u WHERE arbgb EQ i_msgid AND msgnr EQ i_msgno. IF i_text EQ ls_t100-text. IF i_selfdef IS INITIAL AND ls_t100u-selfdef IS INITIAL OR

    i_selfdef IS NOT INITIAL AND ls_t100u-selfdef IS NOT INITIAL.

    CONCATENATE 'Message' i_msgno 'already exists' INTO gv_msgxtra_txt SEPARATED BY space. CALL METHOD lcl_wb=>write_msg_to_log EXPORTING i_object = 'MESS' i_obj_name = i_msgid i_langu = i_langu i_mode = 'extra'

  • 7/22/2019 NOTE_1741024

    43/70

    i_extra = gv_msgxtra_txt. RETURN. ENDIF. ENDIF.

    CHECK testrun IS INITIAL.

    CALL FUNCTION 'DOCU_OBJECT_NAME_CONCATENATE' EXPORTING docu_id = 'NA' element = i_msgid addition = i_msgno IMPORTING object = l_obj_name EXCEPTIONS OTHERS = 0.

    CALL METHOD add_to_transport EXPORTING i_object = 'MESS' i_obj_name = l_obj_name EXCEPTIONS OTHERS = 1. CHECK sy-subrc EQ 0.

    IF i_langu EQ sy-langu. "create or change message and write into transport request

    "------------------------------------------- ls_bdcp-program = 'SAPLWBMESSAGES'. ls_bdcp-dynpro = '0100'. ls_bdcp-dynbegin = 'X'. APPEND ls_bdcp TO lt_bdc.

    * ls_bdc-fnam = 'BDC_CURSOR'.* ls_bdc-fval = 'MSG_NUMMER'.* APPEND ls_bdc TO lt_bdc.

    ls_bdc-fnam = 'RSDAG-ARBGB'. ls_bdc-fval = i_msgid. APPEND ls_bdc TO lt_bdc.

    ls_bdc-fnam = 'MSG_NUMMER'. ls_bdc-fval = i_msgno. APPEND ls_bdc TO lt_bdc.

    ls_bdc-fnam = 'RSDAG-MSGFLAG'. ls_bdc-fval = 'X'. APPEND ls_bdc TO lt_bdc.

    ls_bdc-fnam = 'BDC_OKCODE'. ls_bdc-fval = '=WB_EDIT'. APPEND ls_bdc TO lt_bdc.

    "------------------------------------------- ls_bdcp-dynpro = '1000'. ls_bdcp-dynbegin = 'X'. APPEND ls_bdcp TO lt_bdc.

    ls_bdc-fnam = 'BDC_SUBSCR'.

  • 7/22/2019 NOTE_1741024

    44/70

    ls_bdc-fval = 'SAPLWBMESSAGES 0101SUB'. APPEND ls_bdc TO lt_bdc.

    ls_bdc-fnam = 'T100-TEXT(01)'. ls_bdc-fval = i_text. APPEND ls_bdc TO lt_bdc.

    ls_bdc-fnam = 'LISTTAB-DOKU_FLAG(01)'. IF i_selfdef IS INITIAL. ls_bdc-fval = ' '. ELSE. ls_bdc-fval = 'X'. ENDIF. APPEND ls_bdc TO lt_bdc.

    ls_bdc-fnam = 'BDC_OKCODE'. ls_bdc-fval = '=WB_SAVE'. APPEND ls_bdc TO lt_bdc.

    "------------------------------------------- ls_bdcp-dynpro = '1000'. ls_bdcp-dynbegin = 'X'. APPEND ls_bdcp TO lt_bdc.

    ls_bdc-fnam = 'BDC_OKCODE'. ls_bdc-fval = '=WB_BACK'. APPEND ls_bdc TO lt_bdc.

    "------------------------------------------- ls_bdcp-dynpro = '0100'. ls_bdcp-dynbegin = 'X'. APPEND ls_bdcp TO lt_bdc.

    ls_bdc-fnam = 'BDC_OKCODE'. ls_bdc-fval = '=WB_BACK'. APPEND ls_bdc TO lt_bdc.

    ls_opt-dismode = 'E'. ls_opt-racommit = 'X'. ls_opt-nobinpt = 'X'. ls_opt-nobiend = 'X'.

    "------------------------------------------- CALL TRANSACTION 'SE91' USING lt_bdc OPTIONS FROM ls_opt. ELSE. "update translation only ls_t100-arbgb = i_msgid. ls_t100-msgnr = i_msgno. ls_t100-sprsl = i_langu. ls_t100-text = i_text.

    INSERT t100 FROM ls_t100. "no activation needed ENDIF. gv_translation = 'X'.

    ENDMETHOD. "create_message

    METHOD create_mess_docu.

    STATICS: lt_line TYPE TABLE OF tline.

  • 7/22/2019 NOTE_1741024

    45/70

    DATA: ls_head TYPE thead, lt_line_old LIKE lt_line, ls_line TYPE tline, ls_tadir TYPE tadir, ls_dd04v TYPE dd04v, lv_no_masterlang.

    IF i_line IS NOT INITIAL. ls_line = i_line. SHIFT ls_line-tdline LEFT. APPEND ls_line TO lt_line. ELSE. CALL METHOD set_context EXPORTING i_object = 'MESS' i_obj_name = i_msgid i_obj_name2 = i_msgno i_text = 'Message Longtext'. "#EC NOTEXT

    ls_head-tdobject = 'DOKU'. CONCATENATE i_msgid i_msgno INTO ls_head-tdname. ls_head-tdid = 'NA'. "Nachricht/Message ls_head-tdspras = i_langu. ls_head-tdform = 'S_DOCU_SHOW'.

    ls_head-tdstyle = 'S_DOCUS1'. CALL FUNCTION 'DOCU_GET' EXPORTING id = ls_head-tdid(2) langu = ls_head-tdspras object = ls_head-tdname(60) TABLES line = lt_line_old EXCEPTIONS OTHERS = 0.

    IF lt_line_old[] EQ lt_line.

    "no update neccessary CONCATENATE 'Long text of message' i_msgno 'already exists' INTO gv_msgxtra_txt SEPARATED BY space. CALL METHOD lcl_wb=>write_msg_to_log EXPORTING i_object = 'MESS' i_obj_name = i_msgid i_langu = i_langu i_mode = 'extra' i_extra = gv_msgxtra_txt.

    REFRESH lt_line. RETURN.

    ENDIF.

    CHECK testrun IS INITIAL.

    CONCATENATE ls_head-tdid ls_head-tdname INTO ls_tadir-obj_name.

    CALL METHOD add_to_transport EXPORTING i_object = 'DOCU' i_obj_name = ls_tadir-obj_name

  • 7/22/2019 NOTE_1741024

    46/70

    EXCEPTIONS OTHERS = 0.

    SELECT SINGLE * FROM tadir INTO ls_tadir WHERE pgmid EQ 'R3TR' AND object EQ 'MSAG' AND obj_name EQ i_msgid. IF ls_head-tdspras NE ls_tadir-masterlang. lv_no_masterlang = 'X'. ENDIF.

    "create new version DATA l_dokversion TYPE dokhl-dokversion. SELECT MAX( dokversion ) FROM dokhl INTO l_dokversion WHERE id = ls_head-tdid(2) AND object = ls_head-tdname AND langu = ls_head-tdspras. ADD 1 TO l_dokversion.

    ls_head-tdfdate = sy-datum. ls_head-tdftime = sy-uzeit. ls_head-tdfuser = sy-uname. ls_head-tdldate = sy-datum. ls_head-tdltime = sy-uzeit.

    ls_head-tdluser = sy-uname. CALL FUNCTION 'DOCU_UPDATE' EXPORTING* ACTCLASS = ' ' head = ls_head no_masterlang = lv_no_masterlang state = 'A' typ = 'E' version = l_dokversion TABLES line = lt_line.

    gv_translation = 'X'. REFRESH lt_line. ENDIF.

    ENDMETHOD. "create_mess_docu

    METHOD create_dtel_docu.

    STATICS: lt_line TYPE TABLE OF tline.

    DATA: ls_head TYPE thead, lt_line_old LIKE lt_line, ls_line TYPE tline,

    ls_tadir TYPE tadir, ls_dd04v TYPE dd04v, lv_no_masterlang.

    IF i_line IS NOT INITIAL. ls_line = i_line. SHIFT ls_line-tdline LEFT. APPEND ls_line TO lt_line. ELSE. CALL METHOD set_context

  • 7/22/2019 NOTE_1741024

    47/70

    EXPORTING i_object = 'DTEL' i_obj_name = i_rollname i_text = 'Data Element Lontext'. "#EC NOTEXT

    ls_head-tdobject = 'DOKU'. ls_head-tdname = i_rollname. ls_head-tdid = 'DE'. "Data element ls_head-tdspras = i_langu. ls_head-tdform = 'S_DOCU_SHOW'. ls_head-tdstyle = 'S_DOCUS1'.

    CALL FUNCTION 'DOCU_GET' EXPORTING id = ls_head-tdid(2) langu = ls_head-tdspras object = ls_head-tdname(60) TABLES line = lt_line_old EXCEPTIONS OTHERS = 0.

    IF lt_line_old[] EQ lt_line. "no update neccessary

    CONCATENATE 'Long text of data element' 'already exists' INTO gv_msgxtra_txt SEPARATED BY space.

    CALL METHOD lcl_wb=>write_msg_to_log EXPORTING i_object = 'DTEL' i_obj_name = i_rollname i_langu = i_langu i_mode = 'extra' i_extra = gv_msgxtra_txt. REFRESH lt_line. RETURN. ENDIF.

    CHECK testrun IS INITIAL.

    CONCATENATE ls_head-tdid ls_head-tdname INTO ls_tadir-obj_name.

    CALL METHOD add_to_transport EXPORTING i_object = 'DOCU' i_obj_name = ls_tadir-obj_name EXCEPTIONS OTHERS = 1. CHECK sy-subrc EQ 0.

    SELECT SINGLE * FROM tadir INTO ls_tadir WHERE pgmid EQ 'R3TR' AND object EQ 'DTEL' AND obj_name EQ i_rollname. IF ls_head-tdspras NE ls_tadir-masterlang. lv_no_masterlang = 'X'. ENDIF.

    "create new version DATA l_dokversion TYPE dokhl-dokversion.

  • 7/22/2019 NOTE_1741024

    48/70

    SELECT MAX( dokversion ) FROM dokhl INTO l_dokversion WHERE id = ls_head-tdid(2) AND object = ls_head-tdname AND langu = ls_head-tdspras. ADD 1 TO l_dokversion.

    ls_head-tdfdate = sy-datum. ls_head-tdftime = sy-uzeit. ls_head-tdfuser = sy-uname. ls_head-tdldate = sy-datum. ls_head-tdltime = sy-uzeit. ls_head-tdluser = sy-uname.

    CALL FUNCTION 'DOCU_UPDATE' EXPORTING* ACTCLASS = ' ' head = ls_head no_masterlang = lv_no_masterlang state = 'A' typ = 'E' version = l_dokversion TABLES line = lt_line.

    gv_translation = 'X'. REFRESH lt_line. ENDIF.

    ENDMETHOD. "create_dtel_docu

    METHOD create_other_docu.

    STATICS: lt_line TYPE TABLE OF tline.

    DATA: ls_head TYPE thead, lt_line_old LIKE lt_line, ls_line TYPE tline,

    ls_tadir TYPE tadir, ls_dd04v TYPE dd04v, lv_no_masterlang.

    IF i_line IS NOT INITIAL. ls_line = i_line. SHIFT ls_line-tdline LEFT. APPEND ls_line TO lt_line. ELSE. CALL METHOD set_context EXPORTING i_object = 'DOCU' i_obj_name = i_docname(2)

    i_obj_name2 = i_docname+2.

    ls_head-tdobject = 'DOKU'. ls_head-tdname = i_docname+2. ls_head-tdid = i_docname(2). ls_head-tdspras = i_langu. ls_head-tdform = 'S_DOCU_SHOW'. ls_head-tdstyle = 'S_DOCUS1'.

    CALL FUNCTION 'DOCU_GET'

  • 7/22/2019 NOTE_1741024

    49/70

    EXPORTING id = ls_head-tdid(2) langu = ls_head-tdspras object = ls_head-tdname(60) TABLES line = lt_line_old EXCEPTIONS OTHERS = 0.

    IF lt_line_old[] EQ lt_line. "no update neccessary CONCATENATE 'Documentation' i_docname+2 'already exists' INTO gv_msgxtra_txt SEPARATED BY space.

    CALL METHOD lcl_wb=>write_msg_to_log EXPORTING i_object = 'DOCU' i_obj_name = i_docname(2) i_langu = i_langu i_mode = 'extra' i_extra = gv_msgxtra_txt. REFRESH lt_line. RETURN. ELSE.

    IF lt_line_old[] IS INITIAL. CONCATENATE 'Documentation' i_docname+2 'will be created' INTO gv_msgxtra_txt SEPARATED BY space. ELSE. CONCATENATE 'Documentation' i_docname+2 'will be changed' INTO gv_msgxtra_txt SEPARATED BY space. ENDIF. CALL METHOD lcl_wb=>write_msg_to_log EXPORTING i_object = 'DOCU' i_obj_name = i_docname(2) i_langu = i_langu i_mode = 'extra'

    i_extra = gv_msgxtra_txt. ENDIF.

    CHECK testrun IS INITIAL.

    CASE ls_head-tdid. WHEN 'TX'. ls_tadir-object = 'DOCT'. ls_tadir-obj_name = ls_head-tdname. WHEN 'HY'. ls_tadir-object = 'DSYS'. ls_tadir-obj_name = ls_head-tdname. WHEN OTHERS.

    ls_tadir-object = 'DOCU'. CONCATENATE ls_head-tdid ls_head-tdname INTO ls_tadir-obj_name. ENDCASE.

    CALL METHOD add_to_transport "and create TADIR entry EXPORTING i_object = ls_tadir-object i_obj_name = ls_tadir-obj_name EXCEPTIONS OTHERS = 1.

  • 7/22/2019 NOTE_1741024

    50/70

    CHECK sy-subrc EQ 0.

    CALL FUNCTION 'AKB_GET_TADIR' EXPORTING obj_type = ls_tadir-object obj_name = ls_tadir-obj_name IMPORTING tadir = ls_tadir EXCEPTIONS OTHERS = 1. IF sy-subrc 0. MESSAGE i319(01) WITH 'Error reading' ls_tadir-object ls_tadir-obj_name'.' . "#EC NOTEXT RETURN. ENDIF.

    IF ls_head-tdspras NE ls_tadir-masterlang. lv_no_masterlang = 'X'. ENDIF.

    "create new version DATA l_dokversion TYPE dokhl-dokversion. SELECT MAX( dokversion ) FROM dokhl INTO l_dokversion WHERE id = ls_head-tdid(2)

    AND object = ls_head-tdname AND langu = ls_head-tdspras. ADD 1 TO l_dokversion.

    ls_head-tdfdate = sy-datum. ls_head-tdftime = sy-uzeit. ls_head-tdfuser = sy-uname. ls_head-tdldate = sy-datum. ls_head-tdltime = sy-uzeit. ls_head-tdluser = sy-uname.

    CALL FUNCTION 'DOCU_UPDATE' EXPORTING

    * ACTCLASS = ' ' head = ls_head no_masterlang = lv_no_masterlang state = 'A' typ = 'E' version = l_dokversion TABLES line = lt_line. gv_translation = 'X'. REFRESH lt_line. ENDIF.

    ENDMETHOD. "create_other_docu

    METHOD create_function_group.

    DATA: l_text LIKE i_text, l_tadir_name TYPE tadir-obj_name.

    CALL METHOD set_context EXPORTING i_object = 'FUGR' i_obj_name = i_area.

  • 7/22/2019 NOTE_1741024

    51/70

    CALL FUNCTION 'RPY_EXISTENCE_CHECK_FUGR' EXPORTING name = i_area* LIMU_KEY = EXCEPTIONS not_exist = 1 OTHERS = 2. IF sy-subrc EQ 0. "no update neccessary CONCATENATE 'Function group' 'already exists' INTO gv_msgxtra_txt SEPARATED BY space.

    CALL METHOD lcl_wb=>write_msg_to_log EXPORTING i_object = 'FUGR' i_obj_name = i_area i_langu = i_langu i_mode = 'extra' i_extra = gv_msgxtra_txt. RETURN. ENDIF.

    CHECK testrun IS INITIAL.

    IF i_text IS INITIAL. l_text = i_area. ELSE. l_text = i_text. ENDIF.

    * CALL METHOD add_to_transport* EXPORTING* i_object = 'FUGR'* i_obj_name = i_area* i_devclass = i_devclass* i_langu = i_langu "masterlanguage (only relevant during first call)

    * EXCEPTIONS* OTHERS = 1.* CHECK sy-subrc EQ 0.

    "create TADIR entry in advance avoid popup IF i_langu CA 'ED'. "set correct language and package on first call per object "skip this for other languages than EN/DE. l_tadir_name = i_area. CALL FUNCTION 'TR_TADIR_INTERFACE' EXPORTING* WI_DELETE_TADIR_ENTRY = ' ' wi_test_modus = space

    wi_tadir_pgmid = 'R3TR' wi_tadir_object = 'FUGR' wi_tadir_obj_name = l_tadir_name wi_tadir_devclass = i_devclass wi_tadir_masterlang = i_langu EXCEPTIONS OTHERS = 25. IF sy-subrc 0. ENDIF. ENDIF.

  • 7/22/2019 NOTE_1741024

    52/70

    IF i_devclass IS NOT INITIAL. "set correct package in memory FREE MEMORY ID 'EUK'. SET PARAMETER ID 'EUK' FIELD i_devclass. ENDIF.

    "SELECT SINGLE FROM tlibg. "SELECT SINGLE FROM tlibt. CALL FUNCTION 'RS_FUNCTION_POOL_ADD' EXPORTING aktion = 'INSR' "UPDA area = i_area corrnum = gv_trkorr text = l_text uname = sy-uname* WITH_MONITOR = ' '* with_korr = ' ' "pass ' ' if add_to_transport has happend! save_active = 'X'* WB_FB_MANAGER =* IMPORTING* NEW_NAME = EXCEPTIONS canceled_in_corr = 1

    enqueue_system_failure = 2 function_pool_exist = 3 not_executed = 4 no_modify_permission = 5 no_show_permission = 6 permission_failure = 7 OTHERS = 8. IF sy-subrc 0. CALL METHOD log_message. ENDIF.

    UPDATE tadir SET masterlang = i_langu WHERE pgmid EQ 'R3TR'

    AND object EQ 'FUGR' AND obj_name EQ i_area AND masterlang NE i_langu.

    ENDMETHOD. "create_function_group

    METHOD create_program_text.

    DATA: lt_docu TYPE TABLE OF tline, lt_textpool TYPE TABLE OF textpool, l_text LIKE i_text. FIELD-SYMBOLS: TYPE textpool.

    CALL METHOD set_context EXPORTING i_object = 'REPT' i_obj_name = i_progname i_obj_name2 = i_key.

    CALL FUNCTION 'RPY_PROGRAM_READ' EXPORTING language = i_langu program_name = i_progname

  • 7/22/2019 NOTE_1741024

    53/70

    with_includelist = space only_texts = 'X' read_latest_version = 'X' with_lowercase = 'X' TABLES textelements = lt_textpool EXCEPTIONS cancelled = 1 not_found = 2 permission_error = 3 OTHERS = 4. IF sy-subrc EQ 2. READ TEXTPOOL i_progname INTO lt_textpool LANGUAGE i_langu. ELSEIF sy-subrc NE 0. CONCATENATE 'Error while reading' 'Program text' INTO gv_msgxtra_txt SEPARATED BY space. CALL METHOD lcl_wb=>write_msg_to_log EXPORTING i_object = 'REPT' i_obj_name = i_progname i_langu = i_langu i_mode = 'extra' i_extra = gv_msgxtra_txt. RETURN.

    ENDIF. l_text = i_text. IF i_id EQ 'S' AND i_text(8) IS NOT INITIAL AND i_text NE 'D .'. "if selection text does note begin with 8 space -> insert them SHIFT l_text LEFT DELETING LEADING space. SHIFT l_text RIGHT BY 8 PLACES. ENDIF.

    READ TABLE lt_textpool ASSIGNING WITH KEY id = i_id key = i_key. IF sy-subrc EQ 0. "already exists

    IF l_text EQ -entry AND i_length EQ -length.

    CONCATENATE 'Program text' 'already exists' INTO gv_msgxtra_txt SEPARATED BY space. CALL METHOD lcl_wb=>write_msg_to_log EXPORTING i_object = 'REPT' i_obj_name = i_progname i_langu = i_langu i_mode = 'extra' i_extra = gv_msgxtra_txt.

    RETURN. "nothing to do ELSE. "update extsing entry -entry = l_text. IF i_length IS INITIAL OR i_length LT strlen( l_text ). -length = strlen( l_text ). ELSE. -length = i_length. ENDIF. ENDIF.

  • 7/22/2019 NOTE_1741024

    54/70

    ELSE. "add new entry APPEND INITIAL LINE TO lt_textpool ASSIGNING . -id = i_id. -key = i_key. -entry = l_text. IF i_length IS INITIAL. -length = strlen( l_text ). ELSE. -length = i_length. ENDIF. ENDIF.

    CHECK testrun IS INITIAL.

    CALL METHOD add_to_transport EXPORTING i_object = 'REPT' i_obj_name = i_progname EXCEPTIONS OTHERS = 1. CHECK sy-subrc EQ 0.

    * CALL FUNCTION 'RV_REPORT_WRITE_LANGU' "not in SAP_BASIS

    * EXPORTING* rw_langu = i_langu* rw_reportname = i_progname* TABLES* rw_docu = lt_docu* rw_textpool = lt_textpool.

    INSERT TEXTPOOL i_progname FROM lt_textpool LANGUAGE i_langu.

    ENDMETHOD. "create_program_text

    METHOD create_user_interface.

    DATA: lt_sta TYPE TABLE OF rsmpe_stat, lt_fun TYPE TABLE OF rsmpe_funt, lt_men TYPE TABLE OF rsmpe_men, lt_mtx TYPE TABLE OF rsmpe_mnlt, lt_act TYPE TABLE OF rsmpe_act, lt_but TYPE TABLE OF rsmpe_but, lt_pfk TYPE TABLE OF rsmpe_pfk, lt_set TYPE TABLE OF rsmpe_staf, lt_doc TYPE TABLE OF rsmpe_atrt, lt_tit TYPE TABLE OF rsmpe_titt, lt_biv TYPE TABLE OF rsmpe_buts, ls_tr_key TYPE trkey, ls_adm TYPE rsmpe_adm,

    ls_guistatus LIKE LINE OF gr_guistatus VALUE 'IEQ'.

    CALL METHOD set_context EXPORTING i_object = 'CUAD' i_obj_name = i_progname.

    ls_guistatus-low = i_progname. COLLECT ls_guistatus INTO gr_guistatus.

  • 7/22/2019 NOTE_1741024

    55/70

    CALL FUNCTION 'RS_CUA_INTERNAL_FETCH' EXPORTING program = i_progname language = i_langu state = 'A' TABLES sta = lt_sta fun = lt_fun men = lt_men mtx = lt_mtx act = lt_act but = lt_but pfk = lt_pfk set = lt_set doc = lt_doc tit = lt_tit biv = lt_biv EXCEPTIONS not_found = 1 OTHERS = 99. IF lt_sta EQ it_sta AND lt_fun EQ it_fun AND lt_men EQ it_men AND lt_mtx EQ it_mtx AND

    lt_act EQ it_act AND lt_but EQ it_but AND lt_pfk EQ it_pfk AND lt_set EQ it_set AND lt_doc EQ it_doc AND lt_tit EQ it_tit AND lt_biv EQ it_biv.

    CONCATENATE 'CUA-Definition' 'already exists' INTO gv_msgxtra_txt SEPARATED BY space. CALL METHOD lcl_wb=>write_msg_to_log EXPORTING i_object = 'CUAD'

    i_obj_name = i_progname i_mode = 'extra' i_extra = gv_msgxtra_txt.

    RETURN. ENDIF.

    CHECK testrun IS INITIAL.

    CALL METHOD add_to_transport EXPORTING i_object = 'CUAD' i_obj_name = i_progname

    i_langu = i_langu EXCEPTIONS OTHERS = 1. CHECK sy-subrc EQ 0.

    ls_tr_key-obj_type = 'PROG'. ls_tr_key-obj_name = i_progname. ls_tr_key-sub_type = 'CUAD'. ls_tr_key-sub_name = i_progname.

  • 7/22/2019 NOTE_1741024

    56/70

    CALL FUNCTION 'RS_CUA_INTERNAL_WRITE' EXPORTING program = i_progname language = i_langu tr_key = ls_tr_key adm = ls_adm state = 'I' "I = inactive A = activ TABLES sta = it_sta fun = it_fun men = it_men mtx = it_mtx act = it_act but = it_but pfk = it_pfk set = it_set doc = it_doc tit = it_tit biv = it_biv EXCEPTIONS not_found = 1 OTHERS = 2. IF sy-subrc 0. MESSAGE ID sy-msgid TYPE 'E' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msg

    v3 sy-msgv4. ENDIF. IF sy-subrc 0. CALL METHOD log_message. RETURN. ENDIF.

    ENDMETHOD. "create_user_interface

    METHOD create_index.

    DATA: l_obj_name TYPE trobj_name, ls_dwinactiv TYPE dwinactiv,

    ls_indexes LIKE LINE OF gr_indexes VALUE 'IEQ', ls_indxtab LIKE LINE OF gr_indxtab VALUE 'IEQ', ls_indxname LIKE LINE OF gr_indxname VALUE 'IEQ'.

    "CONCATENATE i_table i_indexname INTO l_obj_name RESPECTING BLANKS. l_obj_name = i_tabname. l_obj_name+30 = i_indexname.

    ls_indexes-low = l_obj_name. ls_indxtab-low = i_tabname. ls_indxname-low = i_indexname.

    CALL METHOD set_context

    EXPORTING i_object = 'INDX' i_obj_name = l_obj_name.

    * check object exists DATA: l_index_state TYPE ddgotstate. CALL FUNCTION 'DDIF_INDX_GET' EXPORTING name = i_tabname id = i_indexname

  • 7/22/2019 NOTE_1741024

    57/70

    IMPORTING gotstate = l_index_state EXCEPTIONS illegal_input = 1 OTHERS = 2. IF sy-subrc 0. CALL METHOD log_message. EXIT. ENDIF.

    CHECK testrun IS INITIAL.

    CALL METHOD add_to_transport EXPORTING i_object = 'INDX' i_obj_name = l_obj_name i_devclass = i_devclass i_langu = i_langu "masterlanguage (only relevant during first call) EXCEPTIONS OTHERS = 1. CHECK sy-subrc EQ 0.

    DATA: ls_index TYPE dd12v. ls_index-sqltab = i_tabname.

    ls_index-indexname = i_indexname. ls_index-ddtext = i_text. ls_index-ddlanguage = i_langu. FIELD-SYMBOLS: TYPE any. ASSIGN ('LS_INDEX-ISEXTIND') TO . IF sy-subrc EQ 0. = i_isextind. ENDIF.

    CALL FUNCTION 'DDIF_INDX_PUT' EXPORTING name = i_tabname id = i_indexname

    dd12v_wa = ls_index TABLES dd17v_tab = it_fields EXCEPTIONS indx_not_found = 1 name_inconsistent = 2 indx_inconsistent = 3 put_failure = 4 put_refused = 5 OTHERS = 6. IF sy-subrc 0. CALL METHOD log_message. EXIT.

    ENDIF.

    ls_dwinactiv-object = 'INDX'. ls_dwinactiv-obj_name = l_obj_name. ls_dwinactiv-uname = sy-uname. INSERT dwinactiv FROM ls_dwinactiv.

    COLLECT ls_indexes INTO gr_indexes. COLLECT ls_indxtab INTO gr_indxtab. COLLECT ls_indxname INTO gr_indxname.

  • 7/22/2019 NOTE_1741024

    58/70

    ENDMETHOD. "create_index

    METHOD modify_stcs. "MF

    DATA: ls_hdr_old TYPE REF TO data, ls_where TYPE rfc_db_opt, lt_where TYPE TABLE OF rfc_db_opt. FIELD-SYMBOLS: TYPE c, TYPE sy-uname, TYPE sy-datum, TYPE sy-uname, TYPE sy-datum, TYPE any. CONSTANTS: c_hdr_table TYPE tabname VALUE 'STC_SCN_HDR', c_hdt_table TYPE tabname VALUE 'STC_SCN_HDR_T', c_tsk_table TYPE tabname VALUE 'STC_SCN_TASKS'.

    ASSIGN COMPONENT 'SCENARIO_ID' OF STRUCTURE is_hdr TO . IF sy-subrc 0. RETURN. ENDIF.

    CALL METHOD set_context

    EXPORTING i_object = 'STCS' i_obj_name = .

    CHECK testrun IS INITIAL.

    * handle create/change user and date CREATE DATA ls_hdr_old TYPE (c_hdr_table). ASSIGN ls_hdr_old->* TO . REFRESH lt_where. ls_where = 'scenario_id EQ ''&1'''. REPLACE '&1' IN ls_where WITH . APPEND ls_where TO lt_where[].

    SELECT SINGLE * FROM (c_hdr_table) INTO WHERE (lt_where). IF sy-subrc = 0. ASSIGN COMPONENT 'CREATED_BY' OF STRUCTURE TO . IF sy-subrc = 0. ASSIGN COMPONENT 'CREATED_BY' OF STRUCTURE is_hdr TO . IF sy-subrc = 0. = . ENDIF. ENDIF. ASSIGN COMPONENT 'CREATED_ON' OF STRUCTURE TO . IF sy-subrc = 0. ASSIGN COMPONENT 'CREATED_ON' OF STRUCTURE is_hdr TO . IF sy-subrc = 0. = . ENDIF. ENDIF. ELSE.

    ASSIGN COMPONENT 'CREATED_BY' OF STRUCTURE is_hdr TO . IF sy-subrc = 0. = sy-uname. ENDIF. ASSIGN COMPONENT 'CREATED_ON' OF STRUCTURE is_hdr TO . IF sy-subrc = 0. = sy-datum. ENDIF. ENDIF. ASSIGN COMPONENT 'CHANGED_BY' OF STRUCTURE is_hdr TO . IF sy-subrc = 0. = sy-uname. ENDIF. ASSIGN COMPONENT 'CHANGED_ON' OF STRUCTURE is_hdr TO . IF sy-subrc = 0. = sy-datum. ENDIF.

  • 7/22/2019 NOTE_1741024

    59/70

    CALL METHOD add_to_transport "and create TADIR EXPORTING i_object = 'STCS' i_obj_name = i_devclass = i_devclass i_langu = i_langu EXCEPTIONS OTHERS = 1. IF sy-subrc = 0. DELETE FROM (c_hdr_table) WHERE scenario_id = . DELETE FROM (c_hdt_table) WHERE scenario_id = . DELETE FROM (c_tsk_table) WHERE scenario_id = . INSERT (c_hdr_table) FROM is_hdr. INSERT (c_hdt_table) FROM TABLE it_hdt[]. INSERT (c_tsk_table) FROM TABLE it_tsk[]. ENDIF.

    ENDMETHOD. "modify_stcs

    METHOD log_message.

    DATA: ls_msg TYPE bal_s_msg.

    MOVE-CORRESPONDING syst TO ls_msg.

    CALL FUNCTION 'BAL_LOG_MSG_ADD' EXPORTING i_log_handle = gv_log_handle i_s_msg = ls_msg.

    ENDMETHOD. "log_message

    METHOD display_log.

    DATA: lt_log_handle TYPE bal_t_logh, ls_profile TYPE bal_s_prof, l_s_fcat TYPE bal_s_fcat,

    lt_dfies TYPE TABLE OF dfies, ls_dfies TYPE dfies. DATA: ls_filter TYPE bal_s_lfil, lr_filter TYPE bal_s_extn, "range table lr_extnumber TYPE bal_s_extn, "range table ls_s_log TYPE bal_s_log, lt_log_header TYPE balhdr_t, lr_handle TYPE bal_s_logh. "range table

    IF gv_log_handle IS INITIAL.

    CLEAR: ls_filter, lr_extnumber.

    *- Search only log file of this application lr_filter-sign = 'I'. lr_filter-option = 'EQ'. lr_filter-low = c_bal_object. APPEND lr_filter TO ls_filter-object.

    lr_filter-sign = 'I'. lr_filter-option = 'EQ'. lr_filter-low = c_bal_subobj. APPEND lr_filter TO ls_filter-subobject.

  • 7/22/2019 NOTE_1741024

    60/70

    *- Search only log file of this change number lr_extnumber-low = sy-repid. lr_extnumber-sign = 'I'. lr_extnumber-option = 'EQ'. APPEND lr_extnumber TO ls_filter-extnumber.

    *-- Search for log files on the database CALL FUNCTION 'BAL_DB_SEARCH' EXPORTING i_s_log_filter = ls_filter IMPORTING e_t_log_header = lt_log_header EXCEPTIONS log_not_found = 1 no_filter_criteria = 2 OTHERS = 3. IF sy-subrc EQ 0.*-- Load log files from database into memory CALL FUNCTION 'BAL_DB_LOAD' EXPORTING i_t_log_header = lt_log_header IMPORTING e_t_log_handle = lt_log_handle

    EXCEPTIONS no_logs_specified = 1 log_not_found = 2 log_already_loaded = 3 OTHERS = 4. ENDIF. ELSE. APPEND gv_log_handle TO lt_log_handle. ENDIF.

    IF 1 = 1. "grid CALL FUNCTION 'BAL_DSP_PROFILE_SINGLE_LOG_GET'

    IMPORTING e_s_display_profile = ls_profile EXCEPTIONS OTHERS = 0. "Set profile ls_profile-show_all = abap_on. ls_profile-use_grid = abap_on. ls_profile-tree_ontop = abap_on. ls_profile-exp_level = 1. ls_profile-mess_mark = abap_on. ELSE. "tree CALL FUNCTION 'BAL_DSP_PROFILE_DETLEVEL_GET'

    IMPORTING e_s_display_profile = ls_profile EXCEPTIONS OTHERS = 0. ENDIF.

    "add own fields to field cat CALL FUNCTION 'DDIF_FIELDINFO_GET' EXPORTING tabname = c_bal_context

  • 7/22/2019 NOTE_1741024

    61/70

    TABLES dfies_tab = lt_dfies EXCEPTIONS not_found = 1 internal_error = 2 OTHERS = 3. ASSERT sy-subrc EQ 0.

    LOOP AT lt_dfies INTO ls_dfies WHERE fieldname NE 'PGMID'. l_s_fcat-ref_table = c_bal_context. l_s_fcat-ref_field = ls_dfies-fieldname.* l_s_fcat-col_pos = 100 + sy-tabix. "most rigth columns APPEND l_s_fcat TO ls_profile-mess_fcat. ENDLOOP.

    "set parameters for saving layout. ls_profile-disvariant-report = sy-repid. ls_profile-disvariant-handle = c_bal_subobj.

    CALL FUNCTION 'BAL_DSP_LOG_DISPLAY' EXPORTING i_t_log_handle = lt_log_handle i_s_display_profile = ls_profile i_amodal = space

    EXCEPTIONS OTHERS = 0.

    CALL FUNCTION 'BAL_DB_SAVE' EXPORTING i_t_log_handle = lt_log_handle EXCEPTIONS OTHERS = 0.

    ENDMETHOD. "display_log

    METHOD set_context. STATICS: BEGIN OF lss_key, "save last key

    i_object TYPE e071-object, i_obj_name TYPE adir_key-obj_name, i_obj_name2 TYPE adir_key-obj_name, i_text TYPE string, END OF lss_key.

    DATA: ls_msg_defaults TYPE bal_s_mdef, ls_context TYPE adir_key, ls_object_text TYPE ko100, ls_doktype TYPE dd07v, l_text(70), ls_key LIKE lss_key.

    ls_key-i_object = i_object. ls_key-i_obj_name = i_obj_name. ls_key-i_obj_name2 = i_obj_name2. ls_key-i_text = i_text. IF ls_key EQ lss_key. "check last key / avoid double message in log RETURN. ELSE. lss_key = ls_key. ENDIF.

  • 7/22/2019 NOTE_1741024

    62/70

    ls_context-object = i_object. CONCATENATE i_obj_name i_obj_name2 INTO ls_context-obj_name. ls_msg_defaults-log_handle = gv_log_handle. ls_msg_defaults-context-value = ls_context. ls_msg_defaults-context-tabname = c_bal_context.

    CALL FUNCTION 'BAL_GLB_MSG_DEFAULTS_SET' EXPORTING i_s_msg_defaults = ls_msg_defaults EXCEPTIONS OTHERS = 0.

    IF i_text IS INITIAL. l_text = get_object_text( i_object = i_object i_obj_name = i_obj_name ). ELSE. l_text = i_text. ENDIF.

    IF l_text IS NOT INITIAL. CALL FUNCTION 'BAL_LOG_MSG_ADD_FREE_TEXT' EXPORTING i_msgty = ' ' i_text = l_text EXCEPTIONS

    OTHERS = 0. ENDIF.

    ENDMETHOD. "set_context

    METHOD support_pack_applied.

    DATA: lt_trkorr TYPE TABLE OF trkorr.

    SPLIT i_trkorr_list AT space INTO TABLE lt_trkorr. SELECT COUNT( * ) FROM e070 UP TO 1 ROWS FOR ALL ENTRIES IN lt_trkorr WHERE trkorr EQ lt_trkorr-table_line.

    IF sy-subrc EQ 0. r_applied = 'X'. ENDIF.

    ENDMETHOD. "support_pack_applied

    METHOD software_comp_applied. CLEAR e_cvers. SELECT SINGLE * FROM cvers INTO e_cvers WHERE component = i_component. IF sy-subrc IS NOT INITIAL. RAISE not_applied.

    ENDIF. ENDMETHOD. "software_comp_applied

    METHOD write_msg_to_log. DATA: lv_mode TYPE string, l_text(70) TYPE c, l_text_added(70) VALUE 'was added to transport request', l_text_not_added(70) VALUE 'was not added to transport request', l_text_exist(70) VALUE 'already exists', lv_msgty TYPE symsgty,

  • 7/22/2019 NOTE_1741024

    63/70

    l_langu(2) TYPE c.

    l_text = get_object_text( i_object = i_object i_obj_name = i_obj_name ).

    lv_mode = i_mode. TRANSLATE lv_mode TO UPPER CASE. CASE lv_mode. WHEN 'ADD'. CONCATENATE l_text l_text_added i_tkorr INTO l_text SEPARATED BY space. lv_msgty = 'S'. WHEN 'NOTADD'. CONCATENATE l_text l_text_not_added i_tkorr INTO l_text SEPARATED BY space. lv_msgty = 'E'. WHEN 'EXIST'. CONCATENATE l_text l_text_exist INTO l_text SEPARATED BY space. WHEN 'EXTRA'. WHEN OTHERS. l_text = 'Undefined Message!'. lv_msgty = 'E'. ENDCASE.

    IF i_extra IS NOT INITIAL. l_text = i_extra.

    ENDIF. IF i_langu IS NOT INITIAL. WRITE: i_langu TO l_langu NO-GAP. CONCATENATE l_text 'in original language' l_langu INTO l_text SEPARATED BYspace. ENDIF.

    CALL FUNCTION 'BAL_LOG_MSG_ADD_FREE_TEXT' EXPORTING i_msgty = lv_m