ABAP BAPI 复制标准项目模板实现项目立项

一、复制标准项目模板实现项目立项

因为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.
"-----------------------------@斌将军-----------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值