PS 模块BAPI新建修改项目、WBS、网络、作业 (二)

6 篇文章 2 订阅

上一篇介绍了项目的新增,这一片主要是项目的修改和状态的编辑。

  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.

 

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值