上一篇介绍了项目的新增,这一片主要是项目的修改和状态的编辑。
gs_proj_bus2001_chg-project_definition = is_proj-pspid. "项目编号
gs_proj_bus2001_chg-description = is_proj-post1. "PS: 短描述 (第一行文本)
gs_proj_bus2001_chg-responsible_no = lv_vernr. "负责人编号 - 负责人姓名
gs_proj_bus2001_chg-start = is_proj-plfaz. "开始日期
gs_proj_bus2001_chg-finish = is_proj-plsez. "完成日期
gs_proj_bus2001_chg-company_code = is_proj-vbukr. "项目的公司代码
gs_proj_bus2001_chg-profit_ctr = is_proj-prctr. "利润中心
gs_proj_bus2001_chg-plant = is_proj-werks. "工厂
gs_proj_bus2001_upd-description = 'X'.
gs_proj_bus2001_upd-responsible_no = 'X'.
gs_proj_bus2001_upd-start = 'X'.
gs_proj_bus2001_upd-finish = 'X'.
gs_proj_bus2001_upd-company_code = 'X'.
gs_proj_bus2001_upd-profit_ctr = 'X'.
gs_proj_bus2001_upd-plant = 'X'.
CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
CALL FUNCTION 'BAPI_BUS2001_CHANGE'
EXPORTING
i_project_definition = gs_proj_bus2001_chg
i_project_definition_upd = gs_proj_bus2001_upd
TABLES
et_return = gt_bapiret2.
LOOP AT gt_bapiret2 INTO gs_bapiret2 WHERE type CA 'AE'.
ls_return-status = gcon_err.
MESSAGE ID gs_bapiret2-id TYPE gs_bapiret2-type NUMBER gs_bapiret2-number
INTO ls_return-message
WITH gs_bapiret2-message_v1 gs_bapiret2-message_v2
gs_bapiret2-message_v3 gs_bapiret2-message_v4.
APPEND ls_return TO et_return.
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'.
ENDIF.
CHECK sy-subrc NE 0.
CALL FUNCTION 'BAPI_PS_PRECOMMIT'
TABLES
et_return = gt_bapiret2.
LOOP AT gt_bapiret2 INTO gs_bapiret2 WHERE type CA 'AE'.
ls_return-status = gcon_err.
MESSAGE ID gs_bapiret2-id TYPE gs_bapiret2-type NUMBER gs_bapiret2-number
INTO ls_return-message
WITH gs_bapiret2-message_v1 gs_bapiret2-message_v2
gs_bapiret2-message_v3 gs_bapiret2-message_v4.
APPEND ls_return TO et_return.
ENDLOOP.
IF sy-subrc EQ 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
IMPORTING
return = gs_bapiret2.
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 = gs_bapiret2.
* 项目定义基本信息修改成功
ls_return-status = gcon_suc.
READ TABLE gt_pomp_msnm INTO DATA(ls_ztpomp_msnm) WITH KEY mesnum = lc_mesnum12
BINARY SEARCH.
CONCATENATE ls_ztpomp_msnm-mesnum '-' ls_ztpomp_msnm-message INTO ls_return-message.
APPEND ls_return TO et_return.
ENDIF.
* 90120930 WBS查询出结构,如果位置未变更,不做处理
CALL FUNCTION 'BAPI_BUS2054_GETDATA'
EXPORTING
i_project_definition = iv_pspid
TABLES
et_wbs_element = lt_wbs_old.
LOOP AT it_wbs INTO gs_wbs.
CLEAR : gs_wbs_bus2054_chg,
gs_wbs_bus2054_upd,
lv_wbs_element,
lv_wbs_left,
lv_wbs_up.
IF gs_wbs-posid IS NOT INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_ABPSN_OUTPUT'
EXPORTING
input = gs_wbs-posid
IMPORTING
output = lv_wbs_element.
ENDIF.
IF gs_wbs-left_posid IS NOT INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_ABPSN_OUTPUT'
EXPORTING
input = gs_wbs-left_posid
IMPORTING
output = lv_wbs_left.
ENDIF.
IF gs_wbs-up_posid IS NOT INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_ABPSN_OUTPUT'
EXPORTING
input = gs_wbs-up_posid
IMPORTING
output = lv_wbs_up.
ENDIF.
* 项目负责人
* 根据负责人姓名取负责人编号
SELECT SINGLE vernr
FROM tcj04
INTO lv_vernr
WHERE verna = gs_wbs-verna.
* 90120930 WBS查询出结构,如果位置未变更,不做处理
READ TABLE lt_wbs_old INTO ls_wbs_old WITH KEY wbs_element = lv_wbs_element.
IF sy-subrc EQ 0.
IF lv_wbs_left = ls_wbs_old-wbs_left AND lv_wbs_up = ls_wbs_old-wbs_up.
"Do nothing...
ELSE.
IF gs_wbs-left_posid IS NOT INITIAL OR gs_wbs-up_posid IS NOT INITIAL.
gs_wbs_bus2054_chg-wbs_left = gs_wbs-left_posid."左侧WBS
gs_wbs_bus2054_chg-wbs_up = gs_wbs-up_posid. "上级WBS
gs_wbs_bus2054_upd-wbs_left = 'X'.
gs_wbs_bus2054_upd-wbs_up = 'X'.
ENDIF.
ENDIF.
ELSE.
IF gs_wbs-left_posid IS NOT INITIAL OR gs_wbs-up_posid IS NOT INITIAL.
gs_wbs_bus2054_chg-wbs_left = gs_wbs-left_posid."左侧WBS
gs_wbs_bus2054_chg-wbs_up = gs_wbs-up_posid. "上级WBS
gs_wbs_bus2054_upd-wbs_left = 'X'.
gs_wbs_bus2054_upd-wbs_up = 'X'.
ENDIF.
ENDIF.
gs_wbs_bus2054_chg-wbs_element = gs_wbs-posid. "工作分解结构元素 (WBS 元素)
gs_wbs_bus2054_chg-description = gs_wbs-post1. "PS: 短描述 (第一行文本)
gs_wbs_bus2054_chg-responsible_no = lv_vernr. "负责人编号
gs_wbs_bus2054_chg-profit_ctr = gs_wbs-prctr. "利润中心
gs_wbs_bus2054_chg-proj_type = gs_wbs-prart. "项目类型
gs_wbs_bus2054_chg-wbs_account_assignment_element = gs_wbs-belkz. "标志:科目分配元素
gs_wbs_bus2054_chg-wbs_billing_element = gs_wbs-fakkz. "标识符: 开票元素
gs_wbs_bus2054_chg-user_field_char20_1 = gs_wbs-usr00. "业务类别
gs_wbs_bus2054_chg-user_field_char20_2 = gs_wbs-usr01. "CRM 商机编码
gs_wbs_bus2054_chg-statistical = gs_wbs-xstat. "统计
gs_wbs_bus2054_chg-wbs_cctr_posted_actual = gs_wbs-kostl. "CCtr 过账
APPEND gs_wbs_bus2054_chg TO gt_wbs_bus2054_chg.
gs_wbs_bus2054_upd-wbs_element = gs_wbs-posid. "工作分解结构元素 (WBS 元素)
gs_wbs_bus2054_upd-description = 'X'.
gs_wbs_bus2054_upd-responsible_no = 'X'.
gs_wbs_bus2054_upd-profit_ctr = 'X'.
gs_wbs_bus2054_upd-proj_type = 'X'.
gs_wbs_bus2054_upd-wbs_account_assignment_element = 'X'.
gs_wbs_bus2054_upd-wbs_billing_element = 'X'.
gs_wbs_bus2054_upd-user_field_char20_1 = 'X'.
gs_wbs_bus2054_upd-user_field_char20_2 = 'X'.
gs_wbs_bus2054_upd-statistical = 'X'.
gs_wbs_bus2054_upd-wbs_cctr_posted_actual = 'X'.
APPEND gs_wbs_bus2054_upd TO gt_wbs_bus2054_upd.
ENDLOOP.
CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
CALL FUNCTION 'BAPI_BUS2054_CHANGE_MULTI'
EXPORTING
i_project_definition = iv_pspid
TABLES
it_wbs_element = gt_wbs_bus2054_chg
it_update_wbs_element = gt_wbs_bus2054_upd
et_return = gt_bapiret2.
LOOP AT gt_bapiret2 INTO gs_bapiret2 WHERE type CA 'AE'.
ls_return-status = gcon_err.
MESSAGE ID gs_bapiret2-id TYPE gs_bapiret2-type NUMBER gs_bapiret2-number
INTO ls_return-message
WITH gs_bapiret2-message_v1 gs_bapiret2-message_v2
gs_bapiret2-message_v3 gs_bapiret2-message_v4.
APPEND ls_return TO et_return.
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'.
ENDIF.
CHECK sy-subrc NE 0.
CALL FUNCTION 'BAPI_PS_PRECOMMIT'
TABLES
et_return = gt_bapiret2.
LOOP AT gt_bapiret2 INTO gs_bapiret2 WHERE type CA 'AE'.
ls_return-status = gcon_err.
MESSAGE ID gs_bapiret2-id TYPE gs_bapiret2-type NUMBER gs_bapiret2-number
INTO ls_return-message
WITH gs_bapiret2-message_v1 gs_bapiret2-message_v2
gs_bapiret2-message_v3 gs_bapiret2-message_v4.
APPEND ls_return TO et_return.
ENDLOOP.
IF sy-subrc EQ 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
IMPORTING
return = gs_bapiret2.
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 = gs_bapiret2.
* WBS元素基本信息修改成功
ls_return-status = gcon_suc.
READ TABLE gt_pomp_msnm INTO DATA(ls_ztpomp_msnm) WITH KEY mesnum = lc_mesnum15
BINARY SEARCH.
CONCATENATE ls_ztpomp_msnm-mesnum '-' ls_ztpomp_msnm-message INTO ls_return-message.
APPEND ls_return TO et_return.
ENDIF.
暂时需求中没有网络的修改,以后有需求变动再补上。
作业层的修改:
LOOP AT it_activity INTO gs_activity.
CLEAR : gs_act_bus2002_chg.
gs_act_bus2002_chg-activity = gs_activity-vornr. "在网络和库网络中的作业编号
gs_act_bus2002_chg-description = gs_activity-ltxa1. "工序短文本
gs_act_bus2002_chg-wbs_element = gs_activity-posid. "工作分解结构元素 (WBS 元素)
gs_act_bus2002_chg-control_key = gs_activity-steus. "控制码-内协(ZPS1)和成本(ZPS3)
gs_act_bus2002_chg-work_cntr = gs_activity-arbpl. "工作中心
gs_act_bus2002_chg-work_activity = gs_activity-arbei. "工作(时间单位H)
*-------------MOD ON 20200423--------Begin-----------------------------------
* gs_act_bus2002_new-calculation_key = gs_activity-indet. "用于计算的码
IF gs_activity-steus = 'ZPS1' AND gs_activity-arbei IS INITIAL.
gs_act_bus2002_chg-calculation_key = 0. "用于计算的码
ELSE.
gs_act_bus2002_chg-calculation_key = gs_activity-indet. "用于计算的码
ENDIF.
*-------------MOD ON 20200423--------End-------------------------------------
gs_act_bus2002_chg-acttype = gs_activity-larnt. "活动类型
gs_act_bus2002_chg-cost_elem = gs_activity-sakto. "成本要素编码
* gs_act_bus2002_chg-activity_costs = gs_activity-prkst. "作业中的成本
gs_act_bus2002_chg-profit_ctr = gs_activity-prctr. "利润中心
IF gs_activity-steus EQ 'ZPS3'.
gs_act_bus2002_chg-activity_costs = gs_activity-prkst. "作业中的成本
* ELSE.
* gs_act_bus2002_chg-user_field_curr1 = gs_activity-prkst. "用户字段 - 值3
ENDIF.
APPEND gs_act_bus2002_chg TO gt_act_bus2002_chg.
CLEAR : gs_act_bus2002_upd.
gs_act_bus2002_upd-activity = gs_activity-vornr. "在网络和库网络中的作业编号
gs_act_bus2002_upd-description = 'X'. "工序短文本
gs_act_bus2002_upd-wbs_element = 'X'. "工作分解结构元素 (WBS 元素)
gs_act_bus2002_upd-control_key = 'X'. "控制码
gs_act_bus2002_upd-work_cntr = 'X'. "工作中心
gs_act_bus2002_upd-work_activity = 'X'. "工作(时间单位H)
gs_act_bus2002_upd-calculation_key = 'X'. "用于计算的码
gs_act_bus2002_upd-acttype = 'X'. "活动类型
gs_act_bus2002_upd-cost_elem = 'X'. "成本要素编码
* gs_act_bus2002_upd-activity_costs = 'X'. "作业中的成本
gs_act_bus2002_upd-profit_ctr = 'X'. "利润中心
IF gs_activity-steus EQ 'ZPS3'.
gs_act_bus2002_upd-activity_costs = 'X'. "作业中的成本
ELSE.
gs_act_bus2002_upd-user_field_curr1 = 'X'. "用户字段 - 值3
ENDIF.
APPEND gs_act_bus2002_upd TO gt_act_bus2002_upd.
ENDLOOP.
CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
CALL FUNCTION 'BAPI_BUS2002_ACT_CHANGE_MULTI'
EXPORTING
i_number = iv_aufnr
TABLES
it_activity = gt_act_bus2002_chg
it_update_activity = gt_act_bus2002_upd
et_return = gt_bapiret2.
LOOP AT gt_bapiret2 INTO gs_bapiret2 WHERE type CA 'AE'.
ls_return-status = gcon_err.
MESSAGE ID gs_bapiret2-id TYPE gs_bapiret2-type NUMBER gs_bapiret2-number
INTO ls_return-message
WITH gs_bapiret2-message_v1 gs_bapiret2-message_v2
gs_bapiret2-message_v3 gs_bapiret2-message_v4.
APPEND ls_return TO et_return.
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'.
ENDIF.
CHECK sy-subrc NE 0.
CALL FUNCTION 'BAPI_PS_PRECOMMIT'
TABLES
et_return = gt_bapiret2.
LOOP AT gt_bapiret2 INTO gs_bapiret2 WHERE type CA 'AE'.
ls_return-status = gcon_err.
MESSAGE ID gs_bapiret2-id TYPE gs_bapiret2-type NUMBER gs_bapiret2-number
INTO ls_return-message
WITH gs_bapiret2-message_v1 gs_bapiret2-message_v2
gs_bapiret2-message_v3 gs_bapiret2-message_v4.
APPEND ls_return TO et_return.
ENDLOOP.
IF sy-subrc EQ 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
IMPORTING
return = gs_bapiret2.
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 = gs_bapiret2.
* 作业修改成功
ls_return-status = gcon_suc.
READ TABLE gt_pomp_msnm INTO DATA(ls_ztpomp_msnm) WITH KEY mesnum = lc_mesnum21
BINARY SEARCH.
CONCATENATE ls_ztpomp_msnm-mesnum '-' ls_ztpomp_msnm-message INTO ls_return-message.
APPEND ls_return TO et_return.
ENDIF.
当调用BDC后再执行PS相关的BAPI维护项目数据时,可能会报错“GUID 分配时出错: 不可能保存”。(前人经验,未曾考证)
更新物料计划:compoment 组件
下面是BDC的操作,也可以使用BAPI:
作业(Activity)下挂接组件(Component):
创建:BAPI_NETWORK_COMP_ADD
修改:BAPI_NETWORK_COMP_CHANGE
明细:BAPI_NETWORK_COMP_GETDETAIL
LOOP AT it_network.
* 内协(ZPS1)成本,即为物料成本
* BDC CN22 写值
IF it_network-steus EQ 'ZPS1'." AND it_network-prkst IS NOT INITIAL.
REFRESH : gt_bdcdata.
* CN22 输入网络编号
PERFORM bdc_dynpro USING 'SAPLCOKO' '2000'
CHANGING gt_bdcdata.
PERFORM bdc_field USING 'CAUFVD-AUFNR' iv_aufnr
CHANGING gt_bdcdata.
PERFORM bdc_field USING 'BDC_OKCODE' '=LIST'
CHANGING gt_bdcdata.
* 选择作业定位
PERFORM bdc_dynpro USING 'SAPLCOVG' '2000'
CHANGING gt_bdcdata.
PERFORM bdc_field USING 'BDC_OKCODE' '=POSI'
CHANGING gt_bdcdata.
* 输入作业编号-确认
PERFORM bdc_dynpro USING 'SAPLCOVG' '2200'
CHANGING gt_bdcdata.
PERFORM bdc_field USING 'AFVGD-VORNR' it_network-vornr
CHANGING gt_bdcdata.
PERFORM bdc_field USING 'BDC_OKCODE' '=ENT1'
CHANGING gt_bdcdata.
* 选择作业
PERFORM bdc_dynpro USING 'SAPLCOVG' '2000'
CHANGING gt_bdcdata.
PERFORM bdc_field USING 'BDC_OKCODE' '=PICK'
CHANGING gt_bdcdata.
* 跳转到“分配”页签
PERFORM bdc_dynpro USING 'SAPLCONW' '1000'
CHANGING gt_bdcdata.
PERFORM bdc_field USING 'BDC_OKCODE' '=ZUOD'
CHANGING gt_bdcdata.
* 输入物料计划
PERFORM bdc_dynpro USING 'SAPLCONW' '1000'
CHANGING gt_bdcdata.
PERFORM bdc_field USING 'AFVGD-MAT_PRKST' it_network-prkst
CHANGING gt_bdcdata.
PERFORM bdc_field USING 'BDC_OKCODE' '=BACK'
CHANGING gt_bdcdata.
* 保存
PERFORM bdc_dynpro USING 'SAPLCOVG' '2000'
CHANGING gt_bdcdata.
PERFORM bdc_field USING 'BDC_OKCODE' '=BU'
CHANGING gt_bdcdata.
CLEAR : ls_opt.
ls_opt-dismode = lv_bdc_mode. "A:调试 N:不显示 E:错误时调试
ls_opt-updmode = lv_bdc_upd.
ls_opt-cattmode = lv_bdc_cmode.
CALL TRANSACTION 'CN22'
USING gt_bdcdata
OPTIONS FROM ls_opt
MESSAGES INTO lt_messtab.
IF sy-subrc EQ 0.
* Do nothing...
ELSE.
IF sy-subrc EQ '1001'.
CLEAR : ls_return.
ls_return-status = gcon_err.
ls_return-message = '更新物料计划失败'.
ELSE.
LOOP AT lt_messtab WHERE msgtyp CA 'EA'.
CLEAR : ls_return.
ls_return-status = gcon_err.
MESSAGE ID lt_messtab-msgid TYPE lt_messtab-msgtyp NUMBER lt_messtab-msgnr
INTO ls_return-message
WITH lt_messtab-msgv1 lt_messtab-msgv2
lt_messtab-msgv3 lt_messtab-msgv4.
APPEND ls_return TO et_return.
ENDLOOP.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
更新项目、WBS、网络、作业的状态,项目、WBS状态可以重复REL不报E错误消息,网络和作业的状态一起更新,不可以重复REL,必须先REL项目和WBS才可以对网络进行REL,项目TECO的前提必须网络处于REL状态。
CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
* 冻结:SET_SYSTEM_STATUS - MDLK
* 解冻: UNDO_SYSTEM_STATUS - MDLK
CALL FUNCTION 'BAPI_BUS2001_SET_STATUS'
EXPORTING
project_definition = is_proj-pspid
undo_system_status = is_proj-undo_sys_status
set_system_status = is_proj-sys_stat
set_user_status = is_proj-user_stat
IMPORTING
return = gs_bapiret1
TABLES
e_result = gt_bapirest.
IF gs_bapiret1-type CA 'EA'.
LOOP AT gt_bapirest INTO gs_bapirest.
ls_return-status = gcon_err.
ls_return-message = gs_bapirest-message_text.
APPEND ls_return TO et_return.
ENDLOOP.
CALL FUNCTION 'PS_FLAG_INIT_GLOBAL_FLAGS'.
CALL FUNCTION 'PS_FLAG_SET_GLOBAL_FLAGS'
EXPORTING
i_precommit_ok = 'Y'.
RETURN.
ENDIF.
CALL FUNCTION 'BAPI_PS_PRECOMMIT'
TABLES
et_return = gt_bapiret2.
LOOP AT gt_bapiret2 INTO gs_bapiret2 WHERE type CA 'AE'.
ls_return-status = gcon_err.
MESSAGE ID gs_bapiret2-id TYPE gs_bapiret2-type NUMBER gs_bapiret2-number
INTO ls_return-message
WITH gs_bapiret2-message_v1 gs_bapiret2-message_v2
gs_bapiret2-message_v3 gs_bapiret2-message_v4.
APPEND ls_return TO et_return.
ENDLOOP.
IF sy-subrc EQ 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
IMPORTING
return = gs_bapiret2.
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 = gs_bapiret2.
* 项目定义状态更新成功
ls_return-status = gcon_suc.
READ TABLE gt_pomp_msnm INTO DATA(ls_ztpomp_msnm) WITH KEY mesnum = lc_mesnum13
BINARY SEARCH.
CONCATENATE ls_ztpomp_msnm-mesnum '-' ls_ztpomp_msnm-message INTO ls_return-message.
APPEND ls_return TO et_return.
ENDIF.
CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
CALL FUNCTION 'BAPI_BUS2054_SET_STATUS'
IMPORTING
return = gs_bapiret1
TABLES
i_wbs_system_status = gt_wbs_system_status
i_wbs_user_status = gt_wbs_user_status
e_result = gt_bapirest.
IF gs_bapiret1-type CA 'EA'.
LOOP AT gt_bapirest INTO gs_bapirest.
ls_return-status = gcon_err.
ls_return-message = gs_bapirest-message_text.
APPEND ls_return TO et_return.
ENDLOOP.
CALL FUNCTION 'PS_FLAG_INIT_GLOBAL_FLAGS'.
CALL FUNCTION 'PS_FLAG_SET_GLOBAL_FLAGS'
EXPORTING
i_precommit_ok = 'Y'.
RETURN.
ENDIF.
CALL FUNCTION 'BAPI_PS_PRECOMMIT'
TABLES
et_return = gt_bapiret2.
LOOP AT gt_bapiret2 INTO gs_bapiret2 WHERE type CA 'AE'.
ls_return-status = gcon_err.
MESSAGE ID gs_bapiret2-id TYPE gs_bapiret2-type NUMBER gs_bapiret2-number
INTO ls_return-message
WITH gs_bapiret2-message_v1 gs_bapiret2-message_v2
gs_bapiret2-message_v3 gs_bapiret2-message_v4.
APPEND ls_return TO et_return.
ENDLOOP.
IF sy-subrc EQ 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
IMPORTING
return = gs_bapiret2.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'
IMPORTING
return = gs_bapiret2.
* WBS元素状态更新成功
ls_return-status = gcon_suc.
READ TABLE gt_pomp_msnm INTO DATA(ls_ztpomp_msnm) WITH KEY mesnum = lc_mesnum16
BINARY SEARCH.
CONCATENATE ls_ztpomp_msnm-mesnum '-' ls_ztpomp_msnm-message INTO ls_return-message.
APPEND ls_return TO et_return.
ENDIF.
SELECT SINGLE objnr FROM aufk INTO @DATA(lv_objnr) WHERE aufnr = @pv_aufnr.
IF sy-subrc <> 0.
RETURN.
ENDIF.
CALL FUNCTION 'STATUS_TEXT_EDIT'
EXPORTING
client = sy-mandt
objnr = lv_objnr
only_active = 'X'
spras = '1'
IMPORTING
line = lv_line
EXCEPTIONS
object_not_found = 1
OTHERS = 2.
IF lv_line CS is_proj-sys_stat. "网络状态不可以重复操作
RETURN.
ELSE.
ENDIF.
CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
CALL FUNCTION 'BAPI_BUS2002_SET_STATUS'
EXPORTING
number = is_network_status-aufnr
set_system_status = is_network_status-sys_stat
undo_system_status = is_network_status-undo_sys_status
IMPORTING
return = gs_bapiret1
TABLES
e_result = gt_bapirest.
IF gs_bapiret1-type CA 'EA'.
LOOP AT gt_bapirest INTO gs_bapirest.
ls_return-status = gcon_err.
ls_return-message = gs_bapirest-message_text.
APPEND ls_return TO et_return.
ENDLOOP.
CALL FUNCTION 'PS_FLAG_INIT_GLOBAL_FLAGS'.
CALL FUNCTION 'PS_FLAG_SET_GLOBAL_FLAGS'
EXPORTING
i_precommit_ok = 'Y'.
RETURN.
ENDIF.
CALL FUNCTION 'BAPI_PS_PRECOMMIT'
TABLES
et_return = gt_bapiret2.
LOOP AT gt_bapiret2 INTO gs_bapiret2 WHERE type CA 'AE'.
ls_return-status = gcon_err.
MESSAGE ID gs_bapiret2-id TYPE gs_bapiret2-type NUMBER gs_bapiret2-number
INTO ls_return-message
WITH gs_bapiret2-message_v1 gs_bapiret2-message_v2
gs_bapiret2-message_v3 gs_bapiret2-message_v4.
APPEND ls_return TO et_return.
ENDLOOP.
IF sy-subrc EQ 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
IMPORTING
return = gs_bapiret2.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'
IMPORTING
return = gs_bapiret2.
ls_return-status = gcon_suc.
ls_return-message = TEXT-s17.
APPEND ls_return TO et_return.
ENDIF.