sap-ps项目立项

METHOD zps_ii_si_ps_xmlx_in~si_ps_xmlx_in.

DATA:
  lt_stru_proj_define TYPE TABLE OF bapi_bus2001_new,
  wa_stru_proj_define TYPE  bapi_bus2001_new,

  lt_message          TYPE TABLE OF bapiret2,
  wa_message          TYPE  bapiret2.


DATA:
  gs_proj_bus2001_chg TYPE  bapi_bus2001_chg,
  gs_proj_bus2001_upd TYPE  bapi_bus2001_upd.

DATA: pro      TYPE  bapi_bus2001_new-project_definition.

DATA: lt_msgxg TYPE TABLE OF bapiret2,
      wa_msgxg TYPE  bapiret2.

"返回接口参数
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_lx TYPE zpslx,
      lt_lx TYPE STANDARD TABLE OF zpslx.

"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.



LOOP AT input-mt_ps_xmlx-msgbd INTO DATA(ls_input).
  IF ls_input-zflag <> 'D'.
    "校验
    IF ls_input-pspid IS INITIAL.
      "错误反馈
      ls_output_bd-msgid     = input-mt_ps_xmlx-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-pspid IS NOT INITIAL AND  strlen( ls_input-pspid ) <> 11.
        "错误反馈
        ls_output_bd-msgid     = input-mt_ps_xmlx-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-zflag IS INITIAL.
        "错误反馈
        ls_output_bd-msgid     = input-mt_ps_xmlx-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-vbukr IS INITIAL.
        "错误反馈
        ls_output_bd-msgid     = input-mt_ps_xmlx-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-vgsbr IS INITIAL.
        "错误反馈
        ls_output_bd-msgid     = input-mt_ps_xmlx-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-vkokr IS INITIAL.
        "错误反馈
        ls_output_bd-msgid     = input-mt_ps_xmlx-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-werks IS INITIAL.
        "错误反馈
        ls_output_bd-msgid     = input-mt_ps_xmlx-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.
    ELSE.
    
      "校验
      IF ls_input-pspid IS INITIAL.
        "错误反馈
        ls_output_bd-msgid     = input-mt_ps_xmlx-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.
    ENDIF.
    
    
    "写入自建表
    ls_lx-pspid      = ls_input-pspid.
    ls_lx-post1      = ls_input-post1.
    ls_lx-zflag      = ls_input-zflag.
    ls_lx-vbukr      = ls_input-vbukr.
    ls_lx-vgsbr      = ls_input-vgsbr.
    ls_lx-vkokr      = ls_input-vkokr.
    ls_lx-prctr      = ls_input-prctr.
    ls_lx-werks      = ls_input-werks.
    
  •    ls_lx-ZZT        = ls_input-pspid.
    
  •    ls_lx-ZFKZT      = ls_input-pspid.
    
  •    ls_lx-ZFGTXT     = ls_input-pspid.
    ls_lx-zsapjsdat  = sy-datum .
    ls_lx-zsapjstim  = sy-uzeit.
    
    SELECT SINGLE  profidproj INTO ls_lx-profidproj FROM tcj41
                  WHERE prart = ls_input-pspid+0(2)  AND bukrs = ls_input-vbukr.
    
    
    MODIFY zpslx FROM ls_lx.
    COMMIT WORK.
    
    
    IF ls_input-zflag = 'I'.
      wa_stru_proj_define-project_definition = ls_input-pspid.    "id
      wa_stru_proj_define-description        = ls_input-post1.    "描述
      wa_stru_proj_define-company_code       = ls_input-vbukr.    "公司编码
      wa_stru_proj_define-business_area      = ls_input-vgsbr .   "业务范围
      wa_stru_proj_define-controlling_area   = ls_input-vkokr.    "成本控制范围
    
  •    SELECT SINGLE  profidproj INTO wa_stru_proj_define-project_profile FROM tcj41
    
  •                              WHERE prart = ls_input-pspid+0(2)  AND bukrs = ls_input-vbukr.
      wa_stru_proj_define-project_profile    = ls_lx-profidproj.           "参数文件
      wa_stru_proj_define-plant              = ls_input-werks.           "工厂
    
  •    wa_stru_proj_define-profit_ctr         = ls_input-prctr .          "利润中心
    
  •    wa_stru_proj_define-start              = '20221001' .          "开始时间
    
  •    wa_stru_proj_define-finish             = '20221002' .          "结束时间
    
  •    wa_stru_proj_define-responsible_no     = '20002006' .        "负责人
    
    
      "第三步,调用创建
      CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
      CALL FUNCTION 'BAPI_BUS2001_CREATE'
        EXPORTING
          i_project_definition = wa_stru_proj_define
        TABLES
          et_return            = lt_message
    
  •       EXTENSIONIN          =
    
  •       EXTENSIONOUT         =
        .
      "第四步,做预提交,判断消息是否有A或者E的,表示是异常
      LOOP AT lt_message INTO wa_message WHERE type CA 'AE'.
    
    
        MESSAGE ID wa_message-id TYPE wa_message-type NUMBER wa_message-number
            INTO wa_message-message
            WITH wa_message-message_v1 wa_message-message_v2
                 wa_message-message_v3 wa_message-message_v4.
    
      ENDLOOP.
    
      "如果loop循环中遍历到A或者E的消息,则subrc是0,执行函数,重新初始化,然后下面check后的subrc,就自动退出主程序了
      IF sy-subrc EQ 0.
        "错误反馈
        ls_output_bd-msgid     = input-mt_ps_xmlx-msghd-msgid.
        ls_output_bd-itemid    = ls_input-itemid.
    
  •    ls_output_bd-order1    = ls_body-anln1.
        ls_output_bd-rettxt    =  wa_message-message.
        ls_output_bd-retid     = '0'.
        APPEND ls_output_bd TO  lt_output_bd.
    
    
        CALL FUNCTION 'PS_FLAG_INIT_GLOBAL_FLAGS'.
        CALL FUNCTION 'PS_FLAG_SET_GLOBAL_FLAGS'
          EXPORTING
            i_precommit_ok = 'Y'.
    
        UPDATE zpslx SET zzt = '1' zfkzt = '0' zfgtxt = wa_message-message WHERE pspid = ls_lx-pspid AND zflag = ls_lx-zflag.
        COMMIT WORK .
      ENDIF.
    
    
      "如果subrc是非0,表示未检查到loop循环有A或者E的消息,则执行下面函数来做预提交
      CHECK sy-subrc NE 0.
      CALL FUNCTION 'BAPI_PS_PRECOMMIT'
        TABLES
          et_return = lt_message.
    
    
      "第五步,正式提交
      LOOP AT lt_message INTO wa_message WHERE type CA 'AE'.
        MESSAGE ID wa_message-id TYPE wa_message-type NUMBER wa_message-number
            INTO wa_message-message
            WITH wa_message-message_v1 wa_message-message_v2
                 wa_message-message_v3 wa_message-message_v4.
      ENDLOOP.
    
      "同理,如果预提交后,有A或者E的消息则做回滚,否则做正式提交
      IF sy-subrc EQ 0.
    
        "错误反馈
        ls_output_bd-msgid     = input-mt_ps_xmlx-msghd-msgid.
        ls_output_bd-itemid    = ls_input-itemid.
    
  •    ls_output_bd-order1    = ls_body-anln1.
        ls_output_bd-rettxt    =  wa_message-message.
        ls_output_bd-retid     = '0'.
        APPEND ls_output_bd TO  lt_output_bd.
    
    
    
    
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
    
  •  IMPORTING
    
  •    return = lt_message
          .
        CALL FUNCTION 'PS_FLAG_INIT_GLOBAL_FLAGS'.
    
        CALL FUNCTION 'PS_FLAG_SET_GLOBAL_FLAGS'
          EXPORTING
            i_precommit_ok = 'Y'.
    
    
    
        UPDATE zpslx SET zzt = '1' zfkzt = '0' zfgtxt = wa_message-message WHERE pspid = ls_lx-pspid AND zflag = ls_lx-zflag..
        COMMIT WORK.
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait   = 'X'
          IMPORTING
            return = wa_message.
    
  • 项目定义创建成功
    CLEAR:wa_message.

      READ TABLE lt_message INTO wa_message WITH KEY type = 'S'.
      MESSAGE ID wa_message-id TYPE wa_message-type NUMBER wa_message-number
          INTO wa_message-message
          WITH wa_message-message_v1 wa_message-message_v2
               wa_message-message_v3 wa_message-message_v4.
    

*************************** "创建成功加一层WBS???******************************

      "项目定义
      ld_project_definition = ls_input-pspid.
      "WBS
      wa_bapi_bus2054_new-wbs_element                    = ls_input-pspid.     "工作分解结构元素 (WBS 元素)
      wa_bapi_bus2054_new-description                    = ls_input-post1.     "PS: 短描述 (第一行文本)
  •      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.
    
        "第三步:调用函数
    
        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
                   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'.
    
        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_bapiret2-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_bapiretwbs-message.
    
  • WBS元素创建成功

      ENDIF.
    

wbs结束*****

      "20230629新增wbs预算
  • "转换内码
    DATA: lt_bpak TYPE STANDARD TABLE OF bpak , "预算/计划更新
    ls_bpak TYPE bpak.
    DATA: l_posnr TYPE ps_posnr.

     DATA: lt_ret_ys TYPE STANDARD TABLE OF bapiret2 , "返回参数
           ls_ret_ys TYPE bapiret2.
    
     CALL FUNCTION 'CONVERSION_EXIT_ABPSP_INPUT'
       EXPORTING
         input     = ls_input-pspid
       IMPORTING
         output    = l_posnr
       EXCEPTIONS
         not_found = 1
         OTHERS    = 2.
     IF sy-subrc <> 0.
       MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
               WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
     ENDIF.
    
     SELECT SINGLE objnr INTO ls_bpak-e_objnr FROM prps WHERE pspnr = l_posnr. "根据输入的WBS,把WBS的对象号放到 内表中
    
     IF sy-subrc EQ 0.
       "找到WBS以后做以下赋值
    
       ls_bpak-e_vorga = 'KBUD'. "预算类型预算/计划
       ls_bpak-twaer   = 'RMB'. "币种
       ls_bpak-wert    = ls_input-zyl-yl1. "预算金额
    
       APPEND ls_bpak TO lt_bpak.
     ENDIF.
    
     CALL FUNCTION 'KBPP_EXTERN_UPDATE_CO'
       EXPORTING
         i_budget_activity = 'KBUD'
    
  •         i_budget_activ_sup_ret       = 'X'
    
  •         I_COMMIT_DATA     = 'X'
            i_delta_amounts   = ''
            i_rollup_data     = ''
    
  •         I_CHECK_PLAN_DATA = 'X'
    
  •         i_application     = 'P'
            i_commit_all      = 'X'
    
  • IMPORTING

  •         E_ERRORS_FOUND    =
          TABLES
            it_bpak           = lt_bpak
            it_return         = lt_ret_ys
          EXCEPTIONS
            no_update         = 1
            OTHERS            = 2.
    
        IF sy-subrc <> 0.
          MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                  WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
        ELSE.
    
          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
            EXPORTING
              wait = 'X'.
        ENDIF.
    

"20230629新增wbs预算**********************

      ls_output_bd-msgid     = input-mt_ps_xmlx-msghd-msgid.
      ls_output_bd-itemid    = ls_input-itemid.
  •    ls_output_bd-order1    = ls_body-anln1.
        IF wa_bapiretwbs-message IS  NOT INITIAL .
          ls_output_bd-rettxt    =  wa_message-message && 'WBS:' && wa_bapiretwbs-message.
        ELSE.
          ls_output_bd-rettxt    =  wa_message-message.
        ENDIF.
    
        ls_output_bd-retid     = '1'.
        APPEND ls_output_bd TO  lt_output_bd.
    
        UPDATE zpslx SET zzt = '1' zfkzt = '1' zfgtxt = wa_message-message WHERE pspid = ls_lx-pspid AND zflag = ls_lx-zflag..
        COMMIT WORK.
      ENDIF.
    
    ENDIF.
    
    
    IF ls_input-zflag = 'U'.
    
  •    wa_stru_proj_define-controlling_area   = ls_input-vkokr.    "成本控制范围
    
      gs_proj_bus2001_chg-project_definition = ls_input-pspid.       "项目编号
      gs_proj_bus2001_chg-description        = ls_input-post1.       "PS: 短描述 (第一行文本)
      gs_proj_bus2001_chg-business_area      = ls_input-vgsbr .      "业务范围
      gs_proj_bus2001_chg-company_code       = ls_input-vbukr.       "项目的公司代码
      gs_proj_bus2001_chg-profit_ctr         = ls_input-prctr.       "利润中心
      gs_proj_bus2001_chg-plant              = ls_input-werks.       "工厂
    
  •    gs_proj_bus2001_chg-responsible_no     = p_char11.            "负责人编号 - 负责人姓名
    
  •    gs_proj_bus2001_chg-start              = p_char8.       "开始日期
    
  •    gs_proj_bus2001_chg-finish             = p_char9.       "完成日期
      IF ls_input-post1 IS NOT INITIAL .
        gs_proj_bus2001_upd-description    = 'X'.
      ENDIF.
    
  •    gs_proj_bus2001_upd-responsible_no = 'X'.
      IF ls_input-vgsbr IS NOT INITIAL.
        gs_proj_bus2001_upd-business_area  = 'X'.
      ENDIF.
      IF ls_input-vbukr IS NOT INITIAL.
        gs_proj_bus2001_upd-company_code   = 'X'.
      ENDIF.
      IF gs_proj_bus2001_chg-profit_ctr IS NOT INITIAL.
        gs_proj_bus2001_upd-profit_ctr     = 'X'.
      ENDIF.
    
      IF ls_input-werks IS NOT INITIAL .
        gs_proj_bus2001_upd-plant          = 'X'.
      ENDIF.
    
  •    gs_proj_bus2001_upd-start          = 'X'.
    
  •    gs_proj_bus2001_upd-finish         = '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                = lt_msgxg.
    
      LOOP AT lt_msgxg INTO wa_msgxg WHERE type CA 'AE'.
    
    
        MESSAGE ID wa_msgxg-id TYPE wa_msgxg-type NUMBER wa_msgxg-number
            INTO wa_msgxg-message
            WITH wa_msgxg-message_v1 wa_msgxg-message_v2
                 wa_msgxg-message_v3 wa_msgxg-message_v4.
    
      ENDLOOP.
    
      IF sy-subrc EQ 0.
    
        "错误反馈
        ls_output_bd-msgid     = input-mt_ps_xmlx-msghd-msgid.
        ls_output_bd-itemid    = ls_input-itemid.
    
  •    ls_output_bd-order1    = ls_body-anln1.
        ls_output_bd-rettxt    =  wa_msgxg-message.
        ls_output_bd-retid     = '0'.
        APPEND ls_output_bd TO  lt_output_bd.
    
    
        CALL FUNCTION 'PS_FLAG_INIT_GLOBAL_FLAGS'.
    
        CALL FUNCTION 'PS_FLAG_SET_GLOBAL_FLAGS'
          EXPORTING
            i_precommit_ok = 'Y'.
    
    
        UPDATE zpslx SET zzt = '1' zfkzt = '0' zfgtxt = wa_msgxg-message WHERE pspid = ls_lx-pspid AND zflag = ls_lx-zflag..
        COMMIT WORK.
      ENDIF.
    
      CHECK sy-subrc NE 0.
    
      CALL FUNCTION 'BAPI_PS_PRECOMMIT'
        TABLES
          et_return = lt_msgxg.
    
      LOOP AT lt_msgxg INTO wa_msgxg WHERE type CA 'AE'.
    
  • ls_return-status = gcon_err.
    MESSAGE ID wa_msgxg-id TYPE wa_msgxg-type NUMBER wa_msgxg-number
    INTO wa_msgxg-message
    WITH wa_msgxg-message_v1 wa_msgxg-message_v2
    wa_msgxg-message_v3 wa_msgxg-message_v4.

  • APPEND ls_return TO et_return.

    ENDLOOP.

    IF sy-subrc EQ 0.

     "错误反馈
     ls_output_bd-msgid     = input-mt_ps_xmlx-msghd-msgid.
     ls_output_bd-itemid    = ls_input-itemid.
    
  •    ls_output_bd-order1    = ls_body-anln1.
        ls_output_bd-rettxt    =  wa_msgxg-message.
        ls_output_bd-retid     = '0'.
        APPEND ls_output_bd TO  lt_output_bd.
    
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    
  •        IMPORTING
    
  •          return = lt_msgxg.
    
        CALL FUNCTION 'PS_FLAG_INIT_GLOBAL_FLAGS'.
    
        CALL FUNCTION 'PS_FLAG_SET_GLOBAL_FLAGS'
          EXPORTING
            i_precommit_ok = 'Y'.
    
        UPDATE zpslx SET zzt = '1' zfkzt = '0' zfgtxt = wa_msgxg-message WHERE pspid = ls_lx-pspid AND zflag = ls_lx-zflag..
        COMMIT WORK.
    
      ELSE.
    
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = 'X'.
    
        CLEAR:wa_msgxg.
    
        READ TABLE lt_msgxg INTO wa_msgxg WITH KEY type = 'S'.
        MESSAGE ID wa_msgxg-id TYPE wa_msgxg-type NUMBER wa_msgxg-number
            INTO wa_msgxg-message
            WITH wa_msgxg-message_v1 wa_msgxg-message_v2
                 wa_msgxg-message_v3 wa_msgxg-message_v4.
    

*************************************由于增加一层wbs,需增加修改wbs

  •      it_bapiretwbs         TYPE STANDARD TABLE OF bapiret2,
    
  •      wa_bapiretwbs         TYPE bapiret2.
    
        ld_i_project_definition = ls_input-pspid. .
        "MOVE-CORRESPONDING  wa_e_project_wbs to wa_e_project_wbs_chg."通过查询的WBS拷贝变量
        wa_e_project_wbs_chg-wbs_element = ls_input-pspid. .
        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'.
    
        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_xmlx-msghd-msgid.
      ls_output_bd-itemid    = ls_input-itemid.
  •    ls_output_bd-order1    = ls_body-anln1.
    
        IF wa_bapiretwbs-message IS  NOT INITIAL .
          ls_output_bd-rettxt    =  wa_message-message && 'WBS:' && wa_bapiretwbs-message.
        ELSE.
          ls_output_bd-rettxt    =  wa_message-message.
        ENDIF.
    
        ls_output_bd-retid     = '1'.
        APPEND ls_output_bd TO  lt_output_bd.
    
        UPDATE zpslx SET zzt = '1' zfkzt = '1' zfgtxt = wa_msgxg-message WHERE pspid = ls_lx-pspid AND zflag = ls_lx-zflag..
        COMMIT WORK.
    
      ENDIF.
    ENDIF.
    
    IF  ls_input-zflag = 'D'.
    
      ld_i_project_definition = ls_input-pspid.
    
      CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
      CALL FUNCTION 'BAPI_BUS2001_DELETE'
        EXPORTING
          i_project_definition = ld_i_project_definition
        TABLES
          et_return            = lt_msgxg
    
  •       EXTENSIONIN          =
    
  •       EXTENSIONOUT         =
        .
      LOOP AT lt_msgxg INTO wa_msgxg WHERE type CA 'AE'.
    
    
        MESSAGE ID wa_msgxg-id TYPE wa_msgxg-type NUMBER wa_msgxg-number
            INTO wa_msgxg-message
            WITH wa_msgxg-message_v1 wa_msgxg-message_v2
                 wa_msgxg-message_v3 wa_msgxg-message_v4.
    
      ENDLOOP.
    
      IF sy-subrc EQ 0.
    
        "错误反馈
        ls_output_bd-msgid     = input-mt_ps_xmlx-msghd-msgid.
        ls_output_bd-itemid    = ls_input-itemid.
    
  •    ls_output_bd-order1    = ls_body-anln1.
        ls_output_bd-rettxt    =  wa_msgxg-message.
        ls_output_bd-retid     = '0'.
        APPEND ls_output_bd TO  lt_output_bd.
    
        CALL FUNCTION 'PS_FLAG_INIT_GLOBAL_FLAGS'.
    
        CALL FUNCTION 'PS_FLAG_SET_GLOBAL_FLAGS'
          EXPORTING
            i_precommit_ok = 'Y'.
    
        UPDATE zpslx SET zzt = '1' zfkzt = '0' zfgtxt = wa_msgxg-message WHERE pspid = ls_lx-pspid AND zflag = ls_lx-zflag..
        COMMIT WORK.
    
      ENDIF.
    
      CHECK sy-subrc NE 0.
    
      CALL FUNCTION 'BAPI_PS_PRECOMMIT'
        TABLES
          et_return = lt_msgxg.
    
      LOOP AT lt_msgxg INTO wa_msgxg WHERE type CA 'AE'.
    
  • ls_return-status = gcon_err.
    MESSAGE ID wa_msgxg-id TYPE wa_msgxg-type NUMBER wa_msgxg-number
    INTO wa_msgxg-message
    WITH wa_msgxg-message_v1 wa_msgxg-message_v2
    wa_msgxg-message_v3 wa_msgxg-message_v4.

  • APPEND ls_return TO et_return.

    ENDLOOP.

    IF sy-subrc EQ 0.

     "错误反馈
     ls_output_bd-msgid     = input-mt_ps_xmlx-msghd-msgid.
     ls_output_bd-itemid    = ls_input-itemid.
    
  •    ls_output_bd-order1    = ls_body-anln1.
        ls_output_bd-rettxt    =  wa_msgxg-message.
        ls_output_bd-retid     = '0'.
        APPEND ls_output_bd TO  lt_output_bd.
    
    
    
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    
  •        IMPORTING
    
  •          return = lt_msgxg.
    
        CALL FUNCTION 'PS_FLAG_INIT_GLOBAL_FLAGS'.
    
        CALL FUNCTION 'PS_FLAG_SET_GLOBAL_FLAGS'
          EXPORTING
            i_precommit_ok = 'Y'.
    
        UPDATE zpslx SET zzt = '1' zfkzt = '0' zfgtxt = wa_msgxg-message WHERE pspid = ls_lx-pspid AND zflag = ls_lx-zflag..
        COMMIT WORK.
    
      ELSE.
    
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = 'X'.
    
        CLEAR:wa_msgxg.
    
        READ TABLE lt_msgxg INTO wa_msgxg WITH KEY type = 'S'.
        MESSAGE ID wa_msgxg-id TYPE wa_msgxg-type NUMBER wa_msgxg-number
            INTO wa_msgxg-message
            WITH wa_msgxg-message_v1 wa_msgxg-message_v2
                 wa_msgxg-message_v3 wa_msgxg-message_v4.
    
        ls_output_bd-msgid     = input-mt_ps_xmlx-msghd-msgid.
        ls_output_bd-itemid    = ls_input-itemid.
    
  •    ls_output_bd-order1    = ls_body-anln1.
        ls_output_bd-rettxt    =  wa_msgxg-message.
        ls_output_bd-retid     = '1'.
        APPEND ls_output_bd TO  lt_output_bd.
    
        UPDATE zpslx SET zzt = '1' zfkzt = '1' zfgtxt = wa_msgxg-message WHERE pspid = ls_lx-pspid AND zflag = ls_lx-zflag.
        COMMIT WORK.
    
      ENDIF.
    ENDIF.
    
    CLEAR: ls_output_bd ,wa_message.
    

    ENDLOOP.

    "反馈头信息
    ls_output_hd-msgid = input-mt_ps_xmlx-msghd-msgid.
    ls_output_hd-tlgid = input-mt_ps_xmlx-msghd-tlgid.
    ls_output_hd-tlgname = input-mt_ps_xmlx-msghd-tlgname.
    ls_output_hd-dtsend = sy-datum && sy-uzeit.
    ls_output_hd-sender = ‘ERP’.
    ls_output_hd-receiver = input-mt_ps_xmlx-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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值