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: ABAP, HR, Infotype, Organization Management
发表于:
星期日, 11月 29th, 2009 8:05 pm
归类于:商务套件7 , 默认文章分类
Trackback: http://scnblogs.techweb.com.cn/zhaojie/archives/96.html/trackback
阅读次数:
日志RSS
评论RSS




