|
Changed Service Order Status Upon Service Confirmation |
Views: 2076
|
Thread Tools | Rate Thread |
#1
|
|||
|
|||
Changed Service Order Status Upon Service Confirmation
Changed Service Order Status Upon Service Confirmation
Change Status of Preceding Document As of now we are updating the status of preceding doc by using ORDER_SAVE Badi. or The Method SET_DOCUMENT_STATUS in processing type which could be use for doing same. or I had worked on scenario where we have changed service order status upon service confirmation status gets completed. I have used a Zmethod to achieve this. Find the below code which I used. Hope it may be useful to you to create Zmethod. method IF_EX_EXEC_METHODCALL_PPF~EXECUTE . data: lv_guid_ref type crmt_object_guid, lc_action_execute type ref to cl_action_execute, doc_info type CRMT_DOC_FLOW_WRKT, doc_links type line of CRMT_DOC_FLOW_WRKT, header_guid type CRMT_OBJECT_GUID, object_no type CRM_JSTO-OBJNR, order_items type CRMT_ORDERADM_I_DU_TAB, order_item type line of CRMT_ORDERADM_I_DU_TAB. * get the object GUID for processing create object lc_action_execute. call method lc_action_execute->get_ref_object exporting io_appl_object = io_appl_object ip_action = ip_action ii_container = ii_container importing ev_guid_ref = lv_guid_ref. * If the GUID is not present then get the information from the object * layer if lv_guid_ref is initial. CALL FUNCTION 'CRM_INTLAY_GET_HEADER_GUID' IMPORTING EV_HEADER_GUID = lv_guid_ref . endif. * check the GUID before processing check not lv_guid_ref is initial. * Read the document flow to retrieve the service order number CALL FUNCTION 'CRM_DOC_FLOW_READ_OB' EXPORTING IV_HEADER_GUID = lv_guid_ref IMPORTING ET_DOC_FLOW_WRK = doc_info . * CALL FUNCTION 'CRM_DOC_FLOW_READ_DB' * EXPORTING * IV_HEADER_GUID = lv_guid_ref * IMPORTING * ET_DOC_LINKS = doc_info. * determine if this service confirmation has a service order describe table doc_info lines sy-tabix. check sy-tabix gt 0. read table doc_info into doc_links with key objtype_a = 'BUS2000116'. * set the user status to Complete upon save of the * service confirmation move doc_links-objkey_a to header_guid. * call function 'CRM_STATUS_BUFFER_REFRESH'. * Lock the service order call function 'CRM_ORDER_ENQUEUE' exporting iv_guid = header_guid exceptions foreign_lock = 1 system_failure = 2 distributed_lock = 3 no_change_allowed = 4 transferring = 5 others = 6. * Check if the service order is locked if sy-subrc = 1 or sy-subrc = 3. * sent message to the user endif. * Change the header status move header_guid to object_no. call function 'CRM_STATUS_CHANGE_EXTERN_OW' exporting objnr = object_no user_status = 'E0007' set_inact = ' ' exceptions object_not_found = 1 status_inconsistent = 2 status_not_allowed = 3 others = 4. * Change the line item status CALL FUNCTION 'CRM_ORDERADM_I_READ_DB' EXPORTING IV_HEADER = header_guid IMPORTING ET_ORDERADM_I_DB = order_items. * read each item and change the status loop at order_items into order_item where itm_type ne 'SRVS'. move order_item-guid to object_no. call function 'CRM_STATUS_CHANGE_EXTERN_OW' exporting objnr = object_no user_status = 'E0007' set_inact = ' ' exceptions object_not_found = 1 status_inconsistent = 2 status_not_allowed = 3 others = 4. endloop. * Save the status if sy-subrc eq 0. call function 'CRM_STATUS_UPDATE_DIALOG'. endif. * set the return processing status if sy-subrc eq 0. rp_status = '1'. else. rp_status = '2'. endif. endmethod. *--- End --- |