删除+新增原始BOM工序+订单BOM+工序笔记

ODATA接收更改命令

Head

CostItem

BomItem



java 复制代码
  METHOD /iwbep/if_mgw_appl_srv_runtime~create_deep_entity.
**TRY.
*CALL METHOD SUPER->/IWBEP/IF_MGW_APPL_SRV_RUNTIME~CREATE_DEEP_ENTITY
*  EXPORTING
**    IV_ENTITY_NAME          =
**    IV_ENTITY_SET_NAME      =
**    IV_SOURCE_NAME          =
*    IO_DATA_PROVIDER        =
**    IT_KEY_TAB              =
**    IT_NAVIGATION_PATH      =
*    IO_EXPAND               =
**    IO_TECH_REQUEST_CONTEXT =
**  IMPORTING
**    ER_DEEP_ENTITY          =
*    .
**  CATCH /IWBEP/CX_MGW_BUSI_EXCEPTION.
**  CATCH /IWBEP/CX_MGW_TECH_EXCEPTION.
**ENDTRY.
    DATA:BEGIN OF wa_datain.
           INCLUDE TYPE zcl_z_up_costbom_mpc_ext=>ts_head.
    DATA:  bomitemset TYPE STANDARD TABLE OF zcl_z_up_costbom_mpc_ext=>ts_bomitem WITH DEFAULT KEY.
    DATA:  costitemset TYPE STANDARD TABLE OF zcl_z_up_costbom_mpc_ext=>ts_costitem WITH DEFAULT KEY.
    DATA END OF wa_datain.

    DATA:wa_message  TYPE scx_t100key.
    DATA:lv_objnr TYPE aufk-objnr.
    DATA:lt_status TYPE TABLE OF jstat.

    DATA t_stpo         TYPE STANDARD TABLE OF stpo_api02.
    DATA i_stpo         TYPE STANDARD TABLE OF stpo_api02.
    DATA d_stpo         TYPE STANDARD TABLE OF stpo_api02.
    DATA s_stpo         TYPE  stpo_api02.
    DATA t_stko         TYPE STANDARD TABLE OF stko_api02.

    DATA t_stpo_up        TYPE STANDARD TABLE OF stpo_api03.
    DATA i_stko           TYPE stko_api01.
    DATA o_stko           TYPE stko_api02.
    DATA fl_warning          TYPE capiflag-flwarning.

    DATA:BEGIN OF ls_stpo,
           stlal TYPE stalt,
           aennr TYPE aennr,
         END OF ls_stpo.
    DATA:return(220)  TYPE c.


    DATA:lv_werks TYPE t001w-werks VALUE '1110'.

    io_data_provider->read_entry_data( IMPORTING es_data = wa_datain ).

    IF wa_datain-bomitemset IS NOT INITIAL OR wa_datain-costitemset IS NOT INITIAL."判断传值是否OK

      DATA:gs_logging TYPE zcm_logging.
      DATA:lv_json_str TYPE string.
      CALL METHOD /ui2/cl_json=>serialize
        EXPORTING
          data   = wa_datain
        RECEIVING
          r_json = lv_json_str.


      CALL METHOD cl_system_uuid=>if_system_uuid_static~create_uuid_x16
        RECEIVING
          uuid = gs_logging-zuuid.

      gs_logging-zstate     = '3'.                               "接口状态    1 推送 2 创建 3 修改 4 接口不通
      gs_logging-ztcode     = 'Z_COSTBOM_UP'.               "接口模块
      gs_logging-zmsgty     = 'S'.                               "是否成功
      gs_logging-zfunction  = 'Z_COSTBOM_UP' .              "函数名
      gs_logging-zdate      = sy-datum.                          "创建日期
      gs_logging-ztime      = sy-uzeit.                          "创建时间
      gs_logging-zuser      = sy-uname.                          "创建用户
*    gs_logging-zname      = gv_last && gv_first.               "用户姓名
*    gs_logging-zetim      = s1 && '秒'..                       "执行时间
      gs_logging-zmsgtxt    = '成功接收对应数据!'.                 "消息文本
      gs_logging-zdatagram  = lv_json_str .                       "报文
      gs_logging-zwith   = 'PID拆分接收数据'.                      "程序标题
      INSERT zcm_logging FROM gs_logging.

*      SELECT * FROM zbomcost_job
*        WHERE ztype IN (' BOM' , 'COST' )
*          AND verid = @wa_datain-verid
*          AND matid = @wa_datain-matid
*          AND zold  <> 'X'
*          INTO TABLE @DATA(lt_zbomcost_job).
*
*      IF lt_zbomcost_job IS NOT INITIAL.
*        READ TABLE lt_zbomcost_job INTO DATA(ls_zbomcost) WITH KEY zflag = 'E'.
*        IF sy-subrc <> 0.
*
*          wa_message-msgid = '000'.
*          wa_message-msgno = '00'.
*          wa_message-attr1 = '版本已存在,请升版版号重新下发!'.
**     错误消息返回
*          RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception
*            EXPORTING
*              textid = wa_message.
*
*        ELSE.
*          "检索到有就全部失效掉
*          LOOP AT  lt_zbomcost_job INTO  ls_zbomcost.
*            ls_zbomcost-zold = 'X'.
*            MODIFY lt_zbomcost_job FROM ls_zbomcost.
*          ENDLOOP.
*
*          MODIFY zbomcost_job FROM TABLE lt_zbomcost_job.
*          IF sy-subrc = 0.
*            COMMIT WORK.
*          ENDIF.
*          CLEAR:lt_zbomcost_job.
*
*        ENDIF.
*
*      ENDIF.

      DATA:lt_opr      TYPE TABLE OF capp_opr,
           lt_com      TYPE TABLE OF capp_com,
           lv_flag_bar TYPE i.


      SELECT * FROM mapl WHERE matnr = @wa_datain-matid
                   AND werks = @lv_werks
                   AND loekz <> 'X'
                   INTO TABLE @DATA(lt_mapl).
      READ TABLE lt_mapl INTO DATA(ls_mapl) INDEX 1.

      SELECT COUNT(*) FROM ztaufnr_afvc WHERE matnr = @wa_datain-matid
                                          AND werks = @lv_werks.
      IF sy-subrc <> 0.

        CALL FUNCTION 'CARO_ROUTING_READ'
          EXPORTING
            date_from      = sy-datum
            plnty          = 'N'
            plnnr          = ls_mapl-plnnr
            plnal          = ls_mapl-plnal
            matnr          = wa_datain-matid
            buffer_del_flg = 'X'
          TABLES
            opr_tab        = lt_opr
            com_tab        = lt_com
          EXCEPTIONS
            not_found      = 1
            ref_not_exp    = 2
            not_valid      = 3
            no_authority   = 4
            OTHERS         = 5.

        DATA:lt_ztaufnr_afvc TYPE TABLE OF ztaufnr_afvc.
        DATA:ls_ztaufnr_afvc TYPE ztaufnr_afvc.




        LOOP AT  lt_opr INTO DATA(ls_opr).
          CLEAR:ls_ztaufnr_afvc.
          MOVE-CORRESPONDING  ls_opr TO ls_ztaufnr_afvc.

          TRY.
              CALL METHOD cl_system_uuid=>if_system_uuid_static~create_uuid_c32
                RECEIVING
                  uuid = ls_ztaufnr_afvc-zuuid.
            CATCH cx_uuid_error.

              MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
          ENDTRY.

          SELECT SINGLE arbpl FROM crhd WHERE objid = @ls_opr-arbid INTO @ls_ztaufnr_afvc-arbpl.
          ls_ztaufnr_afvc-matnr = wa_datain-matid.
          ls_ztaufnr_afvc-aufnr = '1'.
          ls_ztaufnr_afvc-upnum  = '0001'.
          ls_ztaufnr_afvc-crdate     = sy-datum.
          ls_ztaufnr_afvc-crtime     = sy-uzeit.

          APPEND ls_ztaufnr_afvc TO lt_ztaufnr_afvc.

        ENDLOOP.

        MODIFY ztaufnr_afvc FROM TABLE lt_ztaufnr_afvc.
        IF sy-subrc = 0.
          COMMIT WORK.
        ENDIF.


      ENDIF.



      "寻找对应的订单是否存在
      "获取TECO技术性关闭标识代码
      SELECT SINGLE istat
        FROM tj02t
        INTO @DATA(lv_tj02t)
        WHERE txt04 = 'TECO'
          AND spras = 'E'.

      SELECT a~matnr,
         a~aufnr,
         a~psmng,
         b~werks,
         b~objnr
    FROM afpo AS a
    INNER JOIN aufk AS b ON a~aufnr = b~aufnr
    WHERE a~matnr = @wa_datain-matid
      AND b~werks IN ( '1110','1199' )
      AND b~loekz <> 'X'
    INTO TABLE @DATA(it_aufk_all).

      IF it_aufk_all IS NOT INITIAL.
        LOOP AT it_aufk_all ASSIGNING FIELD-SYMBOL(<fs_aufk_all>).
          "通过生产对象号获取订单状态
          lv_objnr = <fs_aufk_all>-objnr.
          "结果存放在STATUS表中
          CALL FUNCTION 'STATUS_READ'
            EXPORTING
              client           = sy-mandt      "当前客户端
              objnr            = lv_objnr      "生产订单对象号
            TABLES
              status           = lt_status     "返回订单的状态
            EXCEPTIONS
              object_not_found = 1
              OTHERS           = 2.
          IF sy-subrc = 0.
            READ TABLE lt_status INTO DATA(ls_status) WITH KEY stat = lv_tj02t inact = ''.
            IF sy-subrc = 0.
              DELETE it_aufk_all[].
            ENDIF.

            READ TABLE lt_status INTO ls_status WITH KEY stat = 'I0046' .
            IF sy-subrc = 0.
              DELETE it_aufk_all[].
            ENDIF.
            CLEAR:lt_status[],ls_status.
          ENDIF.

        ENDLOOP.
      ENDIF.

      IF it_aufk_all IS NOT INITIAL.
        "检查订单是否报工
        SELECT aufnr,vornr
          FROM afru
          FOR ALL ENTRIES IN @it_aufk_all
          WHERE stokz = ''
            AND stzhl = ''
            AND aufnr = @it_aufk_all-aufnr
          INTO TABLE @DATA(lt_afru).

        SELECT a~aufnr,
               b~vornr
            FROM afpo AS a
            INNER JOIN ztaufnr_afvc AS b ON a~matnr = b~matnr
            FOR ALL ENTRIES IN @it_aufk_all
            WHERE a~aufnr = @it_aufk_all-aufnr
            INTO TABLE @DATA(lt_check).

        LOOP AT lt_check INTO DATA(ls_check).
          DELETE lt_afru WHERE aufnr = ls_check-aufnr
                           AND vornr = ls_check-vornr.

        ENDLOOP.

        IF lt_check IS NOT INITIAL.
          LOOP AT lt_check INTO ls_check.
            wa_message-attr1 = wa_message-attr1 && |{ ls_check-aufnr } - { ls_check-vornr }/ |.
          ENDLOOP.

          wa_message-attr1 = wa_message-attr1 && '存在报工无法修改!'.

          wa_message-msgid = '000'.
          wa_message-msgno = '00'.
*     错误消息返回
          RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception
            EXPORTING
              textid = wa_message.

        ENDIF.


      ENDIF.

*      IF it_aufk_all IS INITIAL.
*        没有在制订单
*        wa_message-msgid = '000'.
*        wa_message-msgno = '00'.
*        wa_message-attr1 = '没有在制订单无法修改'.
*
*     错误消息返回
*        RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception
*          EXPORTING
*            textid = wa_message.
*
*      ELSE.
      "先直接修改BOM或者工序

      "获取第一次是否直接修改过
      SELECT *
         FROM ztaufnr_bom
         WHERE matnr = @wa_datain-matid
           AND werks = @lv_werks
      INTO TABLE @DATA(lt_ztaufnr_bom).


      SELECT SINGLE stlal
          FROM mast
          WHERE matnr = @wa_datain-matid
          AND   werks = @lv_werks
          INTO @ls_stpo-stlal.



      "获取BOM清单
      CALL FUNCTION 'CSAP_MAT_BOM_READ'
        EXPORTING
          material    = wa_datain-matid
          plant       = lv_werks
          bom_usage   = '1'
          alternative = ' '
        TABLES
          t_stpo      = t_stpo
          t_stko      = t_stko
        EXCEPTIONS
          error       = 1
          OTHERS      = 2.


      IF sy-subrc = 0.
        "重新建立
        READ TABLE t_stko INTO DATA(s_stko) INDEX 1.
        MOVE-CORRESPONDING s_stko TO i_stko.
        MOVE-CORRESPONDING t_stpo TO i_stpo.
        MOVE-CORRESPONDING t_stpo TO d_stpo.


        IF lt_ztaufnr_bom IS NOT INITIAL. "不是第一次


          "全部标记删除
          LOOP AT t_stpo INTO s_stpo.
            READ TABLE lt_ztaufnr_bom INTO DATA(ls_ztaufnr_bom) WITH KEY idnrk = s_stpo-component
                                                                         posnr = s_stpo-item_no.
            IF sy-subrc <> 0 .
              s_stpo-fldelete = 'X'.
              MODIFY t_stpo FROM  s_stpo.
            ENDIF.
          ENDLOOP.


        ENDIF.

        MOVE-CORRESPONDING t_stpo TO d_stpo.

        DELETE d_stpo WHERE fldelete = 'X'.




        "重新写入数据
        LOOP AT wa_datain-bomitemset INTO DATA(ws_bomitemset).
          CLEAR:s_stpo.

*            SELECT SINGLE lgpro FROM marc
*               WHERE werks = @lv_werks
*               AND matnr = @ws_bomitemset-custlotid
*               INTO @s_stpo-issue_loc.

          s_stpo-item_no = lines( d_stpo ) * 10 + sy-tabix * 10.
          s_stpo-item_no = |{ s_stpo-item_no ALPHA = IN }|.
          s_stpo-item_categ   =  'L'.
          s_stpo-component    =  ws_bomitemset-custlotid. "组件
          s_stpo-comp_qty     =  ws_bomitemset-zqty.      "数量
          s_stpo-sortstring   =  ws_bomitemset-sortlbom. "排序字符串
          s_stpo-rel_cost     =  ws_bomitemset-costflag. "成本
          s_stpo-bulk_mat     =  ws_bomitemset-bulkcargo. "散料
          APPEND s_stpo TO t_stpo.
        ENDLOOP.
        MOVE-CORRESPONDING t_stpo TO t_stpo_up.


        CALL FUNCTION 'CSAP_MAT_BOM_MAINTAIN'
          EXPORTING
            material           = wa_datain-matid
            plant              = lv_werks
            bom_usage          = '1'
            alternative        = ls_stpo-stlal
            change_no          = ls_stpo-aennr
            i_stko             = i_stko
            fl_commit_and_wait = 'X'
            fl_bom_create      = 'X'
            fl_new_item        = 'X'
            fl_default_values  = ''
          IMPORTING
            fl_warning         = fl_warning
            o_stko             = o_stko
          TABLES
            t_stpo             = t_stpo_up.

        IF sy-subrc = 0.
          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
            EXPORTING
              wait = 'X'.

          IF lt_ztaufnr_bom IS INITIAL.

            LOOP AT i_stpo INTO DATA(is_stpo).
              "参数写入第一次修改成功后直接写入

              CLEAR :ls_ztaufnr_bom.

              TRY.
                  CALL METHOD cl_system_uuid=>if_system_uuid_static~create_uuid_c32
                    RECEIVING
                      uuid = ls_ztaufnr_bom-uuid.
                CATCH cx_uuid_error.

                  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
              ENDTRY.




              ls_ztaufnr_bom-aufnr   = '1'.
              ls_ztaufnr_bom-werks   = lv_werks.
              ls_ztaufnr_bom-matnr   = wa_datain-matid.
              ls_ztaufnr_bom-idnrk   = is_stpo-component.
              ls_ztaufnr_bom-posnr   = is_stpo-item_no.
              ls_ztaufnr_bom-menge   = is_stpo-comp_qty.
              ls_ztaufnr_bom-lgort   = is_stpo-issue_loc.
              ls_ztaufnr_bom-sortf   = is_stpo-sortstring.
              ls_ztaufnr_bom-sanka   = is_stpo-rel_cost.
              ls_ztaufnr_bom-schgt   = is_stpo-bulk_mat.
              ls_ztaufnr_bom-alpgr   = is_stpo-ai_group.
              ls_ztaufnr_bom-alprf   = is_stpo-ai_prio.
              ls_ztaufnr_bom-alpst   = is_stpo-ai_strateg.
              ls_ztaufnr_bom-ewahr   = is_stpo-usage_prob.
              ls_ztaufnr_bom-upnum   = '0001'.
              ls_ztaufnr_bom-crdate  = sy-datum.
              ls_ztaufnr_bom-crtime  = sy-uzeit.

              APPEND ls_ztaufnr_bom TO lt_ztaufnr_bom.
            ENDLOOP.

            MODIFY ztaufnr_bom FROM TABLE lt_ztaufnr_bom.
            IF sy-subrc = 0.
              COMMIT WORK.
            ENDIF.

          ENDIF.
        ELSE.
          CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        ENDIF.
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        CALL FUNCTION 'MESSAGE_TEXT_BUILD'
          EXPORTING
            msgid               = sy-msgid
            msgnr               = sy-msgno
            msgv1               = sy-msgv1
            msgv2               = sy-msgv2
            msgv3               = sy-msgv3
            msgv4               = sy-msgv4
          IMPORTING
            message_text_output = return.


        wa_message-msgid = '000'.
        wa_message-msgno = '00'.
        wa_message-attr1 = return.

*     错误消息返回
        RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception
          EXPORTING
            textid = wa_message.

        CHECK wa_message IS NOT INITIAL.
      ENDIF.

      "直接修改工序




      SUBMIT zca02_split
         WITH p_mo    = 'D'
         WITH p_matnr = wa_datain-matid
         WITH p_werks = lv_werks
         WITH p_plnnr = ls_mapl-plnnr
         AND RETURN.



      DATA:
        lt_return  TYPE STANDARD TABLE OF bapiret2,
        lt_opera   TYPE STANDARD TABLE OF cps_task_list_maint_opr,
        lt_operax  TYPE STANDARD TABLE OF cps_task_list_maint_opr_x,
        ls_opera   TYPE cps_task_list_maint_opr,
        ls_operax  TYPE cps_task_list_maint_opr_x,
        ls_task    TYPE cps_task_list_maint_tsk,
        ls_taskx   TYPE cps_task_list_maint_tsk_x,
        lv_message TYPE string.




      DATA: lv_flag TYPE cp_task_list_maint_pointer.
      lv_flag = lv_flag + 0000000001.

      SELECT SINGLE meins FROM mara
      WHERE matnr = @wa_datain-matid
      INTO @DATA(ls_meins).
      CLEAR:lt_opera ,
            lt_operax.

      "获取第一次的数据据添加进去

      SELECT * FROM ztaufnr_afvc WHERE matnr = @wa_datain-matid INTO TABLE @lt_ztaufnr_afvc.
      LOOP AT lt_ztaufnr_afvc INTO ls_ztaufnr_afvc.

        CLEAR:ls_opera,ls_operax.

        ls_opera-maintain_mode     = 'C'.    "更改模式
        ls_opera-flag_bar_pointer  = lv_flag."必要
        ls_opera-activity          = ls_ztaufnr_afvc-vornr.
        ls_opera-activity          = |{ ls_opera-activity ALPHA = IN }|.
        ls_opera-activity_old      = ls_opera-activity.
        ls_opera-work_cntr         = ls_ztaufnr_afvc-arbpl."工作中心
        ls_opera-plant             = lv_werks.
        ls_opera-standard_text_key = ''.
        ls_opera-description       = ls_ztaufnr_afvc-ltxa1.
        IF ls_meins = 'Z3'.
          ls_opera-base_quantity     = '1000'.
        ELSE.
          ls_opera-base_quantity     = '1'.
        ENDIF.

        ls_opera-std_value_01 = ls_ztaufnr_afvc-vgw01.
        ls_opera-std_value_02 = ls_ztaufnr_afvc-vgw02.
        ls_opera-std_value_03 = ls_ztaufnr_afvc-vgw03.
        ls_opera-std_value_04 = ls_ztaufnr_afvc-vgw04.
        ls_opera-std_value_05 = ls_ztaufnr_afvc-vgw05.

        ls_opera-acttype_01    = 'AT01'.
        ls_opera-std_unit_01   = 'MIN'.
        ls_opera-acttype_01    = 'AT02'.
        ls_opera-std_unit_01   = 'MIN'.
        ls_opera-acttype_01    = 'AT03'.
        ls_opera-std_unit_01   = 'MIN'.
        ls_opera-acttype_01    = 'AT04'.
        ls_opera-std_unit_01   = 'MIN'.
        ls_opera-acttype_01    = 'AT05'.
        ls_opera-std_unit_01   = 'MIN'.

        ls_opera-control_key       = ls_ztaufnr_afvc-steus.
        ls_opera-sorted_by         = ls_ztaufnr_afvc-sortl.
        ls_opera-sequence_no       = '000000'.      "排序号
        ls_opera-obj_id            = '00000000'.

        ls_opera-operation_measure_unit = ls_meins.
        ls_opera-denominator = 1.
        ls_opera-nominator = 1.
        APPEND ls_opera TO lt_opera.

        ls_operax-activity                = 'X'.
        ls_operax-work_cntr               = 'X'.
        ls_operax-standard_text_key       = 'X'.
        ls_operax-description             = 'X'.
        ls_operax-base_quantity           = 'X'.
        ls_operax-control_key             = 'X'.
        ls_operax-obj_id                  = 'X'.
        ls_operax-operation_measure_unit  = 'X'.
        ls_operax-denominator             = 'X'.
        ls_operax-nominator               = 'X'.
        ls_operax-std_value_01            = 'X'.
        ls_operax-std_value_02            = 'X'.
        ls_operax-std_value_03            = 'X'.
        ls_operax-std_value_04            = 'X'.
        ls_operax-std_value_05            = 'X'.
        ls_operax-acttype_01              = 'X'.
        ls_operax-std_unit_01             = 'X'.
        ls_operax-acttype_01              = 'X'.
        ls_operax-std_unit_01             = 'X'.
        ls_operax-acttype_01              = 'X'.
        ls_operax-std_unit_01             = 'X'.
        ls_operax-acttype_01              = 'X'.
        ls_operax-std_unit_01             = 'X'.
        ls_operax-acttype_01              = 'X'.
        ls_operax-std_unit_01             = 'X'.
        ls_operax-sorted_by               = 'X'.

        APPEND ls_operax TO lt_operax.

      ENDLOOP.


      LOOP AT wa_datain-costitemset INTO DATA(ws_costitemset).

        CLEAR:ls_opera,ls_operax.

        ls_opera-maintain_mode     = 'C'.    "更改模式
        ls_opera-flag_bar_pointer  = lv_flag."必要
        ls_opera-activity          =  lines( lt_opera ) * 10 + 10.
        ls_opera-activity          = |{ ls_opera-activity ALPHA = IN }|.
        ls_opera-activity_old      = ls_opera-activity.
        ls_opera-work_cntr         = ws_costitemset-arbpl."工作中心
        ls_opera-plant             = lv_werks.
        ls_opera-standard_text_key = ''.
        ls_opera-description       = ws_costitemset-ltxa1.
        IF ls_meins = 'Z3'.
          ls_opera-base_quantity     = '1000'.
        ELSE.
          ls_opera-base_quantity     = '1'.
        ENDIF.



        ls_opera-std_value_01 = ws_costitemset-vgw01.
        ls_opera-std_value_02 = ws_costitemset-vgw02.
        ls_opera-std_value_03 = ws_costitemset-vgw03.
        ls_opera-std_value_04 = ws_costitemset-vgw04.
        ls_opera-std_value_05 = ws_costitemset-vgw05.

        ls_opera-acttype_01    = 'AT01'.
        ls_opera-std_unit_01   = 'MIN'.
        ls_opera-acttype_01    = 'AT02'.
        ls_opera-std_unit_01   = 'MIN'.
        ls_opera-acttype_01    = 'AT03'.
        ls_opera-std_unit_01   = 'MIN'.
        ls_opera-acttype_01    = 'AT04'.
        ls_opera-std_unit_01   = 'MIN'.
        ls_opera-acttype_01    = 'AT05'.
        ls_opera-std_unit_01   = 'MIN'.

        ls_opera-control_key       = ws_costitemset-steus.
        ls_opera-sorted_by         = ws_costitemset-Sortlcost.
        ls_opera-sequence_no       = '000000'.      "排序号
        ls_opera-obj_id            = '00000000'.

        ls_opera-operation_measure_unit = ls_meins.
        ls_opera-denominator = 1.
        ls_opera-nominator = 1.
        APPEND ls_opera TO lt_opera.

        ls_operax-activity                = 'X'.
        ls_operax-work_cntr               = 'X'.
        ls_operax-standard_text_key       = 'X'.
        ls_operax-description             = 'X'.
        ls_operax-base_quantity           = 'X'.
        ls_operax-control_key             = 'X'.
        ls_operax-obj_id                  = 'X'.
        ls_operax-operation_measure_unit  = 'X'.
        ls_operax-denominator             = 'X'.
        ls_operax-nominator               = 'X'.
        ls_operax-std_value_01            = 'X'.
        ls_operax-std_value_02            = 'X'.
        ls_operax-std_value_03            = 'X'.
        ls_operax-std_value_04            = 'X'.
        ls_operax-std_value_05            = 'X'.
        ls_operax-acttype_01              = 'X'.
        ls_operax-std_unit_01             = 'X'.
        ls_operax-acttype_01              = 'X'.
        ls_operax-std_unit_01             = 'X'.
        ls_operax-acttype_01              = 'X'.
        ls_operax-std_unit_01             = 'X'.
        ls_operax-acttype_01              = 'X'.
        ls_operax-std_unit_01             = 'X'.
        ls_operax-acttype_01              = 'X'.
        ls_operax-std_unit_01             = 'X'.
        ls_operax-sorted_by               = 'X'.


        APPEND ls_operax TO lt_operax.

      ENDLOOP.



      CALL FUNCTION 'CPCC_S_TASK_LIST_MAINTAIN'
        EXPORTING
          change_no       = ls_mapl-aennr
          key_date        = ls_mapl-datuv
          task_list_type  = ls_mapl-plnty
          task_list_group = ls_mapl-plnnr
          group_counter   = ls_mapl-plnal
          material        = wa_datain-matid
          plant           = lv_werks
        TABLES
          operations      = lt_opera
          operations_x    = lt_operax
          return          = lt_return.


      LOOP AT lt_return INTO DATA(ls_return) WHERE type = 'E' OR type = 'A'.
        IF lv_message IS INITIAL.
          lv_message = ls_return-message.
        ELSE.
          CONCATENATE lv_message
                      ls_return-message
                 INTO lv_message
            SEPARATED BY '/'.
        ENDIF.
      ENDLOOP.

      IF lv_message IS INITIAL.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = 'X'.
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        wa_message-msgid = '000'.
        wa_message-msgno = '00'.
        wa_message-attr1 = lv_message.
        RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception
          EXPORTING
            textid = wa_message.
      ENDIF.

      IF it_aufk_all IS  NOT INITIAL.

        "创建后台程序修改对应的工单数据

        DATA jobname            TYPE bapixmjob-jobname.
        DATA external_user_name TYPE bapixmlogr-extuser VALUE 'DS4_INTFACE'.
        DATA jobclass           TYPE bapixmjob-jobclass VALUE 'A'.
        DATA jobcount           TYPE bapixmjob-jobcount.
        DATA lv_return             TYPE bapiret2.
        DATA target_server      TYPE bapixmjob-execserver.
        DATA target_group       TYPE bpgrp0101-srvgrp.
        DATA:lv_uuid    TYPE uuid.
        DATA:lv_crdate  TYPE sy-datum.
        DATA:lv_crtime  TYPE sy-uzeit.
        DATA:lv_crname  TYPE sy-uname.

        TRY.
            CALL METHOD cl_system_uuid=>if_system_uuid_static~create_uuid_c32
              RECEIVING
                uuid = lv_uuid.
          CATCH cx_uuid_error.

            MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
        ENDTRY.

        lv_crdate   = sy-datum.
        lv_crtime   = sy-uzeit.
        lv_crname   = sy-uname.


        LOOP AT it_aufk_all INTO DATA(is_aufk_all).
          CLEAR:jobname.
          jobname = 'MO:' && |{ is_aufk_all-aufnr ALPHA = OUT }| && ',BOM修改!' && wa_datain-Verid.
          CONDENSE jobname NO-GAPS.

          " 1. 创建作业
          CALL FUNCTION 'BAPI_XBP_JOB_OPEN'
            EXPORTING
              jobname            = jobname           " 作业名称,最长32字符
              jobclass           = jobclass          " 作业类别:A-高优先级, B-中优先级, C-低优先级
              external_user_name = external_user_name " 外部用户名(可选)
            IMPORTING
              jobcount           = jobcount          " 作业编号(8位字符,唯一标识)
              return             = lv_return.        " 返回信息结构
          IF lv_return-type CA 'AE'.
            wa_message-msgid = '000'.
            wa_message-msgno = '00'.
            wa_message-attr1 = '作业创建失败!'.

            "错误消息返回
            RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception
              EXPORTING
                textid = wa_message.
            EXIT.
          ENDIF.


          DATA:ls_zbomcost_job TYPE zbomcost_job.
          CLEAR:ls_zbomcost_job.
          ls_zbomcost_job-ztype                 = 'BOM'.
          ls_zbomcost_job-jobcount              = jobcount.
          ls_zbomcost_job-jobname               = jobname.
          ls_zbomcost_job-jobclass              = jobclass.
          ls_zbomcost_job-external_user_name    = external_user_name.
          ls_zbomcost_job-zflag                 = ''.
          ls_zbomcost_job-aufnr                 = is_aufk_all-aufnr.
          ls_zbomcost_job-matid                 = wa_datain-matid.
          ls_zbomcost_job-werks                 = lv_werks.
          ls_zbomcost_job-verid                 = wa_datain-verid.
          ls_zbomcost_job-uuid                  = lv_uuid   .
          ls_zbomcost_job-crdate                = lv_crdate .
          ls_zbomcost_job-crtime                = lv_crtime .
          ls_zbomcost_job-crname                = lv_crname .

          INSERT zbomcost_job FROM ls_zbomcost_job.
          IF sy-subrc = 0.
            COMMIT WORK.
          ENDIF.


          SUBMIT ztest01
             WITH p_name  = jobname
             WITH p_count = jobcount
             WITH p_type  = 'BOM'
             AND RETURN.

          "删除BOM及新增数据

          "删除工序及新增数据

          CLEAR:jobname.
          jobname = 'MO:' && |{ is_aufk_all-aufnr ALPHA = OUT }| && ',工序修改!' && wa_datain-Verid.
          CONDENSE jobname NO-GAPS.

          " 1. 创建作业
          CALL FUNCTION 'BAPI_XBP_JOB_OPEN'
            EXPORTING
              jobname            = jobname           " 作业名称,最长32字符
              jobclass           = jobclass          " 作业类别:A-高优先级, B-中优先级, C-低优先级
              external_user_name = external_user_name " 外部用户名(可选)
            IMPORTING
              jobcount           = jobcount          " 作业编号(8位字符,唯一标识)
              return             = lv_return.        " 返回信息结构
          IF lv_return-type CA 'AE'.
            wa_message-msgid = '000'.
            wa_message-msgno = '00'.
            wa_message-attr1 = '作业创建失败!'.

            "错误消息返回
            RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception
              EXPORTING
                textid = wa_message.
            EXIT.
          ENDIF.


          CLEAR:ls_zbomcost_job.
          ls_zbomcost_job-ztype                 = 'COST'.
          ls_zbomcost_job-jobcount              = jobcount.
          ls_zbomcost_job-jobname               = jobname.
          ls_zbomcost_job-jobclass              = jobclass.
          ls_zbomcost_job-external_user_name    = external_user_name.
          ls_zbomcost_job-zflag                 = ''.
          ls_zbomcost_job-aufnr                 = is_aufk_all-aufnr.
          ls_zbomcost_job-matid                 = wa_datain-matid.
          ls_zbomcost_job-werks                 = lv_werks.
          ls_zbomcost_job-verid                 = wa_datain-verid.
          ls_zbomcost_job-uuid                  = lv_uuid   .
          ls_zbomcost_job-crdate                = lv_crdate .
          ls_zbomcost_job-crtime                = lv_crtime .
          ls_zbomcost_job-crname                = lv_crname .
          INSERT zbomcost_job FROM ls_zbomcost_job.
          IF sy-subrc = 0.
            COMMIT WORK.
          ENDIF.


          SUBMIT ztest01
             WITH p_name  = jobname
             WITH p_count = jobcount
             WITH p_type  = 'COST'
             AND RETURN.
          "删除工序及新增数据

        ENDLOOP.

        DATA:lv_zbomcost_ver TYPE zbomcost_ver.

        lv_zbomcost_ver-verid     = wa_datain-verid.
        lv_zbomcost_ver-matnr     = wa_datain-matid.
*        LV_ZBOMCOST_VER-ZFLAG     =
        lv_zbomcost_ver-uuid      = lv_uuid   .
        lv_zbomcost_ver-crdate    = lv_crdate .
        lv_zbomcost_ver-crtime    = lv_crtime .
        lv_zbomcost_ver-crname    = lv_crname .
        INSERT zbomcost_ver FROM lv_zbomcost_ver.
        IF sy-subrc = 0.
          COMMIT WORK.
        ENDIF.




        copy_data_to_ref( EXPORTING is_data = wa_datain
                  CHANGING  cr_data = er_deep_entity ).



      ENDIF.




    ELSEIF  wa_datain-bomitemset IS  INITIAL AND wa_datain-costitemset IS  INITIAL.

      wa_message-msgid = '000'.
      wa_message-msgno = '00'.
      wa_message-attr1 = '传入的BOM和工序为空无法更改!'.

      "错误消息返回
      RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception
        EXPORTING
          textid = wa_message.

    ENDIF.
  ENDMETHOD.

作业生成程序

java 复制代码
*&---------------------------------------------------------------------*
*& Report ZTEST01
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ztest01.



DATA jobname            TYPE bapixmjob-jobname.
DATA external_user_name TYPE bapixmlogr-extuser VALUE 'DS4_INTFACE'.
DATA jobclass           TYPE bapixmjob-jobclass VALUE 'A'.
DATA jobcount           TYPE bapixmjob-jobcount.
DATA return             TYPE bapiret2.
DATA target_server      TYPE bapixmjob-execserver.
DATA target_group       TYPE bpgrp0101-srvgrp.


PARAMETERS:p_name TYPE bapixmjob-jobname.
PARAMETERS:p_count TYPE bapixmjob-jobcount.
PARAMETERS:p_type TYPE string.
jobname = p_name .
jobcount = p_count.
IF p_type = 'BOM'.
  " 2. 添加ABAP步骤
  CALL FUNCTION 'BAPI_XBP_JOB_ADD_ABAP_STEP'
    EXPORTING
      jobname            = jobname
      jobcount           = jobcount
      external_user_name = external_user_name
      abap_program_name  = 'ZUP_AUFNR_BOM'      " 要执行的ABAP程序名
*     variant_name       = ''      " 程序变式(可选)
      sap_user_name      = sy-uname            " SAP用户名
      language           = sy-langu            " 语言
    IMPORTING
      return             = return.
ELSE.
  " 2. 添加ABAP步骤
  CALL FUNCTION 'BAPI_XBP_JOB_ADD_ABAP_STEP'
    EXPORTING
      jobname            = jobname
      jobcount           = jobcount
      external_user_name = external_user_name
      abap_program_name  = 'ZUP_AUFNR_AFVC'      " 要执行的ABAP程序名
*     variant_name       = ''      " 程序变式(可选)
      sap_user_name      = sy-uname            " SAP用户名
      language           = sy-langu            " 语言
    IMPORTING
      return             = return.
ENDIF.


" 3. 关闭并释放作业
CALL FUNCTION 'BAPI_XBP_JOB_CLOSE'
  EXPORTING
    jobname            = jobname
    jobcount           = jobcount
    external_user_name = external_user_name
  IMPORTING
    return             = return.

" 4. 启动作业
CALL FUNCTION 'BAPI_XBP_JOB_START_ASAP'
  EXPORTING
    jobname            = jobname
    jobcount           = jobcount
    external_user_name = external_user_name
    target_server      = target_server
    target_group       = target_group
  IMPORTING
    return             = return.
IF return-type CA 'AE'.
  MESSAGE '作业启动失败' TYPE 'E'.
ELSE.
  MESSAGE '作业已成功创建并启动' TYPE 'S'.
ENDIF.






.

BOM修改执行程序

java 复制代码
*&---------------------------------------------------------------------*
*& Report ZUP_AUFNR_BOM
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zup_aufnr_bom.

WAIT UP TO 10 SECONDS.

SELECT * FROM zbomcost_job WHERE zflag = '' AND ztype = 'BOM' INTO TABLE @DATA(lt_zbomcost_job).
READ TABLE lt_zbomcost_job INTO DATA(ls_zbomcost_job) INDEX 1.

SELECT * FROM ztaufnr_bom WHERE matnr = @ls_zbomcost_job-matid
                            AND werks = @ls_zbomcost_job-werks
                            INTO TABLE @DATA(lt_bom).
*PERFORM get_up_bom. "更改BOM数据
IF lt_zbomcost_job IS NOT INITIAL.
  PERFORM get_dl_bom. "删除BOM数据
  PERFORM get_ad_bom. "新增BOM数据
  PERFORM zup_wait_time.
  PERFORM djob.
ENDIF.



*&---------------------------------------------------------------------*
*& Form get_up_bom
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM get_up_bom .
*
*  DATA:lv_number  TYPE bapi_network_list-network,
*       lt_detail  TYPE TABLE OF bapi_network_comp_detail,
*       lt_remove  TYPE TABLE OF bapi_network_comp_id,
*       ls_remove  TYPE bapi_network_comp_id,
*       lt_message TYPE TABLE OF bapi_meth_message,
*       ls_message TYPE bapi_meth_message.
*
*  DATA:lv_check   TYPE char1,
*       lv_message TYPE char255.
*
*  lv_number = ls_zbomcost_job-aufnr."工单号
*
**--------------获取工单组件明细-------------------------------*
*  CALL FUNCTION 'BAPI_NETWORK_COMP_GETDETAIL'
*    EXPORTING
*      number              = lv_number
*    TABLES
*      e_components_detail = lt_detail.
**--------------获取工单组件明细-------------------------------*
*
*
**--------------工单组件删除-------------------------------*
*  "此处使用查询BAPI得到的组件列表,赋值给移除内表
*  DATA: lt_components_change        TYPE TABLE OF bapi_network_comp_change,
*        ls_components_change        TYPE bapi_network_comp_change,
*        lt_components_change_update TYPE TABLE OF bapi_network_comp_cng_upd,
*        ls_components_change_update TYPE bapi_network_comp_cng_upd,
*        ls_return                   TYPE bapiret2.
*  LOOP AT lt_detail INTO DATA(ls_detail).
*    CLEAR ls_components_change.
*    ls_components_change-component             = ls_detail-component.   " BAPI获取到的组件唯一标识
*    ls_components_change-stge_loc              = ls_detail-stge_loc.     "库存地点
*    ls_components_change-entry_quantity        = '200'.                  "需求数量(备选数量修改不了)
*    ls_components_change-sort_string           = ls_detail-sort_string.  "排序字符串
*    ls_components_change-cost_relevant         = ls_detail-cost_relevant."成本相关
*    ls_components_change-bulk_mat              = ls_detail-bulk_mat.     "散装物料
*
*    APPEND ls_components_change TO lt_components_change.
*
*    CLEAR:ls_components_change_update.
*    ls_components_change_update-component      = ls_detail-component.
*    ls_components_change_update-stge_loc       = 'X'.                   "库存地点
*    ls_components_change_update-entry_quantity = 'X'.                   "需求数量
*    ls_components_change_update-sort_string    = 'X'.                   "排序字符串
*    ls_components_change_update-cost_relevant  = 'X'.                   "成本相关
*    ls_components_change_update-bulk_mat       = 'X'.                   "散装物料
*
*    APPEND ls_components_change_update TO lt_components_change_update.
*  ENDLOOP.
*
*  CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
*  CALL FUNCTION 'BAPI_NETWORK_COMP_CHANGE'
*    EXPORTING
*      number                     = lv_number
*    IMPORTING
*      return                     = ls_return
*    TABLES
*      i_components_change        = lt_components_change
*      i_components_change_update = lt_components_change_update
*      e_message_table            = lt_message.
*
*  LOOP AT lt_message INTO ls_message WHERE message_type CA 'AEX'.
*    lv_check = 'E'.
*    lv_message = lv_message && ls_message-message_text.
*  ENDLOOP.
*
*  IF lv_check = 'E'.
*    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
*  ELSE.
*    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
*      EXPORTING
*        wait = abap_true.
*  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form get_dl_bom
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM get_dl_bom .

  DATA:lv_number  TYPE bapi_network_list-network,
       lt_detail  TYPE TABLE OF bapi_network_comp_detail,
       lt_remove  TYPE TABLE OF bapi_network_comp_id,
       ls_remove  TYPE bapi_network_comp_id,
       lt_message TYPE TABLE OF bapi_meth_message,
       ls_message TYPE bapi_meth_message.

  DATA:lv_check   TYPE char1,
       lv_message TYPE char255.

  lv_number = ls_zbomcost_job-aufnr."工单号

*--------------获取工单组件明细-------------------------------*
  CALL FUNCTION 'BAPI_NETWORK_COMP_GETDETAIL'
    EXPORTING
      number              = lv_number
    TABLES
      e_components_detail = lt_detail.
*--------------获取工单组件明细-------------------------------*


  DELETE lt_detail WHERE status_text CA '删除'.





*--------------工单组件删除-------------------------------*
  "此处使用查询BAPI得到的组件列表,赋值给移除内表
  LOOP AT lt_detail INTO DATA(ls_detail).
    CLEAR ls_remove.
    READ TABLE lt_bom INTO DATA(ls_bom) WITH KEY  posnr = ls_detail-item_number  idnrk  =  ls_detail-material.
    IF sy-subrc <> 0.
      ls_remove-component = ls_detail-component.
      APPEND ls_remove TO lt_remove.
    ENDIF.

  ENDLOOP.

  CALL FUNCTION 'BAPI_NETWORK_COMP_REMOVE'
    EXPORTING
      number              = lv_number
    TABLES
      i_components_remove = lt_remove
      e_message_table     = lt_message.

  LOOP AT lt_message INTO ls_message WHERE message_type CA 'AEX'.
    lv_check = 'E'.
    lv_message = lv_message && ls_message-message_text.
  ENDLOOP.

  IF lv_check = 'E'.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    ls_zbomcost_job-zflag = 'E'.
    MODIFY zbomcost_job FROM ls_zbomcost_job.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = abap_true.
    ls_zbomcost_job-zflag = 'S'.
    MODIFY zbomcost_job FROM ls_zbomcost_job.
  ENDIF.
**--------------工单组件删除-------------------------------*

ENDFORM.
*&---------------------------------------------------------------------*
*& Form get_ad_bom
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM get_ad_bom .
*--------------工单组件新增-------------------------------*
  DATA:lt_components TYPE TABLE OF bapi_network_comp_add,
       ls_components TYPE bapi_network_comp_add.

  DATA:lv_check   TYPE char1,
       lv_message TYPE char255,
       lv_number  TYPE bapi_network_list-network,
       lt_message TYPE TABLE OF bapi_meth_message,
       ls_message TYPE bapi_meth_message.

  CLEAR:lt_message.
  lv_number = ls_zbomcost_job-aufnr."工单号

  SELECT SINGLE psmng FROM afpo INTO @DATA(lv_menge) WHERE aufnr = @lv_number.

  SELECT a~stlnr,
         b~posnr,
         b~idnrk,
         b~pswrk,
         b~sortf,
         b~menge,
         b~schgt,
         b~sanka
    FROM mast AS a
    INNER JOIN stpo AS b ON  a~stlnr = b~stlnr AND stlty = 'M'
    WHERE a~matnr = @ls_zbomcost_job-matid
      AND a~werks = @ls_zbomcost_job-werks
    INTO TABLE @DATA(lt_stpo).

  READ TABLE lt_stpo INTO DATA(s_stpo) INDEX 1.
  IF sy-subrc = 0.
    SELECT SINGLE bmeng
      FROM stko WHERE stlnr = @s_stpo-stlnr
      AND stlty = 'M'
      INTO @DATA(lv_bmeng).
  ENDIF.

  LOOP AT lt_stpo INTO DATA(ls_stpo).
    CLEAR:ls_components.
    READ TABLE lt_bom INTO DATA(ls_bom) WITH KEY  idnrk = ls_stpo-idnrk  posnr =  ls_stpo-posnr.
    IF sy-subrc <> 0.


      ls_components-item_number    = ls_stpo-posnr."项目编号
      ls_components-activity       = '0010'."必输 作业
      ls_components-material       = ls_stpo-idnrk."物料
      ls_components-plant          = ls_stpo-pswrk."工厂
      ls_components-sort_string    = ls_stpo-sortf. "排序字符
      ls_components-bulk_mat       = ls_stpo-schgt."散装
      ls_components-cost_relevant  = ls_stpo-sanka."成本


      SELECT SINGLE meins INTO ls_components-base_uom FROM mara WHERE matnr = ls_components-material.
      SELECT SINGLE beskz INTO ls_components-type_of_pur_resv FROM marc WHERE matnr = ls_components-material AND werks = '1110'.
      IF ls_components-material CA 'WF'.
        ls_components-entry_quantity = ls_stpo-menge."数量
      ELSE.
        ls_components-entry_quantity = lv_menge * ls_stpo-menge / lv_bmeng."数量
      ENDIF.

      ls_components-item_cat = 'L'."项目类别
      APPEND ls_components TO lt_components.

    ENDIF.


  ENDLOOP.


  CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
  CALL FUNCTION 'BAPI_NETWORK_COMP_ADD'
    EXPORTING
      number           = lv_number
    TABLES
      i_components_add = lt_components
      e_message_table  = lt_message.

  LOOP AT lt_message INTO ls_message WHERE message_type CA 'AEX'.
    lv_check = 'E'.
    lv_message = lv_message && ls_message-message_text.
  ENDLOOP.

  IF lv_check = 'E'.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    ls_zbomcost_job-zflag = 'E'.
    MODIFY zbomcost_job FROM ls_zbomcost_job.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = abap_true.
    ls_zbomcost_job-zflag = 'S'.
    MODIFY zbomcost_job FROM ls_zbomcost_job.
  ENDIF.

*--------------工单组件新增-------------------------------*
ENDFORM.
*&---------------------------------------------------------------------*
*& Form zup_wait_time
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM zup_wait_time .
  "检查是否锁表
  DO 9999 TIMES.
    DATA: lv_garg TYPE seqg3-garg.  "锁参数
    DATA: lt_enq  TYPE TABLE OF seqg7. "锁信息内表

    "锁定参数构成规则:集团 + 订单号
    "假设订单号为 10000001,注意总长度和填充方式需参考SM12
    lv_garg = sy-mandt && ls_zbomcost_job-aufnr.

    "调用函数读取锁信息
    CALL FUNCTION 'ENQUE_READ2'
      EXPORTING
        gclient = sy-mandt
        gname   = 'AUFK'
        garg    = lv_garg
      TABLES
        enq     = lt_enq.
    .
    IF lt_enq IS NOT INITIAL.
      " 内表非空,说明当前订单已被锁定
      WAIT UP TO 5 SECONDS.
    ELSE.
      " 内表为空,未被锁定,可以安全操作
      EXIT.
    ENDIF.

  ENDDO.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form DJOB
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM djob .
  DATA:ls_zbomall TYPE zbomall_log.
  DATA:lt_zbomall TYPE TABLE OF zbomall_log.
  SELECT * FROM zbomall_log INTO CORRESPONDING FIELDS OF TABLE @lt_zbomall WHERE zaufnr = @ls_zbomcost_job-aufnr AND zmsgty = 'S'.
  LOOP AT lt_zbomall INTO ls_zbomall .
    ls_zbomall-zcdate    = sy-datum.
    ls_zbomall-zctime    = sy-uzeit.
    ls_zbomall-zcuser    = sy-uname.
    ls_zbomall-zmsgty    = 'E'.
    ls_zbomall-zmsgtxt   = '重新下发'.
    MODIFY lt_zbomall FROM ls_zbomall.
  ENDLOOP.

  MODIFY zbomall_log FROM TABLE  lt_zbomall.
  IF sy-subrc = 0.
    COMMIT WORK.
  ENDIF.


  RANGES:s_aufnr FOR afko-aufnr.
  RANGES:s_werks FOR mseg-werks.

  CLEAR:s_aufnr,s_werks.
  s_aufnr-sign = 'I'.
  s_aufnr-option = 'EQ'.
  s_aufnr-low = ls_zbomcost_job-aufnr.
  APPEND s_aufnr.

  s_werks-sign = 'I'.
  s_werks-option = 'EQ'.
  s_werks-low = '1110'.
  APPEND s_werks.
  SUBMIT zppc009
WITH s_werks IN s_werks
WITH s_aufnr IN s_aufnr
AND RETURN.
ENDFORM.

修改工序生成程序

java 复制代码
*&---------------------------------------------------------------------*
*& Report ZUP_AUFNR_AFVC
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zup_aufnr_afvc.

DATA:lt_ztaufnr_afvc TYPE TABLE OF ztaufnr_afvc.
DATA:ls_ztaufnr_afvc TYPE ztaufnr_afvc.

SELECT * FROM zbomcost_job WHERE zflag = '' AND ztype = 'COST' INTO TABLE @DATA(lt_zbomcost_job).
READ TABLE lt_zbomcost_job INTO DATA(ls_zbomcost_job) INDEX 1.

SELECT * FROM ztaufnr_afvc WHERE matnr = @ls_zbomcost_job-matid INTO TABLE @lt_ztaufnr_afvc.

IF lt_zbomcost_job IS NOT INITIAL.
  PERFORM zup_wait_time.
  PERFORM zup_aufnr_dl. "删除
  PERFORM zup_wait_time.
  PERFORM zup_aufnr_ad. "新增
  PERFORM zup_wait_time.
  PERFORM zuo_aufnr_rel. "订单下单
  PERFORM zup_wait_time.
  PERFORM zuo_aufnr_up. "重新填写站点
  PERFORM zup_wait_time.
  PERFORM djob.
*PERFORM zup_aufnr_up. "修改

ENDIF.

**&---------------------------------------------------------------------*
**& Form ZUP_AUFNR_UP
**&---------------------------------------------------------------------*
**& text
**&---------------------------------------------------------------------*
**& -->  p1        text
**& <--  p2        text
**&---------------------------------------------------------------------*
FORM zup_aufnr_ad .

  DATA: lv_aufnr   TYPE aufnr,
        ls_return  TYPE bapiret2,
        lt_routing TYPE cose_t_opr_create,
        ls_routing TYPE cose_s_opr_create.

*  lv_aufnr = '000001146943'.    "订单号
*  ls_routing-vornr = '0190'.    "新增序号
*  ls_routing-arbpl = '121070'.  "工作中心
*  ls_routing-ltxa1 = '新增测试'."工序短文本
*  ls_routing-steus = 'ZP01'.    "工序码
*  ls_routing-bmsch = '1000'.    "基本数量
*  ls_routing-vgw01 = 66.        "人工成本
*  ls_routing-vgw02 = 66.        "折旧成本
*  ls_routing-vgw03 = 66.        "机物料消耗
*  ls_routing-vgw04 = 66.        "能源费用
*  ls_routing-vgw05 = 66.        "其他制造费用
*  ls_routing-vgw06 = 66.        "外协
*  APPEND ls_routing TO lt_routing.


  CLEAR: lt_routing.

  SELECT mapl~matnr,      "物料号"
         mapl~plnnr,      "工艺路线号"
         mapl~plnal,      "组计数器"
         plpo~vornr,      "工序号"
         plpo~ltxa1,      "工序描述"
         crhd~arbpl,       "工作中心名称"
         plpo~steus,
         plpo~bmsch,
         plpo~vgw01,
         plpo~vgw02,
         plpo~vgw03,
         plpo~vgw04,
         plpo~vgw05,
         plpo~vgw06,
         plpo~vge01,
         plpo~vge02,
         plpo~vge03,
         plpo~vge04,
         plpo~vge05,
         plpo~vge06,
         plpo~sortl

    FROM mapl
    INNER JOIN plko ON  plko~plnty = mapl~plnty
                    AND plko~plnnr = mapl~plnnr
                    AND plko~plnal = mapl~plnal
    INNER JOIN plas ON  plas~plnty = plko~plnty
                    AND plas~plnnr = plko~plnnr
                    AND plas~plnal = plko~plnal
    INNER JOIN plpo ON  plpo~plnty = plas~plnty
                    AND plpo~plnnr = plas~plnnr
                    AND plpo~plnkn = plas~plnkn
                    AND plpo~zaehl = plas~zaehl
    LEFT JOIN crhd ON crhd~objid = plpo~arbid
    WHERE mapl~matnr = @ls_zbomcost_job-matid
      AND mapl~werks = @ls_zbomcost_job-werks
      AND plas~loekz = ''
    INTO TABLE @DATA(lt_plpo).       "过滤掉被删除的工序关联"

  SELECT SINGLE MAX( vornr ) AS vornr
    FROM afko AS a
    INNER JOIN  afvc AS b ON a~aufpl = b~aufpl
    WHERE a~aufnr = @ls_zbomcost_job-aufnr
    INTO @DATA(lv_vornr).

  DATA:lv_sum TYPE char05.
  LOOP AT lt_plpo INTO DATA(ls_plpo).
    CLEAR:ls_routing.
    MOVE-CORRESPONDING ls_plpo TO ls_routing.
    READ TABLE lt_ztaufnr_afvc INTO ls_ztaufnr_afvc WITH KEY sortl = ls_plpo-sortl.
    IF sy-subrc <> 0.
      lv_sum = lv_sum + 1.
      ls_routing-vornr = lv_vornr + 10 * lv_sum.
      ls_routing-vornr = |{ ls_routing-vornr ALPHA = IN }|.
      APPEND ls_routing TO lt_routing.
    ENDIF.

  ENDLOOP.

  lv_aufnr = ls_zbomcost_job-aufnr.


  CALL FUNCTION 'CO_SE_PRODORD_OPR_CREATE'
    EXPORTING
      iv_order_number = lv_aufnr
      it_opr_create   = lt_routing
*     it_user_stat    =
      iv_refresh      = 'X'
      iv_order_post   = 'X'
      iv_commit       = 'X'
    IMPORTING
      es_return       = ls_return.

  IF ls_return-type = ''.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = abap_true.
    ls_zbomcost_job-zflag = 'S'.
    MODIFY zbomcost_job FROM ls_zbomcost_job.

  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    ls_zbomcost_job-zflag = 'E'.
    MODIFY zbomcost_job FROM ls_zbomcost_job.
  ENDIF.

ENDFORM.
**&---------------------------------------------------------------------*
**& Form zup_aufnr_DL
**&---------------------------------------------------------------------*
**& text
**&---------------------------------------------------------------------*
**& -->  p1        text
**& <--  p2        text
**&---------------------------------------------------------------------*
FORM zup_aufnr_dl .

  DATA: lv_aufnr   TYPE aufnr,
        ls_return  TYPE bapiret2,
        lt_routing TYPE cose_t_opr_delete,
        ls_routing TYPE cose_s_opr_delete.

  CLEAR: lt_routing.
  SELECT b~vornr,b~objnr
    FROM afko AS a
    INNER JOIN  afvc AS b ON a~aufpl = b~aufpl
    WHERE a~aufnr = @ls_zbomcost_job-aufnr
    INTO TABLE @DATA(lt_afvc).

  LOOP AT lt_afvc INTO DATA(ls_afvc).

    READ TABLE lt_ztaufnr_afvc INTO ls_ztaufnr_afvc WITH KEY vornr = ls_afvc-vornr.

    IF sy-subrc <> 0.

      SELECT stat FROM jest
        WHERE objnr = @ls_afvc-objnr
        INTO TABLE @DATA(lt_stat).
      READ TABLE lt_stat INTO DATA(ls_stat) WITH KEY stat = 'I0013'.
      IF sy-subrc <> 0.
        ls_routing-vornr = ls_afvc-vornr.
        APPEND ls_routing TO lt_routing.

      ENDIF.

    ENDIF.


  ENDLOOP.


  lv_aufnr = ls_zbomcost_job-aufnr.

  IF lt_routing IS NOT INITIAL.
    CALL FUNCTION 'CO_SE_PRODORD_OPR_DELETE'
      EXPORTING
        iv_order_number = lv_aufnr
        it_opr_delete   = lt_routing
*       it_user_stat    =
        iv_refresh      = 'X'
        iv_order_post   = 'X'
        iv_commit       = 'X'
      IMPORTING
        es_return       = ls_return.

    IF ls_return-type = ''.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = abap_true.
      ls_zbomcost_job-zflag = 'S'.
      MODIFY zbomcost_job FROM ls_zbomcost_job.

    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
      ls_zbomcost_job-zflag = 'E'.
      MODIFY zbomcost_job FROM ls_zbomcost_job.
      EXIT.
    ENDIF.

  ENDIF.


ENDFORM.
*&---------------------------------------------------------------------*
*& Form zuo_aufnr_rel
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM zuo_aufnr_rel .
  DATA: lwa_aufnr  TYPE ord_pre,
        lwa_tca11  TYPE tca11,
        lwa_caufvd TYPE caufvd,
        lt_aufnr   TYPE STANDARD TABLE OF ord_pre.
  lwa_aufnr-aufnr = ls_zbomcost_job-aufnr.
  APPEND lwa_aufnr TO lt_aufnr.
  lwa_tca11-flg_alt  =
  lwa_tca11-flg_seq  =
  lwa_tca11-flg_opr  =
  lwa_tca11-flg_sop  =
  lwa_tca11-flg_aob  =
  lwa_tca11-flg_fhm  =
  lwa_tca11-flg_mst  =
  lwa_tca11-flg_phas = 'X'.

  CALL FUNCTION 'CO_ZF_ORDER_READ'
    EXPORTING
      flg_dialog        = space
      flg_enqueue       = 'X'
      objects_imp       = lwa_tca11
      flg_prot_imp      = 'X'
    TABLES
      aufnr_tab_imp     = lt_aufnr
    EXCEPTIONS
      order_not_found   = 1
      release_no_change = 2
      OTHERS            = 3.
  IF sy-subrc EQ 0.
    CALL FUNCTION 'CO_BT_CAUFV_READ_WITH_KEY'
      EXPORTING
        aufnr_act      = lwa_aufnr-aufnr
        no_dialog_info = 'X'
      IMPORTING
        caufvd_exp     = lwa_caufvd
      EXCEPTIONS
        not_found      = 1
        OTHERS         = 2.
    IF sy-subrc EQ 0.

      CALL FUNCTION 'CO_ZR_HEADER_RELEASE_NEW'
        EXPORTING
          caufvd_imp         = lwa_caufvd
          prot_init_imp      = 'X'
          write_prot_imp     = 'X'
          no_dialog_imp      = 'X'
          no_avail_check_imp = 'X'
        IMPORTING
          caufvd_exp         = lwa_caufvd
        EXCEPTIONS
          free_failed        = 1
          end_task           = 2
          OTHERS             = 3.

      IF sy-subrc EQ 0.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = 'X'.
      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form zup_wait_time
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM zup_wait_time .
  "检查是否锁表
  DO 9999 TIMES.
    DATA: lv_garg TYPE seqg3-garg.  "锁参数
    DATA: lt_enq  TYPE TABLE OF seqg7. "锁信息内表

    "锁定参数构成规则:集团 + 订单号
    "假设订单号为 10000001,注意总长度和填充方式需参考SM12
    lv_garg = sy-mandt && ls_zbomcost_job-aufnr.

    "调用函数读取锁信息
    CALL FUNCTION 'ENQUE_READ2'
      EXPORTING
        gclient = sy-mandt
        gname   = 'AUFK'
        garg    = lv_garg
      TABLES
        enq     = lt_enq.
    .
    IF lt_enq IS NOT INITIAL.
      " 内表非空,说明当前订单已被锁定
      WAIT UP TO 5 SECONDS.
    ELSE.
      " 内表为空,未被锁定,可以安全操作
      EXIT.
    ENDIF.

  ENDDO.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form zuo_aufnr_UP
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM zuo_aufnr_UP .
  SELECT b~aufpl,
         b~aplzl,
         b~vornr,
         b~sortl
    FROM afvc AS b
    INNER JOIN afko AS a ON a~aufpl = b~aufpl
    WHERE a~aufnr =  @ls_zbomcost_job-aufnr
       INTO TABLE @DATA(lt_afvc).

  SELECT mapl~matnr,      "物料号"
         mapl~plnnr,      "工艺路线号"
         mapl~plnal,      "组计数器"
         plpo~vornr,      "工序号"
         plpo~ltxa1,      "工序描述"
         crhd~arbpl,       "工作中心名称"
         plpo~steus,
         plpo~bmsch,
         plpo~vgw01,
         plpo~vgw02,
         plpo~vgw03,
         plpo~vgw04,
         plpo~vgw05,
         plpo~vgw06,
         plpo~vge01,
         plpo~vge02,
         plpo~vge03,
         plpo~vge04,
         plpo~vge05,
         plpo~vge06,
         plpo~sortl

    FROM mapl
    INNER JOIN plko ON  plko~plnty = mapl~plnty
                    AND plko~plnnr = mapl~plnnr
                    AND plko~plnal = mapl~plnal
    INNER JOIN plas ON  plas~plnty = plko~plnty
                    AND plas~plnnr = plko~plnnr
                    AND plas~plnal = plko~plnal
    INNER JOIN plpo ON  plpo~plnty = plas~plnty
                    AND plpo~plnnr = plas~plnnr
                    AND plpo~plnkn = plas~plnkn
                    AND plpo~zaehl = plas~zaehl
    LEFT JOIN crhd ON crhd~objid = plpo~arbid
    WHERE mapl~matnr = @ls_zbomcost_job-matid
      AND mapl~werks = @ls_zbomcost_job-werks
      AND plas~loekz = ''
    INTO TABLE @DATA(lt_plpo).       "过滤掉被删除的工序关联"

  SORT lt_afvc BY vornr DESCENDING.

  LOOP AT lt_afvc INTO DATA(ls_afvc).
    IF ls_afvc-sortl IS INITIAL.

      READ TABLE lt_plpo INTO DATA(ls_plpo) INDEX lines( lt_plpo ) - sy-tabix + 1.
      IF sy-subrc = 0.
        UPDATE afvc SET sortl = ls_plpo-sortl WHERE aufpl = ls_afvc-aufpl
                                                AND aplzl = ls_afvc-aplzl.
        IF sy-subrc = 0.
          COMMIT WORK.
        ENDIF.
      ENDIF.

    ENDIF.

  ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form djob
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM djob .
  DATA:ls_zprocess_mes TYPE zprocess_mes.
  DATA:lt_zprocess_mes TYPE TABLE OF zprocess_mes.
  SELECT * FROM zprocess_mes INTO CORRESPONDING FIELDS OF TABLE @lt_zprocess_mes WHERE zaufnr = @ls_zbomcost_job-aufnr AND zmsgty = 'S'.
  LOOP AT lt_zprocess_mes INTO ls_zprocess_mes .
    ls_zprocess_mes-zcdate    = sy-datum.
    ls_zprocess_mes-zctime    = sy-uzeit.
    ls_zprocess_mes-zcuser    = sy-uname.
    ls_zprocess_mes-zmsgty    = 'E'.
    ls_zprocess_mes-zmsgtxt   = '重新下发'.
    MODIFY lt_zprocess_mes FROM ls_zprocess_mes.
  ENDLOOP.

  MODIFY zprocess_mes FROM TABLE  lt_zprocess_mes.
  IF sy-subrc = 0.
    COMMIT WORK.
  ENDIF.

  RANGES:s_aufnr FOR afko-aufnr.
  RANGES:s_werks FOR mseg-werks.

  CLEAR:s_aufnr,s_werks.
  s_aufnr-sign = 'I'.
  s_aufnr-option = 'EQ'.
  s_aufnr-low = ls_zbomcost_job-aufnr.
  APPEND s_aufnr.

  s_werks-sign = 'I'.
  s_werks-option = 'EQ'.
  s_werks-low = '1110'.
  APPEND s_werks.
  SUBMIT zppc006
WITH s_werks IN s_werks
WITH s_aufnr IN s_aufnr
AND RETURN.
ENDFORM.

接口回传MES

java 复制代码
*&---------------------------------------------------------------------*
*& Report ZBOMCOST_VER_JOB
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zbomcost_ver_job.

DATA:gt_zbomcost_ver TYPE TABLE OF zbomcost_ver.
DATA:gs_zbomcost_ver TYPE  zbomcost_ver.

DATA:gt_zbomcost_up TYPE TABLE OF zbomcost_ver.
DATA:gs_zbomcost_up TYPE  zbomcost_ver.
DATA:lv_flag.

SELECT * FROM zbomcost_ver
  WHERE zflag = ''
  INTO CORRESPONDING FIELDS OF TABLE @gt_zbomcost_ver.

IF gt_zbomcost_ver IS NOT INITIAL.
  SELECT * FROM zbomcost_job
    FOR ALL ENTRIES IN @gt_zbomcost_ver
    WHERE uuid = @gt_zbomcost_ver-uuid
      AND zflag IN ( '' , 'E' )
    INTO TABLE @DATA(lt_zbomcost_job).
ENDIF.


LOOP AT gt_zbomcost_ver INTO gs_zbomcost_ver.


  READ TABLE lt_zbomcost_job INTO DATA(ls_result) WITH KEY uuid = gs_zbomcost_ver-uuid.
  IF sy-subrc <> 0.
    CLEAR:gs_zbomcost_up.
    MOVE-CORRESPONDING gs_zbomcost_ver TO gs_zbomcost_up.
    APPEND gs_zbomcost_up TO gt_zbomcost_up.
  ENDIF.

ENDLOOP.

IF gt_zbomcost_up IS NOT INITIAL.
  "调用接口UP MES表
  PERFORM post_url.
  "最后参数写入

  IF lv_flag = 'X'.
    PERFORM modify_table.

  ENDIF.
ENDIF.
*&---------------------------------------------------------------------*
*& Form post_url
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM post_url .
*{
*  "items": [
*    {
*      "sql": ""
*    }
*  ]
*}
*BEGIN
*    UPDATE SWEEPCODE_COPY SET crdata = '99260226' WHERE uuid = '7e24d721-c9fe-43c4-be4d-af776ec51fcc';
*    UPDATE SWEEPCODE_COPY SET crdata = '99260226' WHERE uuid = '0965ac36-0afb-482b-ad15-5796793c3497';
*    COMMIT;
*END;


  "code": 0,
  "message": null,
  "data": null

  DATA:BEGIN OF es_out,
         code    TYPE string,
         message TYPE string,
         data    TYPE string,
       END OF es_out.


  DATA:lv_string TYPE string.

  DATA: len         TYPE        i, "发送报文长度"
        len_string  TYPE        string,
        url         TYPE        string, "接口地址
        http_client TYPE REF TO if_http_client, "http客户端
        post_string TYPE        string,
        result      TYPE        string.
  DATA: it_header  TYPE tihttpnvp,
        gv_json_in TYPE string VALUE ''.

  LOOP AT gt_zbomcost_up INTO gs_zbomcost_up.
    DATA(lv_version) = |{ gs_zbomcost_up-verid ALPHA = OUT }|.
    CONDENSE lv_version NO-GAPS.
    lv_string = lv_string &&  `UPDATE ATESTPIDVER SET IS_SAP_TO_MES = 'Y' WHERE PID =` && GS_ZBOMCOST_UP-MATNR && `AND VERSION = ` && lv_version && `;`.
    lv_string = lv_string &&  `UPDATE ATESTPIDDEF SET IS_SAP_TO_MES = 'Y' WHERE PID =` && GS_ZBOMCOST_UP-MATNR && `AND VERSION = ` && lv_version && `;`.
  ENDLOOP.

  lv_string = `{"items": [{"sql": "` && 'BEGIN' && `  ` && lv_string && ' COMMIT;END;"}]}'.

  url = '*****'.

  "创建http客户端
  CALL METHOD cl_http_client=>create_by_url
    EXPORTING
      url                = url
    IMPORTING
      client             = http_client
    EXCEPTIONS
      argument_not_found = 1
      plugin_not_active  = 2
      internal_error     = 3
      OTHERS             = 4.

  "调取方式:get 或者为 post"
  http_client->request->set_content_type( content_type = 'text/html; charset=utf-8' ).
  http_client->request->set_method( if_http_request=>co_request_method_post ).
  "http_client->request->set_method( if_http_request=>co_request_method_get ).

  "---设置要传输内容
  len = strlen( lv_string ).
  CALL METHOD http_client->request->if_http_entity~set_cdata
    EXPORTING
      data   = lv_string
      offset = 0
      length = len.

  "发送
  CALL METHOD http_client->send
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2
      http_processing_failed     = 3
      http_invalid_timeout       = 4
      OTHERS                     = 5.

  "接收
  CALL METHOD http_client->receive
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2
      http_processing_failed     = 3.


  CLEAR result.
  result = http_client->response->get_cdata( )."提取返回字符串

  /ui2/cl_json=>deserialize( EXPORTING json = result
                             pretty_name = /ui2/cl_json=>pretty_mode-camel_case
                   CHANGING  data = es_out ).
  IF es_out-code = 0 .
    lv_flag = 'X'.
  ENDIF.

  "关闭接口
  CALL METHOD http_client->close.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form modify_table
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM modify_table .
  LOOP AT gt_zbomcost_up INTO gs_zbomcost_up.
    gs_zbomcost_up-zflag = 'X'.
    MODIFY gt_zbomcost_up FROM gs_zbomcost_up.
  ENDLOOP.

  MODIFY zbomcost_ver FROM TABLE gt_zbomcost_up.
ENDFORM.

上述内容为笔记内容 本人记录自用

相关推荐
XS0301068 小时前
MyBatis基础实战笔记一
笔记·mybatis
Oll Correct8 小时前
实验二十五:从IPv4向IPv6过渡所使用的隧道技术
网络·笔记
U盘失踪了9 小时前
【笔记】pycharm 安装Jupyter失败
笔记·python
Hua-Jay9 小时前
OpenCV联合C++/Qt 学习笔记(二十二)----相机模型与投影及单目相机标定
c++·笔记·qt·opencv·学习·计算机视觉
咸甜适中9 小时前
rust语言学习笔记Trait(七) IntoIterator(由集合创建迭代器)
笔记·学习·rust
阿阳微客10 小时前
网易Buff游戏搬砖,长期可做!
笔记·学习·游戏
Upsy-Daisy10 小时前
AI Agent 项目学习笔记(一):项目总体介绍与智能体链路概览
人工智能·笔记·学习
June bug10 小时前
【AI赋能测试笔记】5基于文档用例生成系统及skills
笔记·功能测试·职场和发展·测试用例·学习方法
nnsix10 小时前
设计模式 - 原型模式 笔记
笔记·设计模式·原型模式