class zcl fi liv wf exits

37
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_EXI TS Release 731 System DE1 ____________________________________________________________________________ __ Class: ZCL_FI_LIV_WF_EXITS Status: Active Implemented interfaces IF_SWF_IFS_WORKITEM_EX IT (Workflow Interfaces: Runtime Exit )  Attribut es Description: Class for FI LIV Exi ts Instantiation: Public Final Not released Fixed pt.arithmetic Category: General Object Type Package: ZFSA_FI Original lang.: EN Created by: VEGIB Created on: 07.02.2013  Attribut es Private attribute Attrib. Cat Description Ref. Type Init. value ____________________________________________________________________________ CC_BALANCE_INV Const Balance Invoice Task TYPE STRING 'TS90000026' CC_CONTAINER_EMAIL Const Element ID (32 Characters, Unique, Not Lang TYPE SWFDNAME 'AGENT_EMAIL' CC_STAT_SELECTED Const Processing Status of a Work Item TYPE SWW_WISTAT 'SELECTED' CC_STAT_STARTED Const Processing Status of a Work Item TYPE SWW_WISTAT 'STARTED' CC_UNCLARIFIED Const Fix Unclarified items task TYPE STRING 'TS90000025'

Upload: vbak24

Post on 29-Oct-2015

131 views

Category:

Documents


2 download

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

7/15/2019 Class Zcl Fi Liv Wf Exits

http://slidepdf.com/reader/full/class-zcl-fi-liv-wf-exits 37/37

Local class definitions 26

Macros 26