SAP PS 创建预留+采购申请

METHOD zps_ii_si_xm_cgsq_in~si_xm_cgsq_in.

"定义返回参数

DATA:it_bapi_bus2002_new TYPE STANDARD TABLE OF bapi_bus2002_new,

     wa_bapi_bus2002_new TYPE bapi_bus2002_new,



     it_bapiret2         TYPE STANDARD TABLE OF bapiret2,

     wa_bapiret2         TYPE bapiret2.



DATA : i_number          TYPE bapi_network_list-network.



DATA:"定义输入活动

  it_bapi_bus2002_act_new TYPE STANDARD TABLE OF bapi_bus2002_act_new,

  wa_bapi_bus2002_act_new TYPE bapi_bus2002_act_new.



DATA:

  "输入的组件信息

  wa_i_components_add TYPE bapi_network_comp_add,

  it_i_components_add TYPE STANDARD TABLE OF bapi_network_comp_add,



  "输出的消息信息



  wa_e_message_table  TYPE bapi_meth_message,

  it_e_message_table  TYPE STANDARD TABLE OF bapi_meth_message.



"返回接口参数

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_zpspr TYPE zpspr,

      lt_zpspr TYPE STANDARD TABLE OF zpspr.





DATA: flag_head TYPE c,

      flag_hxm  TYPE c.

****修改组件

DATA: lt_comp TYPE TABLE OF   bapi_network_comp_detail,

      ls_comp TYPE bapi_network_comp_detail.



DATA:lt_com_change TYPE STANDARD TABLE OF bapi_network_comp_change,

     ls_com_change TYPE bapi_network_comp_change,

     ls_com_upd    TYPE  bapi_network_comp_cng_upd,

     lt_com_upd    TYPE STANDARD TABLE OF bapi_network_comp_cng_upd.

************删除组件

DATA: ls_comp_id TYPE bapi_network_comp_id,

      lt_comp_id TYPE STANDARD TABLE OF bapi_network_comp_id.









LOOP AT input-mt_xm_cgsq-msgbd INTO DATA(ls_input).





  IF ls_input-zflag = 'I'.



    "校验

    IF ls_input-profid IS INITIAL.

      "错误反馈

      ls_output_bd-msgid     = input-mt_xm_cgsq-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-auart IS INITIAL.
    
        "错误反馈
    
        ls_output_bd-msgid     = input-mt_xm_cgsq-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_xm_cgsq-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-dispo IS INITIAL.
    
        "错误反馈
    
        ls_output_bd-msgid     = input-mt_xm_cgsq-msghd-msgid.
    
        ls_output_bd-itemid    = ls_input-itemid.
    
  •    ls_output_bd-order1    = ls_body-anln1.
    
        ls_output_bd-rettxt    =  '关键字段 MRP控制者 不能为空'.
    
        ls_output_bd-retid     = '0'.
    
        APPEND ls_output_bd TO  lt_output_bd.
    
        CONTINUE.
    
      ENDIF.
    
    
    
    
    
      "写自建表
    
    
    
      ls_zpspr-msgid  =  ls_input-itemid.
    
      ls_zpspr-zflag   =  ls_input-zflag.
    
      ls_zpspr-posnr   =  ls_input-posnr.
    
      ls_zpspr-profid  =  ls_input-profid.
    
      ls_zpspr-aufnr   =  ls_input-aufnr.
    
      ls_zpspr-auart   =  ls_input-auart.
    
      ls_zpspr-werks   =  ls_input-werks.
    
      ls_zpspr-dispo   =  ls_input-dispo.
    
      ls_zpspr-ktext   =  ls_input-ktext.
    
  •    ls_zpspr-zfkzt =  ls_input-zfkzt.
    
  •    ls_zpspr-banfn =  ls_input-banfn.
    
  •    ls_zpspr-bnfpo =  ls_input-bnfpo.
    
  •    ls_zpspr-rsnum =  ls_input-rsnum.
    
  •    ls_zpspr-rspos =  ls_input-rspos.
    
    
    
      MODIFY zpspr FROM ls_zpspr.
    
      COMMIT WORK.
    
    
    
      CLEAR:wa_bapi_bus2002_new.
    
      wa_bapi_bus2002_new-project_definition = ls_input-psphi.          "   'JG-112'.       "项目定义
    
      wa_bapi_bus2002_new-wbs_element        = ls_input-posnr. "'JG-1121'.       "工作分解结构元素 (WBS 元素)
    
      wa_bapi_bus2002_new-short_text         = ls_input-ktext. "'BAPI测试创建网络11'.       "描述
    
    
    
      wa_bapi_bus2002_new-profile            = ls_input-profid. "'AG00002'.  "网络参数文件
    
      wa_bapi_bus2002_new-network_type       = ls_input-auart. " 'AG46'."网络类型
    
      wa_bapi_bus2002_new-plant              = ls_input-werks. " '2060'.       "工厂
    
      wa_bapi_bus2002_new-mrp_controller     = ls_input-dispo. "  'PS1'.       "MRP控制者
    
    
    
    
    
      CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
    
    
    
      CALL FUNCTION 'BAPI_BUS2002_CREATE'
    
        EXPORTING
    
          i_network = wa_bapi_bus2002_new
    
        TABLES
    
          et_return = it_bapiret2.
    
    
    
    
    
      "第四步:判断是否有错误消息
    
      LOOP AT it_bapiret2 INTO wa_bapiret2 WHERE type CA 'AE'.
    
    
    
        MESSAGE ID wa_bapiret2-id TYPE wa_bapiret2-type NUMBER wa_bapiret2-number
    
            INTO wa_bapiret2-message
    
            WITH wa_bapiret2-message_v1 wa_bapiret2-message_v2
    
                 wa_bapiret2-message_v3 wa_bapiret2-message_v4.
    
      ENDLOOP.
    
    
    
    
    
      "第四步:如果有错误消息则退出
    
      IF sy-subrc EQ 0.
    
    
    
        "错误反馈
    
        ls_output_bd-msgid     = input-mt_xm_cgsq-msghd-msgid.
    
        ls_output_bd-itemid    = ls_input-itemid.
    
  •    ls_output_bd-order1    = ls_body-anln1.
    
        ls_output_bd-rettxt    =  wa_bapiret2-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 zpspr SET zfkzt = '0' zfgtxt = wa_bapiret2-message WHERE msgid = ls_input-itemid  AND  zflag = ls_input-zflag.
    
        COMMIT WORK.
    
    
    
      ENDIF.
    
    
    
      CHECK sy-subrc NE 0.
    
    
    
      "第四步:没有错误消息则执行预提交
    
      CALL FUNCTION 'BAPI_PS_PRECOMMIT'
    
        TABLES
    
          et_return = it_bapiret2.
    
    
    
      LOOP AT it_bapiret2 INTO wa_bapiret2 WHERE type CA 'AE'.
    
    
    
    
    
        MESSAGE ID wa_bapiret2-id TYPE wa_bapiret2-type NUMBER wa_bapiret2-number
    
            INTO wa_bapiret2-message
    
            WITH wa_bapiret2-message_v1 wa_bapiret2-message_v2
    
                 wa_bapiret2-message_v3 wa_bapiret2-message_v4.
    
    
    
      ENDLOOP.
    
    
    
      "第五步:预提交有错误消息则执行回滚
    
      IF sy-subrc EQ 0.
    
    
    
        "错误反馈
    
        ls_output_bd-msgid     = input-mt_xm_cgsq-msghd-msgid.
    
        ls_output_bd-itemid    = ls_input-itemid.
    
  •    ls_output_bd-order1    = ls_body-anln1.
    
        ls_output_bd-rettxt    =  wa_bapiret2-message.
    
        ls_output_bd-retid     = '0'.
    
        APPEND ls_output_bd TO  lt_output_bd.
    
    
    
    
    
    
    
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    
    
    
        CALL FUNCTION 'PS_FLAG_INIT_GLOBAL_FLAGS'.
    
    
    
        CALL FUNCTION 'PS_FLAG_SET_GLOBAL_FLAGS'
    
          EXPORTING
    
            i_precommit_ok = 'Y'.
    
    
    
        UPDATE zpspr SET zfkzt = '0' zfgtxt = wa_bapiret2-message WHERE msgid = ls_input-itemid  AND  zflag = ls_input-zflag.
    
        COMMIT WORK.
    
    
    
      ELSE.
    
        "第五步:预提交无错误消息则执行正式提交
    
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    
          EXPORTING
    
            wait = 'X'.
    
    
    
        READ TABLE it_bapiret2 INTO wa_bapiret2  WITH  KEY type = 'S'.
    
        IF sy-subrc = 0.
    
    
    
          i_number = wa_bapiret2-message_v2+0(12).
    
        ENDIF.
    
    
    
      ENDIF.
    
    
    
    
    
      "网络创建成功后创建作业
    
      IF i_number IS NOT INITIAL.
    
    
    
        CLEAR: it_bapiret2,wa_bapiret2,it_bapi_bus2002_act_new.
    
        "作业赋值
    
        wa_bapi_bus2002_act_new-activity           = '0010'.         "在网络和库网络中的作业编号
    
        wa_bapi_bus2002_act_new-description        = ls_input-ktext.       "工序短文本
    

*wa_bapi_bus2002_act_new-control_key = ‘LG01’. "控制码-内协(ZPS1)和成本(ZPS3)

      wa_bapi_bus2002_act_new-wbs_element        = ls_input-posnr.       "工作分解结构元素 (WBS 元素)

      wa_bapi_bus2002_act_new-work_cntr          = ''.       "工作中心

      wa_bapi_bus2002_act_new-work_activity      = ''.       "工作(时间单位H)
  •    wa_bapi_bus2002_act_new-calculation_key    = 0.       "用于计算的码
    
    
    
    
    
        wa_bapi_bus2002_act_new-acttype            = ''.       "活动类型
    
        wa_bapi_bus2002_act_new-cost_elem          = ''.       "成本要素编码
    
        wa_bapi_bus2002_act_new-profit_ctr         = ''.       "利润中心
    
    
    
        wa_bapi_bus2002_act_new-activity_costs   = ''.       "作业中的成本
    
    
    
    
    
        APPEND wa_bapi_bus2002_act_new TO it_bapi_bus2002_act_new.
    
        CLEAR:wa_bapi_bus2002_act_new.
    
    
    
        "第三步:调用函数
    
        CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
    
    
    
        CALL FUNCTION 'BAPI_BUS2002_ACT_CREATE_MULTI'
    
          EXPORTING
    
            i_number    = i_number
    
          TABLES
    
            it_activity = it_bapi_bus2002_act_new
    
            et_return   = it_bapiret2.
    
    
    
    
    
        "第四步:判断是否有错误消息
    
        LOOP AT it_bapiret2 INTO wa_bapiret2 WHERE type CA 'AE'.
    
    
    
          MESSAGE ID wa_bapiret2-id TYPE wa_bapiret2-type NUMBER wa_bapiret2-number
    
              INTO wa_bapiret2-message
    
              WITH wa_bapiret2-message_v1 wa_bapiret2-message_v2
    
                   wa_bapiret2-message_v3 wa_bapiret2-message_v4.
    
  • WRITE:/ ‘创建时报错:’,wa_bapiret2-message.

     ENDLOOP.
    
    
    
     "第四步:如果有错误消息则退出
    
     IF sy-subrc EQ 0.
    
    
    
       "错误反馈
    
       ls_output_bd-msgid     = input-mt_xm_cgsq-msghd-msgid.
    
       ls_output_bd-itemid    = ls_input-itemid.
    
  •    ls_output_bd-order1    = ls_body-anln1.
    
          ls_output_bd-rettxt    =  wa_bapiret2-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'.
    
    
    
        ENDIF.
    
    
    
    
    
        CHECK sy-subrc NE 0.
    
    
    
        "第四步:没有错误消息则执行预提交
    
        CALL FUNCTION 'BAPI_PS_PRECOMMIT'
    
          TABLES
    
            et_return = it_bapiret2.
    
    
    
        LOOP AT it_bapiret2 INTO wa_bapiret2 WHERE type CA 'AE'.
    
    
    
    
    
          MESSAGE ID wa_bapiret2-id TYPE wa_bapiret2-type NUMBER wa_bapiret2-number
    
              INTO wa_bapiret2-message
    
              WITH wa_bapiret2-message_v1 wa_bapiret2-message_v2
    
                   wa_bapiret2-message_v3 wa_bapiret2-message_v4.
    
  • WRITE:/ ‘预提交时报错:’,wa_bapiret2-message.

     ENDLOOP.
    
    
    
    
    
     "第五步:预提交有错误消息则执行回滚
    
     IF sy-subrc EQ 0.
    
    
    
    
    
       "错误反馈
    
       ls_output_bd-msgid     = input-mt_xm_cgsq-msghd-msgid.
    
       ls_output_bd-itemid    = ls_input-itemid.
    
  •    ls_output_bd-order1    = ls_body-anln1.
    
          ls_output_bd-rettxt    =  wa_bapiret2-message.
    
          ls_output_bd-retid     = '0'.
    
          APPEND ls_output_bd TO  lt_output_bd.
    
    
    
          CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
    
            IMPORTING
    
              return = it_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'.
    

8物料组件****

        LOOP AT ls_input-hxm INTO DATA(ls_hxm).



          CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'

            EXPORTING

              input  = ls_hxm-matnr

            IMPORTING

              output = ls_hxm-matnr.

          ls_zpspr-itemid = ls_hxm-itemid.

          ls_zpspr-matnr =  ls_hxm-matnr.

          ls_zpspr-ekgrp =  ls_hxm-ekgrp.

          ls_zpspr-menge =  ls_hxm-menge.

          ls_zpspr-meins =  ls_hxm-meins.

          ls_zpspr-loekz =  ls_hxm-loekz.
  •          ls_zpspr-zfgtxt =  ls_hxm-zfgtxt.
    
            MODIFY zpspr FROM ls_zpspr.
    
  •          UPDATE zpspr SET matnr = ls_hxm-matnr  ekgrp = ls_hxm-ekgrp  menge = ls_hxm-menge  meins = ls_hxm-meins loekz = ls_hxm-loekz
    
  •           WHERE msgid = ls_input-itemid  AND  zflag = ls_input-zflag   AND  itemid = ls_hxm-itemid  .
    
            COMMIT WORK.
    
    
    
            CLEAR: wa_bapiret2,it_bapiret2.
    
    
    
            "物料组件
    
            wa_i_components_add-activity        = '0010'. "活动编号
    
            "必填,需传输或者找
    
    
    
            wa_i_components_add-mrp_relevant     = '3'.   "事件立即执行
    
            wa_i_components_add-material        = ls_hxm-matnr."物料号
    
            wa_i_components_add-entry_quantity  = ls_hxm-menge.  "数量
    
            wa_i_components_add-base_uom        = ls_hxm-meins. "'KG'. "基本计量单位
    
    
    
            IF ls_input-profid = 'AG00003'.
    
              wa_i_components_add-pur_group        = ls_hxm-ekgrp."采购组
    
              wa_i_components_add-type_of_pur_resv = '5'. "采购类型????????????????
    
            ENDIF.
    
  • wa_i_components_add-req_date = ‘20220830’."需求日期

  •        wa_i_components_add-item_text       = '测试bapi物料挂载'.  "项目文本行
    
    
    
            wa_i_components_add-item_cat        = 'L'.   "项目类别不传??????????????????  固定、
    
    
    
            APPEND wa_i_components_add TO it_i_components_add.
    
            CLEAR: wa_i_components_add.
    
          ENDLOOP.
    
    
    
          "第三步:调用函数
    
          CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
    
          CALL FUNCTION 'BAPI_NETWORK_COMP_ADD'
    
            EXPORTING
    
              number           = i_number
    
            IMPORTING
    
              return           = wa_bapiret2
    
            TABLES
    
              i_components_add = it_i_components_add
    
              e_message_table  = it_e_message_table.
    
    
    
    
    
          CLEAR:it_i_components_add.
    
          APPEND wa_bapiret2 TO it_bapiret2.
    
          "第四步:判断是否有错误消息
    
          LOOP AT it_bapiret2 INTO wa_bapiret2 WHERE type CA 'AE'.
    
    
    
    
    
            MESSAGE ID wa_bapiret2-id TYPE wa_bapiret2-type NUMBER wa_bapiret2-number
    
                INTO wa_bapiret2-message
    
                WITH wa_bapiret2-message_v1 wa_bapiret2-message_v2
    
                     wa_bapiret2-message_v3 wa_bapiret2-message_v4.
    
          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'.
    
    
    
    
    
            UPDATE zpspr SET zfkzt = '0' zfgtxt = wa_bapiret2-message WHERE msgid = ls_input-itemid  AND  zflag = ls_input-zflag   AND  itemid = ls_hxm-itemid  .
    
            COMMIT WORK.
    
    
    
          ENDIF.
    
    
    
    
    
          CHECK sy-subrc NE 0.
    
    
    
          "第四步:没有错误消息则执行预提交
    
          CALL FUNCTION 'BAPI_PS_PRECOMMIT'
    
            TABLES
    
              et_return = it_bapiret2.
    
    
    
          LOOP AT it_bapiret2 INTO wa_bapiret2 WHERE type CA 'AE'.
    
    
    
            MESSAGE ID wa_bapiret2-id TYPE wa_bapiret2-type NUMBER wa_bapiret2-number
    
                INTO wa_bapiret2-message
    
                WITH wa_bapiret2-message_v1 wa_bapiret2-message_v2
    
                     wa_bapiret2-message_v3 wa_bapiret2-message_v4.
    
  •  WRITE:/ '预提交时报错:',wa_bapiret2-message.
    
    
    
          ENDLOOP.
    
    
    
    
    
          "第五步:预提交有错误消息则执行回滚
    
          IF sy-subrc EQ 0.
    
    
    
    
    
    
    
    
    
            CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    
  •    IMPORTING
    
  •      return = it_bapiret2.
    
    
    
            CALL FUNCTION 'PS_FLAG_INIT_GLOBAL_FLAGS'.
    
    
    
            CALL FUNCTION 'PS_FLAG_SET_GLOBAL_FLAGS'
    
              EXPORTING
    
                i_precommit_ok = 'Y'.
    
    
    
            UPDATE zpspr SET zfkzt = '0' zfgtxt = wa_bapiret2-message WHERE msgid = ls_input-itemid  AND  zflag = ls_input-zflag.
    
            COMMIT WORK.
    
    
    
          ELSE.
    
            "第五步:预提交无错误消息则执行正式提交
    
            CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    
              EXPORTING
    
                wait = 'X'.
    
  •    IMPORTING
    
  •      return = wa_bapiret2.
    
          ENDIF.
    

8物料组件****

        DATA:

          "返回参数

          ld_return       TYPE bapireturn1,

          it_e_component TYPE STANDARD TABLE OF bapi_component_exp,

          wa_e_component LIKE LINE OF it_e_component.





        CALL FUNCTION 'BAPI_NETWORK_GETDETAIL'

          EXPORTING

            number      = i_number
  •           i_without_network          = ld_i_without_network
    
  •           i_without_network_activity = ld_i_without_network_activity
    
  •           i_without_relation         = ld_i_without_relation
    
  •           i_without_activity_element = ld_i_without_activity_element
    
  •           i_without_activity_milestone =    ld_i_without_activity_milestone
    
  •           i_without_component        = ld_i_without_component
    
            IMPORTING
    
              return      = ld_return
    
            TABLES
    
  •           e_network   = it_e_network
    
  •           e_activity  = it_e_activity
    
  •           e_relation  = it_e_relation
    
  •           e_message_table            = it_e_message_table
    
  •           e_activity_element         = it_e_activity_element
    
  •           e_activity_milestone       = it_e_activity_milestone
    
              e_component = it_e_component
    
            .  "  BAPI_NETWORK_GETDETAIL
    
    
    
          LOOP AT it_e_component  INTO wa_e_component .
    
    
    
            "创建完反馈
    
            ls_output_bd-itemid      = ls_hxm-itemid.
    
  •          ls_output_bd-itemid     = wa_e_component-preq_no.
    
  •          ls_output_bd-order1     = wa_e_component-preq_item.
    
  •          ls_output_bd-msgid      = wa_e_component-reserv_no.
    
  •          ls_output_bd-tlgid      =  wa_e_component-res_item.
    
            ls_output_bd-rettxt     =  wa_bapiret2-message.
    
            ls_output_bd-retid      = '1'.
    
    
    
            ls_output_bd-yl-yl1     = wa_e_component-preq_no.
    
            ls_output_bd-yl-yl2     = wa_e_component-preq_item.
    
            ls_output_bd-yl-yl3     = wa_e_component-reserv_no.
    
            ls_output_bd-yl-yl4     = wa_e_component-res_item.
    
            APPEND ls_output_bd TO  lt_output_bd.
    
    
    
            UPDATE zpspr SET aufnr = i_number   banfn = wa_e_component-preq_no  bnfpo = wa_e_component-preq_item rsnum = wa_e_component-reserv_no
    
                             rspos = wa_e_component-res_item   zfkzt = '1' zfgtxt = wa_bapiret2-message
    
                         WHERE msgid = ls_input-itemid  AND  zflag = ls_input-zflag AND  itemid = wa_e_component-res_item.
    
            COMMIT WORK.
    
    
    
          ENDLOOP.
    
    
    
        ENDIF.
    
      ENDIF.
    
    ENDIF.
    
  •  IF ls_input-zflag = 'D'.
    
  •    DATA:
    
  •      is_network_exist TYPE bapi_network_list-network,
    
  •      it_bapireturn1   TYPE STANDARD TABLE OF bapireturn1,
    
  •      wa_bapireturn1   TYPE bapireturn1.
    
  •    is_network_exist = '722000000015'.     "网络删除只要网络号
    
  •    CALL FUNCTION 'BAPI_NETWORK_EXISTENCECHECK'
    
  •      EXPORTING
    
  •        number = is_network_exist
    
  •      IMPORTING
    
  •        return = wa_bapireturn1.
    
  •    IF wa_bapireturn1-type = 'E'.
    
  •      WRITE:/ '网络不存在:',is_network_exist.
    
  •    ENDIF.
    
  •    CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
    
  •    CALL FUNCTION 'BAPI_BUS2002_DELETE'
    
  •      EXPORTING
    
  •        i_number  = is_network_exist
    
  •      TABLES
    
  •        et_return = it_bapiret2
    

** EXTENSIONIN =

** EXTENSIONOUT =

  •      .
    
  •    "第四步:判断是否有错误消息
    
  •    LOOP AT it_bapiret2 INTO wa_bapiret2 WHERE type CA 'AE'.
    
  •      MESSAGE ID wa_bapiret2-id TYPE wa_bapiret2-type NUMBER wa_bapiret2-number
    
  •          INTO wa_bapiret2-message
    
  •          WITH wa_bapiret2-message_v1 wa_bapiret2-message_v2
    
  •               wa_bapiret2-message_v3 wa_bapiret2-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_bapiret2.
    
  •    LOOP AT it_bapiret2 INTO wa_bapiret2 WHERE type CA 'AE'.
    
  •      MESSAGE ID wa_bapiret2-id TYPE wa_bapiret2-type NUMBER wa_bapiret2-number
    
  •          INTO wa_bapiret2-message
    
  •          WITH wa_bapiret2-message_v1 wa_bapiret2-message_v2
    
  •               wa_bapiret2-message_v3 wa_bapiret2-message_v4.
    

** WRITE:/ ‘预提交时报错:’,wa_bapiret2-message.

  •    ENDLOOP.
    
  •    "第五步:预提交有错误消息则执行回滚
    
  •    IF sy-subrc EQ 0.
    
  •      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
    
  •        IMPORTING
    
  •          return = it_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 = wa_bapiret2.
    

** WRITE:/ ‘网络删除成功:’,wa_bapiret2-message.

  •    ENDIF.
    
  •  ENDIF.
    
  •  "只改数量20220819
    
    IF ls_input-zflag = 'U'.
    
      LOOP AT ls_input-hxm INTO DATA(ls_hxm2).
    
        IF ls_hxm2-rsnum IS INITIAL.
    
          "错误反馈
    
          ls_output_bd-msgid     = input-mt_xm_cgsq-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_hxm2-rspos IS INITIAL.
    
          "错误反馈
    
          ls_output_bd-msgid     = input-mt_xm_cgsq-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.
    
    
    
        "获取网络号
    
    
    
        SELECT SINGLE aufnr INTO i_number FROM resb  WHERE rsnum = ls_hxm2-rsnum   AND  rspos = ls_hxm2-rspos   AND xloek  NE 'X'.
    
        IF sy-subrc = 0.
    
    
    
          CALL FUNCTION 'BAPI_NETWORK_COMP_GETDETAIL'
    
            EXPORTING
    
              number              = i_number
    
  •           MAX_ROWS            = 0
    
  •     IMPORTING
    
  •           RETURN              =
    
            TABLES
    
  •           I_ACTIVITY_RANGE    =
    
  •           I_COMPONENTS_ID     =
    
              e_components_detail = lt_comp.
    
    
    
          IF lt_comp  IS NOT  INITIAL.
    
    
    
            DELETE lt_comp  WHERE reserv_no  NE ls_hxm2-rsnum.
    
            IF lt_comp IS NOT  INITIAL.
    
              LOOP AT lt_comp INTO ls_comp WHERE res_item = ls_hxm2-rspos.
    
    
    
                ls_com_change-component = ls_comp-component.
    
                ls_com_change-entry_quantity = ls_hxm2-menge.
    
                APPEND ls_com_change TO lt_com_change.
    
    
    
                ls_com_upd-component  = ls_comp-component.
    
                ls_com_upd-entry_quantity = 'X'.
    
                APPEND ls_com_upd TO lt_com_upd.
    
    
    
                CALL FUNCTION 'BAPI_NETWORK_COMP_CHANGE'
    
                  EXPORTING
    
                    number                     = i_number
    
  • IMPORTING

  •                 RETURN                     =
    
                  TABLES
    
                    i_components_change        = lt_com_change
    
                    i_components_change_update = lt_com_upd
    
                    e_message_table            = it_e_message_table.
    
    
    
    
    
                LOOP AT it_e_message_table INTO wa_e_message_table WHERE  message_type CA 'AE'.
    
    
    
                ENDLOOP.
    
    
    
                IF sy-subrc = 0.
    
    
    
                  CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    
    
    
                  "错误反馈
    
  •                ls_output_bd-msgid     = input-mt_xm_cgsq-msghd-msgid.
    
                  ls_output_bd-itemid    = ls_hxm2-itemid.
    
                  ls_output_bd-rettxt    =  wa_e_message_table-message_text.
    
                  ls_output_bd-retid     = '0'.
    
                  APPEND ls_output_bd TO  lt_output_bd.
    
                ELSE.
    
    
    
                  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    
                    EXPORTING
    
                      wait = 'X'.
    
    
    
                  "反馈
    
  •                ls_output_bd-msgid     = input-mt_xm_cgsq-msghd-msgid.
    
                  ls_output_bd-itemid    = ls_hxm2-itemid.
    
                  ls_output_bd-rettxt    =  wa_e_message_table-message_text.
    
                  ls_output_bd-retid     = '1'.
    
                  APPEND ls_output_bd TO  lt_output_bd.
    
                ENDIF.
    
    
    
                CLEAR: ls_com_change,lt_com_change,ls_com_upd,lt_com_upd.
    
              ENDLOOP.
    
    
    
            ENDIF.
    
    
    
          ENDIF.
    
        ELSE.
    
          "错误反馈
    
  •                ls_output_bd-msgid     = input-mt_xm_cgsq-msghd-msgid.
    
          ls_output_bd-itemid    = ls_hxm2-itemid.
    
          ls_output_bd-rettxt    =  '预留不存在,请检查'.
    
          ls_output_bd-retid     = '0'.
    
          APPEND ls_output_bd TO  lt_output_bd.
    
        ENDIF.
    
      ENDLOOP.
    
    
    
    ENDIF.
    

修改结束**************************

删除**************************

  IF ls_input-zflag = 'D'.



    LOOP AT ls_input-hxm INTO DATA(ls_hxm3).

      IF ls_hxm3-rsnum IS INITIAL.

        "错误反馈

        ls_output_bd-msgid     = input-mt_xm_cgsq-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_hxm3-rspos IS INITIAL.
    
          "错误反馈
    
          ls_output_bd-msgid     = input-mt_xm_cgsq-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.
    
    
    
        "获取网络号
    
    
    
        SELECT SINGLE aufnr INTO i_number FROM resb  WHERE rsnum = ls_hxm3-rsnum   AND  rspos = ls_hxm3-rspos   AND xloek  NE 'X'.
    
        IF sy-subrc = 0.
    
    
    
          CALL FUNCTION 'BAPI_NETWORK_COMP_GETDETAIL'
    
            EXPORTING
    
              number              = i_number
    
  •           MAX_ROWS            = 0
    
  •     IMPORTING
    
  •           RETURN              =
    
            TABLES
    
  •           I_ACTIVITY_RANGE    =
    
  •           I_COMPONENTS_ID     =
    
              e_components_detail = lt_comp.
    
    
    
          IF lt_comp  IS NOT  INITIAL.
    
    
    
            DELETE lt_comp  WHERE reserv_no  NE ls_hxm3-rsnum.
    
            IF lt_comp IS NOT  INITIAL.
    
              LOOP AT lt_comp INTO ls_comp WHERE res_item = ls_hxm3-rspos.
    
    
    
                ls_comp_id-component = ls_comp-component.
    
                APPEND ls_comp_id TO lt_comp_id.
    
    
    
    
    
                CALL FUNCTION 'BAPI_NETWORK_COMP_REMOVE'
    
                  EXPORTING
    
                    number              = i_number
    
  • IMPORTING

  •                 RETURN              =
    
                  TABLES
    
                    i_components_remove = lt_comp_id
    
                    e_message_table     = it_e_message_table.
    
    
    
                LOOP AT it_e_message_table INTO wa_e_message_table WHERE  message_type CA 'AE'.
    
    
    
                ENDLOOP.
    
    
    
    
    
                IF sy-subrc = 0.
    
    
    
                  CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    
    
    
                  "错误反馈
    
  •                ls_output_bd-msgid     = input-mt_xm_cgsq-msghd-msgid.
    
                  ls_output_bd-itemid    = ls_hxm3-itemid.
    
                  ls_output_bd-rettxt    =  wa_e_message_table-message_text.
    
                  ls_output_bd-retid     = '0'.
    
                  APPEND ls_output_bd TO  lt_output_bd.
    
    
    
    
    
                  UPDATE zpspr SET zfkzt = '0' zfgtxt = wa_e_message_table-message_text WHERE msgid = ls_input-itemid  AND  zflag = ls_input-zflag AND itemid = ls_hxm3-itemid..
    
                  COMMIT WORK.
    
                ELSE.
    
    
    
                  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    
                    EXPORTING
    
                      wait = 'X'.
    
    
    
                  "反馈
    
  •                ls_output_bd-msgid     = input-mt_xm_cgsq-msghd-msgid.
    
                  ls_output_bd-itemid    = ls_hxm3-itemid.
    
                  ls_output_bd-rettxt    =  wa_e_message_table-message_text.
    
                  ls_output_bd-retid     = '1'.
    
                  APPEND ls_output_bd TO  lt_output_bd.
    
    
    
                  UPDATE zpspr SET zfkzt = '1' loekz = 'X' zfgtxt = wa_e_message_table-message_text WHERE msgid = ls_input-itemid  AND  zflag = ls_input-zflag AND itemid = ls_hxm3-itemid..
    
                  COMMIT WORK.
    
                ENDIF.
    
    
    
                CLEAR: ls_comp_id,lt_comp_id.
    
              ENDLOOP.
    
    
    
            ENDIF.
    
    
    
          ENDIF.
    
        ELSE.
    
          "错误反馈
    
  •                ls_output_bd-msgid     = input-mt_xm_cgsq-msghd-msgid.
    
          ls_output_bd-itemid    = ls_hxm3-itemid.
    
          ls_output_bd-rettxt    =  '预留不存在,请检查'.
    
          ls_output_bd-retid     = '0'.
    
          APPEND ls_output_bd TO  lt_output_bd.
    
    
    
          UPDATE zpspr SET zfkzt = '0' zfgtxt ='预留不存在,请检查' WHERE msgid = ls_input-itemid  AND  zflag = ls_input-zflag AND itemid = ls_hxm3-itemid..
    
          COMMIT WORK.
    
    
    
        ENDIF.
    
      ENDLOOP.
    
    ENDIF.
    

    ENDLOOP.

    "反馈头信息

    ls_output_hd-msgid = input-mt_xm_cgsq-msghd-msgid.

    ls_output_hd-tlgid = input-mt_xm_cgsq-msghd-tlgid.

    ls_output_hd-tlgname = input-mt_xm_cgsq-msghd-tlgname.

    ls_output_hd-dtsend = sy-datum && sy-uzeit.

    ls_output_hd-sender = ‘ERP’.

    ls_output_hd-receiver = input-mt_xm_cgsq-msghd-sender.

    ls_output_hd-freeuse = i_number.

    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.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值