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'
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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'
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_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 '' ____________________________________________________________________________ __
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.
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
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.
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.
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
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.
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
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)
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)
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
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.
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.
* 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.
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.
* 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
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.
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.
= 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
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.
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.