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
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可查看工单状态