METHOD zps_ii_si_ps_wbs_in~si_ps_wbs_in.
*** **** INSERT IMPLEMENTATION HERE **** ***
"WBS新增
DATA: ld_project_definition TYPE bapi_bus2001_new-project_definition, "项目定义,要挂在哪个项目上
"定义WBS详情
it_bapi_bus2054_new TYPE STANDARD TABLE OF bapi_bus2054_new,
wa_bapi_bus2054_new TYPE bapi_bus2054_new,
"定义返回参数
it_bapiretwbs TYPE STANDARD TABLE OF bapiret2,
wa_bapiretwbs TYPE bapiret2.
"WBS修改
DATA:
ld_i_project_definition TYPE bapi_bus2001_new-project_definition,
"要更新的WBS信息
wa_e_project_wbs_chg TYPE bapi_bus2054_chg,
lt_e_project_wbs_chg TYPE STANDARD TABLE OF bapi_bus2054_chg,
"要更新那些WBS字段
wa_e_project_wbs_upd TYPE bapi_bus2054_upd,
lt_e_project_wbs_upd TYPE STANDARD TABLE OF bapi_bus2054_upd.
"返回接口参数
DATA: lo_output TYPE REF TO zun_co_si_un_resp_out,
ls_output TYPE zun_mt_un_resp,
ls_output_hd TYPE zmmi005_dt_mesg_hd,
lt_output_bd TYPE zun_dt_un_resp_msgbd_tab,
ls_output_bd TYPE zun_dt_un_resp_msgbd.
DATA: ls_zpswbs TYPE zpswbs,
lt_zpswbs TYPE STANDARD TABLE OF zpswbs.
DATA:
"要删除的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.