class /DESO/DH_UTILITIES definition public final create public . public section. data GT_WHERE type ICL_LINE_TT . class-methods GET_PARAM importing value(PARAM) type /DESO/DH_OBJECT value(DATA) type /DESO/S_DATA returning value(VALUE) type EDC_REFKEY . class-methods SET_PARAM importing value(PARAM) type /DESO/DH_OBJECT value(VALUE) type EDC_REFKEY changing !CS_DATA type /DESO/S_DATA . methods INSERT_MESSAGE importing !IV_VIEW type /DESO/DH_VIEW !IV_OBJECT type /DESO/DH_OBJECT !IV_OBJKEY type EDC_REFKEY !IV_REFOBJ type /DESO/DH_OBJECT !IV_REFKEY type EDC_REFKEY !IV_REFFLD type FIELDNAME optional !IV_MSGTY type SYST_MSGTY optional !IV_MSGID type SYST_MSGID optional !IV_MSGNO type SYST_MSGNO optional !IV_MSGV1 type SYST_MSGV optional !IV_MSGV2 type SYST_MSGV optional !IV_MSGV3 type SYST_MSGV optional !IV_MSGV4 type SYST_MSGV optional !IV_MSGTXT type NATXT optional changing !IS_DATA type /DESO/DH_MESSAGE . methods GET_WHERE importing !IV_TABNAME type TABNAME !IV_OBJECT type /DESO/DH_OBJECT !IV_OBJKEY type EDC_REFKEY . methods GET_TAB importing !IV_OBJECT type /DESO/DH_OBJECT exporting !ET_TABNAME type /DESO/DH_TT_TABNAME !ET_CHECK_FIELD type /DESO/DH_TT_CHECK_FIELD exceptions NOT_CUSTOMIZED . PROTECTED SECTION. private section. ENDCLASS. CLASS /DESO/DH_UTILITIES IMPLEMENTATION. METHOD get_tab. SELECT tabname FROM /deso/dh_c_tab INTO TABLE et_tabname WHERE object = iv_object. IF sy-subrc = 0. SELECT * FROM dd03l INTO CORRESPONDING FIELDS OF TABLE et_check_field FOR ALL ENTRIES IN et_tabname WHERE tabname = et_tabname-tabname AND checktable NE space AND NOT ( fieldname EQ 'CLIENT' OR fieldname EQ 'MANDT' ) AND domname NE 'AD_ADDRNUM'. ENDIF. ENDMETHOD. METHOD get_where. DATA: ls_fieldname TYPE fieldname. DATA: ls_value TYPE string. DATA: ls_where TYPE string. REFRESH gt_where. ls_value = '"' && iv_objkey && '"'. REPLACE ALL OCCURRENCES OF '"' IN ls_value WITH ''''. SELECT fieldname FROM dd03l INTO ls_fieldname WHERE tabname = iv_tabname AND keyflag = abap_true ORDER BY position. CHECK ls_fieldname NE 'CLIENT' AND ls_fieldname NE 'MANDT' AND ls_fieldname(1) NE '.'. CONCATENATE ls_fieldname '=' ls_value INTO ls_where SEPARATED BY space . APPEND ls_where TO gt_where. EXIT. ENDSELECT. ENDMETHOD. METHOD insert_message. DATA: lv_msgtxt TYPE natxt. DATA: lv_msgnr TYPE msgnr. DATA: lv_msgid TYPE syst_msgid. DATA: lv_msgty TYPE syst_msgty. DATA: ls_data TYPE /deso/dh_message. lv_msgnr = iv_msgno. lv_msgty = iv_msgty. lv_msgid = iv_msgid. IF lv_msgid IS INITIAL. lv_msgid = '/DESO/'. ENDIF. IF lv_msgty IS INITIAL. lv_msgty = 'E'. ENDIF. IF iv_msgtxt IS INITIAL. CALL FUNCTION 'MESSAGE_PREPARE' EXPORTING language = 'D' msg_id = lv_msgid msg_no = lv_msgnr msg_var1 = iv_msgv1 msg_var2 = iv_msgv2 msg_var3 = iv_msgv3 msg_var4 = iv_msgv4 IMPORTING msg_text = lv_msgtxt EXCEPTIONS function_not_completed = 1 message_not_found = 2 OTHERS = 3. ELSE. lv_msgtxt = iv_msgtxt. ENDIF. is_data-object = iv_object. is_data-objkey = iv_objkey. is_data-refobject = iv_refobj. is_data-refobjkey = iv_refkey. is_data-reffld = iv_reffld. is_data-check_view = iv_view. is_data-msgty = lv_msgty. is_data-msgid = lv_msgid. is_data-msgno = lv_msgnr. is_data-msgv1 = iv_msgv1. is_data-msgv2 = iv_msgv2. is_data-msgv3 = iv_msgv3. is_data-msgv4 = iv_msgv4. is_data-msgtxt = lv_msgtxt. is_data-crdate = sy-datum. is_data-crtime = sy-uzeit. is_data-crname = sy-uname. is_data-status = '@0A@'. DO. SELECT SINGLE * FROM /deso/dh_message WHERE check_view = @is_data-check_view AND object = @is_data-object AND objkey = @is_data-objkey AND class = @is_data-class AND method = @is_data-method AND refobject = @is_data-refobject AND refobjkey = @is_data-refobjkey AND reffld = @is_data-reffld AND msgty = @is_data-msgty AND msgid = @is_data-msgid AND msgno = @is_data-msgno INTO @ls_data. IF sy-subrc EQ 0. SELECT SINGLE FOR UPDATE * FROM /deso/dh_message WHERE check_view = @is_data-check_view AND object = @is_data-object AND objkey = @is_data-objkey AND class = @is_data-class AND method = @is_data-method AND refobject = @is_data-refobject AND refobjkey = @is_data-refobjkey AND reffld = @is_data-reffld AND msgty = @is_data-msgty AND msgid = @is_data-msgid AND msgno = @is_data-msgno INTO @ls_data. IF sy-subrc EQ 0. UPDATE /deso/dh_message FROM @is_data. EXIT. ELSE . WAIT UP TO 5 SECONDS. ENDIF. ELSE. INSERT INTO /deso/dh_message VALUES @is_data. EXIT. ENDIF. ENDDO. ENDMETHOD. method GET_PARAM. clear value. READ TABLE data-iparam ASSIGNING FIELD-SYMBOL() with key param = param. if sy-subrc eq 0. move -value to value. endif. endmethod. method SET_PARAM. read table cs_data-iparam ASSIGNING FIELD-SYMBOL() with key param = param. if sy-subrc ne 0. APPEND INITIAL LINE TO cs_data-iparam ASSIGNING . endif. move param to -param. move value to -value. endmethod. ENDCLASS.