100% found this document useful (1 vote)
346 views20 pages

Sap WORKFLOW

This function module retrieves the workflow level (pending approvals) for a leave request in SAP. It checks the employee's org unit, job level, and leave dates to determine the appropriate approvers at different levels (unit, sub-group, multi-level), and reads the workflow container to get the current approval step. The module was updated in June 2009 to fix a bug related to leave workflow levels.

Uploaded by

somnathsap
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
346 views20 pages

Sap WORKFLOW

This function module retrieves the workflow level (pending approvals) for a leave request in SAP. It checks the employee's org unit, job level, and leave dates to determine the appropriate approvers at different levels (unit, sub-group, multi-level), and reads the workflow container to get the current approval step. The module was updated in June 2009 to fix a bug related to leave workflow levels.

Uploaded by

somnathsap
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 20

*&********************************************************************&*

*& Object Id : TS-HCM-REP-030_v2 &*


*& Object Name : FS-HCM-REP-030 &*
*& Program Name : YH_WORKFLOW_LEVEL &*
*& Transaction Code: N/A &*
*& Author : Kedar Prasad &*
*& Module Name : HR &*
*& Sub-Module : HCM &*
*& Program Type : Function Module Create Date : 16.06.2009 &*
*& SAP Release : 5.0 Transport No : RD1K929338 &*
*& Description : This function module is being called in YHRADMIN &*
*& report to give workflow pending level &*
*&********************************************************************&*
*& &*
*& H I S T O R Y O F R E V I S I O N S &*
*&____________________________________________________________________&*
*& Date Programmer Request Description &*
*& 06/08/2009 Kedar Prasad RD1K930162 Bug fixing for leave &*
*& (KP01) ECC HR-HO#159 workflow level &*
*& &*
*&********************************************************************&*



FUNCTION yh_workflow_level.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(WI_ID) TYPE SWW_WIID
*" REFERENCE(PERNR) TYPE PERSNO
*" REFERENCE(AGENT) TYPE SYUNAME
*" EXPORTING
*" REFERENCE(WF_LEVEL) TYPE CHAR20
*"----------------------------------------------------------------------
INCLUDE <cntn01>.

swc_container it_event_container. "#EC *
swc_create_container it_event_container. "#EC *


TYPES: BEGIN OF ty_details,
wi_id TYPE sww_wiid,
wi_cd TYPE sww_cd,
wi_aagent TYPE sww_aagent,
wi_forw_by TYPE sww_forwby,
END OF ty_details,

BEGIN OF ts_swwwhead,
wi_id TYPE sww_wiid,
END OF ts_swwwhead,

BEGIN OF ts_approver,
approver TYPE hrp1001-sobid,
email TYPE adr6-smtp_addr,
END OF ts_approver.

**INTERNAL TABLES********************
DATA:it_details TYPE TABLE OF ty_details.

**WORK AREAS*************************

DATA: is_details TYPE ty_details.

** VARIABLES*************************

DATA: v_werks TYPE pa0001-werks,
v_yyjlevel TYPE pa0001-yyjlevel,
is_shead TYPE ts_swwwhead,
frstapp_usrid TYPE pa0001-pernr,
scndapp_usrid TYPE pa0001-pernr,
unithd_usrid TYPE pa0001-pernr,
hohradmn_usrid TYPE pa0001-pernr,
v_sglvl,
w_endda TYPE p9050-endda,
w_sobid TYPE hrp1001-sobid,
v_mltlvl,
v_persg TYPE pa0001-persg,
w_approver TYPE hrp1001-sobid,
wa_yyemps TYPE pa9050-yyemps,
v_ansvh TYPE pa0001-ansvh,
w_unithead_p TYPE pa0001-pernr,
w_unithead_u TYPE pa0001-pernr,
w_fapp_p TYPE pa0001-pernr,
w_fapp_u TYPE pa0001-pernr,
w_sapp_p TYPE pa0001-pernr,
w_sapp_u TYPE pa0001-pernr,
w_return TYPE sy-subrc,
it_work TYPE swrtwiid,
w_tlevel TYPE numc1,
w_clevel TYPE numc1,
w_fa TYPE p0105-usrid,
w_sa TYPE p0105-usrid,
w_ta TYPE p0105-usrid,
w_fourtha TYPE p0105-usrid,
wi_agent1 TYPE swrtwiagent,
wi_user TYPE swr_wiagent,
wi_agent TYPE pa0001-pernr,
w_forwarded TYPE sy-uname,
w_userid_fa TYPE pa0001-pernr,
w_userid_sa TYPE pa0001-pernr,
w_userid_ta TYPE pa0001-pernr,
w_userid_fourtha TYPE pa0001-pernr,
w_flag_1 TYPE char1,
w_wihead TYPE sww_wiid,
w_wf_id TYPE swfrdguid,
w_wfno TYPE char10,
w_usrid TYPE p0105-usrid,
w_date TYPE sy-datum,
w_lines TYPE i.

DATA: is_loan TYPE char255,
w_object_key TYPE swr_struct-object_key,
w_loan TYPE swc_object.

DATA: w_hr_admin TYPE wfsyst-initiator,
w_unit_head TYPE wfsyst-initiator,
w_unit_hr TYPE wfsyst-initiator,
w_level TYPE char1.


************************************************************************
CLEAR: w_level, wf_level,v_sglvl,v_mltlvl,w_fa, w_forwarded .
REFRESH: it_details.



SELECT SINGLE top_wi_id
def_guid
INTO (w_wihead, w_wf_id)
FROM swwwihead
WHERE wi_id = wi_id.

IF sy-subrc = 0.

w_wfno = w_wf_id+0(10).

SELECT wi_id
wi_cd
wi_aagent
wi_forw_by
INTO TABLE it_details
FROM swwwihead
WHERE top_wi_id = w_wihead
AND wi_type = 'W'.

IF sy-subrc = 0.

SORT it_details BY wi_id.

READ TABLE it_details INTO is_details INDEX 1.

IF sy-subrc = 0.
w_date = is_details-wi_cd.
ENDIF.

SORT it_details BY wi_id DESCENDING.

READ TABLE it_details INTO is_details INDEX 1.

IF sy-subrc = 0.
w_forwarded = is_details-wi_forw_by.
ENDIF.



CASE:w_wfno.

WHEN 'WS90100026'.

* **************Get all the approver of the leave as on the date leave has
been applied********************

SELECT SINGLE werks yyjlevel persg ansvh FROM pa0001 INTO (v_werk
s, v_yyjlevel, v_persg, v_ansvh)
WHERE pernr EQ pernr AND
begda LE w_date AND
endda GE w_date AND
bukrs EQ 'ITD'.

IF sy-subrc EQ 0.

SELECT SINGLE yyemps INTO wa_yyemps
FROM pa9050
WHERE pernr EQ pernr
AND begda LE w_date
AND endda GE w_date.

IF sy-subrc = 0.

IF ( v_werks = 'HOTD' OR v_werks = 'CPOG' OR v_werks = 'NBD
C' OR v_werks = 'NDIS' OR v_werks = 'SDIS' OR
v_werks = 'EDIS' OR v_werks = 'WDIS' )
AND ( v_yyjlevel = '60000001' OR v_yyjlevel = '60000002' O
R v_yyjlevel = '60000003' OR v_yyjlevel = '60000004'
OR v_yyjlevel = '60000005' OR v_yyjlevel = '60000006'
).
v_sglvl = 'X'. " 1 n 2

ELSEIF ( v_werks = 'MBLR' OR v_werks = 'IRDC' OR v_werks = 'M
KDP' OR v_werks = 'MMGR' OR v_werks = 'MPUN' OR v_werks = 'MSRE' OR v_werks
= 'OATC'
OR v_werks = 'PCUT' ) AND
( v_yyjlevel EQ '60000003' ).
v_sglvl = 'X'. " 3

ELSEIF ( v_werks = 'MBLR' OR v_werks = 'IRDC' OR v_werks = 'M
KDP' OR v_werks = 'MMGR' OR v_werks = 'MPUN' OR v_werks = 'MSRE' OR v_werks
= 'OATC'
OR v_werks = 'PCUT' ) AND
( v_yyjlevel = '60000004' OR v_yyjlevel = '60000005' O
R v_yyjlevel = '60000006' ).
v_mltlvl = 'X'. " 5

ELSEIF ( v_werks = 'AECU' OR v_werks = 'AEGA' OR v_werks = 'A
EPA' OR v_werks = 'AEVI' OR v_werks = 'AWAH' OR
v_werks = 'AWBH' OR v_werks = 'AWMU' OR v_werks = 'AWNA' OR v
_werks = 'AWPU' OR v_werks = 'ASBL' OR v_werks = 'ASCH' OR
v_werks = 'ASCO' OR v_werks = 'ASER' OR v_werks = 'ASHY' OR v
_werks = 'ANCH' OR v_werks = 'ANDE' OR v_werks = 'ANJA' OR
v_werks = 'ANJP' OR v_werks = 'ANLU' OR v_werks = 'ANSA')
AND ( v_yyjlevel EQ '60000004' ). " 4
v_sglvl = 'X'.
ELSEIF ( v_werks = 'AECU' OR v_werks = 'AEGA' OR v_werks = 'A
EPA' OR v_werks = 'AEVI' OR v_werks = 'AWAH' OR
v_werks = 'AWBH' OR v_werks = 'AWMU' OR v_werks = 'AWNA' OR v
_werks = 'AWPU' OR v_werks = 'ASBL' OR v_werks = 'ASCH' OR
v_werks = 'ASCO' OR v_werks = 'ASER' OR v_werks = 'ASHY' OR v
_werks = 'ANCH' OR v_werks = 'ANDE' OR v_werks = 'ANJA' OR
v_werks = 'ANJP' OR v_werks = 'ANLU' OR v_werks = 'ANSA')
AND ( v_yyjlevel = '60000005' OR v_yyjlevel = '600000
06' ). " 5
v_mltlvl = 'X'.
ENDIF.
ENDIF.


IF v_sglvl EQ 'X'.

* Start of change by KP01 on 06.08.2009
CALL FUNCTION 'SWW_WI_CONTAINER_READ'
EXPORTING
wi_id = w_wihead
TABLES
wi_container = it_event_container
EXCEPTIONS
container_does_not_exist = 1
read_failed = 2
OTHERS = 3.

IF sy-subrc = 0.

CLEAR: w_tlevel,w_clevel.

LOOP AT it_event_container.

CASE: it_event_container-element.

WHEN 'VARIABLE'.
w_tlevel = it_event_container-value.

WHEN 'VARIABLE1'.

w_clevel = it_event_container-value.

WHEN 'OTHERS'.
* No action

ENDCASE.

ENDLOOP.

ENDIF.

IF w_tlevel = 1 .

wf_level = 'FIRST APPRAISER'.

ELSEIF w_tlevel = 2 .

IF w_clevel = 1 .

wf_level = 'FIRST APPRAISER'.

ELSEIF w_clevel = 2.

wf_level = 'HO HR ADMIN'.

ENDIF.

ENDIF.
* wf_level = 'FIRST APPRAISER'.
* End of change by KP01 on 06.08.2009



ELSEIF v_mltlvl EQ 'X'.

CASE wa_yyemps.

WHEN '1'.
SELECT SINGLE yylfapp yylsapp yyluhead endda
FROM pa9050
INTO (frstapp_usrid , scndapp_
usrid ,unithd_usrid , w_endda)
WHERE pernr
EQ pernr
AND begd
a LE w_date
AND endd
a GE w_date.

IF sy-subrc = 0.

w_fapp_u = frstapp_usrid.
w_sapp_u = scndapp_usrid.
w_unithead_u = unithd_usrid .

ENDIF.

WHEN '2'.

SELECT SINGLE yydevp yyprown yyauhead endda
FROM pa9050
INTO (frstapp_usrid , scndapp_
usrid ,unithd_usrid , w_endda)
WHERE pernr
EQ pernr
AND begd
a LE w_date
AND endd
a GE w_date.

IF sy-subrc = 0.

w_fapp_u = frstapp_usrid.
w_sapp_u = scndapp_usrid.
w_unithead_u = unithd_usrid .


ENDIF.


WHEN '3'.

SELECT SINGLE yyrfapyp yyrsapp yyruhead endda
FROM pa9050
INTO (frstapp_usrid , scndapp_u
srid ,unithd_usrid , w_endda)
WHERE pernr E
Q pernr
AND begda
LE w_date
AND endda
GE w_date.
IF sy-subrc = 0.

w_fapp_p = frstapp_usrid.
w_sapp_p = scndapp_usrid.
w_unithead_p = unithd_usrid.

ENDIF.


IF frstapp_usrid IS NOT INITIAL.
SELECT SINGLE sobid
FROM hrp1001
INTO w_approver
WHERE otype = 'S' AND
objid = frstapp_usrid AND
plvar = '01' AND
rsign = 'A' AND
relat = '008' AND
istat = '1' AND
endda >= w_endda AND
sclas = 'P'.

IF sy-subrc = 0.
frstapp_usrid = w_approver.
w_fapp_u = w_approver.

ELSE.
CLEAR frstapp_usrid.
ENDIF.
ENDIF.


SELECT SINGLE sobid
FROM hrp1001
INTO w_approver
WHERE otype = 'S' AND
objid = scndapp_usrid AND
plvar = '01' AND
rsign = 'A' AND
relat = '008' AND
istat = '1' AND
endda >= w_endda AND
sclas = 'P'.

IF sy-subrc = 0.
scndapp_usrid = w_approver.
w_sapp_u = w_approver.

ELSE.
CLEAR scndapp_usrid.
ENDIF.

CLEAR w_approver.

SELECT SINGLE sobid
FROM hrp1001
INTO w_approver
WHERE otype = 'S' AND
objid = unithd_usrid AND
plvar = '01' AND
rsign = 'A' AND
relat = '008' AND
istat = '1' AND
endda >= w_endda AND
sclas = 'P'.

IF sy-subrc = 0.
unithd_usrid = w_approver.
w_unithead_u = w_approver.
ELSE.
CLEAR unithd_usrid.
ENDIF.

ENDCASE.


CLEAR:w_approver.

SELECT SINGLE sobid
FROM hrp1001
INTO w_approver
WHERE otype = 'ZH' AND
begda LE w_date AND
endda GE w_date.

IF sy-subrc = 0.

SELECT SINGLE sobid
FROM hrp1001
INTO w_sobid
WHERE otype = 'S' AND
objid = w_approver AND
plvar = '01' AND
rsign = 'A' AND
relat = '008' AND
istat = '1' AND
endda >= w_endda AND
sclas = 'P'.

IF sy-subrc EQ 0.
hohradmn_usrid = w_sobid.

ELSE.
CLEAR: hohradmn_usrid.

ENDIF.

ELSE.
CLEAR: hohradmn_usrid.
ENDIF.



is_shead-wi_id = wi_id.

APPEND is_shead-wi_id TO it_work.

CLEAR wi_agent.


CALL FUNCTION 'SAP_WAPI_GET_WI_AGENTS'
EXPORTING
workitems = it_work
IMPORTING
return_code = w_return
wi_agents = wi_agent1.

IF w_return = 0.

READ TABLE wi_agent1 INTO wi_user INDEX 1.
IF sy-subrc = 0.
w_usrid = wi_user-user.
ENDIF.

IF w_usrid IS NOT INITIAL.
CALL FUNCTION 'RP_GET_PERNR_FROM_USERID'
EXPORTING
begda = w_date
endda = w_date
usrid = w_usrid
usrty = '010'
IMPORTING
usr_pernr = wi_agent
EXCEPTIONS
retcd = 1
OTHERS = 2.
IF sy-subrc <> 0.
" NO action
ENDIF.
ENDIF.
**If workflow is pending with some agent then compare that agent with all t
he possible agents
** To know in which level workflow is pending

IF wi_agent IS NOT INITIAL.

IF w_forwarded IS INITIAL.

IF wi_agent = frstapp_usrid.

wf_level = 'FIRST APPRAISER'.

ELSEIF wi_agent = scndapp_usrid.

wf_level = 'SECOND APPRAISER'.


ELSEIF wi_agent = unithd_usrid.

wf_level = 'UNIT HEAD'.


ELSEIF wi_agent = hohradmn_usrid.

wf_level = 'HO HR ADMIN'.


ENDIF.

ENDIF.

ELSE.

* Workflow is pending with no agent

CALL FUNCTION 'SWW_WI_CONTAINER_READ'
EXPORTING
wi_id = w_wihead
TABLES
wi_container = it_event_container
EXCEPTIONS
container_does_not_exist = 1
read_failed = 2
OTHERS = 3.

IF sy-subrc = 0.

LOOP AT it_event_container.

CASE: it_event_container-element.

WHEN 'VARIABLE'.
w_tlevel = it_event_container-value.

WHEN 'VARIABLE1'.

w_clevel = it_event_container-value.

WHEN 'FIRSTAPPROVER'.

w_fa = it_event_container-value+2(12).
.
WHEN 'SECONDAPPROVER'.

w_sa = it_event_container-value+2(12).

WHEN ' THIRDAPPROVER'.

w_ta = it_event_container-value+2(12).


WHEN ' FORTHAPPROVER'.

w_fourtha = it_event_container-value+2(12).


WHEN 'OTHERS'.
* No action


ENDCASE.
ENDLOOP.
ENDIF.

* Check if HO HR approval was needed
* get pernr for FA

IF w_fa IS NOT INITIAL.

CALL FUNCTION 'RP_GET_PERNR_FROM_USERID'
EXPORTING
begda = w_date
endda = w_date
usrid = w_fa
usrty = '010'
IMPORTING
usr_pernr = w_userid_fa
EXCEPTIONS
retcd = 1
OTHERS = 2.
IF sy-subrc <> 0.
" NO action
ENDIF.

ENDIF.
* get pernr for SA
IF w_sa IS NOT INITIAL.
CALL FUNCTION 'RP_GET_PERNR_FROM_USERID'
EXPORTING
begda = w_date
endda = w_date
usrid = w_sa
usrty = '010'
IMPORTING
usr_pernr = w_userid_sa
EXCEPTIONS
retcd = 1
OTHERS = 2.
IF sy-subrc <> 0.
" NO action
ENDIF.
ENDIF.
* get pernr for TA
IF w_ta IS NOT INITIAL.
CALL FUNCTION 'RP_GET_PERNR_FROM_USERID'
EXPORTING
begda = w_date
endda = w_date
usrid = w_ta
usrty = '010'
IMPORTING
usr_pernr = w_userid_ta
EXCEPTIONS
retcd = 1
OTHERS = 2.
IF sy-subrc <> 0.
" NO action
ENDIF.
ENDIF.
* get pernr for Fourth A
IF w_fourtha IS NOT INITIAL.
CALL FUNCTION 'RP_GET_PERNR_FROM_USERID'
EXPORTING
begda = w_date
endda = w_date
usrid = w_fourtha
usrty = '010'
IMPORTING
usr_pernr = w_userid_fourtha
EXCEPTIONS
retcd = 1
OTHERS = 2.
IF sy-subrc <> 0.
" NO action
ENDIF.
ENDIF.
IF hohradmn_usrid = w_userid_fa OR hohradmn_usrid = w_use
rid_sa OR
hohradmn_usrid = w_userid_ta OR hohradmn_usrid = w_use
rid_fourtha.

w_flag_1 = 'X'.

ENDIF.

CLEAR: w_lines.

DESCRIBE TABLE it_details LINES w_lines.

IF w_lines = 4.

wf_level = 'HO HR ADMIN'.

ELSEIF w_lines = 3.

wf_level = 'UNIT HEAD'.

ELSEIF w_lines = 2.

wf_level = 'UNIT HEAD'.


ELSEIF w_lines = 1.

IF frstapp_usrid IS NOT INITIAL AND frstapp_usrid = uni
thd_usrid.

wf_level = 'FIRST APPRAISER'.

ELSE.

wf_level = 'UNIT HEAD'.

ENDIF.
ENDIF.
ENDIF.

** Case handelling for the workflow that has been forwarded to some other a
gent.

IF wi_agent IS NOT INITIAL AND wf_level IS INITIAL.
CLEAR: w_lines.
DESCRIBE TABLE it_details LINES w_lines.

IF w_lines = 1.

IF frstapp_usrid IS NOT INITIAL. " AND frstapp_usrid =
unithd_usrid.

wf_level = 'FIRST APPRAISER'.

ELSEIF frstapp_usrid IS INITIAL AND scndapp_usrid IS NO
T INITIAL .

wf_level = 'SECOND APPRAISER'.

ELSEIF frstapp_usrid IS INITIAL AND scndapp_usrid IS IN
ITIAL .

wf_level = 'UNIT HEAD'.

ENDIF.

ELSEIF w_lines = 2.

IF scndapp_usrid IS NOT INITIAL AND scndapp_usrid = uni
thd_usrid.

wf_level = 'SECOND APPRAISER'.

ELSEIF scndapp_usrid IS NOT INITIAL .

wf_level = 'SECOND APPRAISER'.

ELSEIF scndapp_usrid IS INITIAL.

wf_level = 'UNIT HEAD'.

ENDIF.

ELSEIF w_lines = 3.


wf_level = 'UNIT HEAD'.


ENDIF.


ENDIF.

ENDIF.

ENDIF.
ENDIF.

******************************End of Leave service*************************
******************************

WHEN 'WS90100003'. " Master data workflow

wf_level = 'HR ADMIN'.

WHEN 'WS90100004'. " Master data workflow

wf_level = 'HR ADMIN'.

WHEN 'WS90100013'. " Asset workflow

wf_level = 'HR ADMIN'.

WHEN 'WS90100014'. " Loan workflow

* Getting the workflow container data

CALL FUNCTION 'SWW_WI_CONTAINER_READ'
EXPORTING
wi_id = w_wihead
TABLES
wi_container = it_event_container
EXCEPTIONS
container_does_not_exist = 1
read_failed = 2
OTHERS = 3.

IF sy-subrc = 0.

LOOP AT it_event_container WHERE element = 'YLOAN'.

is_loan = it_event_container-value.
SHIFT is_loan LEFT DELETING LEADING space .
SHIFT is_loan LEFT DELETING LEADING 'YHRLOAN' .
SHIFT is_loan LEFT DELETING LEADING space .
w_object_key = is_loan.
swc_create_object w_loan 'YHRLOAN' w_object_key.
w_hr_admin = w_object_key+33(12) .
swc_get_property w_loan 'W_UNIT_HEAD' w_unit_head."#EC *
swc_get_property w_loan 'W_UNIT_HR' w_unit_hr."#EC *


EXIT.
ENDLOOP.
ENDIF.
* Checking for workflow level
IF w_forwarded IS INITIAL. " If workitem has not been forwarded b
ut gone to the agent by WF
IF agent IS NOT INITIAL.

IF agent = w_hr_admin.

wf_level = 'HR ADMIN'.

ELSEIF agent = w_unit_head+2(12).

wf_level = 'UNIT HEAD'.

ELSEIF agent = w_unit_hr+2(12).

wf_level = 'UNIT HR'.
ENDIF.
ELSE. " Only in this case workflow will be pending with no agen
t
wf_level = 'UNIT HR'.
ENDIF.


ELSE. " If workitem has been forwarded manually

wf_level = w_forwarded. " The person who has forwarded the WI


ENDIF.

WHEN 'WS90100018'. "INDUCTION-LATERAL workflow

* Getting the workflow container data

CALL FUNCTION 'SWW_WI_CONTAINER_READ'
EXPORTING
wi_id = w_wihead
TABLES
wi_container = it_event_container
EXCEPTIONS
container_does_not_exist = 1
read_failed = 2
OTHERS = 3.
IF sy-subrc = 0.

LOOP AT it_event_container WHERE element = 'W_LEVEL'.

w_level = it_event_container-value.
EXIT.
ENDLOOP.

IF w_level = '1'.

wf_level = 'FIRST APPRAISER'.

ELSEIF w_level = '2'.

wf_level = 'SECOND APPRAISER'.

ELSEIF w_level = '3'.

wf_level = 'UNIT HEAD'.

ELSEIF w_level = '4'.

wf_level = 'FUNCTION HEAD'.


ELSEIF w_level = '5'.

wf_level = 'UNIT HR ADMIN'.


ENDIF.
ENDIF.
WHEN 'WS90100019'. "INDUCTION-AUT workflow

* Getting the workflow container data

CALL FUNCTION 'SWW_WI_CONTAINER_READ'
EXPORTING
wi_id = w_wihead
TABLES
wi_container = it_event_container
EXCEPTIONS
container_does_not_exist = 1
read_failed = 2
OTHERS = 3.

IF sy-subrc = 0.
LOOP AT it_event_container WHERE element = 'W_LEVEL'.

w_level = it_event_container-value.
EXIT.
ENDLOOP.

IF w_level = '1'.

wf_level = 'PROCESS OWNER'.

ELSEIF w_level = '2'.

wf_level = 'UNIT HEAD'.

ELSEIF w_level = '3'.

wf_level = 'FUNCTION HEAD'.


ELSEIF w_level = '4'.

wf_level = 'UNIT HR ADMIN'.


ENDIF.
ENDIF.
WHEN 'WS90100020'. "APPRAISAL workflow

* Getting the workflow container data

CALL FUNCTION 'SWW_WI_CONTAINER_READ'
EXPORTING
wi_id = w_wihead
TABLES
wi_container = it_event_container
EXCEPTIONS
container_does_not_exist = 1
read_failed = 2
OTHERS = 3.

IF sy-subrc = 0.
LOOP AT it_event_container WHERE element = 'W_LEVEL'.

w_level = it_event_container-value.
EXIT.
ENDLOOP.

IF w_level = '1'.

wf_level = 'FIRST APPRAISER'.

ELSEIF w_level = '2'.

wf_level = 'SECOND APPRAISER'.

ELSEIF w_level = '3'.

wf_level = 'UNIT HEAD'.


ELSEIF w_level = '4'.

wf_level = 'FUNCTION HEAD'.

ELSEIF w_level = '5'.

wf_level = 'HO-HR'.



ENDIF.
ENDIF.
WHEN 'WS90100021'. "DPS workflow

* Getting the workflow container data

CALL FUNCTION 'SWW_WI_CONTAINER_READ'
EXPORTING
wi_id = w_wihead
TABLES
wi_container = it_event_container
EXCEPTIONS
container_does_not_exist = 1
read_failed = 2
OTHERS = 3.
IF sy-subrc = 0.

LOOP AT it_event_container WHERE element = 'W_LEVEL'.

w_level = it_event_container-value.
EXIT.
ENDLOOP.

IF w_level = '1'.

wf_level = 'FIRST APPRAISER'.

ELSEIF w_level = '2'.

wf_level = 'SECOND APPRAISER'.


ENDIF.
ENDIF.
WHEN 'WS90100022'. "IELS workflow

* Getting the workflow container data

CALL FUNCTION 'SWW_WI_CONTAINER_READ'
EXPORTING
wi_id = w_wihead
TABLES
wi_container = it_event_container
EXCEPTIONS
container_does_not_exist = 1
read_failed = 2
OTHERS = 3.
IF sy-subrc = 0.

LOOP AT it_event_container WHERE element = 'W_LEVEL'.

w_level = it_event_container-value.
EXIT.
ENDLOOP.

IF w_level = '1'.

wf_level = 'FIRST APPRAISER'.

ELSEIF w_level = '2'.

wf_level = 'FUNCTION HEAD'.


ENDIF.
ENDIF.
WHEN 'WS90100023'. "POTENTIAL REVIEW workflow

* Getting the workflow container data

CALL FUNCTION 'SWW_WI_CONTAINER_READ'
EXPORTING
wi_id = w_wihead
TABLES
wi_container = it_event_container
EXCEPTIONS
container_does_not_exist = 1
read_failed = 2
OTHERS = 3.
IF sy-subrc = 0.

LOOP AT it_event_container WHERE element = 'W_LEVEL'.

w_level = it_event_container-value.
EXIT.
ENDLOOP.

IF w_level = '0'.

wf_level = 'FIRST APPRAISER'.

ELSEIF w_level = '1'.

wf_level = 'SECOND APPRAISER'.

ELSEIF w_level = '2'.

wf_level = 'UNIT HEAD'.

ELSEIF w_level = '3'.

wf_level = 'FUNCTION HEAD'.


ENDIF.

ENDIF.
WHEN 'WS90100024'. "TRAINING workflow

* Getting the workflow container data

CALL FUNCTION 'SWW_WI_CONTAINER_READ'
EXPORTING
wi_id = w_wihead
TABLES
wi_container = it_event_container
EXCEPTIONS
container_does_not_exist = 1
read_failed = 2
OTHERS = 3.

IF sy-subrc = 0.
LOOP AT it_event_container WHERE element = 'W_LEVEL'.

w_level = it_event_container-value.
EXIT.
ENDLOOP.

IF w_level = '0'.

wf_level = 'EMPLOYEE LEVEL'.

ELSEIF w_level = '1'.

wf_level = 'FIRST APPRAISER'.

ELSEIF w_level = '2'.

wf_level = 'SECOND APPRAISER'.

ELSEIF w_level = '3'.

wf_level = 'UNIT HR'.


ENDIF.
ENDIF.

ENDCASE.

ENDIF.
ENDIF.
ENDFUNCTION.

You might also like