1 背景
因为组织新增设计到hrp1000、hrp1001、hrp9xxx相关的表,而且这些信息类型创建是不同的函数组成,所以现在解决方案是每个单独的函数创建后,并不立刻更新数据库,等到一个指令后统一更新数据库,这个函数名是RH_UPDATE_DATABASE,参数设置成D. 首先是创建组织ID函数RH_OBJECT_CREATE,这里有个很重要的参数vtask ,如果参数设置成S是立刻更新数据库,参数设置成B是更新到缓存区;
其次就是RH_INSERT_INFTY函数,这个函数能做1001的设定,也能更新自定义的信息类型,前提条件也是把vtask设置成B,下面的代码是参考示例,没走循环,只是同样的代码复制两次,只是验证事物是不是一致,
*&---------------------------------------------------------------------*
*& Report ZTEST123
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ztest123.
DATA : BEGIN OF infty_tab OCCURS 20.
INCLUDE STRUCTURE wplog.
DATA : END OF infty_tab.
DATA BEGIN OF unit_innn OCCURS 1.
INCLUDE STRUCTURE wplog.
DATA END OF unit_innn.
DATA lv_objid TYPE p1000-objid.
CALL FUNCTION 'RH_OBJECT_CREATE'
EXPORTING
* LANGU = SY-LANGU
plvar = '01'
otype = 'O'
* EXT_NUMBER = '00000000'
short = 'V001'
stext = 'V001'
begda = '20240101'
endda = '99991231'
* OSTAT = '1'
vtask = 'B'
* GUID =
* KEEP_LUPD = ' '
IMPORTING
objid = lv_objid
EXCEPTIONS
text_required = 1
invalid_otype = 2
invalid_date = 3
error_during_insert = 4
error_ext_number = 5
undefined = 6
OTHERS = 7.
IF sy-subrc = 0.
DATA:p9240 LIKE p9240.
CLEAR p9240.
p9240-otype = 'O'.
p9240-plvar = '01'.
p9240-istat = '1'.
p9240-subty = ''.
p9240-infty = '9240'.
p9240-objid = lv_objid.
p9240-begda = '20240101'.
p9240-endda = '99991231'.
p9240-zhr_dwcj = '11'.
p9240-zhr_dwlb = '1'.
data: lt_wplog type standard table of wplog,
ls_wplog type wplog.
call method cl_hr_pnnnn_type_cast=>pnnnn_to_wplog
exporting
pnnnn = p9240
importing
wplog = ls_wplog.
append ls_wplog to lt_wplog.
CALL FUNCTION 'RH_INSERT_INFTY'
EXPORTING
FCODE = 'INSE'
vtask = 'B'
* ORDER_FLG = 'X'
* COMMIT_FLG = 'X'
* AUTHY = 'X'
* PPPAR_IMP =
* OLD_TABNR = ' '
* REPID = ' '
* FORM = ' '
* KEEP_LUPD =
* WORKF_ACTV = 'X'
tables
innnn = lt_wplog.
* ILFCODE =
* EXCEPTIONS
* NO_AUTHORIZATION = 1
* ERROR_DURING_INSERT = 2
* REPID_FORM_INITIAL = 3
* CORR_EXIT = 4
* BEGDA_GREATER_ENDDA = 5
* OTHERS = 6
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
IF sy-subrc = 0.
DATA:lt_p1001 TYPE TABLE OF p1001,
ls_p1001 LIKE p1001.
CLEAR:lt_p1001[],ls_p1001.
ls_p1001-otype = 'O'.
ls_p1001-infty = '1001'.
ls_p1001-objid = lv_objid.
ls_p1001-plvar = '01'.
ls_p1001-rsign = 'A'.
ls_p1001-relat = '002'.
ls_p1001-istat = '1'.
ls_p1001-begda = '20240101'.
ls_p1001-endda = '99991231'.
ls_p1001-sclas = 'O'.
ls_p1001-sobid = '50000112'.
APPEND ls_p1001 TO lt_p1001.
CALL FUNCTION 'RH_INSERT_INFTY'
EXPORTING
fcode = 'INSE'
vtask = 'B'
commit_flg = 'X'
TABLES
innnn = lt_p1001[]
EXCEPTIONS
no_authorization = 1
error_during_insert = 2
repid_form_initial = 3
corr_exit = 4
begda_greater_endda = 5
OTHERS = 6.
ENDIF.
ENDIF.
CLEAR lv_objid.
CALL FUNCTION 'RH_OBJECT_CREATE'
EXPORTING
* LANGU = SY-LANGU
plvar = '01'
otype = 'O'
* EXT_NUMBER = '00000000'
short = 'V001'
stext = 'V001'
begda = '20240101'
endda = '99991231'
* OSTAT = '1'
vtask = 'B'
* GUID =
* KEEP_LUPD = ' '
IMPORTING
objid = lv_objid
EXCEPTIONS
text_required = 1
invalid_otype = 2
invalid_date = 3
error_during_insert = 4
error_ext_number = 5
undefined = 6
OTHERS = 7.
IF sy-subrc = 0.
CLEAR p9240.
p9240-otype = 'O'.
p9240-plvar = '01'.
p9240-istat = '1'.
p9240-subty = ''.
p9240-infty = '9240'.
p9240-objid = lv_objid.
p9240-begda = '20240101'.
p9240-endda = '99991231'.
p9240-zhr_dwcj = '12'.
p9240-zhr_dwlb = '2'.
CLEAR ls_wplog.
call method cl_hr_pnnnn_type_cast=>pnnnn_to_wplog
exporting
pnnnn = p9240
importing
wplog = ls_wplog.
append ls_wplog to lt_wplog.
CALL FUNCTION 'RH_INSERT_INFTY'
EXPORTING
FCODE = 'INSE'
vtask = 'B'
* ORDER_FLG = 'X'
* COMMIT_FLG = 'X'
* AUTHY = 'X'
* PPPAR_IMP =
* OLD_TABNR = ' '
* REPID = ' '
* FORM = ' '
* KEEP_LUPD =
* WORKF_ACTV = 'X'
tables
innnn = lt_wplog.
* ILFCODE =
* EXCEPTIONS
* NO_AUTHORIZATION = 1
* ERROR_DURING_INSERT = 2
* REPID_FORM_INITIAL = 3
* CORR_EXIT = 4
* BEGDA_GREATER_ENDDA = 5
* OTHERS = 6
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
IF sy-subrc = 0.
CLEAR:lt_p1001[],ls_p1001.
ls_p1001-otype = 'O'.
ls_p1001-infty = '1001'.
ls_p1001-objid = lv_objid.
ls_p1001-plvar = '01'.
ls_p1001-rsign = 'A'.
ls_p1001-relat = '002'.
ls_p1001-istat = '1'.
ls_p1001-begda = '20240101'.
ls_p1001-endda = '99991231'.
ls_p1001-sclas = 'O'.
ls_p1001-sobid = '50000112'.
APPEND ls_p1001 TO lt_p1001.
CALL FUNCTION 'RH_INSERT_INFTY'
EXPORTING
fcode = 'INSE'
vtask = 'B'
commit_flg = 'X'
TABLES
innnn = lt_p1001[]
EXCEPTIONS
no_authorization = 1
error_during_insert = 2
repid_form_initial = 3
corr_exit = 4
begda_greater_endda = 5
OTHERS = 6.
ENDIF.
ENDIF.
CALL FUNCTION 'RH_UPDATE_DATABASE'
EXPORTING
vtask = 'D'
EXCEPTIONS
corr_exit = 1
OTHERS = 2.
IF sy-subrc GT 0.
CALL FUNCTION 'RH_CLEAR_BUFFER'.
CALL FUNCTION 'RH_CLEAR_PLOG_TAB'.
ELSE.
ENDIF.