SPAN {
font-family: “隶书”;
font-size: 10pt;
color: #000000;
background: #FFFFFF;
}
.L0S31 {
font-style: italic;
color: #808080;
}
.L0S32 {
color: #3399FF;
}
.L0S33 {
color: #4DA619;
}
.L0S52 {
color: #0000FF;
}
.L0S55 {
color: #800080;
}
.L0S70 {
color: #808080;
}
"要删除的WBS信息
wa_e_project_wbs_del TYPE bapi_wbs_list,
lt_e_project_wbs_del TYPE STANDARD TABLE OF bapi_wbs_list.
"下达
DATA:lv_proj TYPE bapipr-project_definition,
lv_ud_sys_sta TYPE bapi_system_status-system_status,
lv_ud_usr_sta TYPE bapi_user_status-user_status,
lv_sys_sta TYPE bapi_system_status-system_status,
lv_usr_sta TYPE bapi_user_status-user_status,
lt_result TYPE STANDARD TABLE OF bapi_status_result,
ls_ret TYPE bapi_status_result,
lt_return TYPE STANDARD TABLE OF bapiret2,
ls_return TYPE bapiret2.
LOOP AT input-mt_ps_wbs-msgbd INTO DATA(ls_input).
"校验
IF ls_input-psphi IS INITIAL.
"错误反馈
ls_output_bd-msgid = input-mt_ps_wbs-msghd-msgid.
ls_output_bd-itemid = ls_input-itemid.
* ls_output_bd-order1 = ls_body-anln1.
ls_output_bd-rettxt = ‘关键字段 项目号 不能为空’.
ls_output_bd-retid = ‘0’.
APPEND ls_output_bd TO lt_output_bd.
CONTINUE.
ENDIF.
IF ls_input-posnr IS INITIAL .
"错误反馈
ls_output_bd-msgid = input-mt_ps_wbs-msghd-msgid.
ls_output_bd-itemid = ls_input-itemid.
* ls_output_bd-order1 = ls_body-anln1.
ls_output_bd-rettxt = ‘关键字段 WBS要素 不能为空’.
ls_output_bd-retid = ‘0’.
APPEND ls_output_bd TO lt_output_bd.
CONTINUE.
ENDIF.
IF ls_input-zflag IS INITIAL.
"错误反馈
ls_output_bd-msgid = input-mt_ps_wbs-msghd-msgid.
ls_output_bd-itemid = ls_input-itemid.
* ls_output_bd-order1 = ls_body-anln1.
ls_output_bd-rettxt = ‘关键字段 维护类型 不能为空’.
ls_output_bd-retid = ‘0’.
APPEND ls_output_bd TO lt_output_bd.
CONTINUE.
ENDIF.
"写入自建表
ls_zpswbs-itemid = ls_input-itemid.
ls_zpswbs-zflag = ls_input-zflag.
ls_zpswbs-posnr = ls_input-posnr.
ls_zpswbs-psphi = ls_input-psphi.
ls_zpswbs-post1 = ls_input-post1.
ls_zpswbs-up = ls_input-up.
ls_zpswbs-zleft = ls_input-left.
ls_zpswbs-zsapjsdat = sy-datum .
ls_zpswbs-zsapjstim = sy-uzeit.
MODIFY zpswbs FROM ls_zpswbs.
COMMIT WORK.
IF ls_input-zflag = ‘I’.
CLEAR:it_bapi_bus2054_new.
"项目定义
ld_project_definition = ls_input-psphi.
"WBS
wa_bapi_bus2054_new-wbs_element = ls_input-posnr. "工作分解结构元素 (WBS 元素)
wa_bapi_bus2054_new-description = ls_input-post1. "PS: 短描述 (第一行文本)
wa_bapi_bus2054_new-wbs_up = ls_input-up.
wa_bapi_bus2054_new-wbs_left = ls_input-left.
* wa_bapi_bus2054_new-responsible_no = ‘’. "负责人编号
* wa_bapi_bus2054_new-statistical = ‘’. "统计
* wa_bapi_bus2054_new-wbs_cctr_posted_actual = ‘’. "CCtr 过账
APPEND wa_bapi_bus2054_new TO it_bapi_bus2054_new.
CLEAR:wa_bapi_bus2054_new.
"第三步:调用函数
CALL FUNCTION ‘BAPI_PS_INITIALIZATION’.
CALL FUNCTION ‘BAPI_BUS2054_CREATE_MULTI’
EXPORTING
i_project_definition = ld_project_definition
TABLES
it_wbs_element = it_bapi_bus2054_new
et_return = it_bapiretwbs.
"第四步:判断是否有错误消息
LOOP AT it_bapiretwbs INTO wa_bapiretwbs WHERE type CA ‘AE’.
MESSAGE ID wa_bapiretwbs-id TYPE wa_bapiretwbs-type NUMBER wa_bapiretwbs-number
INTO wa_bapiretwbs-message
WITH wa_bapiretwbs-message_v1 wa_bapiretwbs-message_v2.
ENDLOOP.
"第四步:如果有错误消息则退出
IF sy-subrc EQ 0.
CALL FUNCTION ‘PS_FLAG_INIT_GLOBAL_FLAGS’.
CALL FUNCTION ‘PS_FLAG_SET_GLOBAL_FLAGS’
EXPORTING
i_precommit_ok = ‘Y’.
"错误反馈
ls_output_bd-msgid = input-mt_ps_wbs-msghd-msgid.
ls_output_bd-itemid = ls_input-itemid.
* ls_output_bd-order1 = ls_body-anln1.
ls_output_bd-rettxt = wa_bapiretwbs-message.
ls_output_bd-retid = ‘0’.
APPEND ls_output_bd TO lt_output_bd.
CLEAR :it_bapi_bus2054_new,it_bapiretwbs.
ENDIF.
CHECK sy-subrc NE 0.
"第四步:没有错误消息则执行预提交
CALL FUNCTION ‘BAPI_PS_PRECOMMIT’
TABLES
et_return = it_bapiretwbs.
LOOP AT it_bapiretwbs INTO wa_bapiretwbs WHERE type CA ‘AE’.
MESSAGE ID wa_bapiretwbs-id TYPE wa_bapiretwbs-type NUMBER wa_bapiretwbs-number
INTO wa_bapiretwbs-message
WITH wa_bapiretwbs-message_v1 wa_bapiretwbs-message_v2
wa_bapiretwbs-message_v3 wa_bapiretwbs-message_v4.
ENDLOOP.
"第五步:预提交有错误消息则执行回滚
IF sy-subrc EQ 0.
CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK’.
* IMPORTING
* return = it_bapiretwbs.
CALL FUNCTION ‘PS_FLAG_INIT_GLOBAL_FLAGS’.
CALL FUNCTION ‘PS_FLAG_SET_GLOBAL_FLAGS’
EXPORTING
i_precommit_ok = ‘Y’.
"错误反馈
ls_output_bd-msgid = input-mt_ps_wbs-msghd-msgid.
ls_output_bd-itemid = ls_input-itemid.
* ls_output_bd-order1 = ls_body-anln1.
ls_output_bd-rettxt = wa_bapiretwbs-message.
ls_output_bd-retid = ‘0’.
APPEND ls_output_bd TO lt_output_bd.
ELSE.
"第五步:预提交无错误消息则执行正式提交
CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’
EXPORTING
wait = ‘X’.
* IMPORTING
* return = wa_bapiretwbs
ls_output_bd-msgid = input-mt_ps_wbs-msghd-msgid.
ls_output_bd-itemid = ls_input-itemid.
* ls_output_bd-order1 = ls_body-anln1.
ls_output_bd-rettxt = wa_bapiretwbs-message.
ls_output_bd-retid = ‘1’.
APPEND ls_output_bd TO lt_output_bd.
UPDATE zpswbs SET zfkzt = ‘1’ zfgtxt = wa_bapiretwbs-message WHERE itemid = ls_input-itemid AND zflag = ls_input-zflag
AND posnr = ls_input-posnr AND psphi = ls_input-psphi.
COMMIT WORK.
* WBS元素创建成功
ENDIF.
wbs结束*****
下达REL***
* lv_proj = ls_input-psphi.
* lv_sys_sta = ‘REL’.
* CALL FUNCTION ‘BAPI_PS_INITIALIZATION’.
* CALL FUNCTION ‘BAPI_BUS2001_SET_STATUS’
* EXPORTING
* project_definition = lv_proj
* undo_system_status = lv_ud_sys_sta
** undo_user_status = lv_ud_usr_sta
** set_system_status = lv_sys_sta
** set_user_status = lv_usr_sta
* TABLES
* e_result = lt_result.
* LOOP AT lt_result INTO ls_ret WHERE message_type CA ‘AE’.
** MESSAGE ID ls_ret-message_id TYPE ls_ret-status_type NUMBER ls_ret-message_number
** INTO ls_ret-message_text.
*** WITH ls_ret-message_v1 ls_ret-message_v2
*** ls_ret-message_v3 ls_ret-message_v4.
* ENDLOOP.
* IF ls_ret-message_text IS INITIAL.
* CALL FUNCTION ‘BAPI_PS_PRECOMMIT’.
* CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’
* EXPORTING
* wait = ‘X’.
* ELSE.
* CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK’.
* "错误反馈
* ls_output_bd-msgid = input-mt_ps_wbs-msghd-msgid.
* ls_output_bd-itemid = ls_input-itemid.
** ls_output_bd-order1 = ls_body-anln1.
* ls_output_bd-rettxt = ls_ret-message_text.
* ls_output_bd-retid = ‘0’.
* APPEND ls_output_bd TO lt_output_bd.
* ENDIF.
CLEAR :it_bapi_bus2054_new,it_bapiretwbs.
ENDIF.
IF ls_input-zflag = ‘U’.
CLEAR:wa_e_project_wbs_chg,lt_e_project_wbs_chg,wa_e_project_wbs_upd,lt_e_project_wbs_upd.
ld_i_project_definition = ls_input-psphi.
"MOVE-CORRESPONDING wa_e_project_wbs to wa_e_project_wbs_chg."通过查询的WBS拷贝变量
wa_e_project_wbs_chg-wbs_element = ls_input-posnr.
wa_e_project_wbs_chg-description = ls_input-post1."更改描述
"设置更新标志
wa_e_project_wbs_upd-wbs_element = wa_e_project_wbs_chg-wbs_element.
wa_e_project_wbs_upd-description = ‘X’.
APPEND wa_e_project_wbs_chg TO lt_e_project_wbs_chg.
APPEND wa_e_project_wbs_upd TO lt_e_project_wbs_upd.
"第三步,调用
CALL FUNCTION ‘BAPI_PS_INITIALIZATION’.
CALL FUNCTION ‘BAPI_BUS2054_CHANGE_MULTI’
EXPORTING
i_project_definition = ld_i_project_definition
TABLES
it_wbs_element = lt_e_project_wbs_chg
it_update_wbs_element = lt_e_project_wbs_upd
et_return = it_bapiretwbs
* EXTENSIONIN =
* EXTENSIONOUT =
.
"第四步:判断是否有错误消息
LOOP AT it_bapiretwbs INTO wa_bapiretwbs WHERE type CA ‘AE’.
MESSAGE ID wa_bapiretwbs-id TYPE wa_bapiretwbs-type NUMBER wa_bapiretwbs-number
INTO wa_bapiretwbs-message
WITH wa_bapiretwbs-message_v1 wa_bapiretwbs-message_v2
wa_bapiretwbs-message_v3 wa_bapiretwbs-message_v4.
* WRITE:/ ‘修改时报错:’,wa_bapiret2-message.
ENDLOOP.
"第四步:如果有错误消息则退出
IF sy-subrc EQ 0.
CALL FUNCTION ‘PS_FLAG_INIT_GLOBAL_FLAGS’.
CALL FUNCTION ‘PS_FLAG_SET_GLOBAL_FLAGS’
EXPORTING
i_precommit_ok = ‘Y’.
ls_output_bd-msgid = input-mt_ps_wbs-msghd-msgid.
ls_output_bd-itemid = ls_input-itemid.
* ls_output_bd-order1 = ls_body-anln1.
ls_output_bd-rettxt = wa_bapiretwbs-message.
ls_output_bd-retid = ‘0’.
APPEND ls_output_bd TO lt_output_bd.
ENDIF.
CHECK sy-subrc NE 0.
"第四步:没有错误消息则执行预提交
CALL FUNCTION ‘BAPI_PS_PRECOMMIT’
TABLES
et_return = it_bapiretwbs.
LOOP AT it_bapiretwbs INTO wa_bapiretwbs WHERE type CA ‘AE’.
MESSAGE ID wa_bapiretwbs-id TYPE wa_bapiretwbs-type NUMBER wa_bapiretwbs-number
INTO wa_bapiretwbs-message
WITH wa_bapiretwbs-message_v1 wa_bapiretwbs-message_v2
wa_bapiretwbs-message_v3 wa_bapiretwbs-message_v4.
* WRITE:/ ‘预提交时报错:’,wa_bapiret3-message.
ENDLOOP.
"第五步:预提交有错误消息则执行回滚
IF sy-subrc EQ 0.
CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK’.
* IMPORTING
* return = it_bapiretwbs.
CALL FUNCTION ‘PS_FLAG_INIT_GLOBAL_FLAGS’.
CALL FUNCTION ‘PS_FLAG_SET_GLOBAL_FLAGS’
EXPORTING
i_precommit_ok = ‘Y’.
ls_output_bd-msgid = input-mt_ps_wbs-msghd-msgid.
ls_output_bd-itemid = ls_input-itemid.
* ls_output_bd-order1 = ls_body-anln1.
ls_output_bd-rettxt = wa_bapiretwbs-message.
ls_output_bd-retid = ‘0’.
APPEND ls_output_bd TO lt_output_bd.
ELSE.
"第五步:预提交无错误消息则执行正式提交
CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’
EXPORTING
wait = ‘X’
IMPORTING
return = wa_bapiretwbs.
* WRITE:/ ‘WBS修改成功:’,wa_bapiret3-message.
ENDIF.
修改wbs结束*********8
ls_output_bd-msgid = input-mt_ps_wbs-msghd-msgid.
ls_output_bd-itemid = ls_input-itemid.
* ls_output_bd-order1 = ls_body-anln1.
ls_output_bd-rettxt = wa_bapiretwbs-message.
ls_output_bd-retid = ‘1’.
APPEND ls_output_bd TO lt_output_bd.
UPDATE zpswbs SET zfkzt = ‘1’ zfgtxt = wa_bapiretwbs-message WHERE itemid = ls_input-itemid AND zflag = ls_input-zflag
AND posnr = ls_input-posnr AND psphi = ls_input-psphi.
COMMIT WORK.
ENDIF.
IF ls_input-zflag = ‘D’.
"第二步,赋值
CLEAR:wa_e_project_wbs_del,lt_e_project_wbs_del.
ld_i_project_definition = ls_input-psphi.
"MOVE-CORRESPONDING wa_e_project_wbs to wa_e_project_wbs_chg."通过查询的WBS拷贝变量
wa_e_project_wbs_del-wbs_element = ls_input-posnr.
APPEND wa_e_project_wbs_del TO lt_e_project_wbs_del.
"第三步,调用
CALL FUNCTION ‘BAPI_PS_INITIALIZATION’.
CALL FUNCTION ‘BAPI_BUS2054_DELETE_MULTI’
EXPORTING
i_project_definition = ld_i_project_definition
TABLES
it_delete_wbs_element = lt_e_project_wbs_del
et_return = it_bapiretwbs
* EXTENSIONIN =
* EXTENSIONOUT =
.
"第四步:判断是否有错误消息
LOOP AT it_bapiretwbs INTO wa_bapiretwbs WHERE type CA ‘AE’.
MESSAGE ID wa_bapiretwbs-id TYPE wa_bapiretwbs-type NUMBER wa_bapiretwbs-number
INTO wa_bapiretwbs-message
WITH wa_bapiretwbs-message_v1 wa_bapiretwbs-message_v2
wa_bapiretwbs-message_v3 wa_bapiretwbs-message_v4.
* WRITE:/ ‘修改时报错:’,wa_bapiret2-message.
ENDLOOP.
"第四步:如果有错误消息则退出
IF sy-subrc EQ 0.
CALL FUNCTION ‘PS_FLAG_INIT_GLOBAL_FLAGS’.
CALL FUNCTION ‘PS_FLAG_SET_GLOBAL_FLAGS’
EXPORTING
i_precommit_ok = ‘Y’.
ls_output_bd-msgid = input-mt_ps_wbs-msghd-msgid.
ls_output_bd-itemid = ls_input-itemid.
* ls_output_bd-order1 = ls_body-anln1.
ls_output_bd-rettxt = wa_bapiretwbs-message.
ls_output_bd-retid = ‘0’.
APPEND ls_output_bd TO lt_output_bd.
ENDIF.
CHECK sy-subrc NE 0.
"第四步:没有错误消息则执行预提交
CALL FUNCTION ‘BAPI_PS_PRECOMMIT’
TABLES
et_return = it_bapiretwbs.
LOOP AT it_bapiretwbs INTO wa_bapiretwbs WHERE type CA ‘AE’.
MESSAGE ID wa_bapiretwbs-id TYPE wa_bapiretwbs-type NUMBER wa_bapiretwbs-number
INTO wa_bapiretwbs-message
WITH wa_bapiretwbs-message_v1 wa_bapiretwbs-message_v2
wa_bapiretwbs-message_v3 wa_bapiretwbs-message_v4.
* WRITE:/ ‘预提交时报错:’,wa_bapiret3-message.
ENDLOOP.
"第五步:预提交有错误消息则执行回滚
IF sy-subrc EQ 0.
CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK’.
* IMPORTING
* return = it_bapiretwbs.
CALL FUNCTION ‘PS_FLAG_INIT_GLOBAL_FLAGS’.
CALL FUNCTION ‘PS_FLAG_SET_GLOBAL_FLAGS’
EXPORTING
i_precommit_ok = ‘Y’.
ELSE.
"第五步:预提交无错误消息则执行正式提交
CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’
EXPORTING
wait = ‘X’
IMPORTING
return = wa_bapiretwbs.
* WRITE:/ ‘WBS修改成功:’,wa_bapiret3-message.
ENDIF.
修改wbs结束*********8
ls_output_bd-msgid = input-mt_ps_wbs-msghd-msgid.
ls_output_bd-itemid = ls_input-itemid.
* ls_output_bd-order1 = ls_body-anln1.
ls_output_bd-rettxt = wa_bapiretwbs-message.
ls_output_bd-retid = ‘1’.
APPEND ls_output_bd TO lt_output_bd.
UPDATE zpswbs SET zfkzt = ‘1’ zfgtxt = wa_bapiretwbs-message WHERE itemid = ls_input-itemid AND zflag = ls_input-zflag
AND posnr = ls_input-posnr AND psphi = ls_input-psphi.
COMMIT WORK.
ENDIF.
CLEAR: ls_output_bd ,wa_bapiretwbs,ld_i_project_definition.
ENDLOOP.
"下达?什么时候下达? ??
IF ls_input-zflag = ‘I’ AND ls_output_bd IS INITIAL .
lv_proj = ls_input-psphi.
lv_sys_sta = ‘REL’.
CALL FUNCTION ‘BAPI_PS_INITIALIZATION’.
CALL FUNCTION ‘BAPI_BUS2001_SET_STATUS’
EXPORTING
project_definition = lv_proj
* undo_system_status = lv_ud_sys_sta
* undo_user_status = lv_ud_usr_sta
set_system_status = lv_sys_sta
* set_user_status = lv_usr_sta
TABLES
e_result = lt_result.
LOOP AT lt_result INTO ls_ret WHERE message_type CA ‘AE’.
* MESSAGE ID ls_ret-message_id TYPE ls_ret-status_type NUMBER ls_ret-message_number
* INTO ls_ret-message_text.
** WITH ls_ret-message_v1 ls_ret-message_v2
** ls_ret-message_v3 ls_ret-message_v4.
ENDLOOP.
"第四步:如果有错误消息则退出
IF sy-subrc EQ 0.
CALL FUNCTION ‘PS_FLAG_INIT_GLOBAL_FLAGS’.
CALL FUNCTION ‘PS_FLAG_SET_GLOBAL_FLAGS’
EXPORTING
i_precommit_ok = ‘Y’.
"错误反馈
ls_output_bd-msgid = input-mt_ps_wbs-msghd-msgid.
ls_output_bd-itemid = ls_input-itemid.
* ls_output_bd-order1 = ls_body-anln1.
ls_output_bd-rettxt = ls_ret-message_text.
ls_output_bd-retid = ‘0’.
APPEND ls_output_bd TO lt_output_bd.
ENDIF.
CHECK sy-subrc NE 0.
"第四步:没有错误消息则执行预提交
CALL FUNCTION ‘BAPI_PS_PRECOMMIT’
TABLES
et_return = it_bapiretwbs.
LOOP AT it_bapiretwbs INTO wa_bapiretwbs WHERE type CA ‘AE’.
MESSAGE ID wa_bapiretwbs-id TYPE wa_bapiretwbs-type NUMBER wa_bapiretwbs-number
INTO wa_bapiretwbs-message
WITH wa_bapiretwbs-message_v1 wa_bapiretwbs-message_v2
wa_bapiretwbs-message_v3 wa_bapiretwbs-message_v4.
* WRITE:/ ‘预提交时报错:’,wa_bapiret3-message.
ENDLOOP.
IF sy-subrc EQ 0.
CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK’.
* IMPORTING
* return = it_bapiretwbs.
CALL FUNCTION ‘PS_FLAG_INIT_GLOBAL_FLAGS’.
CALL FUNCTION ‘PS_FLAG_SET_GLOBAL_FLAGS’
EXPORTING
i_precommit_ok = ‘Y’.
"错误反馈
ls_output_bd-msgid = input-mt_ps_wbs-msghd-msgid.
ls_output_bd-itemid = ls_input-itemid.
* ls_output_bd-order1 = ls_body-anln1.
ls_output_bd-rettxt = ls_ret-message_text.
ls_output_bd-retid = ‘0’.
APPEND ls_output_bd TO lt_output_bd.
ELSE.
CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’
EXPORTING
wait = ‘X’.
ENDIF.
ENDIF.
"反馈头信息
ls_output_hd-msgid = input-mt_ps_wbs-msghd-msgid.
ls_output_hd-tlgid = input-mt_ps_wbs-msghd-tlgid.
ls_output_hd-tlgname = input-mt_ps_wbs-msghd-tlgname.
ls_output_hd-dtsend = sy-datum && sy-uzeit.
ls_output_hd-sender = ‘ERP’.
ls_output_hd-receiver = input-mt_ps_wbs-msghd-sender.
ls_output-mt_un_resp-msghd = ls_output_hd.
ls_output-mt_un_resp-msgbd = lt_output_bd.
"调用返回接口,同时获取发送数据的xml消息id.
TRY .
CREATE OBJECT lo_output.
CALL METHOD lo_output->si_un_resp_out
EXPORTING
output = ls_output.
* COMMIT WORK AND WAIT.
CALL FUNCTION ‘ZFUN_PO_LOG’
EXPORTING
output1 = ls_output
* output2 = out.
.
CATCH cx_ai_system_fault.
ENDTRY.
ENDMETHOD.