SAP HCM 组织与自定义组织事物一致性解决方案


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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wl8511

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值