class zcl fi liv wf exits
TRANSCRIPT
7/15/2019 Class Zcl Fi Liv Wf Exits
http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 1/37
ZCL_FI_LIV_WF_EXITS
Release731
System DE1
______________________________________________________________________________
Class:ZCL_FI_LIV_WF_EXITS
Status:ActiveImplemented interfacesIF_SWF_IFS_WORKITEM_EX
IT
(Workflow Interfaces:
Runtime
Exit
)
AttributesDescription: Class for FILIV
Exits
Instantiation: PublicFinalNot releasedFixed pt.arithmeticCategory: General Object TypePackage: ZFSA_FIOriginal lang.: EN
Created by: VEGIBCreated on: 07.02.2013
Attributes
Private attributeAttrib. Cat DescriptionRef. Type Init. value____________________________________________________________________________CC_BALANCE_INV Const Balance InvoiceTaskTYPE STRING 'TS90000026'
CC_CONTAINER_EMAIL Const Element ID (32 Characters, Unique, Not LangTYPE SWFDNAME 'AGENT_EMAIL'CC_STAT_SELECTED Const Processing Status of a Work ItemTYPE SWW_WISTAT 'SELECTED'
CC_STAT_STARTED Const Processing Status of a Work ItemTYPE SWW_WISTAT 'STARTED'CC_UNCLARIFIED Const Fix Unclarified items taskTYPE STRING 'TS90000025'
7/15/2019 Class Zcl Fi Liv Wf Exits
http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 2/37
CC_USER Const Object TypeTYPE OTYPE 'US'CC_LATEST_END Const Workflow: Deadline TypeTYPE SWW_DATTYP 'LE'
CC_DESIRED_END Const Workflow: Deadline TypeTYPE SWW_DATTYP 'DE'CC_CALLBACK_ACTION Const WI deadline monitoring: Funct.mod. to be trTYPE SWW_ACTION 'SWW_WI_DEADLINE_CALLBACK'
CC_YES Const CheckboxTYPE XFELD 'X'CC_NO Const CheckboxTYPE XFELD ''
____________________________________________________________________________________
26.02.2013
23:53:14
1
ZCL_FI_LIV_WF_EXITS Release 731 System DE1______________________________________________________________________________
Attrib. CatDescriptionRef. Type Init. value____________________________________________________________________________CC_SATURDAYConstTYPE P 6
CC_SUNDAY ConstTYPE P 7CC_FSAKL_HCAL Const Public Holiday CalendarTYPE HIDENT 'NZ'
CC_CONTAINER_INVOICE_NUM Const Element ID (32 Characters, Unique, Not LangTYPE SWFDNAME 'INVOICE_NUMBER'
CC_CONTAINER_FISCAL_YEAR Const Element ID (32 Characters, Unique, Not LangTYPE SWFDNAME 'FISCAL_YEAR'
CC_HOURS_PER_DAY Const Two digit numberTYPE NUMC2 '24'CC_ESCALATON_LEVEL Const Element ID (32 Characters, Unique, Not LangTYPE SWFDNAME 'ESCALATION_LEVEL'
CC_LEVEL2 Const Two digit numberTYPE NUMC2 '02'
7/15/2019 Class Zcl Fi Liv Wf Exits
http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 3/37
CC_RULE_BUYER Const Concatenated Identification (Type and ID) oTYPE HROBJEC_14 'AC90000001'CC_RULE_FINSERV Const Concatenated Identification (Type and ID) oTYPE HROBJEC_14 'AC90000002'
CC_CONSUPER_EMAIL Const Element ID (32 Characters, Unique, Not LangTYPE SWFDNAME 'SUPERIOR_EMAIL'CC_RULE_LEVEL Const ElementTYPE SWC_ELEM 'IN_LEVEL'
CC_RULE_INVOICE Const ElementTYPE SWC_ELEM 'IN_INVOICE_NUMBER'CC_RULE_FIYR Const ElementTYPE SWC_ELEM 'IN_FISCAL_YEAR'
CC_CREDIT_NOTE Const Credit note taskTYPE STRING 'TS90000029'CC_OTHER_ERROR Const Other error taskTYPE STRING 'TS90000028'
CC_NO_GR Const No GR taskTYPE STRING 'TS90000027'CC_EMAIL_LIST Const Element ID (32 Characters, Unique, Not LangTYPE SWFDNAME 'EMAIL_LIST'
CC_REQSTAT Const Requested StatusTYPE BCS_RQST 'N'CC_MSG_WARN Const Message TypeTYPE SYMSGTY 'W'
____________________________________________________________________________________
26.02.2013
23:53:14
2
ZCL_FI_LIV_WF_EXITS Release 731 System DE1______________________________________________________________________________
Attrib. CatDescriptionRef. Type Init. value____________________________________________________________________________CC_MSG_ERROR Const MessageTypeTYPE SYMSGTY 'E'
CC_MSG_INFORM Const Message TypeTYPE SYMSGTY 'I'
7/15/2019 Class Zcl Fi Liv Wf Exits
http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 4/37
CC_CURRENT_PLAN Const Plan VersionTYPE PLVAR '01'
CC_DIALOG Const Work item typeTYPE SWW_WITYPE 'W'CC_WIHEADER_TAB Const Elementary Lock of Lock Entry (Table Name)TYPE EQEGRANAME 'SWWWIHEAD'
CC_BO_CATEGORY Const Category of Objects in Persistent Object ReTYPE SIBFCATID 'BO'CC_BO_INVOICE Const Type of Objects in Persistent Object RefereTYPE SIBFTYPEID 'BUS2081'
CC_NEW_PARAGRAPH Const Tag columnTYPE TDFORMAT '*'CC_LINE_BREAK Const Not More Closely Defined Area, Possibly UseTYPE CHAR4 '' ____________________________________________________________________________ __
Methods
Private methodsBUILD_WF_EMAIL_LISTDescription: build theemail
list for WFagents
Instance mthd
Importing parameterIM_WORKITEM_CONTEXT TYPE REF TO IF_WAPI_WORKITEM_CONTEXT (Context for WorkItem)
method BUILD_WF_EMAIL_LIST.DATA: lv_id TYPE sww_wiid,
lv_user TYPE syuname,ls_agent_email TYPE
ZSFI_AGENT_EMAIL,"zmm_s_agent_email,ls_email TYPE bapiadsmtp,ls_msg_struc TYPE swr_mstruc,ls_workflow_agent TYPE swhactor,lt_agent_email TYPE
ZTFI_AGENT_EMAIL,"zmm_t_agent_email,lt_email TYPE STANDARD TABLE OF bapiadsmtp,lt_return_dummy TYPE STANDARD TABLE OF bapiret2,lt_workflow_agents TYPE tswhactor.
* get the rule result
CALL METHOD im_workitem_context->get_rule_resultRECEIVINGre_agents = lt_workflow_agents.
____________________________________________________________________________________
26.02.2013
23:53:14
3
7/15/2019 Class Zcl Fi Liv Wf Exits
http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 5/37
ZCL_FI_LIV_WF_EXITS Release 731 System DE1______________________________________________________________________________
IF lt_workflow_agents[] IS INITIAL.* no agents determined set message to workflow log
ls_msg_struc-msgid = '5W'. "Message class 5Wls_msg_struc-msgty = cc_msg_warn.ls_msg_struc-msgno = '341'. "Message Number 341 - No Agent FoundCALL METHOD im_workitem_context->get_workitem_idRECEIVINGre_workitem = lv_id.
ls_msg_struc-msgv1 = lv_id.CALL METHOD im_workitem_context->set_message_to_logEXPORTING
im_function = 'BUILD_WF_EMAIL_LIST' "Method Name where error oim_message = ls_msg_struc.
ELSE.* get the agents of the rule
LOOP AT lt_workflow_agents INTO ls_workflow_agentWHERE otype = cc_user.lv_user = ls_workflow_agent-objid.
* get agent's emailCALL FUNCTION 'BAPI_USER_GET_DETAIL'EXPORTINGusername = lv_user
TABLESreturn = lt_return_dummyaddsmtp = lt_email.
* build list of agent emailREAD TABLE lt_email INTO ls_email INDEX 1.IF sy-subrc EQ 0.ls_agent_email-objid = ls_workflow_agent-objid.ls_agent_email-email = ls_email-e_mail.APPEND ls_agent_email TO lt_agent_email.
ENDIF.CLEAR: lv_user,
ls_email,ls_workflow_agent.
REFRESH: lt_email,lt_return_dummy.
ENDLOOP.
* set the escalation email to agent of the rule result:CALL METHOD me->set_workflow_containerEXPORTINGim_workitem_context = im_workitem_contextim_container_name = cc_container_emailim_container_value = lt_agent_email
EXCEPTIONSset_container_failed = 1OTHERS = 2.
IF sy-subrc NE 0.
7/15/2019 Class Zcl Fi Liv Wf Exits
http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 6/37
* no error processing requiredENDIF.
ENDIF.endmethod.
____________________________________________________________________________________
26.02.2013
23:53:14
4
ZCL_FI_LIV_WF_EXITS Release 731 System DE1______________________________________________________________________________
FINALIZE_WF_EMAIL_LISTDescription: finalize the email list - actual WF agenttook
ownership
Instance mthd
Importing parameterIM_WORKITEM_CONTEXT TYPE REF TO IF_WAPI_WORKITEM_CONTEXT (Context for WorkItem)
method FINALIZE_WF_EMAIL_LIST.DATA: lcl_container TYPE REF TO
if_swf_ifs_parameter_container,lcx_root TYPE REF TO cx_root,lv_user TYPE syuname,lv_workitem_id TYPE sww_wiid,ls_workitem_detail TYPE swr_widtl,ls_workitem_state TYPE sww_statra,lt_agent_email TYPE
ZTFI_AGENT_EMAIL."zmm_t_agent_email.* get work item statesCALL METHOD im_workitem_context->get_state_transitionRECEIVING
re_state_transition = ls_workitem_state.* Someone went into business workplace and selected the item* and actually took ownership of the taskIF ls_workitem_state-src_stat EQ cc_stat_selectedAND ls_workitem_state-tar_stat EQ cc_stat_started.
* get the agent that took ownership of task...* get the work item ID.
CALL METHOD im_workitem_context->get_workitem_idRECEIVINGre_workitem = lv_workitem_id.
7/15/2019 Class Zcl Fi Liv Wf Exits
http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 7/37
CALL FUNCTION 'SAP_WAPI_GET_WORKITEM_DETAIL'EXPORTINGworkitem_id = lv_workitem_id
IMPORTINGworkitem_detail = ls_workitem_detail.
lv_user = ls_workitem_detail-wi_aagent. "Actual agent of the work item* get the WF container AGENT_EMAIL
CALL METHOD me->get_workflow_containerEXPORTINGim_workitem_context = im_workitem_contextim_container_name = cc_container_email
IMPORTINGex_container_value = lt_agent_email
EXCEPTIONSset_container_failed = 1OTHERS = 2.
IF sy-subrc NE 0.* no error processing required
ENDIF.* delete all other possible agent email from the AGENT_EMAIL
IF lt_agent_email[] IS NOT INITIAL.DELETE lt_agent_email WHERE objid <> lv_user.TRY.
____________________________________________________________________________________
26.02.2013
23:53:14
5
ZCL_FI_LIV_WF_EXITS Release 731 System DE1______________________________________________________________________________
* get the the main workflow container instanceCALL METHOD im_workitem_context->get_wf_containerRECEIVINGre_container = lcl_container.
CALL METHOD lcl_container->setEXPORTINGname = cc_container_emailvalue = lt_agent_email.
CATCH cx_root INTO lcx_root."#EC NO_HANDLER
* no exception handling just let workflow continueENDTRY.
ENDIF.ENDIF.
endmethod.
CHANGE_DEADLI
7/15/2019 Class Zcl Fi Liv Wf Exits
http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 8/37
NEDescription: Chnageworkflow
deadline
Instance mthdImporting parameterIM_WORKITEM_CONTEXT TYPE REF TO IF_WAPI_WORKITEM_CONTEXT (Context for WorkItem)
method CHANGE_DEADLINE.DATA: lv_is_holiday TYPE xfeld,
lv_is_weekend TYPE xfeld,lv_workitem_id TYPE sww_wiid,lv_deadline_l1 TYPE numc2,lv_deadline_l2 TYPE numc2,lv_deadline_l3 TYPE numc2,lv_days TYPE numc2,lv_hours TYPE numc2,lv_fact_calendar TYPE hident,ls_deadline_attrib TYPE swwdeadlin,
ls_desired_end TYPE swr_deadl,ls_latest_end TYPE swr_deadl,lt_deadline_attrib TYPE STANDARD TABLE OF swwdeadlin.
* initialize weekend and holiday, assume this is alwasy weekend and holidaylv_is_holiday = abap_true.lv_is_weekend = abap_true.CALL METHOD im_workitem_context->get_workitem_idRECEIVINGre_workitem = lv_workitem_id.
CALL METHOD im_workitem_context->get_deadlinesIMPORTINGdesired_end = ls_desired_end "requested endlatest_end = ls_latest_end. "latest end
CALL METHOD me->get_deadline_parametersEXPORTINGim_workitem_context = im_workitem_context
IMPORTINGex_deadline_level1 = lv_deadline_l1ex_deadline_level2 = lv_deadline_l2ex_deadline_level3 = lv_deadline_l3
____________________________________________________________________________________
26.02.2013
23:53:14
6
ZCL_FI_LIV_WF_EXITS Release 731 System DE1______________________________________________________________________________
ex_calendar = lv_fact_calendar.
7/15/2019 Class Zcl Fi Liv Wf Exits
http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 9/37
* move the deadline from pseudo 1 or 2 hour to daysIF lv_deadline_l1 LT cc_hours_per_day.
* ls_desired_end-time_in+0(2) = ls_desired_end-time_in+0(2) + lv_deadline"MODIF02* BEGIN OF MODIF02
lv_hours = ls_desired_end-time_in+0(2) + lv_deadline_l1.IF lv_hours GE cc_hours_per_day.WHILE lv_hours GE cc_hours_per_day.ls_desired_end-date_in = ls_desired_end-date_in + 1.lv_hours = lv_hours MOD cc_hours_per_day.
ENDWHILE.ls_desired_end-time_in+0(2) = lv_hours.
ELSE.ls_desired_end-time_in+0(2) = ls_desired_end-time_in+0(2) + lv_deadlin
ENDIF.* END OF MODIF02ELSE.lv_days = lv_deadline_l1 / cc_hours_per_day.lv_hours = lv_deadline_l1 - ( lv_days * cc_hours_per_day ).
* ls_desired_end-date_in = ls_desired_end-date_in + lv_deadline_l1. "MOD
ls_desired_end-date_in = ls_desired_end-date_in + lv_days. "MODIF01ls_desired_end-time_in+0(2) = ls_desired_end-time_in+0(2) + lv_hours.
ENDIF.IF lv_deadline_l2 LT cc_hours_per_day.
* ls_latest_end-time_in+0(2) = ls_desired_end-time_in+0(2) + lv_deadline_"MODIF02* BEGIN OF MODIF02
lv_hours = ls_latest_end-time_in+0(2) + lv_deadline_l2.IF lv_hours GE cc_hours_per_day.ls_latest_end-date_in = ls_desired_end-date_in.WHILE lv_hours GE cc_hours_per_day.ls_latest_end-date_in = ls_latest_end-date_in + 1.lv_hours = lv_hours MOD cc_hours_per_day.
ENDWHILE.ls_latest_end-time_in+0(2) = lv_hours.
ELSE.ls_latest_end-date_in = ls_desired_end-date_in.ls_latest_end-time_in+0(2) = ls_latest_end-time_in+0(2) + lv_deadline_
ENDIF.* END OF MODIF02ELSE.lv_days = lv_deadline_l2 / cc_hours_per_day.lv_hours = lv_deadline_l2 - ( lv_days * cc_hours_per_day ).
* ls_latest_end-date_in = ls_desired_end-date_in + lv_deadline_l2. "MODIFls_latest_end-date_in = ls_desired_end-date_in + lv_days. "MODIF01ls_latest_end-time_in+0(2) = ls_desired_end-time_in+0(2) + lv_hours.
ENDIF.
* move to working days for requested end.WHILE lv_is_holiday EQ abap_trueOR lv_is_weekend EQ abap_true.
* check if deadline is on a holidayCALL METHOD me->check_date_is_holidayEXPORTING
____________________________________________________________________________________
7/15/2019 Class Zcl Fi Liv Wf Exits
http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 10/37
26.02.2013
23:53:14
7
ZCL_FI_LIV_WF_EXITS Release 731 System DE1______________________________________________________________________________
im_date = ls_desired_end-date_inim_factory_calendar = lv_fact_calendar
RECEIVINGre_is_holiday = lv_is_holiday.
* check if deadline is on a weekendCALL METHOD me->check_date_is_weekendEXPORTINGim_date = ls_desired_end-date_in
RECEIVINGre_is_weekend = lv_is_weekend.
IF lv_is_holiday EQ abap_falseAND lv_is_weekend EQ abap_false.EXIT.
ELSE.* move to the next day.
ls_desired_end-date_in = ls_desired_end-date_in + 1.ENDIF.
ENDWHILE.* redetermine next level deadline* re-initialize weekend and holiday, assume this is alwasy weekend and holidlv_is_holiday = abap_true.lv_is_weekend = abap_true.
* move to working days for latest end.WHILE lv_is_holiday EQ abap_trueOR lv_is_weekend EQ abap_true.
* check if deadline is on a holidayCALL METHOD me->check_date_is_holidayEXPORTINGim_date = ls_latest_end-date_inim_factory_calendar = lv_fact_calendar
RECEIVINGre_is_holiday = lv_is_holiday.
* check if deadline is on a weekendCALL METHOD me->check_date_is_weekendEXPORTING
im_date = ls_latest_end-date_inRECEIVINGre_is_weekend = lv_is_weekend.
IF lv_is_holiday EQ abap_falseAND lv_is_weekend EQ abap_false.EXIT.
ELSE.* move to the next day.
ls_latest_end-date_in = ls_latest_end-date_in + 1.ENDIF.
7/15/2019 Class Zcl Fi Liv Wf Exits
http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 11/37
ENDWHILE.* commence change of deadline attributes for desired/requested endls_deadline_attrib-wi_dattype = cc_desired_end.ls_deadline_attrib-wi_date = ls_desired_end-date_in.ls_deadline_attrib-wi_time = ls_desired_end-time_in.ls_deadline_attrib-wi_action = cc_callback_action.APPEND ls_deadline_attrib TO lt_deadline_attrib.CLEAR ls_deadline_attrib.
* commence change of deadline attributes for latest end
____________________________________________________________________________________
26.02.2013
23:53:14
8
ZCL_FI_LIV_WF_EXITS Release 731 System DE1______________________________________________________________________________
ls_deadline_attrib-wi_dattype = cc_latest_end.ls_deadline_attrib-wi_date = ls_latest_end-date_in.ls_deadline_attrib-wi_time = ls_latest_end-time_in.ls_deadline_attrib-wi_action = cc_callback_action.APPEND ls_deadline_attrib TO lt_deadline_attrib.
* change deadline attributes for taskCALL FUNCTION 'SWW_WI_DEADLINES_CHANGE'EXPORTINGwi_id = lv_workitem_iddo_commit = cc_noauthorization_checked = cc_yespreconditions_checked = cc_yesdeadlines_checked = cc_yes
TABLESdeadline_attributes = lt_deadline_attrib
EXCEPTIONSno_authorization = 1invalid_type = 2update_failed = 3invalid_status = 4OTHERS = 5.
IF sy-subrc NE 0.
* in the instance of an error, rollback transactionROLLBACK WORK.
ELSE.* when no error, then commit the change
COMMIT WORK AND WAIT.ENDIF.
endmethod.
CHECK_DATE_IS_WEEKE
7/15/2019 Class Zcl Fi Liv Wf Exits
http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 12/37
NDDescription: check isdeadline
falls on aweekend
Instance mthdImporting parameterIM_DATE TYPE SWR_DATEIN (WAPI: Date ininternal
format(YYYYMMDD))
Returning parameterVALUE(RE_IS_WEEKEND) TYPE XFELD(Checkbox)
method CHECK_DATE_IS_WEEKEND.DATA: lv_date TYPE d,
lv_day_in_week TYPE p.lv_date = im_date.
* get numeric equivalent of date in weeks termCALL FUNCTION 'DAY_IN_WEEK'EXPORTING
datum = lv_dateIMPORTINGwotnr = lv_day_in_week.
* if numeric equivalent of date is 6 or 7 (saturday or sunday) then flag weeIF lv_day_in_week EQ cc_saturday "6 = SaturdayOR lv_day_in_week EQ cc_sunday. "7 = Sundayre_is_weekend = abap_true.
else.
____________________________________________________________________________________
26.02.2013
23:53:14
9
ZCL_FI_LIV_WF_EXITS Release 731 System DE1______________________________________________________________________________
* not a weekendre_is_weekend = abap_false.
ENDIF.
endmethod.
CHECK_DATE_IS_HOLID AYDescription: check is date is ahollidayInstance mthdImporting parameter
7/15/2019 Class Zcl Fi Liv Wf Exits
http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 13/37
IM_DATE TYPE SWR_DATEIN (WAPI: Date ininternal
format(YYYYMMDD))
IM_FACTORY_CALENDAR TYPE HIDENT (Public Holiday Calendar)Returning parameterVALUE(RE_IS_HOLIDAY) TYPE XFELD(Checkbox)
method CHECK_DATE_IS_HOLIDAY.DATA: lt_holidays TYPE STANDARD TABLE OF iscal_day.
* get holiday between date rangeCALL FUNCTION 'HOLIDAY_GET'EXPORTINGholiday_calendar = cc_fsakl_hcal "NZfactory_calendar = im_factory_calendardate_from = im_datedate_to = im_date
TABLESholidays = lt_holidays
EXCEPTIONS
factory_calendar_not_found = 1holiday_calendar_not_found = 2date_has_invalid_format = 3date_inconsistency = 4OTHERS = 5.
IF sy-subrc EQ 0.* when there is a holiday in between mark it as holiday
IF lt_holidays[] IS NOT INITIAL.re_is_holiday = abap_true.
ELSE.* no holiday in between
re_is_holiday = abap_false.ENDIF.
ENDIF.endmethod.
GET_DEADLINE_PARAMETERSDescription: Get thedeadline
parameters
Instance mthd
Importing parameterIM_WORKITEM_CONTEXT TYPE REF TO IF_WAPI_WORKITEM_CONTEXT (Context for WorkItem)
Exporting
parameterEX_DEADLINE_LEVEL1 TYPE NUMC2 (Two digitnumber)EX_DEADLINE_LEVEL2 TYPE NUMC2 (Two digit number)EX_DEADLINE_LEVEL3 TYPE NUMC2 (Two digit number)EX_CALENDAR TYPE HIDENT (Public Holiday Calendar)
____________________________________________________________________________________
7/15/2019 Class Zcl Fi Liv Wf Exits
http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 14/37
26.02.2013
23:53:14
10
ZCL_FI_LIV_WF_EXITS Release 731 System DE1______________________________________________________________________________
method GET_DEADLINE_PARAMETERS.DATA: lcx_root TYPE REF TO cx_root,
lv_company_code TYPE bukrs,lv_escalation_level TYPE numc2,lv_fiscal_year TYPE gjahr,lv_invoice_number TYPE re_belnr,lv_profit_ctr TYPE prctr,
lv_purch_group TYPE bkgrp,lv_purch_org TYPE ekorg,lv_site TYPE werks_d,ls_zfic_liv_buyers TYPE
zfic_liv_buyers."zmm_liv_buyers.* read container contentsTRY.
* get invoice numberCALL METHOD me->get_workflow_containerEXPORTINGim_workitem_context = im_workitem_contextim_container_name = cc_container_invoice_num
IMPORTINGex_container_value = lv_invoice_number
EXCEPTIONSset_container_failed = 1OTHERS = 2.
* get fiscal yearCALL METHOD me->get_workflow_containerEXPORTINGim_workitem_context = im_workitem_contextim_container_name = cc_container_fiscal_year
IMPORTINGex_container_value = lv_fiscal_year
EXCEPTIONSset_container_failed = 1OTHERS = 2.
* get escalation levelCALL METHOD me->get_workflow_containerEXPORTINGim_workitem_context = im_workitem_contextim_container_name = cc_escalaton_level
IMPORTINGex_container_value = lv_escalation_level
EXCEPTIONSset_container_failed = 1OTHERS = 2.
7/15/2019 Class Zcl Fi Liv Wf Exits
http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 15/37
CATCH cx_root INTO lcx_root."#EC NO_HANDLER
* no exception handling just let workflow continueENDTRY.
* get the reference PO for invoiceCALL FUNCTION 'ZMM_LIV_GET_ORG_DETAILS'EXPORTINGim_invoice_number = lv_invoice_numberim_fiscal_year = lv_fiscal_year
IMPORTING
____________________________________________________________________________________
26.02.2013
23:53:14
11
ZCL_FI_LIV_WF_EXITS Release 731 System DE1______________________________________________________________________________
ex_responsible_ekgrp = lv_purch_groupex_responsible_site = lv_siteex_responsible_org = lv_purch_orgex_company_code = lv_company_codeex_profit_center = lv_profit_ctr.
* get the deadline details from zfic_liv_buyers.SELECT SINGLE * FROM zfic_liv_buyers"zmm_liv_buyersINTO ls_zfic_liv_buyers
WHERE comp_code = lv_company_codeAND site = lv_siteAND purch_org = lv_purch_orgAND profit_ctr = lv_profit_ctr.
IF sy-subrc EQ 0.IF lv_escalation_level EQ cc_level2.ex_deadline_level1 = ls_zfic_liv_buyers-user_dl2.ex_deadline_level2 = ls_zfic_liv_buyers-user_dl3.
ELSE.ex_deadline_level1 = ls_zfic_liv_buyers-user_dl1.ex_deadline_level2 = ls_zfic_liv_buyers-user_dl2.ex_deadline_level3 = ls_zfic_liv_buyers-user_dl3.
ENDIF.ex_calendar = ls_zfic_liv_buyers-calendar.
ENDIF.endmethod.
CLASSIFY_AGENTSDescription: Classify Agents to be FI orbuyerInstance mthdImporting
7/15/2019 Class Zcl Fi Liv Wf Exits
http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 16/37
parameterIM_WORKITEM_CONTEXT TYPE REF TO IF_WAPI_WORKITEM_CONTEXT (Context for WorkItem)
Exporting parameterEX_IS_FINSERV TYPE C (rule is financialservices
team)
EX_IS_BUYER TYPE C (rule is buyers)EX_RULE_ID TYPE HROBJEC_14 (Rule ID)
method CLASSIFY_AGENTS.DATA: lcl_rule_context TYPE REF TO if_wapi_routing_context,
lv_rule_id TYPE hrobjec_14.* get the rule contextCALL METHOD im_workitem_context->get_rule_contextRECEIVINGre_ctx = lcl_rule_context.
* find out which rule was executedCALL METHOD lcl_rule_context->get_rule_idRECEIVING
re_rule_id = lv_rule_id.IF lv_rule_id EQ cc_rule_buyer.ex_is_buyer = abap_true.ex_is_finserv = abap_false.
ELSEIF lv_rule_id EQ cc_rule_finserv.ex_is_finserv = abap_true.ex_is_buyer = abap_false.
ENDIF.
____________________________________________________________________________________
26.02.2013
23:53:14
12
ZCL_FI_LIV_WF_EXITS Release 731 System DE1______________________________________________________________________________
ex_rule_id = lv_rule_id.endmethod.
BUILD_SUPERIOR_EMA ILDescription: Build the superior emaillistInstance mthdImporting parameterIM_WORKITEM_CONTEXT TYPE REF TO IF_WAPI_WORKITEM_CONTEXT (Context for WorkItem)
7/15/2019 Class Zcl Fi Liv Wf Exits
http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 17/37
method build_superior_email.data: lv_fiscal_year type gjahr,
lv_invoice_number type re_belnr,lv_is_finserv type c,lv_is_buyer type c,lv_escalation_level type numc2,lv_user type syuname,lv_task type string,lv_task_id type hrobjec_14,lv_rule_id type hrobjec_14,lv_workitem_id type sww_wiid,ls_container type swcont,ls_superior_email type zsfi_agent_email,ls_email type bapiadsmtp,ls_superior_agent type swhactor,lt_container type standard table of swcont,lt_superior_email type ztfi_agent_email,lt_email type standard table of bapiadsmtp,lt_return_dummy type standard table of bapiret2,
lt_superior_agents type tswhactor,lt_dummy_ex type tswhactor,lt_err_dummy type tswhactor,lcl_cont_dummy type ref to if_swf_cnt_contai
* clasify agentscall method me->classify_agentsexportingim_workitem_context = im_workitem_context
importingex_is_finserv = lv_is_finservex_is_buyer = lv_is_buyerex_rule_id = lv_rule_id.
* get the task IDcall method im_workitem_context->get_task_idreceivingre_task_name = lv_task.
if lv_task is not initial.lv_task_id = lv_task.
endif.* get the workitem IDcall method im_workitem_context->get_workitem_idreceivingre_workitem = lv_workitem_id.
* determine escalation levelcall method me->get_workflow_container
____________________________________________________________________________________
26.02.2013
23:53:14
13
ZCL_FI_LIV_WF_EXITS Release 731 System DE1
7/15/2019 Class Zcl Fi Liv Wf Exits
http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 18/37
______________________________________________________________________________
exportingim_workitem_context = im_workitem_contextim_container_name = cc_escalaton_level
importingex_container_value = lv_escalation_level
exceptionsset_container_failed = 1others = 2.
if sy-subrc eq 0.lv_escalation_level = lv_escalation_level + 1. "Increment to get superils_container-element = cc_rule_level.describe field lv_escalation_level length ls_container-elemlength in cha
mode.describe field lv_escalation_level type ls_container-type.ls_container-value = lv_escalation_level.append ls_container to lt_container.
endif.* determine invoice numbercall method me->get_workflow_containerexportingim_workitem_context = im_workitem_contextim_container_name = cc_container_invoice_num
importingex_container_value = lv_invoice_number
exceptionsset_container_failed = 1others = 2.
if sy-subrc eq 0.ls_container-element = cc_rule_invoice.describe field lv_invoice_number length ls_container-elemlength in chara
mode.describe field lv_invoice_number type ls_container-type.ls_container-value = lv_invoice_number.append ls_container to lt_container.
endif.* determine fiscal yearcall method me->get_workflow_containerexportingim_workitem_context = im_workitem_contextim_container_name = cc_container_fiscal_year
importingex_container_value = lv_fiscal_year
exceptions
set_container_failed = 1others = 2.
if sy-subrc eq 0.ls_container-element = cc_rule_fiyr.describe field lv_fiscal_year length ls_container-elemlength in charactedescribe field lv_fiscal_year type ls_container-type.ls_container-value = lv_fiscal_year.append ls_container to lt_container.
endif.* get superior agents
7/15/2019 Class Zcl Fi Liv Wf Exits
http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 19/37
call function 'RH_GET_ACTORS'
____________________________________________________________________________________
26.02.2013
23:53:14
14
ZCL_FI_LIV_WF_EXITS Release 731 System DE1______________________________________________________________________________
exportingact_object = lv_rule_idact_task = lv_task_id
act_wi_id = lv_workitem_idact_plvar = cc_current_plan
* search_date = sy-datumactor_container_oo = lcl_cont_dummy
tablesactor_container = lt_containerexcluded_agents = lt_dummy_exactor_tab = lt_superior_agentserror_tab = lt_err_dummy
exceptionsno_active_plvar = 1no_actor_found = 2exception_of_role_raised = 3no_valid_agent_determined = 4no_container = 5others = 6.
loop at lt_superior_agents into ls_superior_agentwhere otype = cc_user.lv_user = ls_superior_agent-objid.
* get email of superiorscall function 'BAPI_USER_GET_DETAIL'exportingusername = lv_user
tablesreturn = lt_return_dummyaddsmtp = lt_email.
* build list of superior agent email
read table lt_email into ls_email index 1.if sy-subrc eq 0.ls_superior_email-objid = ls_superior_agent-objid.ls_superior_email-email = ls_email-e_mail.append ls_superior_email to lt_superior_email.
endif.clear: lv_user,
ls_email,ls_superior_agent.
refresh: lt_email,
7/15/2019 Class Zcl Fi Liv Wf Exits
http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 20/37
lt_return_dummy.endloop.
* set the superior email to agent of the rule result:call method me->set_workflow_containerexportingim_workitem_context = im_workitem_contextim_container_name = cc_consuper_emailim_container_value = lt_superior_email
exceptionsset_container_failed = 1others = 2.
if sy-subrc ne 0.* no error processing requiredendif.
____________________________________________________________________________________
26.02.2013
23:53:14
15
ZCL_FI_LIV_WF_EXITS Release 731 System DE1______________________________________________________________________________
endmethod.
SET_WORKFLOW_CONTAINER Description: set theparent
workflowcontainer
Instance mthdImporting parameterIM_WORKITEM_CONTEXT TYPE REF TO IF_WAPI_WORKITEM_CONTEXT (Context for WorkItem)IM_CONTAINER_NAME TYPE SWFDNAME (Element ID (32 Characters, Unique, Not LaIM_CONTAINER_VALUE TYPE ANY
Exceptions
SET_CONTAINER_FAILED (Set of containerfailed)
method SET_WORKFLOW_CONTAINER.DATA: lcl_container TYPE REF TO if_swf_ifs_parameter_contai
lcx_root TYPE REF TO cx_root.* get the the main workflow container instanceCALL METHOD im_workitem_context->get_wf_containerRECEIVINGre_container = lcl_container.
* bind conatiner instance value with agents
7/15/2019 Class Zcl Fi Liv Wf Exits
http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 21/37
TRY.CALL METHOD lcl_container->setEXPORTINGname = im_container_namevalue = im_container_value.
COMMIT WORK.CATCH cx_root INTO lcx_root.
* no error processing required, this method does not raise exceptionsRAISE set_container_failed.
ENDTRY.endmethod.
GET_WORKFLOW_CONTAINER Description: get theparent
workflowcontainer
Instance mthd
Importing parameter
IM_WORKITEM_CONTEXT TYPE REF TO IF_WAPI_WORKITEM_CONTEXT (Context for WorkItem)IM_CONTAINER_NAME TYPE SWFDNAME (Element ID (32 Characters, Unique, Not LaExporting parameterEX_CONTAINER_VALUE TYPEANY
ExceptionsSET_CONTAINER_FAILED (Set of containerfailed)
method GET_WORKFLOW_CONTAINER.DATA: lcl_container TYPE REF TO
if_swf_ifs_parameter_container,lv_msg_text TYPE string,ls_msg_struc TYPE swr_mstruc,lcx_swf_cnt_elem_not_found TYPE REF TO
cx_swf_cnt_elem_not_found,lcx_swf_cnt_elem_type_conflict TYPE REF TO
cx_swf_cnt_elem_type_conflict,
____________________________________________________________________________________
26.02.2013
23:53:14
16
ZCL_FI_LIV_WF_EXITS Release 731 System DE1______________________________________________________________________________
7/15/2019 Class Zcl Fi Liv Wf Exits
http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 22/37
lcx_swf_cnt_unit_type_conflict TYPE REF TOcx_swf_cnt_unit_type_conflict,
lcx_swf_cnt_container TYPE REF TO cx_swf_cnt_conta* get the the main workflow container instanceCALL METHOD im_workitem_context->get_wf_containerRECEIVINGre_container = lcl_container.
* bind conatiner instance value with agentsTRY.
CALL METHOD lcl_container->getEXPORTINGname = im_container_name
IMPORTINGvalue = ex_container_value.
CATCH cx_swf_cnt_elem_not_found into lcx_swf_cnt_elem_not_found.CALL METHOD lcx_swf_cnt_elem_not_found->if_message~get_textRECEIVINGresult = lv_msg_text.
ls_msg_struc-msgty = cc_msg_error.ls_msg_struc-msgv1 = lv_msg_text.
CALL METHOD im_workitem_context->set_message_to_logEXPORTINGim_function = 'GET_WORKFLOW_CONTAINER' "Method Name where er
occuredim_message = ls_msg_struc.
CATCH cx_swf_cnt_elem_type_conflict into lcx_swf_cnt_elem_type_conflictCALL METHOD lcx_swf_cnt_elem_type_conflict->if_message~get_textRECEIVINGresult = lv_msg_text.
ls_msg_struc-msgty = cc_msg_error.ls_msg_struc-msgv1 = lv_msg_text.CALL METHOD im_workitem_context->set_message_to_logEXPORTINGim_function = 'GET_WORKFLOW_CONTAINER' "Method Name where er
occuredim_message = ls_msg_struc.
CATCH cx_swf_cnt_unit_type_conflict into lcx_swf_cnt_unit_type_conflictCALL METHOD lcx_swf_cnt_unit_type_conflict->if_message~get_textRECEIVINGresult = lv_msg_text.
ls_msg_struc-msgty = cc_msg_error.ls_msg_struc-msgv1 = lv_msg_text.CALL METHOD im_workitem_context->set_message_to_logEXPORTINGim_function = 'GET_WORKFLOW_CONTAINER' "Method Name where er
occuredim_message = ls_msg_struc.
CATCH cx_swf_cnt_container into lcx_swf_cnt_container.CALL METHOD lcx_swf_cnt_container->if_message~get_textRECEIVINGresult = lv_msg_text.
ls_msg_struc-msgty = cc_msg_error.ls_msg_struc-msgv1 = lv_msg_text.CALL METHOD im_workitem_context->set_message_to_log
7/15/2019 Class Zcl Fi Liv Wf Exits
http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 23/37
____________________________________________________________________________________26.02.2013
23:53:14
17
ZCL_FI_LIV_WF_EXITS Release 731 System DE1______________________________________________________________________________
EXPORTINGim_function = 'GET_WORKFLOW_CONTAINER' "Method Name where er
occuredim_message = ls_msg_struc.
ENDTRY.endmethod.
VALIDATE_ACTOR_TA SK Description: validate iftask
are foractor
Instance mthdImporting parameterIM_WORKITEM_CONTEXT TYPE REF TO IF_WAPI_WORKITEM_CONTEXT (Context for WorkItem)
Exporting parameterEX_IS_ACTOR_TASK TYPE XFELD(Checkbox)
method VALIDATE_ACTOR_TASK.DATA: lv_task_name TYPE string.
* get the work item id the context is refereing toCALL METHOD im_workitem_context->get_task_idRECEIVINGre_task_name = lv_task_name.
IF lv_task_name EQ cc_unclarifiedOR lv_task_name EQ cc_balance_invOR lv_task_name EQ cc_credit_noteOR lv_task_name EQ cc_other_errorOR lv_task_name EQ cc_no_gr.ex_is_actor_task = abap_true.
ELSE.ex_is_actor_task = abap_false.
ENDIF.endmethod.
SEND_REMINDER_EMA ILDescription: sendreminder
emails
Instance mthd
7/15/2019 Class Zcl Fi Liv Wf Exits
http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 24/37
Importing parameterIM_WORKITEM_CONTEXT TYPE REF TO IF_WAPI_WORKITEM_CONTEXT (Context for WorkItem)
Exporting parameterEX_RETCODE TYPE SUBRC (Subroutines for returncode)
method send_reminder_email.data: lv_filename type mime_text,
"mime textlv_from_addr type ad_smtpadr,lv_to_addr type ad_smtpadr,lv_sent type os_boolean,lv_subject type so_obj_des,
"email subjectlv_msg_text type string,ls_email_list type zsfi_agent_email,
ls_msg_struc type swr_mstruc,ls_soli type soli,
____________________________________________________________________________________
26.02.2013
23:53:14
18
ZCL_FI_LIV_WF_EXITS Release 731 System DE1______________________________________________________________________________
"SAPoffice: line, length 255ls_task_description type tline,ls_task_header type swr_wihdr,lt_email_list type ztfi_agent_email,lt_soli type soli_tab,
"Objcont and Objhead as Table Typelt_task_description type swfttline,lcl_bcs type ref to cl_bcs,
"business communication services
lcl_docbcs type ref to cl_document_bcs,"business communication services
lcl_mime type ref to cl_gbt_multirelated_"mime object
lcl_recipient type ref to if_recipient_bcs,"recipient object
lcl_sender type ref to if_sender_bcs,"sender object
lcx_root type ref to cx_root,"catch all
7/15/2019 Class Zcl Fi Liv Wf Exits
http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 25/37
lcx_send_req_bcs type ref to cx_send_req_bcs,"catch bcs send errors
lcx_address_bcs type ref to cx_address_bcs,"catch bcx address errors
lcx_document_bcs type ref to cx_document_bcs,"catch bcs document error
lcx_os_object_not_found type ref to cx_os_object_not_fou"catch send request errorstry.
call method im_workitem_context->get_headerreceivingre_workitem_header = ls_task_header.
* build the email subjectlv_subject = ls_task_header-wi_text.lv_filename = ls_task_header-wi_text.call method im_workitem_context->get_descriptionimportingex_ascii_text = lt_task_description.
* build email body.loop at lt_task_description into ls_task_description.
* empty blank lines for formattingif ls_task_description-tdformat eq cc_new_paragraphand ls_task_description-tdline is initial.ls_soli-line = cc_line_break.
else.ls_soli-line = ls_task_description-tdline.
endif.append ls_soli to lt_soli.
endloop.if lt_soli[] is not initial.create object lcl_mime.
* build the MIME objectcall method lcl_mime->set_main_htmlexportingcontent = lt_soli
____________________________________________________________________________________
26.02.2013
23:53:14
19
ZCL_FI_LIV_WF_EXITS Release 731 System DE1
______________________________________________________________________________
filename = lv_filenamedescription = lv_subject.
endif.* set subject and mime for email document
try.lcl_docbcs = cl_document_bcs=>create_from_multirelated( i_subject
7/15/2019 Class Zcl Fi Liv Wf Exits
http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 26/37
lv_subjecti_multirel
= lcl_mime ).catch cx_document_bcs into lcx_document_bcs.
* failed to set senderls_msg_struc-msgid = lcx_document_bcs->msgid.ls_msg_struc-msgty = lcx_document_bcs->msgty.ls_msg_struc-msgno = lcx_document_bcs->msgno.ls_msg_struc-msgv1 = lcx_document_bcs->msgv1.call method im_workitem_context->set_message_to_logexportingim_function = 'SEND_REMINDER_EMAIL' "Method Name where e
occuredim_message = ls_msg_struc.
endtry.* create send request
try.lcl_bcs = cl_bcs=>create_persistent( ).
catch cx_send_req_bcs into lcx_send_req_bcs.* failed to set sender
ls_msg_struc-msgid = lcx_send_req_bcs->msgid.ls_msg_struc-msgty = lcx_send_req_bcs->msgty.ls_msg_struc-msgno = lcx_send_req_bcs->msgno.ls_msg_struc-msgv1 = lcx_send_req_bcs->msgv1.call method im_workitem_context->set_message_to_logexportingim_function = 'SEND_REMINDER_EMAIL' "Method Name where e
occuredim_message = ls_msg_struc.
endtry.* bind BCS document to the BCS object
try.lcl_bcs->set_document( i_document = lcl_docbcs ).
catch cx_send_req_bcs into lcx_send_req_bcs.* failed to set document
ls_msg_struc-msgid = lcx_send_req_bcs->msgid.ls_msg_struc-msgty = lcx_send_req_bcs->msgty.ls_msg_struc-msgno = lcx_send_req_bcs->msgno.ls_msg_struc-msgv1 = lcx_send_req_bcs->msgv1.call method im_workitem_context->set_message_to_logexportingim_function = 'SEND_REMINDER_EMAIL' "Method Name where e
occuredim_message = ls_msg_struc.
endtry.* create the sender
call method me->determine_sender
exporting
____________________________________________________________________________________
26.02.2013
23:53:14
20
7/15/2019 Class Zcl Fi Liv Wf Exits
http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 27/37
ZCL_FI_LIV_WF_EXITS Release 731 System DE1______________________________________________________________________________
im_workitem_context = im_workitem_contextimportingex_sender_addr = lv_from_addr.
class cl_cam_address_bcs definition load.try.
lcl_sender ?= cl_cam_address_bcs=>create_internet_address( i_addre= lv_from_addr ).
catch cx_address_bcs into lcx_address_bcs.* failed to create BCS address
ls_msg_struc-msgid = lcx_address_bcs->msgid.ls_msg_struc-msgty = lcx_address_bcs->msgty.ls_msg_struc-msgno = lcx_address_bcs->msgno.ls_msg_struc-msgv1 = lcx_address_bcs->msgv1.
call method im_workitem_context->set_message_to_logexportingim_function = 'SEND_REMINDER_EMAIL' "Method Name where e
occuredim_message = ls_msg_struc.
endtry.* set the BCS sender
try.call method lcl_bcs->set_senderexportingi_sender = lcl_sender.
catch cx_send_req_bcs into lcx_send_req_bcs.* failed to set sender
ls_msg_struc-msgid = lcx_send_req_bcs->msgid.ls_msg_struc-msgty = lcx_send_req_bcs->msgty.ls_msg_struc-msgno = lcx_send_req_bcs->msgno.ls_msg_struc-msgv1 = lcx_send_req_bcs->msgv1.call method im_workitem_context->set_message_to_logexportingim_function = 'SEND_REMINDER_EMAIL' "Method Name where e
occuredim_message = ls_msg_struc.
endtry.* get email reminder list
call method me->get_workflow_containerexportingim_workitem_context = im_workitem_context
im_container_name = cc_email_listimportingex_container_value = lt_email_list
exceptionsset_container_failed = 1others = 2.
if sy-subrc eq 0.* create recipient list
loop at lt_email_list into ls_email_list.* create the recipient
7/15/2019 Class Zcl Fi Liv Wf Exits
http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 28/37
lv_to_addr = ls_email_list-email.try.
lcl_recipient = cl_cam_address_bcs=>create_internet_address(i_address_string = lv_to_addr ).
____________________________________________________________________________________
26.02.2013
23:53:14
21
ZCL_FI_LIV_WF_EXITS Release 731 System DE1______________________________________________________________________________
catch cx_address_bcs into lcx_address_bcs.* failed to create BCS address
ls_msg_struc-msgid = lcx_address_bcs->msgid.ls_msg_struc-msgty = lcx_address_bcs->msgty.ls_msg_struc-msgno = lcx_address_bcs->msgno.ls_msg_struc-msgv1 = lcx_address_bcs->msgv1.call method im_workitem_context->set_message_to_logexportingim_function = 'SEND_REMINDER_EMAIL' "Method Name whe
occuredim_message = ls_msg_struc.
endtry.* add recipient address to BCS
try.lcl_bcs->add_recipient( i_recipient = lcl_recipient ).
catch cx_send_req_bcs into lcx_send_req_bcs.* failed to set recipient
ls_msg_struc-msgid = lcx_send_req_bcs->msgid.ls_msg_struc-msgty = lcx_send_req_bcs->msgty.ls_msg_struc-msgno = lcx_send_req_bcs->msgno.ls_msg_struc-msgv1 = lcx_send_req_bcs->msgv1.call method im_workitem_context->set_message_to_logexportingim_function = 'SEND_REMINDER_EMAIL' "Method Name whe
occuredim_message = ls_msg_struc.
endtry.
clear: ls_email_list,lv_to_addr,lcl_recipient.
endloop.if lv_from_addr is not initial.try.
* send the emailcall method lcl_bcs->send_request->set_requested_statusexportingi_requested_status = cc_reqstat.
7/15/2019 Class Zcl Fi Liv Wf Exits
http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 29/37
catch cx_os_object_not_found into lcx_os_object_not_found.call method lcx_os_object_not_found->if_message~get_textreceivingresult = lv_msg_text.
ls_msg_struc-msgty = cc_msg_error.ls_msg_struc-msgv1 = lv_msg_text.call method im_workitem_context->set_message_to_logexportingim_function = 'SEND_REMINDER_EMAIL' "Method Name whe
occuredim_message = ls_msg_struc.
endtry.try.
lv_sent = lcl_bcs->send( ).catch cx_send_req_bcs into lcx_send_req_bcs.
* failed to send requestls_msg_struc-msgid = lcx_send_req_bcs->msgid.
____________________________________________________________________________________26.02.2013
23:53:14
22
ZCL_FI_LIV_WF_EXITS Release 731 System DE1______________________________________________________________________________
ls_msg_struc-msgty = lcx_send_req_bcs->msgty.ls_msg_struc-msgno = lcx_send_req_bcs->msgno.ls_msg_struc-msgv1 = lcx_send_req_bcs->msgv1.call method im_workitem_context->set_message_to_logexportingim_function = 'SEND_REMINDER_EMAIL' "Method Name whe
occuredim_message = ls_msg_struc.
endtry.commit work.
endif.endif.
catch cx_root into lcx_root.ex_retcode = 1. "all error
endtry.endmethod.
DETERMINE_SENDER Description: Determinethe
sender
Instance mthdImporting
7/15/2019 Class Zcl Fi Liv Wf Exits
http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 30/37
parameterIM_WORKITEM_CONTEXT TYPE REF TO IF_WAPI_WORKITEM_CONTEXT (Context for WorkItem)
Exporting parameterEX_SENDER_ADDR TYPE AD_SMTPADR (E-MailAddress)
method DETERMINE_SENDER.DATA: lv_uname TYPE xubname,
lv_rfcuser TYPE syuname,lv_msg_text TYPE string,ls_email TYPE bapiadsmtp,ls_workitem_header TYPE swr_wihdr,ls_msg_struc TYPE swr_mstruc,lt_dummy_ret TYPE STANDARD TABLE OF bapiret2,lt_email TYPE STANDARD TABLE OF bapiadsmtp,lcx_swf_run_wim_syst_error TYPE REF TO cx_swf_run_wim_syst_error.
* get bath RFC user for workflowTRY.
CALL METHOD cl_swf_run_workflow_properties=>get_rfc_destination_userRECEIVINGre_user = lv_rfcuser.
CATCH cx_swf_run_wim_syst_error INTO lcx_swf_run_wim_syst_error.CALL METHOD lcx_swf_run_wim_syst_error->if_message~get_textRECEIVINGresult = lv_msg_text.
ls_msg_struc-msgty = cc_msg_error.ls_msg_struc-msgv1 = lv_msg_text.CALL METHOD im_workitem_context->set_message_to_logEXPORTINGim_function = 'SEND_REMINDER_EMAIL' "Method Name where errorim_message = ls_msg_struc.
ENDTRY.* get email of work-item creatorlv_uname = lv_rfcuser.
____________________________________________________________________________________
26.02.2013
23:53:14
23
ZCL_FI_LIV_WF_EXITS Release 731 System DE1______________________________________________________________________________
CALL FUNCTION 'BAPI_USER_GET_DETAIL'EXPORTINGusername = lv_uname
TABLESreturn = lt_dummy_ret
7/15/2019 Class Zcl Fi Liv Wf Exits
http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 31/37
addsmtp = lt_email.* return the emailREAD TABLE lt_email INTO ls_emailINDEX 1.IF sy-subrc EQ 0.ex_sender_addr = ls_email-e_mail.
ENDIF.endmethod.
COMPLETE_OTHER_WI_FOR_K EYDescription: complete otherWI
for WFforwarding
Instance mthdImporting parameterIM_WORKITEM_CONTEXT TYPE REF TO IF_WAPI_WORKITEM_CONTEXT (Context for WorkItem)
method COMPLETE_OTHER_WI_FOR_KEY.DATA: lv_fiscal_year TYPE gjahr,
lv_invoice_number TYPE re_belnr,ls_container TYPE swcont,ls_item TYPE swwwihead,lv_this_wi_id TYPE sww_wiid,ls_lpor TYPE sibflporb,lv_retcode TYPE sysubrc,lv_garg TYPE eqegraarg,lt_item_list TYPE STANDARD TABLE OF swwwihead,lt_enqueued TYPE STANDARD TABLE OF seqg3,lt_message TYPE STANDARD TABLE OF swr_messag,lt_container TYPE STANDARD TABLE OF swcont.
* determine invoice numberCALL METHOD me->get_workflow_containerEXPORTINGim_workitem_context = im_workitem_contextim_container_name = cc_container_invoice_num
IMPORTINGex_container_value = lv_invoice_number
EXCEPTIONSset_container_failed = 1OTHERS = 2.
* determine fiscal yearCALL METHOD me->get_workflow_containerEXPORTINGim_workitem_context = im_workitem_context
im_container_name = cc_container_fiscal_yearIMPORTINGex_container_value = lv_fiscal_year
EXCEPTIONSset_container_failed = 1OTHERS = 2.
____________________________________________________________________________________
7/15/2019 Class Zcl Fi Liv Wf Exits
http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 32/37
26.02.2013
23:53:14
24
ZCL_FI_LIV_WF_EXITS Release 731 System DE1______________________________________________________________________________
IF lv_invoice_number IS NOT INITIALAND lv_fiscal_year IS NOT INITIAL.
* build the local persistence instance IDCONCATENATE lv_invoice_number
lv_fiscal_yearINTO ls_lpor-instid.
ls_lpor-typeid = cc_bo_invoice.ls_lpor-catid = cc_bo_category.
* get all WI for this invoiceCALL FUNCTION 'SWI_WORKITEMS_OF_OBJECT_GET'EXPORTINGibf_object = ls_lpor
TABLESitemlist = lt_item_list.
* delete all WI where type is not dialogDELETE lt_item_list WHERE wi_type NE cc_dialog.
* get current WI IDCALL METHOD im_workitem_context->get_workitem_idRECEIVINGre_workitem = lv_this_wi_id.
* remove current WI from WI to be completedDELETE lt_item_list WHERE wi_id = lv_this_wi_id.
* complete all WI where status is startedLOOP AT lt_item_list INTO ls_itemWHERE wi_stat = cc_stat_started.
* unlock work item before completingCONCATENATE sy-mandt
ls_item-wi_idINTO lv_garg.
CALL FUNCTION 'ENQUEUE_READ'EXPORTINGgclient = sy-mandtgname = cc_wiheader_tabgarg = lv_gargguname = sy-uname
TABLESenq = lt_enqueued
EXCEPTIONScommunication_failure = 1system_failure = 2OTHERS = 3.
IF sy-subrc EQ 0 AND lt_enqueued IS NOT INITIAL.* delete enqueued item
CALL FUNCTION 'ENQUE_DELETE'TABLES
7/15/2019 Class Zcl Fi Liv Wf Exits
http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 33/37
enq = lt_enqueued.ENDIF.
* complete the work item by canceling, avoid setting to obsolete as it mstart escalation
CALL FUNCTION 'SAP_WAPI_ADM_WORKFLOW_CANCEL'EXPORTINGworkitem_id = ls_item-wi_iddo_commit = 'X'.
ENDLOOP.
____________________________________________________________________________________
26.02.2013
23:53:14
25
ZCL_FI_LIV_WF_EXITS Release 731 System DE1______________________________________________________________________________
ENDIF.endmethod.
Redefined Methods
Local Types
*"* use this source filefor
any type of declarations(class
*"* definitions, interfaces or type declarations) you need for*"* components in the private sectionLocal classdefinitions*"* use this source filefor
the definitionand
implementationof
*"* local helper classes, interface definitions and type*"* declarations Macros
*"* use this source filefor
any macro definitions youneed
*"* in the implementation part of the class
7/15/2019 Class Zcl Fi Liv Wf Exits
http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 34/37
____________________________________________________________________________________
26.02.2013
23:53:14
26
ZCL_FI_LIV_WF_EXITS Release 731 System DE1______________________________________________________________________________
Overview
Attributes 1
Attributes 1Privateattribute
1
Methods
3
Privatemethods
3
7/15/2019 Class Zcl Fi Liv Wf Exits
http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 35/37
BUILD_WF_EMAIL_LIST 3FINALIZE_WF_EMAIL_LIST 4CHANGE_DEADLINE 6CHECK_DATE_IS_WEEKEND 9CHECK_DATE_IS_HOLIDAY 10GET_DEADLINE_PARAMETERS 10CLASSIFY_AGENTS 12BUILD_SUPERIOR_EMAIL 13SET_WORKFLOW_CONTAINER 16GET_WORKFLOW_CONTAINER 16VALIDATE_ACTOR_TASK 18SEND_REMINDER_EMAIL 18DETERMINE_SENDER 23COMPLETE_OTHER_WI_FOR_KEY 24
Redefined Methods 26LocalTypes
26
Local class definitions 26
Macros 26
______________________________________________________________________________26.02.2013
23:53:14
27
Overview
7/15/2019 Class Zcl Fi Liv Wf Exits
http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 36/37
Attributes 1
Attributes 1
Private attribute 1
Methods 3
Private methods 3
BUILD_WF_EMAIL_LIST 3
FINALIZE_WF_EMAIL_LIST 4
CHANGE_DEADLINE 6
CHECK_DATE_IS_WEEKEND 9
CHECK_DATE_IS_HOLIDAY 10
GET_DEADLINE_PARAMETERS 10
CLASSIFY_AGENTS 12
BUILD_SUPERIOR_EMAIL 13
SET_WORKFLOW_CONTAINER 16
GET_WORKFLOW_CONTAINER 16
VALIDATE_ACTOR_TASK 18
SEND_REMINDER_EMAIL 18
DETERMINE_SENDER 23
COMPLETE_OTHER_WI_FOR_KEY 24
Redefined Methods 26
Local Types 26