一、复制标准项目模板实现项目立项
因为CJ20N录屏存在困难,所以想通过BDC实现复制项目模板创建项目立项行不通,因此需要通过BAPI解决。
因为项目立项包含:项目定义、WBS、网络、作业,因此需要分别调用四个BAPI实现该功能
二、CJ01 项目定义与WBS
博客频遭盗窃,浏览全文,请移步公众号“斌将军”,输入关键字“复制标准项目模板实现项目立项”查看
输入项目定义编号和参数文件
传入必输字段,点击WBS元素总览
输入WBS层级,点击保存即可
创建项目BAPI
"-----------------------------@斌将军-----------------------------
DATA:gs_proj_bus2001_new TYPE bapi_bus2001_new,
gt_bapiret2 TYPE TABLE OF bapiret2,
gs_bapiret2 TYPE bapiret2.
gs_proj_bus2001_new-project_definition = 'NPD-2022037'."is_proj-pspid. "项目编号
gs_proj_bus2001_new-description = '测试'."is_proj-post1. "PS: 短描述 (第一行文本)
gs_proj_bus2001_new-responsible_no = '80000667'."lv_vernr. "项目经理编号
gs_proj_bus2001_new-applicant_no = '81000003'."lv_vernr. "申请部门编号
gs_proj_bus2001_new-start = '20220225'."is_proj-plfaz. "开始日期
gs_proj_bus2001_new-finish = '20220428'."is_proj-plsez. "完成日期
gs_proj_bus2001_new-company_code = '2000'."is_proj-vbukr. "项目的公司代码
gs_proj_bus2001_new-profit_ctr = ''."is_proj-prctr. "利润中心
gs_proj_bus2001_new-project_profile = 'APS0001'."is_proj-profl. "项目参数文件
gs_proj_bus2001_new-plant = '2000'."is_proj-werks. "工厂
*IF is_proj-func_area IS NOT INITIAL.
* gs_proj_bus2001_new-func_area = is_proj-func_area. "功能控制范围
*ENDIF.
CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
CALL FUNCTION 'BAPI_BUS2001_CREATE'
EXPORTING
i_project_definition = gs_proj_bus2001_new
TABLES
et_return = gt_bapiret2.
LOOP AT gt_bapiret2 INTO gs_bapiret2 WHERE type CA 'AEX'.
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 'AEX'.
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.
* 项目定义创建成功
ENDIF.
"-----------------------------@斌将军-----------------------------
创建WBS的BAPI
DATA:lv_pspid TYPE bapi_bus2001_new-project_definition,
gt_wbs_bus2054_new TYPE TABLE OF bapi_bus2054_new,
gs_wbs_bus2054_new TYPE bapi_bus2054_new,
gt_bapiret2 TYPE TABLE OF bapiret2,
gs_bapiret2 TYPE bapiret2.
三、CN21创建网络和作业
四、代码整合
程序中因为多次调用提交和初始化逻辑,因此封装成一个函数
初始化函数
"-----------------------------@斌将军-----------------------------
FUNCTION zps01_ps_flag.
*"----------------------------------------------------------------------
*"*"本地接口:
*"----------------------------------------------------------------------
CALL FUNCTION 'PS_FLAG_INIT_GLOBAL_FLAGS'.
CALL FUNCTION 'PS_FLAG_SET_GLOBAL_FLAGS'
EXPORTING
i_precommit_ok = 'Y'.
ENDFUNCTION.
"-----------------------------@斌将军-----------------------------
BAPI提交函数
"-----------------------------@斌将军-----------------------------
FUNCTION zps01_ps_precommit.
*"----------------------------------------------------------------------
*"*"本地接口:
*" EXPORTING
*" REFERENCE(E_RETURN) TYPE BAPIRETURN
*"----------------------------------------------------------------------
DATA:gt_return TYPE TABLE OF bapiret2,
gs_return TYPE bapiret2.
DATA:lv_check TYPE char1,
lv_message TYPE char200.
CALL FUNCTION 'BAPI_PS_PRECOMMIT'
TABLES
et_return = gt_return.
CLEAR:lv_check,lv_message.
lv_check = 'S'.
LOOP AT gt_return INTO gs_return WHERE type CA 'AEX'.
lv_check = 'E'.
lv_message = lv_message && gs_return-message.
CLEAR:gs_return.
ENDLOOP.
IF sy-subrc EQ 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
CALL FUNCTION 'ZPS01_PS_FLAG'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
e_return-type = lv_check.
e_return-message = lv_message.
ENDFUNCTION.
"-----------------------------@斌将军-----------------------------