WF ProgramExists

Kjetil Kilhavn kjetil.kilhavn at bluec.no
Mon Oct 18 05:21:03 EDT 2010


Fredag 15. oktober 2010 09.44.51 skrev Mike Pokraka:
> Hi Rick,
>
> No I haven't played with them, but looks like there's some good stuff
> there. If the forwarding isn't catchable in the WF exit, you could do a
> small enhancement somewhere in the forwarding functionality.

It's been a while since I examined IF_SWF_IFS_WORKITEM in order to find out if 
I could use this interface to log some information in a solution's WF log 
instead of using separate logging tables, but here's my findings about the 
sequence of method invocations anyway - for what it is worth:

WI type     | BC | AR       | C  | BE  | SC    | AE | AA | BR |
---------------------------------------------------------------
W (dialog)  | 1  | 2 (a)    | 3  |     |       |    |    |    |
B (backgr.) |    |          |    | 1   | 2     | 3  |    |    |
            |    |          |    |     | 4,5   |    |    |    |
F (flow)    | 1  | 6,7,8,9, | 2  | 3   | 4,5,  | 10,|    |    |
            |    | 13,14,15,|    |     | 11,12 |    |    |    |
            |    | 16,17    |    |     |       |    |    |    |
---------------------------------------------------------------
(a) Not if no agent is found

BC - BEF_CREAT
AE - AFT_REXEC
C  - CREATED
BE - BEF_EXEC
SC - STATE_CHG
AE - AFT_EXEC
AA - AFT_ASYINV
BR - BEF_REMOVE

Well, as I can recall it was the *sequence* I made a note of, my memory may of 
course be failing ;-)

>
> Cheers,
> Mike
>
> On Thu, October 14, 2010 4:26 pm, Sample, Rick wrote:
> > Mike,
> >
> > That is sort of what I have right now. Pre/Post BG steps on these
> > approval tasks.
> > I have a wee bit of time to play around with these WF Program Exits and
> > determine if I have valid use 'without' over engineering my WF.
> > It looks doable and some simple container ops seem to work... mostly
> > anyway.
> >
> > I am hacking some of the class files in the SWF_TST package. First try
> > was the WF Trace.
> > That did not work. Won't turn on via the class file. Annoying, but got
> > the container ops
> > code and kicking around.
> >
> > You use this functionality?
> >
> > I plan to spend a day or two more and see what I can get out of these
> > class files.
> >
> > As always, thanks for the feedback.
> > Rick
> >
> >> -----Original Message-----
> >> From: sap-wug-bounces at mit.edu [mailto:sap-wug-
> >> bounces at mit.edu] On Behalf Of Mike Pokraka
> >> Sent: Thursday, October 14, 2010 8:03 AM
> >> To: SAP Workflow Users' Group
> >> Subject: RE: WF ProgramExists
> >>
> >> Rick,
> >>
> >> Just a general comment which may not apply, but I find
> >> that I tend to do role resolution separately more often
> >> than not as it avoids most of these conundrums.
> >> To accomplish your scenario I'd use two conditional texts in
> >> my work item and pass in a flag to display one or the other.
> >> It may be possible to catch the forwarding action via a work
> >> item exit (not sure & no time to look into it) and change
> >> the flag in the container - the new text would be displayed
> >> automatically for the new user.
> >>
> >> Cheers,
> >> Mike
> >>
> >> On Thu, October 14, 2010 1:12 pm, Sample, Rick wrote:
> >> > Sorry, dumb question. I know a flag gets set somewhere,
> >>
> >> because of the
> >>
> >> > option
> >> >
> >> > to fail the role if FM failed. "Terminate if Rule Resolution
> >>
> >> has no
> >>
> >> > Result".
> >> >
> >> >
> >> >
> >> > Most WFs we have a 'Fail Back' option. If role fails to find
> >>
> >> next
> >>
> >> > agent in approval,
> >> >
> >> > send back to last agent with a changed TEXT to inform
> >>
> >> user what to do
> >>
> >> > next.
> >> >
> >> > User can manually forward,  whatever...
> >> >
> >> >
> >> >
> >> > What appears to be a better option is to get last agent
> >>
> >> and compare to
> >>
> >> > the current agent.
> >> >
> >> > The event AFT_REXEC "after rule executed", looks like it is
> >>
> >> what I want.
> >>
> >> > Will forward findings if anyone cares...
> >> >
> >> >
> >> >
> >> > Thanks,
> >> >
> >> > Rick
> >> >
> >> >
> >> > From: sap-wug-bounces at mit.edu [mailto:sap-wug-
> >>
> >> bounces at mit.edu] On
> >>
> >> > Behalf Of Steffen Schloenvoigt
> >> > Sent: Thursday, October 14, 2010 4:58 AM
> >> > To: SAP Workflow Users' Group
> >> > Subject: Re: WF ProgramExists
> >> >
> >> > Hmm no, but you could try to use FM
> >>
> >> 'SAP_WAPI_WORKITEM_RECIPIENTS' and
> >>
> >> > check if the result is empty...
> >> >
> >> > Best regards,
> >> > Steffen Schlönvoigt
> >> > 2010/10/13 Sample, Rick
> >>
> >> <Rick.Sample at graybar.com<mailto:Rick.Sample at graybar.c
> >> om>>
> >>
> >> > Update,
> >> > I figured out how to update the WI_TEXT with some code
> >>
> >> in
> >>
> >> > CL_SWL_ADM_COMMAND-WITEXT_CHANGE.
> >> >
> >> > Now, I would like to change this WI_TEXT on failure of the
> >>
> >> role res.
> >>
> >> > Example, if
> >> > role res fails, set the WI_TEXT to "Error, bla bla bla you
> >>
> >> received
> >>
> >> > this because could not find next agent... "
> >> > Right now, I have to execute the role res in a background
> >>
> >> task just to
> >>
> >> > figure out if next agent is found, set the message if not,
> >>
> >> etc. Then,
> >>
> >> > execute the Decision task (which executes the role res
> >>
> >> again) and send
> >>
> >> > to last agent.
> >> >
> >> > Question: Is there a flag in Work Item container that is set
> >>
> >> if role
> >>
> >> > fails?
> >> >
> >> >
> >> >
> >> > From: Sample, Rick
> >> > Sent: Wednesday, October 13, 2010 8:53 AM
> >> > To: SAP Workflow Users' Group
> >> > Subject: WF ProgramExists
> >> >
> >> >
> >> > Hi all,
> >> >
> >> >
> >> >
> >> > I have a need for a WF "Program Exit" to dynamically
> >>
> >> change the Task
> >>
> >> > Text at runtime.
> >> >
> >> >
> >> >
> >> > Currently, if I need to change a task text at runtime, I
> >>
> >> create a
> >>
> >> > container element and
> >> >
> >> > place it in the WI_TEXT. I then have a background task
> >>
> >> determine what
> >>
> >> > the task text should be and
> >> >
> >> > pass it in before the Decision step is executed. Kludgy, but
> >>
> >> it works
> >>
> >> > and fairly simple to understand.
> >> >
> >> >
> >> >
> >> > Now, I want to dynamically change this value using a
> >>
> >> Program Exit.
> >>
> >> > So I added the SAP standard
> >>
> >> CL_SWF_TST_PE_GETDESCRIPTION class to a
> >>
> >> > new task and
> >> >
> >> > it gets the Desc text and sets a container. Fine.
> >> >
> >> > Next, I modified this class to just get/set a Work Item
> >>
> >> container.
> >>
> >> > This also works fine.
> >> >
> >> >
> >> >
> >> > Now, I tried to get this to change the Task Text with this
> >>
> >> new
> >>
> >> > container element but no luck.
> >> >
> >> > This changes the container element, but does not change
> >>
> >> the Work Item
> >>
> >> > text.
> >> >
> >> >
> >> >
> >> > Anyone use these WF program exits?
> >> >
> >> > Any thoughts, examples, assistance is greatly appreciated.
> >> >
> >> >
> >> >
> >> >
> >> >
> >> > ==================================
> >> >
> >> > METHOD change_cont_element.
> >> >
> >> >
> >> >
> >> >   DATA:
> >> >
> >> >    container TYPE REF TO if_swf_cnt_container,
> >> >
> >> >    lh_wihandle TYPE REF TO if_swf_run_wim_internal,
> >> >
> >> >    l_exception TYPE REF TO cx_swf_cnt_container,
> >> >
> >> >    l_wiid TYPE sww_wiid.
> >> >
> >> >
> >> >
> >> >   BREAK-POINT ID zexits.
> >> >
> >> >
> >> >
> >> >   l_wiid = me->m_ctx->get_workitem_id( ).
> >> >
> >> >
> >> >
> >> >   TRY.
> >> >
> >> >       lh_wihandle =
> >>
> >> cl_swf_run_wim_factory=>find_by_wiid( l_wiid ).
> >>
> >> >       container = lh_wihandle->get_wi_container( ).
> >> >
> >> >     CATCH cx_swf_run_wim.
> >> >
> >> >   ENDTRY.
> >> >
> >> >
> >> >
> >> >   TRY.
> >> >
> >> >       CALL METHOD container->element_get
> >> >
> >> >         EXPORTING
> >> >
> >> >           name = 'ZWI_TEXT'.
> >> >
> >> >
> >> >
> >> >       CALL METHOD container->element_set
> >> >
> >> >         EXPORTING
> >> >
> >> >           name             = 'ZWI_TEXT'
> >> >
> >> >           value            = 'New_Text'
> >> >
> >> >         IMPORTING
> >> >
> >> >           exception_return = l_exception.
> >> >
> >> >
> >> >
> >> >     CATCH cx_swf_tst_introspection_error.
> >> >
> >> >     CATCH cx_swf_cnt_container.
> >> >
> >> >   ENDTRY.
> >> >
> >> >
> >> >
> >> > ENDMETHOD.
> >> >
> >> >
> >> >
> >> >
> >> > Rick Sample | SAP Workflow Analyst/Developer
> >> > 11885 Lackland Road | Maryland Heights, MO 63146 |
-- 
Kjetil Kilhavn (+47 40220607)
Blue Consulting AS (http://www.bluec.no)




More information about the SAP-WUG mailing list