• SAP批量修改工单BAPI


    BAPI_ALM_ORDER_MAINTAIN可以用于批量修改工单。以下是一个示例代码段:

    ```
    DATA: lt_order_changes TYPE TABLE OF bapialmorderchg,
          ls_order_change TYPE bapialmorderchg.

    LOOP AT it_input INTO ls_input.
      CLEAR ls_order_change.
      ls_order_change-orderid = ls_input-orderid.
      ls_order_change-operation = 'U'.
      ls_order_change-ordchgparams-updtype = 'U'.
      ls_order_change-orderadmhh = 'X'.
      ls_order_change-maintrequest = 'X'.
      "Set other fields to be changed
      APPEND ls_order_change TO lt_order_changes.
    ENDLOOP.

    CALL FUNCTION 'BAPI_ALM_ORDER_MAINTAIN'
      EXPORTING
        testrun                = abap_true
      IMPORTING
    *   RETURN                 =
      TABLES
        orderchanges           = lt_order_changes.
    ```

    在上面的代码中,输入表(it_input)包含需要修改的工单信息,从中创建了一个修改记录(ls_order_change),然后将所有修改记录收集到一个表格(lt_order_changes)中。最后,在BAPI调用中传递此表格。

    请注意,此示例代码中使用了testrun = abap_true,这意味着BAPI将不会实际修改工单,而只会返回修改后的状态。要实际更新工单,必须将testrun设置为abap_false。

    DATA: it_methods     TYPE TABLE OF bapi_alm_order_method WITH HEADER LINE,
          ls_methods     TYPE TABLE OF bapi_alm_order_method WITH HEADER LINE,
          it_component   TYPE TABLE OF bapi_alm_order_component WITH HEADER LINE,
          it_componentup TYPE TABLE OF bapi_alm_order_component_up WITH HEADER LINE,
          lt_return      TYPE TABLE OF bapiret2,
          ls_return      TYPE bapiret2.

    DATA: l_rspos     TYPE i.       "预留行号

    DATA: it_component_old TYPE TABLE OF bapi_alm_order_component_e.

    *---------------------------------删除旧组件---------------------------------*
    CALL FUNCTION 'BAPI_ALM_ORDER_GET_DETAIL'
      EXPORTING
        number        = '000004004946'
      TABLES
        et_components = it_component_old
        return        = lt_return.

    it_methods-refnumber  = 1.
    it_methods-method = 'SAVE'.
    it_methods-objectkey = '000004004946'.
    APPEND it_methods.
    CLEAR it_methods.

    MOVE-CORRESPONDING it_component_old TO it_component[] .

    LOOP AT it_component_old ASSIGNING FIELD-SYMBOL().
      l_rspos = l_rspos + 1.
      IF -delete_ind = ''.        "跳过被删除的项目
        it_methods-refnumber = l_rspos.                "参照组件编号
        it_methods-objecttype = 'COMPONENT'.
        it_methods-method = 'DELETE'.
        it_methods-objectkey = '000004004946'.          "订单号
        APPEND it_methods.
      ENDIF.
    ENDLOOP.

    CALL FUNCTION 'BAPI_ALM_ORDER_MAINTAIN'
      TABLES
        it_methods   = it_methods[]
    *   IT_HEADER_SRV   =
    *   IT_HEADER_SRV_UP       =
    *   IT_USERSTATUS   =
    *   IT_PARTNER   =
    *   IT_PARTNER_UP   =
    *   IT_OPERATION =
    *   IT_OPERATION_UP =
    *   IT_RELATION  =
    *   IT_RELATION_UP  =
        it_component = it_component[]
    *   it_component_up = it_componentup[]
    *   IT_TEXT      =
    *   IT_TEXT_LINES   =
    *   EXTENSION_IN =
        return       = lt_return.

    UNASSIGN .
    CLEAR: l_rspos,it_methods[],it_methods,it_component,it_component[],it_component_old.

    IF line_exists( lt_return[ type = 'A' ] ) OR
       line_exists( lt_return[ type = 'E' ] ) OR
       line_exists( lt_return[ type = 'X' ] ).
      ROLLBACK WORK.
      EXIT.
    ELSE.
      COMMIT WORK AND WAIT.
    ENDIF.

    *---------------------------------新增组件---------------------------------*
    it_methods-refnumber  = 1.
    it_methods-method = 'SAVE'.
    it_methods-objectkey = '000004004946'.
    APPEND it_methods.
    CLEAR it_methods.

    DO 2 TIMES.
      l_rspos = l_rspos + 1.

    *    it_component-reserv_no = ''.                  "预留号
      it_component-res_item = l_rspos.                 "预留项目
      it_component-material = '000000010000000010'.    "物料编码
      it_component-requirement_quantity = '10'.
      it_component-requirement_quantity_unit = 'EA'.
    *    it_component-withdrawn = abap_true.           "完成标识
      APPEND it_component.

      it_componentup-material = 'X'.                  "物料编码
      it_componentup-requirement_quantity = 'X'.
      it_componentup-requirement_quantity_unit = 'X'.
    *  it_componentup-withdrawn = abap_true.
      APPEND it_componentup.

      it_methods-refnumber = l_rspos.                "参照组件编号
      it_methods-objecttype = 'COMPONENT'.
      it_methods-method = 'CREATE'.
      it_methods-objectkey = '000004004946'.          "订单号
      APPEND it_methods.
      CLEAR it_methods.

    ENDDO.

    CALL FUNCTION 'BAPI_ALM_ORDER_MAINTAIN'
      TABLES
        it_methods      = it_methods[]
    *   IT_HEADER_SRV   =
    *   IT_HEADER_SRV_UP       =
    *   IT_USERSTATUS   =
    *   IT_PARTNER      =
    *   IT_PARTNER_UP   =
    *   IT_OPERATION    =
    *   IT_OPERATION_UP =
    *   IT_RELATION     =
    *   IT_RELATION_UP  =
        it_component    = it_component[]
        it_component_up = it_componentup[]
    *   IT_TEXT         =
    *   IT_TEXT_LINES   =
    *   EXTENSION_IN    =
        return          = lt_return.

    IF line_exists( lt_return[ type = 'A' ] ) OR
       line_exists( lt_return[ type = 'E' ] ) OR
       line_exists( lt_return[ type = 'X' ] ).
      ROLLBACK WORK.

    ELSE.
      COMMIT WORK AND WAIT.
    ENDIF.
     

    IW32可查看工单状态

  • 相关阅读:
    C# 创建标签PDF文件
    存储器管理
    springmvc3:ajax请求,文件上传下载,拦截器,异常处理,注解配置mvc
    Python:练习:编写一个程序,写入一个美金数量,然后显示出如何用最少的20美元、10美元、5美元和1美元来付款
    《深度学习500问》外链笔记
    四川云汇优想:短视频矩阵运营方案
    java基于springboot +vue的图书馆图书借阅系统
    串口发送&串口发送+接收&串口收发HEX数据包&串口收发文本数据包----USART
    Gradle 构建环境变量配置
    机器学习 | MATLAB实现MLP多层感知机模型设计
  • 原文地址:https://blog.csdn.net/document_hk/article/details/134283793