参考指定WBS元素创建新的WBS,代码如下:
DATA: lv_project TYPE bapi_bus2001_new-project_definition,
lt_wbs_element TYPE TABLE OF bapi_bus2054_new,
lt_extensionin TYPE TABLE OF bapiparex,
lt_return TYPE TABLE OF bapiret2,
lv_desc TYPE bapi_bus2054_new-description,
lv_message TYPE string.
DATA: ls_ci_prps TYPE bapi_te_wbs_element,
lv_str(960) TYPE c.
CHECK iv_project IS NOT INITIAL AND
iv_up_wbs IS NOT INITIAL AND
iv_new_wbs IS NOT INITIAL.
"获取参考WBS信息,iv_up_wbs参考的WBS
SELECT SINGLE *
INTO @DATA(ls_up_prps)
FROM prps
WHERE posid = @iv_up_wbs.
"iv_project 新建WBS对应的项目定义编码
lv_project = iv_project.
"复制WBS信息
lt_wbs_element = VALUE #( (
wbs_element = iv_new_wbs "新建WBS编号
description = |参考新建WBS测试|
responsible_no = ls_up_prps-vernr "负责人编号
applicant_no = ls_up_prps-astnr "申请人号
company_code = ls_up_prps-pbukr "
business_area = ls_up_prps-pgsbr "
controlling_area = ls_up_prps-pkokr "
profit_ctr = ls_up_prps-prctr "利润中心
proj_type = ls_up_prps-prart "项目类型
wbs_planning_element = ls_up_prps-plakz
wbs_account_assignment_element = ls_up_prps-belkz
wbs_billing_element = ls_up_prps-fakkz
cstg_sheet = ls_up_prps-kalsm
overhead_key = ls_up_prps-zschl
res_anal_key = ls_up_prps-abgsl
request_cctr_controlling_area = ls_up_prps-akokr
request_cctr = ls_up_prps-akstl
respsbl_cctr_controlling_area = ls_up_prps-fkokr
respsbl_cctr = ls_up_prps-fkstl
calendar = ls_up_prps-fabkl
priority = ls_up_prps-pspri
equipment = ls_up_prps-equnr
funct_loc = ls_up_prps-tplnr
currency = ls_up_prps-pwpos
plant = ls_up_prps-werks
user_field_key = ls_up_prps-slwid
user_field_char20_1 = ls_up_prps-usr00
user_field_char20_2 = ls_up_prps-usr01
user_field_char10_1 = ls_up_prps-usr02
user_field_char10_2 = ls_up_prps-usr03
user_field_quan1 = ls_up_prps-usr04
user_field_unit1 = ls_up_prps-use04
user_field_quan2 = ls_up_prps-usr05
user_field_unit2 = ls_up_prps-use05
user_field_curr1 = ls_up_prps-usr06
user_field_cuky1 = ls_up_prps-use06
user_field_curr2 = ls_up_prps-usr07
user_field_cuky2 = ls_up_prps-use07
user_field_date1 = ls_up_prps-usr08
user_field_date2 = ls_up_prps-usr09
user_field_flag1 = ls_up_prps-usr10
user_field_flag2 = ls_up_prps-usr11
wbs_cctr_posted_actual = ls_up_prps-kostl
wbs_summarization = ls_up_prps-clasf
objectclass = |PROFT|
statistical = ls_up_prps-xstat
wbs_basic_start_date = sy-datum
wbs_basic_finish_date = sy-datum
* wbs_basic_duration = 127
* wbs_basic_dur_unit = |10| "外码D
wbs_left = iv_left_wbs
"父层WBS
wbs_up = iv_up_wbs ) ).
"附加字段增强,扩展标准结构CI_PRPS
ls_ci_prps-wbs_element = iv_new_wbs.
lv_str = ls_ci_prps.
lt_extensionin = VALUE #( ( structure = |BAPI_TE_WBS_ELEMENT|
valuepart1 = lv_str+0(240)
valuepart2 = lv_str+240(240)
valuepart3 = lv_str+480(240)
valuepart4 = lv_str+720(240) ) ).
CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
CALL FUNCTION 'BAPI_BUS2054_CREATE_MULTI'
EXPORTING
i_project_definition = lv_project
TABLES
it_wbs_element = lt_wbs_element
et_return = lt_return
extensionin = lt_extensionin
* EXTENSIONOUT =
.
LOOP AT lt_return INTO DATA(ls_return) WHERE type CA 'AEX'.
IF lv_message IS INITIAL.
lv_message = ls_return-message.
ELSE.
lv_message = |{ lv_message }/{ ls_return-message }|.
ENDIF.
ENDLOOP.
IF lv_message IS INITIAL.
CALL FUNCTION 'BAPI_PS_PRECOMMIT'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
注意事项1:
调用BAPI:BAPI_BUS2054_CREATE_MULTI之前必须先调用BAPI:BAPI_BUS2054_CREATE_MULTI。
调用BAPI:BAPI_BUS2054_CREATE_MULTI执行成功之后,不能直接调用BAPI:BAPI_TRANSACTION_COMMIT,会导致DUMP,应该先调用BAPI:BAPI_PS_PRECOMMIT
注意事项2:
附加字段需要扩展系统标准结构BAPI_TE_WBS_ELEMENT中的嵌套结构:CI_PRPS
扩展结构CI_PRPS如下