DATA : wa_actor TYPE swhactor,
wa_container TYPE swcont.
DATA : lv_lines TYPE i.
READ TABLE ac_container INTO wa_container.
IF wa_container-value IS NOT INITIAL.
*** Sales Order Number(VBELN) will be received in [wa_container-value]
*** Based on that you can find Sales Order Amount and than pass it to ZSO_APPROVAL table
*** So you will get list of approvers.
wa_actor-otype = 'US'.
wa_actor-objid = wa_soapp-userid.
APPEND wa_actor TO actor_tab.
ENDIF.
DELETE ADJACENT DUPLICATES FROM actor_tab COMPARING objid.
DESCRIBE TABLE actor_tab LINES lv_lines.
IF lv_lines EQ 0.
RAISE nobody_found.
ENDIF.
IF im_event_name EQ 'AFT_EXEC'.
CHECK ls_wihead-wi_stat NE swfco_wi_status_error
AND ls_wihead-wi_stat NE swfco_wi_status_excpcaught
AND ls_wihead-wi_stat NE swfco_wi_status_excphandlr.
l_wf_cont = im_workitem_context->get_wf_container( ).
l_wi_cont = im_workitem_context->get_wi_container( ).
CALL METHOD l_wf_cont->get
EXPORTING
name = 'EVENT_NAME'
IMPORTING
value = _wf.
CALL METHOD l_wi_cont->get
EXPORTING
name = '_WI_RESULT'
IMPORTING
value = _res.
***IF A Persion has clicked on Approve button, _res = 0001. and _wf will be received from Workflow.
IF _res EQ '0001' AND ( _wf EQ 'CREATED' OR _wf EQ 'CHANGED' ).
***Code to change SO status in JEST standard table.
***You can use 'I_CHANGE_STATUS' FM
***After getting approved by the approver, it will trigger workflow to next approver level as maitained in ZSO_APPROVAL Table.
***Manually Trigger workflow to next level approver.
***
***
WAIT UP TO 1 SECONDS.
CALL FUNCTION 'SAP_WAPI_CREATE_EVENT'
EXPORTING
object_type = object_type "BUS2032
object_key = object_key "SALES ORDER NUMBER
event = event. "CHANGED
***
***
ELSEIF _res EQ '0001' AND _wf EQ 'TRIGGER'.
CALL METHOD l_wf_cont->get
EXPORTING
name = 'ISO'
IMPORTING
value = so_n.
CALL FUNCTION 'SD_ORDER_CREDIT_RELEASE'
EXPORTING
vbeln = so_n.
***
ENDIF.
*** ITAB and ISO are imporing parameters.
*** By using ISO that is SO Number you can get details of Materials
*** Append each HTML Line to ITAB [ ITAB TYPE ZSOLISTI1_TT ] Create TableType of SOLISTI1.
DATA : wa_contents TYPE solisti1.
wa_contents-line = |<html><head><style>|.APPEND wa_contents TO itab.
wa_contents-line = '.t1 {font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;border-collapse: collapse;width: 80%;}'.APPEND wa_contents TO itab.
wa_contents-line = '.t1 td, .t1 th {border: 1px solid #000;padding: 2px;}'.APPEND wa_contents TO itab.
wa_contents-line = '.t2{font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;border-collapse: collapse;width: 100%;}'.APPEND wa_contents TO itab.
wa_contents-line = '.t2 td, .t2 th {border: 1px solid #504F4F;padding: 5px;}'.APPEND wa_contents TO itab.
wa_contents-line = '.t2 tbody tr:nth-child(even){background-color: #f2f2f2;}'.APPEND wa_contents TO itab.
wa_contents-line = '.t2 tbody tr:hover {background-color: #ddd;}'.APPEND wa_contents TO itab.
wa_contents-line = '.t2h1 {padding-top: 12px;padding-bottom: 12px;text-align: left;background-color: #9BC2E6;color: #504F4F;}'.APPEND wa_contents TO itab.
wa_contents-line = '.t2h2 {padding-top: 12px;padding-bottom: 12px;text-align: left;background-color: #A6A6A6;color: #504F4F;text-align:center;}'.APPEND wa_contents TO itab.
wa_contents-line = |</style></head><body>|.APPEND wa_contents TO itab.
wa_contents-line = |<table border="1" class="t1"><tbody>|.APPEND wa_contents TO itab.
wa_contents-line = |<tr><td>Person Responsible</td><td>{ ename }</td></tr>|.APPEND wa_contents TO itab.
wa_contents-line = |<tr><td>Sales Organization</td><td>{ wtab-vkorg }</td></tr>|.APPEND wa_contents TO itab.
wa_contents-line = |<tr><td>Distribution Channel</td><td>{ wtab-vtweg }</td></tr>|.APPEND wa_contents TO itab.
wa_contents-line = |<tr><td>Division</td><td>{ wtab-spart }</td></tr>|.APPEND wa_contents TO itab.
wa_contents-line = |<tr><td>Sold to Party</td><td>{ wtab-name1 }</td></tr>|.APPEND wa_contents TO itab.
wa_contents-line = |<tr><td>Inco-Terms</td><td>{ wtab-inco1 }</td></tr>|.APPEND wa_contents TO itab.
wa_contents-line = |</tbody></table><table border="1" class="t2" style="margin-top:10px;"><tbody>|.APPEND wa_contents TO itab.
wa_contents-line = |<tr><th class="t2h1">List of Material:</th></tr>|.APPEND wa_contents TO itab.
wa_contents-line = |<tr><th class="t2h2">Material No</th><th class="t2h2">Material Description</th>|.APPEND wa_contents TO itab.
wa_contents-line = |<th class="t2h2">Order Quantity</th>|.APPEND wa_contents TO itab.
wa_contents-line = |<th class="t2h2">UOM</th>|.APPEND wa_contents TO itab.
wa_contents-line = |<th class="t2h2">Pending Quantity</th>|.APPEND wa_contents TO itab.
wa_contents-line = |<th class="t2h2">Basic Price</th>|.APPEND wa_contents TO itab.
wa_contents-line = |<th class="t2h2">Amount</th>|.APPEND wa_contents TO itab.
wa_contents-line = |<th class="t2h2">Currency</th></tr>|.APPEND wa_contents TO itab.
LOOP AT imat INTO wmat.
***GET MATERIALS DETAILS***
ENDLOOP.
wa_contents-line = |</tfoot></table></body></html>|.APPEND wa_contents TO itab.
METHOD set_params.
DATA: lv_objtype TYPE sibftypeid,
lv_event TYPE sibfevent,
lv_objkey TYPE sibfinstid,
lr_event_parameters TYPE REF TO if_swf_ifs_parameter_container,
lv_param_name TYPE swfdname,
lv_id TYPE char10.
DATA : wa TYPE zmatlist.
lv_objtype = 'ZSO_APPROVAL_EXIT'. " your class name
lv_event = 'TRIGGER'. " event name.
CALL METHOD cl_swf_evt_event=>get_event_container
EXPORTING
im_objcateg = cl_swf_evt_event=>mc_objcateg_cl
im_objtype = lv_objtype
im_event = lv_event
RECEIVING
re_reference = lr_event_parameters.
lv_param_name = 'ISO'. " parameter name of the event
lv_id = iso.
TRY.
CALL METHOD lr_event_parameters->set
EXPORTING
name = lv_param_name
value = lv_id.
CATCH cx_swf_cnt_cont_access_denied .
CATCH cx_swf_cnt_elem_access_denied .
CATCH cx_swf_cnt_elem_not_found .
CATCH cx_swf_cnt_elem_type_conflict .
CATCH cx_swf_cnt_unit_type_conflict .
CATCH cx_swf_cnt_elem_def_invalid .
CATCH cx_swf_cnt_container .
ENDTRY.
lv_param_name = 'IUSER'. " parameter name of the event
lv_id = iuser.
TRY.
CALL METHOD lr_event_parameters->set
EXPORTING
name = lv_param_name
value = lv_id.
CATCH cx_swf_cnt_cont_access_denied .
CATCH cx_swf_cnt_elem_access_denied .
CATCH cx_swf_cnt_elem_not_found .
CATCH cx_swf_cnt_elem_type_conflict .
CATCH cx_swf_cnt_unit_type_conflict .
CATCH cx_swf_cnt_elem_def_invalid .
CATCH cx_swf_cnt_container .
ENDTRY.
TRY.
CALL METHOD cl_swf_evt_event=>raise
EXPORTING
im_objcateg = cl_swf_evt_event=>mc_objcateg_cl
im_objtype = lv_objtype
im_event = lv_event
im_objkey = lv_objkey
im_event_container = lr_event_parameters.
CATCH cx_swf_evt_invalid_objtype .
CATCH cx_swf_evt_invalid_event .
ENDTRY.
COMMIT WORK.
ENDMETHOD.
*** TRIGGER WORKFLOW FROM MV45AFZZ.
*** LV_USER is an Approver who is going to take decision whether SO should be removed from Credit Block or Not.
*** MANUALLY TRIGGER WORKFLOW FOR VKM1
DATA obj TYPE REF TO zso_approval_exit.
data lv_user_t type uname.
CREATE OBJECT obj.
lv_user_t = |US{ lv_user }|.
obj->set_params( EXPORTING iso = vbak-vbeln iuser = lv_user_t ).
*** MANUALLY TRIGGER WORKFLOW FOR VKM1
*** CODE TO REMOVE OLD/PENDING WORKFLOW TRIGGERD FOR THE SAME SO.
lv_srch = |%{ lv_vbeln }|. "CONCATE % WITH SO NUMBER
SELECT wi_id wi_aagent wi_cd wi_ct FROM swwwihead INTO TABLE wtab
WHERE wi_text LIKE lv_srch AND
( wi_stat EQ 'READY' OR wi_stat EQ 'STARTED' OR wi_stat EQ 'SELECTED' ) AND
top_task EQ 'WS90000016'.
LOOP AT wtab.
IF wtab-wi_cd LT sy-datum.
CALL FUNCTION 'SAP_WAPI_ADM_WORKFLOW_CANCEL'
EXPORTING
workitem_id = wtab-wi_id
actual_agent = wtab-wi_aagent.
ELSEIF wtab-wi_cd EQ sy-datum AND wtab-wi_ct LE time.
CALL FUNCTION 'SAP_WAPI_ADM_WORKFLOW_CANCEL'
EXPORTING
workitem_id = wtab-wi_id
actual_agent = wtab-wi_aagent.
ENDIF.
ENDLOOP.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
7 | |
6 | |
5 | |
4 | |
4 | |
4 | |
4 | |
4 | |
3 | |
3 |