HR Organizaiton Managment中两种典型Infotype的填充方式

HR模块的Organization Management使用的Infotype范围从1000到1999。它们的后端数据一部分存储在数据库表HRPnnnn中,例如HRP1000存储了Object Infotype的信息,另一部分存储在HRTnnnn表中,例如Infotype 1018(Cost Distribution),它的HRP1018表中并不存储Cost Center Number、Distribution Percentage等信息,而只存储一个指针在字段TABNR中,这个指针指向HRT1018表中存储的,键值TABNR为相同值的条目。

要为人力资源主数据新建HR Infotype值,需要调用Function Module “RH_INSERT_INFTY”。通过填充参数innnn,可以向HRPnnnn表填写数据。但如果需要写入HRTnnnn表,就需要额外的工作。首先要编写一个接口满足回调规范的Subroutine,然后将这个Subroutine及其所在的Program名作为FORM参数和REPID参数,传给RH_INSERT_INFTY。

回调规范要求Subroutine传回一个Internal Table,其格式类似于下面的样子:

  DATA:  …
        BEGIN OF ls_tab,
          tdata like hrtdbtab-tdata,
        END OF ls_tab.

 下面就是一个例子程序,它根据输入参数创建一个新的Organization,同时将这个新的Organization同指定的2个Cost Center连接起来。

*&———————————————————————*
*& Report  ZCREATE_ORG_UNIT
*&
*&———————————————————————*
*&
*&
*&———————————————————————*

report  zcreate_org_unit.

data: ls_pppar   type pppar,
      ls_i1000   type pplog,
      lt_i1000   type table of pplog,
      ls_i1018   type pplog,
      lt_i1018   type table of pplog,
      ls_hri1000 type hri1000.

parameters: org_unit type objektid,
            short    type short_d,
            stext    type stext,
            gdate    type gdate default sy-datum,
            costc1   type kostl,
            costc2   type kostl.

ls_hri1000-short = short.
ls_hri1000-stext = stext.
ls_hri1000-gdate = gdate.

ls_pppar-fcode = ‘INSE’.
ls_pppar-listb = ‘0′.
ls_pppar-break = ‘0′.
ls_pppar-cycle = ‘0′.
ls_pppar-updat = ‘1′.
ls_pppar-clear = ‘1′.
ls_pppar-timco = ‘1′.
ls_pppar-vtask = ‘S’.                ” Synchronous update
ls_pppar-enque = ‘1′.
ls_pppar-langu = ‘1′.
ls_pppar-pstat = ‘INSE’.
ls_pppar-ppnnn = ‘P1000′.
ls_pppar-edynr = ‘2000′.
ls_pppar-ldynr = ‘3000′.
ls_pppar-lvdat = ‘000′.
ls_pppar-lpsub = ‘000′.
ls_pppar-dvary = ‘INSE’.
ls_pppar-dsupr = ‘0′.
ls_pppar-dbtab = ‘HRP1000′.

ls_i1000-mandt = ‘800′.
ls_i1000-plvar = ‘01′.
ls_i1000-otype = ‘O’.
ls_i1000-objid = org_unit.
ls_i1000-infty = ‘1000′.
clear ls_i1000-subty.
ls_i1000-istat = ‘1′.
clear ls_i1000-priox.
ls_i1000-begda = ‘20091124′.
ls_i1000-endda = ‘99991231′.
ls_i1000-varyf = ‘E’.
ls_i1000-seqnr = ‘000′.
ls_i1000-aedtm = ‘20091124′.
ls_i1000-uname = sy-uname.
ls_i1000-itxnr = ‘00000000′.
ls_i1000-vdata = ls_hri1000.
append ls_i1000 to lt_i1000.

call function ‘RH_INSERT_INFTY’
  exporting
    fcode                     = ‘INSE’
    vtask                     = ‘S’
    order_flg                 = ‘X’
    commit_flg                = ‘X’
    authy                     = ‘X’
    pppar_imp                 = ls_pppar
*   OLD_TABNR                 = ‘ ‘
*   KEEP_LUPD                 =
    workf_actv                = ‘X’
  tables
    innnn                     = lt_i1000
 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.
  break-point.
endif.

commit work.

*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

clear ls_pppar.
ls_pppar-fcode = ‘INSE’.
ls_pppar-listb = ‘0′.
ls_pppar-break = ‘0′.
ls_pppar-cycle = ‘0′.
ls_pppar-updat = ‘1′.
ls_pppar-clear = ‘1′.
ls_pppar-timco = ‘1′.
ls_pppar-vtask = ‘S’.                ” Synchronous update
ls_pppar-enque = ‘1′.
ls_pppar-langu = ‘1′.
ls_pppar-pstat = ‘INSE’.
ls_pppar-ppnnn = ‘P1018′.
ls_pppar-edynr = ‘2000′.
ls_pppar-ldynr = ‘3000′.
ls_pppar-lvdat = ‘000′.
ls_pppar-lpsub = ‘000′.
ls_pppar-dvary = ‘INSE’.
ls_pppar-dsupr = ‘0′.
ls_pppar-dbtab = ‘HRP1018′.
ls_pppar-tbtab = ‘HRT1018′.

ls_i1018-mandt = ‘800′.
ls_i1018-plvar = ‘01′.
ls_i1018-otype = ‘O’.
ls_i1018-objid = org_unit.
ls_i1018-infty = ‘1018′.
clear ls_i1018-subty.
ls_i1018-istat = ‘1′.
clear ls_i1018-priox.
ls_i1018-begda = ‘20091124′.
ls_i1018-endda = ‘99991231′.
ls_i1018-varyf = ‘E’.
ls_i1018-seqnr = ‘000′.
ls_i1018-aedtm = ‘20091124′.
ls_i1018-uname = sy-uname.
ls_i1018-itxnr = ‘00000000′.
append ls_i1018 to lt_i1018.

call function ‘RH_INSERT_INFTY’
  exporting
    fcode                     = ‘INSE’
    vtask                     = ‘S’
    order_flg                 = ‘X’
    commit_flg                = ‘X’
    authy                     = ‘X’
    pppar_imp                 = ls_pppar
*   OLD_TABNR                 = ‘ ‘
    repid                     = ‘ZCREATE_ORG_UNIT’
    form                      = ‘CALLBACK_FOR_1018′
*   KEEP_LUPD                 =
    workf_actv                = ‘X’
  tables
    innnn                     = lt_i1018
 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.
  break-point.
endif.

commit work.
” relation ship
clear ls_pppar.
ls_pppar-fcode = ‘INSE’.
ls_pppar-listb = ‘0′.
ls_pppar-break = ‘0′.
ls_pppar-cycle = ‘0′.
ls_pppar-updat = ‘1′.
ls_pppar-clear = ‘1′.
ls_pppar-timco = ‘1′.
ls_pppar-vtask = ‘S’.                ” Synchronous update
ls_pppar-enque = ‘1′.
ls_pppar-langu = ‘1′.
ls_pppar-pstat = ‘INSE’.
ls_pppar-ppnnn = ‘P1001′.
ls_pppar-edynr = ‘2000′.
ls_pppar-ldynr = ‘3000′.
ls_pppar-lvdat = ‘000′.
ls_pppar-lpsub = ‘000′.
ls_pppar-dvary = ‘INSE’.
ls_pppar-dsupr = ‘0′.
ls_pppar-dbtab = ‘HRP1001′.
data:
      ls_hri1001 type hri1001,
      lt_hri1001 like table of ls_hri1001.

clear ls_hri1001.
ls_hri1001-mandt = ‘800′.
ls_hri1001-plvar = ‘01′.
ls_hri1001-otype = ‘O’.
ls_hri1001-objid = org_unit.
ls_hri1001-infty = ‘1001′.
ls_hri1001-rsign = ‘A’.
ls_hri1001-relat = ‘002′.
ls_hri1001-istat = ‘1′.
clear ls_hri1001-priox.
ls_hri1001-begda = ‘20091124′.
ls_hri1001-endda = ‘99991231′.
ls_hri1001-varyf = ‘E’.
ls_hri1001-seqnr = ‘000′.
ls_hri1001-aedtm = ‘20091124′.
ls_hri1001-uname = sy-uname.
ls_hri1001-itxnr = ‘00000000′.

ls_hri1001-sclas = ‘O’.
ls_hri1001-sobid = ‘00000001′.
“ls_hri1001-PROZT =
“ls_hri1001-adata

append ls_hri1001 to lt_hri1001.
call function ‘RH_INSERT_INFTY_1001_EXT’
  exporting
    fcode                     = ‘INSE’
    vtask                     = ‘S’
    order_flg                 = ‘X’
    commit_flg                = ‘X’
    authy                     = ‘X’
    pppar_imp                 = ls_pppar
*   OLD_TABNR                 = ‘ ‘
*   KEEP_LUPD                 =
    workf_actv                = ‘X’
  tables
    innnn                     = lt_hri1001
 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.
  break-point.
endif.

commit work.

write: / ‘Done’.
*&———————————————————————*
*&      Form  callback_for_1018
*&———————————————————————*
*       text
*———————————————————————-*
*      –>P_TAB           text
*      –>VALUE(P_PNNNN)  text
*      –>VALUE(P_TABIX)  text
*———————————————————————-*
form callback_for_1018 tables p_tab
                       using value(p_pnnnn)
                       value(p_tabix).
  data: ls_1018 type pt1018,
        lt_1018 type table of pt1018,
        begin of ls_tab,
          tdata like hrtdbtab-tdata,
        end of ls_tab.

  field-symbols: <fs_tab_char> type any,
                 <fs_push_c>   type any.

  assign p_tab to <fs_tab_char> casting type c.

  clear p_tab[].
  ls_1018-bukrs = ‘1000′.
  ls_1018-gsber = ‘4000′.
  ls_1018-kokrs = ‘1000′.
  ls_1018-rotype = ‘K’.
  ls_1018-kostl = costc1.
  ls_1018-fikrs = ‘1000′.
  ls_1018-prozt = ‘50.00′.
*  ls_tab-tdata = ls_1008.
*  APPEND ls_tab TO ls_tab.
  assign ls_1018 to <fs_push_c> casting type c.
  <fs_tab_char> = <fs_push_c>.
  append p_tab.

  ls_1018-bukrs = ‘1000′.
  ls_1018-gsber = ‘0001′.
  ls_1018-kokrs = ‘1000′.
  ls_1018-rotype = ‘K’.
  ls_1018-kostl = costc2.
  ls_1018-fikrs = ‘1000′.
  ls_1018-prozt = ‘50.00′.
*  ls_tab-tdata = ls_1008.
*  APPEND ls_tab TO ls_tab.
  assign ls_1018 to <fs_push_c> casting type c.
  <fs_tab_char> = <fs_push_c>.
  append p_tab.

endform.                    “callback_for_1018

Tags: , , ,

发表于: 星期日, 11月 29th, 2009 8:05 pm
归类于:商务套件7 , 默认文章分类
Trackback: http://scnblogs.techweb.com.cn/zhaojie/archives/96.html/trackback
阅读次数:



我要评论:

您必须登录后才可以进行评论。 还没有scnblogs的博客?现在就注册吧