Files
DATA-Hawk/src/#deso#dh_utilities.clas.abap
2025-11-27 13:16:56 +00:00

226 lines
6.1 KiB
ABAP

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(<fs_param>) with key param = param.
if sy-subrc eq 0.
move <fs_param>-value to value.
endif.
endmethod.
method SET_PARAM.
read table cs_data-iparam ASSIGNING FIELD-SYMBOL(<fs_data>) with key param = param.
if sy-subrc ne 0.
APPEND INITIAL LINE TO cs_data-iparam ASSIGNING <fs_data>.
endif.
move param to <fs_data>-param.
move value to <fs_data>-value.
endmethod.
ENDCLASS.