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(<fs_component_old>).
  l_rspos = l_rspos + 1.
  IF <fs_component_old>-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 <fs_component_old>.
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可查看工单状态

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值