Abap Oops Workflow
-
Upload
ganeshkumar-sanur-gopalakrishnan -
Category
Documents
-
view
283 -
download
4
Transcript of Abap Oops Workflow
-
8/12/2019 Abap Oops Workflow
1/45
Referencing BOR objects in ABAP OO classesPosted byJocelyn Dartin SAP Business Workflowon Jul 16, 2007 !""!"0 P#
inS$are
%weet
How do I know I'm ready for this?%$is is nu&ber 7 in a series of blo's on ABAP (( for workflow, so you it would be a really 'ood idea to &ake sureyou $a)e worked t$rou'$ t$e first 6 blo's* %$e e+a&les we-ll use $ere continue on fro& t$ose we used in t$e earlier
blo's* .ere-s t$e list of t$e earlier blo's!
/ettin' started wit$ ABAP (( for Workflow *** usin' t$e W(345(W interface
sin' ABAP (( wit$ Workflow %asks 8sin' ABAP (( &et$ods in Workflow %asks9
3aisin' ABAP (( e)ents for Workflow 83aisin' ABAP (( e)ents for workflow9
sin' ABAP (( attributes in Workflows and %asks 8sin' ABAP (( attributes in workflows and tasks9
sin' functional &et$ods in Workflows and %asks 8 sin' functional &et$ods in workflows and tasks9
Which is better ABAP OO or BOR?:learly ABAP (( is far suerior to B(3 ; &uc$
-
8/12/2019 Abap Oops Workflow
2/45
Added byJocelyn Dart,last edited byJocelyn Darton Nov 20, 2007 (view chane!
show comment
"o to start of metadata
#he basic b$ildin block of all A%A& '' for orkflow classes is the )*+'-*.' interface/ nless yo$ $se
the )*+'-*.' interface in yo$r classes, the workflow system will not reconise yo$r class as s$itable for
creatin workflow tasks, events, accessin attrib$tes, etc/ #he class co$ld be a new or e1istin class/
Note: This applies even to utility classes that implement static methods such as calculating deadlines based on
factory calendars, de-duplicating a list of agents, or an empty background method for forcing a switch to the
workflow system user.
What should I know efore reading further!
)f yo$ve never created an A%A& '' 3lass before yo$ wont learn how to do that here/ So yo$ sho$ld have a look
at the A%A& Development blos and t$torials first, or read an A%A& 'b4ects book/
Adding the IF_WORKFLOW interface to an ABAP "lass
Attachin the )*+'-*.' interface to an A%A& 3lass is simple/ )n the 3lass %$ilder (transaction S526!, o to
the )nterfaces tab and add the )*+'-*.' interface/ As soon as the interface is added, two s$binterfaces
appear8 %)+'%J53# and %)+&5S)S#5N#/
9ove across to the 9ethods tab and yo$ will see some methods of these interfaces have been a$tomatically
inherited to the A%A& 3lass/
http://wiki.scn.sap.com/wiki/display/~jpdtaxvhttp://wiki.scn.sap.com/wiki/display/~jpdtaxvhttp://wiki.scn.sap.com/wiki/display/~jpdtaxvhttp://wiki.scn.sap.com/wiki/display/~jpdtaxvhttp://wiki.scn.sap.com/wiki/display/~jpdtaxvhttp://wiki.scn.sap.com/wiki/display/~jpdtaxvhttp://wiki.scn.sap.com/wiki/pages/diffpages.action?pageId=55567&originalId=347708980http://wiki.scn.sap.com/wiki/display/ABAP/Getting+started+with+ABAP+OO+for+Workflow+...+using+the+IF_WORKFLOW+interface?original_fqdn=wiki.sdn.sap.comhttp://wiki.scn.sap.com/wiki/display/ABAP/Getting+started+with+ABAP+OO+for+Workflow+...+using+the+IF_WORKFLOW+interface?original_fqdn=wiki.sdn.sap.comhttp://wiki.scn.sap.com/wiki/display/ABAP/Getting+started+with+ABAP+OO+for+Workflow+...+using+the+IF_WORKFLOW+interface?original_fqdn=wiki.sdn.sap.com#page-metadata-starthttp://wiki.scn.sap.com/wiki/display/~jpdtaxvhttp://wiki.scn.sap.com/wiki/display/~jpdtaxvhttp://wiki.scn.sap.com/wiki/pages/diffpages.action?pageId=55567&originalId=347708980http://wiki.scn.sap.com/wiki/display/ABAP/Getting+started+with+ABAP+OO+for+Workflow+...+using+the+IF_WORKFLOW+interface?original_fqdn=wiki.sdn.sap.comhttp://wiki.scn.sap.com/wiki/display/ABAP/Getting+started+with+ABAP+OO+for+Workflow+...+using+the+IF_WORKFLOW+interface?original_fqdn=wiki.sdn.sap.com#page-metadata-start -
8/12/2019 Abap Oops Workflow
3/45
What#s the asolute $ini$u$ I need to i$%le$ent fro$ the IF_WORKFLOW interface
for a utilit& class!
'pen each of the methods inherited from the )*+'-*.' interface, and activate the empty so$rce code, then
activate the A%A& 3lass itself/ No, really thats it:
What#s the asolute $ini$u$ I need to i$%le$ent fro$ the IF_WORKFLOW interface
for a class re%resenting a usiness entit&!
'pen each of the methods inherited from the )*+'-*.' interface, and activate the empty so$rce code, then
activate the A%A& 3lass itself/ #hats the easy bit, the ne1t bit is only fractionally harder, b$t re;$ires a little
e1planation/
orkflow $ses the )*+'-*.' interface to enerically and efficiently handle all references to A%A& '' for
orkflow classes/ #here is a special part of this interface called the Local Persistent O'ect Reference, which is
simply a way of convertin from a eneric reference to any ob4ect instance $sed by the workflow system to the
specific instance of yo$r A%A& 3lass and vice versa/
#he instance is made $p of three fields8
"A(I) A two character code indicatin the type of ob4ect/ #his is always
-
8/12/2019 Abap Oops Workflow
4/45
Note: It's a good idea although not essential! to mark the attribute you use to fill the IN"TI# value as the $key
attribute$ in the %lass &ttributes section. This helps other developers to uickly see which attribute uniuely
identifies the instance without having to drill down into method code.
hat happens if the class represents somethin that has a $ni;$e key loner than =2 characters> )n this case yo$
wo$ld $se a "lobally ni;$e )d (")D! to represent yo$r $ni;$e key, and then relate the ")D back to the real
key/ A ")D is $ni;$e thro$ho$t yo$r system for this reason a lot of the latest SA& sol$tions $se ")Ds ratherthan meaninf$l ids as technical ids/ #o create the ")D, yo$ simply call f$nction mod$le ")D+35A#5/ #o
relate the ")D back to the real key, yo$ co$ld either crossreference the ")D in a separate c$stom table, or $se
an append str$ct$re to e1tend an e1istin table to also hold a ")D reference/
)ts convenient to hold the .ocal &ersistent 'b4ect eference val$e in a p$blic, instance attrib$te of yo$r class/
orkflow wont $se the attrib$te directly, b$t holdin it as an attrib$te allows yo$ to efficiently fill it once in the
3onstr$ctor method, and can also be handy for deb$ and testin p$rposes/ ?o$ can call the attrib$te whatever
name yo$ prefer, 4$st make s$re yo$ $se the data type-IBFLPOR/
#o be able to reference a $ni;$e instance of a A%A& 3lass in workflow, yo$ need to $se the .ocal &ersistent
'b4ect eference in the followin two methods inherited from the )*+'-*.' interface/
BI_PERSISTENT~FIND_BY_LPOR
#his is a Static method that is $sed to convert from the .ocal &ersistent 'b4ect eference $sed by workflow to a
$ni;$e instance of the A%A& 3lass/ )ts $sed any time workflow needs to implicitly instantiate the A%A& 3lass, e//when raisin an event/ data8 lv+plant type werks/
move lporinstid(6! to lv+plant/
create ob4ect res$lt #?&5 @3.+&.AN#
e1portin plant lv+plant/
BI_PERSISTENT~LPOR
#his is an )nstance method that converts from the c$rrent instance of the A%A& 3lass to the .ocal &ersistent
'b4ect eference $sed by workflow/ )ts $sed any time the workflow wants to pass a reference to the A%A& 3lass,
e// when handlin an event/
?o$ can either fill in the .ocal &ersistent 'b4ect eference attrib$te here or preferably (as it is then filled once only
per instance! in the 3onstr$ctor method of the class/ B #hese = lines wo$ld normally be in the 3onstr$ctor method
meCm+por3A#)D 3./
meCm+por#?&5)D @3.+&.AN#/
meCm+por)NS#)D meCplant/
)f the = lines above are in the 3onstr$ctor method,
the line below is all yo$ need in the %)+&5S)S#5N#.&' method
res$lt meCm+por/
-
8/12/2019 Abap Oops Workflow
5/45
What else can I use the IF_WORKFLOW interface for!
#he other methods inherited from the )*+'-*.' interface are optional, b$t are $sef$l in certain scenarios/
)ts $p to yo$ to decide whether yo$ want to $se them or not/
BI_PERSISTENT~REFRESH
#his method is $sed when workflow asks to refresh the ob4ect, i/e/ reload database and other stored val$es/ ?o$
can $se it to clear o$t and reread e1istin attrib$tes that were filled in yo$r 3onstr$ctor and 3lass 3onstr$ctor
methods, b$t most of the time its ok to leave this method empty/
BI_OBJECT~DEFAULT_ATTRIBUTE_VALUE
#his method is $sed in workflow inbo1es, s$ch as the niversal orklist, and workflow administration tools to
indicate which $ni;$e instance of the class is bein referenced/ %y defa$lt, whatever val$e is in the )NS#)D field of
the .ocal &ersistent 'b4ect eference will be shown/ )f yo$ want to show a different attrib$te, 4$st add the relevant
code/
*or e1ample, if ) have a class representin an instance of a &lant, then the key miht be &lant )d, b$t ) want to
show the attrib$te
-
8/12/2019 Abap Oops Workflow
6/45
Posted byJocelyn Dartin SAP Business Workflowon Jul 2I, 2006 I!1I!H2 A#
inS$are
%weet
n t$e re)ious blo's of t$is series, talked about w$y we want to use ABAP (( wit$ workflow and $ow to &ake anABAP :lass workflow;ready* %$is blo' deals wit$ usin' a workflow;ready ABAP :lass directly in t$e si&lest tye of
workflow ; a sin'le;ste task*
How do I know if I'm ready for this?f you $a)en-t read t$e first two blo's yet, do t$at now*W$y use ABAP (( wit$ Workflow?
/ettin' started wit$ ABAP (( for Workflow *** usin' t$e W(345(W interfacef you want to try t$e e+ercise in t$is blo' in your own syste&, you will need an ABAP :lass wit$
t$e I#$WOR%#&OWinterface, and a syste&client ESAPCetWea)er 6*20 &ini&u&F wit$ t$e workflow en)iron&entacti)ated* f you aren-t sure if your workflow en)iron&ent is acti)ated, c$eck transaction SWH in your syste& to
-
8/12/2019 Abap Oops Workflow
7/45
%o create a sin'le;ste task, 'o to transaction P#"*$I)* :$oose t$e task tye >%S> EStandard %ask, i*e* a sin'le;ste
taskF and ress t$e :reate button*(n t$e second screen t$e real work be'ins* (n t$e Basic Data tab, 'i)e your task an abbre)iation, na&e, and work ite&te+t ; t$ese are all free te+t fields so enter w$ate)er you like* %$en c$oose (b@ect :ate'ory >ABAP :lass>, enter yourABAP :lass as t$e (b@ect %ye, and your DSP5A &et$od as
#et$od*Note: I% you are in a 2#*3 system and (an't see the 4b&e(t Category (hoi(e 5ABAP Class5 then you %irst need to
exe(ute reportSWF_CATIDto enable 5ABAP Classes5 as an available ob&e(t (ategory# It's already done %or you inreleases 2#13 and higher#
#o)e across to t$e *ontainertab* %$is is t$e workflow data stora'e area ; t$ink of it as t$e e
-
8/12/2019 Abap Oops Workflow
8/45
Sa)e your task, and t$en t$ere-s two t$in's we still need to do before you can test it*
1* ou need to clarify $ow t$e syste& will know w$en t$is task is co&lete* or a dislay task t$is is easy***runnin' t$e &et$od is all we $a)e to do, not$in' $as to be c$an'ed on a database or sync$ronised wit$ anot$er syste&*
So all t$at-s needed is to c$eck t$e fla' )ynchronos object methodbelow t$e #et$od field on t$e Basic Data tab,and sa)e t$e task a'ain*
2* ou need to secify w$o is allowed to e+ecute t$is task* or si&licity-s sake, you can let anyone e+ecute t$e
task by &akin' t$e task a +eneral "ask* ollow t$e &enu at$Additional /ata 6 Agent Assignment 6 ,aintain* Placeyour cursor on t$e task na&e, and ress t$e Attributes*** button* Select t$e +eneral "askradio button, ress enter andSa)e your task a'ain*
inally &ake a note of your task nu&ber and 'o to transaction )W!)to test your task* %ye in your task id E>%S>
followed by t$e task nu&berF and ress nter* ou-ll see t$e i&ort container ele&ents listed below* ou-ll need to fillin w$ic$ lant we want to dislay* Select t$e container ele&ent$WI$Object$Idand t$e local ersistent ob@ect
http://scn.sap.com/servlet/JiveServlet/showImage/38-41944-44777/PFTC_INS4.gifhttp://scn.sap.com/servlet/JiveServlet/showImage/38-41944-44776/PFTC_INS3.gif -
8/12/2019 Abap Oops Workflow
9/45
reference to your class is dislayed below* %ye a )alid lant id into t$e field CS%D, and ress
nter*Cow si&ly ress t$e +ecute button in t$e to left $and corner of t$e screen and you s$ould see t$e lant details
dislayed* %$at-s itK
How do I e,-licitly instantiate an instance in a "ask?5ast ti&e &entioned t$at you can-t call t$e secial &et$od :(CS%3:%(3 directly fro& a task* sually t$at-s not a
roble& for workflow as we would use an e)ent to i&licitly create t$e instance and ass t$at in as we started t$e
workflow*-ll talk about e)ents in t$e ne+t blo', but t$ere are occasions w$en you do want to e+licitly create an instance in aworkflow ste* or e+a&le it can be &ore con)enient to instantiate an ob@ect based on a flat )alue attribute of anot$erob@ect, rat$er t$an risk otentially recursi)e code by &akin' t$e attribute an ob@ect instance itself* (r you &i'$t si&ly
want to take one of t$e standard workflow tracked fields, suc$ as t$e user id t$at e+ecuted a re)ious workflow ste,and 'et &ore details, suc$ as t$e user-s na&e*%$is is also a 'ood c$ance to look at!
http://scn.sap.com/servlet/JiveServlet/showImage/38-41944-44778/SWUS.gifhttp://scn.sap.com/servlet/JiveServlet/showImage/38-41944-44779/SWUS2.gifhttp://scn.sap.com/servlet/JiveServlet/showImage/38-41944-44779/SWUS2.gifhttp://scn.sap.com/servlet/JiveServlet/showImage/38-41944-44778/SWUS.gif -
8/12/2019 Abap Oops Workflow
10/45
sin' &et$od ara&eters wit$ workflow
sin' back'round &et$ods wit$ workflow
Start by creatin' a static, ublic &et$od in your class ; call it *R(A"(I)"A*(* %$e urose of t$is &et$od is to
i&ort a lant id and e+ort an instance of t$e lant class* #ake sure you create a suitable si'nature Ei&orte+ort
ara&etersF for your
&et$od*nside t$e class all you need to do is to call t$e create objectco&&and to create t$e instance* Don-t worry about error
$andlin' at t$is sta'e *** we-ll co)er t$at in a later blo'*"ET-)D /eate2sta/e. TRY. CREATE )34ECT eo_plat2st E,P)RTI#+ plat $2v_plat . CATC- /5_6o_eo . E#DTRY. E#D"ET-)D.
Note: /on't %orget to syntax (he(k a(tivate and test your method works be%ore using it in work%low#
:reate a task wit$ your :3A%CS%AC: &et$od @ust as you did wit$ t$e DSP5A &et$od* ou-ll be asked if
you want to >%ransfer &issin' ele&ents fro& t$e ob@ect &et$od?> ; Answer >yes> and you-ll notice t$at t$e i&ort ande+ort ara&eters of your &et$od are auto&atically added to t$e task container*%$is sort of task is a tec$nical ste t$at is called in back'round by t$e workflow syste&, rat$er t$an bein' e+ecuted bya user, so instead of &akin' t$e task a /eneral %ask, &ark task as a Backgrond -rocessingin t$e +ecution section
of t$e task Ebelow t$e &et$od on t$e Basic Data tabF* Don-t for'et to c$eck t$e fla' )ynchronos object methodandsa)e a'ain as we did for t$e DSP5A task*%est your new task usin' SWS* ill t$e i&ort ara&eter LP5AC% wit$ a lant id, e*'* 1000, t$en ress t$e+ecute function* Because t$e task is e+ecuted in back'round we need to look at t$e workflow lo' to see if it worked*
se t$eWorkflow logbutton dislay t$e work ite&* %$en use &enu at$"xtras 7 Containerto see t$e end result* ous$ould see t$e container ele&ent (P5AC%CS% $as an )alid reference to t$e lant
class*
What abot fnctional methods?unctional &et$ods Ei*e* a &et$od wit$ a 3%3CC/ ara&eterF can be used as abo)e, or you can also use t$e& inworkflow bindingsEt$ink >ara&eter assin'> between different arts of a &ulti;ste workflowF* .owe)er at t$is
http://scn.sap.com/servlet/JiveServlet/showImage/38-41944-44780/createinst.gifhttp://scn.sap.com/servlet/JiveServlet/showImage/38-41944-44781/swus3.gifhttp://scn.sap.com/servlet/JiveServlet/showImage/38-41944-44780/createinst.gif -
8/12/2019 Abap Oops Workflow
11/45
sta'e, you only $a)e a sin'le;ste task to work wit$ so -& 'oin' to lea)e $ow to use functional &et$ods in a bindin'
until later in t$is blo' series by w$ic$ ti&e -ll $a)e e+anded our workflow e+a&le a little furt$er*
How do I call the task from an a--lication?Alt$ou'$ it-s ossible to call a task directly, e*'* usin' standard workflow AP functions suc$as)AP$WAPI$)"AR"$WOR%#&OW, t$at-s not usually t$e best way to tackle t$is )ery co&&on scenario* n'eneral, we call a task by raisin' an e)ent w$ic$ t$en use to tri''er t$e task* So t$e ne+t blo' will be on usin' ABAP(( e)ents as workflow e)ents*
$tt!scn*sa*co&co&&unityb&business;workflowblo'2006072Iusin';aba;oo;
&et$ods;in;workflow;tasks
Why se ABAP OO with Workflow?Posted byJocelyn Dartin SAP Business Workflowon Jun 1M, 2006 11!2H!0 P#
inS$are
%weet%$is is t$e start of a series on $ow to use ABAP (( wit$ workflow*
How do I know this is rele.ant to me?ABAP (( for workflow is a)ailable on any SAP CetWea)er latfor& release 6*20 or abo)e EABAP stack of courseF*%$at includes 3H "*7, ::, and t$e latest )ersions of S:#, S3#, :3#, +3P#, etc* P*S* %$ere are a coule of &inor
restrictions in 6*20 t$at are resol)ed in 6*"0 ; but we-ll deal wit$ t$e& later in t$e series*What's the -roblem with BOR /Bsiness Object Re-ository0?A little SAPWorkflow $istory $ere*** SAP Business Workflow ca&e into bein' in 3H H*0:* Cow for t$ose w$o canre&e&ber back t$at far, t$ere certainly wasn-t any suc$ t$in' as ABAP (( back t$en Eand it wouldn-t be until 3H "*6:t$at ABAP (( was a)ailable in sufficient det$ to suort workflow $andlin'F* So t$e Business (b@ect 3eository
was created as an inter&ediate, )ery aro+i&ate, but at least ob@ect;oriented, solution for SAP Business Workflow*Because it was ne)er intended to be t$e final solution, t$ere was a li&it to $ow far B(3 was 'oin' to 'o*:onse
-
8/12/2019 Abap Oops Workflow
12/45
/eneric (b@ect Ser)ices ; a lot of transactions still link to B(3 ob@ects ; so it can be wort$ referencin' t$e
B(3 ob@ect to kee t$e Workflow ()er)iew feature 'oin'*
B(3 e)ents fro& standard transactions ; a lot of transactions t$at $a)e inbuilt workflow codin' t$at raises
B(3 e)ents ; so it-s still $andy to reference B(3 ob@ects in your ABAP (( classes for t$ese scenarios too*
And of course t$ere-s a fair bit of business content in ro)ided B(3 ob@ects you &i'$t want to reuse*
*oming Attractions111
()er t$e co&in' series we-ll be discussin'1* /ettin' started*** usin' t$e W(345(W interface
2* sin' ABAP (( &et$ods in workflow tasks
H* 3aisin' ABAP (( e)ents for workflow
"* sin' ABAP (( attributes in workflows and tasks
I* sin' functional &et$ods in workflows and tasks
6* 3eferencin' B(3 ob@ects in ABAP (( classes
So t$ere-ll soon be lenty of $el to 'et you 'oin'* n t$e &eanti&e, &ake sure you 'et in)ol)ed in t$e BusinessProcess #ana'e&ent foru&*
+etting started with ABAP OO for Workflow 111 sing
the I#$WOR%#&OW interfacePosted byJocelyn Dartin SAP Business Workflowon Jun 2, 2006 6!01!16 A#
inS$are
%weet%$e basic buildin' block of all ABAP (( for Workflow classes is t$e W(345(W interface* nless you use t$eW(345(W interface in your classes, t$e workflow syste& will not reco'nise your class as suitable for creatin'workflow tasks, e)ents, accessin' attributes, etc* %$e class could be a new or e+istin' class*
Note: -his applies even to utility (lasses that implement stati( methods su(h as (al(ulating deadlines based on %a(tory(alendars de6dupli(ating a list o% agents or an empty ba(kground method %or %or(ing a swit(h to the work%low systemuser#
What shold I know before reading frther?f you-)e ne)er created an ABAP (( :lass before you won-t learn $ow to do t$at $ere* So you s$ould $a)e a look att$e ABAP De)elo&ent blo's and tutorials first, or read an ABAP (b@ects book*
Adding the I#$WOR%#&OW interface to an ABAP *lassAttac$in' t$e W(345(W interface to an ABAP :lass is si&le* n t$e :lass Builder Etransaction S2"F, 'o tot$e nterfaces tab and add t$e W(345(W interface* As soon as t$e interface is added, two sub;interfaces aear!B(BJ:% and BP3SS%C%*
#o)e across to t$e #et$ods tab and you will see so&e &et$ods of t$ese interfaces $a)e been auto&atically in$erited tot$e ABAP
http://scn.sap.com/community/bpm/business-workflow/blog/2006/06/28/getting-started-with-abap-oo-for-workflow-using-the-ifworkflow-interfacehttp://scn.sap.com/community/bpm/business-workflow/blog/2006/06/28/getting-started-with-abap-oo-for-workflow-using-the-ifworkflow-interfacehttp://scn.sap.com/people/jocelyn.darthttp://scn.sap.com/people/jocelyn.darthttp://scn.sap.com/people/jocelyn.darthttp://scn.sap.com/community/bpm/business-workflow/bloghttps://twitter.com/sharehttp://scn.sap.com/servlet/JiveServlet/showImage/38-41912-44721/IF_WORKFLOW.gifhttp://scn.sap.com/community/bpm/business-workflow/blog/2006/06/28/getting-started-with-abap-oo-for-workflow-using-the-ifworkflow-interfacehttp://scn.sap.com/community/bpm/business-workflow/blog/2006/06/28/getting-started-with-abap-oo-for-workflow-using-the-ifworkflow-interfacehttp://scn.sap.com/people/jocelyn.darthttp://scn.sap.com/community/bpm/business-workflow/bloghttps://twitter.com/share -
8/12/2019 Abap Oops Workflow
13/45
:lass*
What's the absolte minimm I need to im-lement from the I#$WOR%#&OW interface for a tility
class?(en eac$ of t$e &et$ods in$erited fro& t$e W(345(W interface, and acti)ate t$e e&ty source code, t$en
acti)ate t$e ABAP :lass itself* Co, really ; t$at-s itKWhat's the absolte minimm I need to im-lement from the I#$WOR%#&OW interface for a class
re-resenting a bsiness entity?(en eac$ of t$e &et$ods in$erited fro& t$e W(345(W interface, and acti)ate t$e e&ty source code, t$enacti)ate t$e ABAP :lass itself* %$at-s t$e easy bit, t$e ne+t bit is only fractionally $arder, but re:5> for ABAP :lasses* -ll
e+lain about ot$er )alues in a future blo' on referencin' B(3 ob@ects*
"3P(I2; %$is $olds t$e tec$nical na&e of t$e ABAP :lass*
I)"I2; %$is is a H2 c$aracter field $oldin' t$e uni
-
8/12/2019 Abap Oops Workflow
14/45
tye )IB#&POR*
%o be able to reference a uni These ? l2es wold omally 6e 2 the Cost/to method me!&m_po!CATID $*CL*. me!&m_po!TYPEID $ * I@ the ?l2es a6ove ae 2 the Cost/to method > the l2e 6elow 2s all yo eed 2the 3I_PERSISTE#TBLP)R method eslt $ me!&m_po.
What else can I se the I#$WOR%#&OW interface for?%$e ot$er &et$ods in$erited fro& t$e W(345(W interface are otional, but are useful in certain scenarios* t-su to you to decide w$et$er you want to use t$e& or not*
BI_P%&SIST%'T&%F&%S+%$is &et$od is used w$en workflow asks to refres$ t$e ob@ect, i*e* reload database and ot$er stored )alues* ou can use
it to clear out and re;read e+istin' attributes t$at were filled in your :onstructor and :lass :onstructor &et$ods, but&ost of t$e ti&e it-s ok to lea)e t$is &et$od e&ty*
BI_OB,%CTD%FA-*T_ATT&IB-T%_.A*-%%$is &et$od is used in workflow inbo+es, suc$ as t$e ni)ersal Worklist, and workflow ad&inistration tools to
indicate w$ic$ uni
-
8/12/2019 Abap Oops Workflow
15/45
Raising ABAP OO e.ents for workflow
How do I know I'm ready for this?
asy *** did you read t$e first H blo's and create t$e e+a&les &entioned in blo's 2 and H? f not, $ere are t$e links***
hy $se A%A& '' with orkflow>"ettin started with A%A& '' for orkflow /// $sin the )*+'-*.' interfacesin A%A& '' methods in orkflow #asks
f you want to try t$e e+ercise in t$is blo' in your own syste&, you will need an ABAP :lass wit$
t$e I#$WOR%#&OWinterface, and a syste&client ESAPCetWea)er 6*20 &ini&u&F wit$ t$e workflow en)iron&ent
acti)ated* ou also need to $a)e created t$e >Dislay Plant> workflow task &entioned in blo' nu&ber H*
NCote! As &entioned in t$e last blo', t$is blo' won-t teac$ you ABAP ((* t won-t teac$ you workflow eit$er, but it
s$ould 'i)e you enou'$ to 'et 'oin' e)en if you-)e ne)er touc$ed workflow before* N2efining an ABAP OO (.ent for Workflow
Definin an A%A& '' 5vent for orkflow is the same as definin any other event for A%A& ''/ #o start
4$st o to transaction S526, enter yo$r class in edit mode, and o to the 5vents tab/ "ive yo$r event atechnical name and make s$re it is a Pblicevent/
:ontinuin' wit$ t$e G:5P5AC% class e+a&le, $ere-s an e+a&le e)ent S%LS%P3(P(SD*
ou can also define e)ent ara&eters if you wis$ by selectin' t$e Parametersbutton* By definition all e)ent
ara&eters are (,-ortingara&eters, i*e* t$ey are e+orted wit$ t$e e)ent w$en t$e e)ent is raised*
sually $owe)er you don-t need to create any e)ent ara&eters, as t$e standard Workflow e)ent container Ere&e&ber
t$at-s workflow-s na&e for a data areaF adds sufficient standard ara&eters, suc$ as t$e user w$o raised t$e e)ent, and a
local ersistent ob@ect reference to t$e ABAP (( class Eof course you know all about t$at because you-)e read t$e
re)ious blo'sF* (f course, you won-t see t$e standard Workflow e)ent container in your class ; you-ll only see it in t$e
Workflow screens*
.ere-s an e)ent ara&eter P3(P(SDLS%DA% for t$e e)ent S%LS%P3(P(SD* -)e &ade t$e
ara&eterO-tionalso t$at later we can look at $ow to raise an e)ent wit$ or wit$out ara&eters*
http://scn.sap.com/community/bpm/business-workflow/blog/2006/07/27/raising-abap-oo-events-for-workflowhttp://scn.sap.com/community/bpm/business-workflow/blog/2006/06/19/why-use-abap-oo-with-workflowhttp://scn.sap.com/community/bpm/business-workflow/blog/2006/06/28/getting-started-with-abap-oo-for-workflow-using-the-ifworkflow-interfacehttp://scn.sap.com/community/bpm/business-workflow/blog/2006/07/25/using-abap-oo-methods-in-workflow-taskshttp://scn.sap.com/community/bpm/business-workflow/blog/2006/07/25/using-abap-oo-methods-in-workflow-taskshttp://scn.sap.com/servlet/JiveServlet/showImage/38-42061-45013/eventdef.gifhttp://scn.sap.com/servlet/JiveServlet/showImage/38-42061-45013/eventdef.gifhttp://scn.sap.com/community/bpm/business-workflow/blog/2006/07/27/raising-abap-oo-events-for-workflowhttp://scn.sap.com/community/bpm/business-workflow/blog/2006/06/19/why-use-abap-oo-with-workflowhttp://scn.sap.com/community/bpm/business-workflow/blog/2006/06/28/getting-started-with-abap-oo-for-workflow-using-the-ifworkflow-interfacehttp://scn.sap.com/community/bpm/business-workflow/blog/2006/07/25/using-abap-oo-methods-in-workflow-tasks -
8/12/2019 Abap Oops Workflow
16/45
Tip( #on't forget to activate your class afterwards.
!sing an ABAP OO (.ent in Workflow
or anyone w$o-s usin' Business (b@ect )ents wit$ Workflow, you use ABAP (( )ents in e+actly t$e sa&e way*
%$e only real difference is you secify cate'ory ABAP *lassinstead of Business (b@ect* or t$ose w$o $a)en-t done
&uc$ wit$ e)ents before, in Workflow an e)ent can be used to!
1*
2* %ri''er a &ulti;ste workflow
H*
"* %er&inate a &ulti;ste workflow
I*
6* Perfor& secial functions on a &ulti;ste workflow, e*'* re;e)aluate a'ents of acti)e work ite&s,
cancel and restart wit$ sa&e data
7*
* %ri''er a sin'le workflow task
M*
10* %er&inate a sin'le workflow task
11*
NCote! %$e last otion ; ter&inate a sin'le workflow task ; is articularly useful for async$ronous scenarios* or
e+a&le if you $ad a task Eit could be back'round or dialo' ; i*e* in)ol)in' a userF t$at kicked off a database udate in
back'round, and t$en let t$e raisin' of an e)ent confir& t$at t$e c$an'e $ad been co&&itted to t$e database* f you did
t$is of course you would lea)e t$e )ynchronos object methodfla' off in your back'round task Et$is fla' was
&entioned in blo' nu&ber HF* N
%ri''erin' a sin'le workflow task wit$ an e)ent isn-t a )ery co&&on ractice, si&ly because &ost workflows in)ol)e
&ore t$an one ste* So usually we want to tri''er a &ulti;ste workflow t$at reresents a w$ole business rocess* So
let-s e+and our e+a&le to a &ulti;ste workflow tri''ered by an e)ent*
Start by callin' transaction SWDD, t$e Workflow Builder*
Press t$e *reate ew Workflowbutton ; t$e to;left $and button i&&ediately under t$e te+t >Workflow Builder>*
http://scn.sap.com/servlet/JiveServlet/showImage/38-42061-45014/eventparam2.gif -
8/12/2019 Abap Oops Workflow
17/45
%$en before you 'o any furt$er, sa)e your new e&ty workflow* ou-ll be asked to 'i)e it an abbre)iation and a na&e
; t$ese are free te+t and are &ainly used w$en searc$in' for your workflow* Just like our task or an ABAP :lass, you-ll
need to add it to a c$an'e reDislay Plant> task in it* So to do
t$at, eit$er sin'le;click on t$e !ndefinedste in eit$er t$e Ca)i'ation area or double;click on t$e ndefined ste icon
in t$e center /ra$ical #odel editin' area* Select t$e ste tye Acti.ityand continue on to t$e ne+t screen*
%$e )ery first field in t$e *ontroltab asks for a task id* Searc$ for your >Dislay Plant> task by usin' t$e searc$ $el
on t$e %ask field* ou can searc$ for all tasks t$at are based on your ABAP :lass*
http://scn.sap.com/servlet/JiveServlet/showImage/38-42061-45016/swdd1.gifhttp://scn.sap.com/servlet/JiveServlet/showImage/38-42061-45017/swd2.gifhttp://scn.sap.com/servlet/JiveServlet/showImage/38-42061-45016/swdd1.gifhttp://scn.sap.com/servlet/JiveServlet/showImage/38-42061-45015/swdd.gif -
8/12/2019 Abap Oops Workflow
18/45
All we need to do now is no&inate w$o s$ould erfor& t$is ste of our business rocess* %o kee it si&le for our
e+a&le, @ust &ake t$e workflow initiator, i*e* t$e erson w$o started t$e rocess, t$e Agentof t$e ste* n t$e A'ents
section, dro down t$e +ression field to c$oose t$e Workflow initiator*
FNote8 s$ally we want to calc$late whos oin to do the work $sin an aent determination r$le b$t this is
4$st an e1ample after all/ F
&ress the reen check icon "ransfer and to gra-hicto ret$rn to the raphical flowchart view/ ?o$ can saveyo$r workflow aain at this point if yo$ wish/
We are 'oin' to start our workflow wit$ an e)ent and ass in our G:5P5AC% reference fro& t$e e)ent, so we need to
allow t$e new G:5P5AC% container ele&ent to be i&orted* (n t$e left $and side, under t$e Ca)i'ation area, use t$e
drodown to swa t$e botto& left $and area to t$e Workflow *ontainerdislay* Double;click on t$e new
G:5P5AC% container ele&ent, and on t$e Pro-ertiestab c$eck t$e Im-ortfla'*
http://scn.sap.com/servlet/JiveServlet/showImage/38-42061-45019/swd4.gifhttp://scn.sap.com/servlet/JiveServlet/showImage/38-42061-45018/swd3.gif -
8/12/2019 Abap Oops Workflow
19/45
So $a)in' co&leted our &ini $ow;to;create;a;workflow e+ercise we now want to add t$e S%LS%P3(P(SD
e)ent as t$e tri''erin' e)ent of t$e workflow* At t$e to of t$e screen ress t$e Basic 2ata$at icon* (n t$e 4ersion5
Inde-endenttab, c$oose t$e sub;tab )tart (.ents* Add a row and enter cate'ory *&, t$en (b@ect %ye O your ABAP
:lass, and t$en )ent of t$e ob@ect O S%LS%P3(P(SD*
F#ip: )ts a ood idea to $se the dropdown help for all of these fields to avoid typin errors/ F
ou can see t$e e)ent row starts wit$ an A, B, and : colu&ns* B stands for Binding*
We need to create t$e bindin' E&ain'F between t$e e)ent container and t$e workflow container to ass across t$e
instance of our ABAP :lass and t$e erson w$o raised t$e e)ent* Just click on t$e Bindin' icon and t$e bindin' will be
'enerated for you*
http://scn.sap.com/servlet/JiveServlet/showImage/38-42061-45021/swd5.gifhttp://scn.sap.com/servlet/JiveServlet/showImage/38-42061-45021/swd5.gifhttp://scn.sap.com/servlet/JiveServlet/showImage/38-42061-45020/swd6.gif -
8/12/2019 Abap Oops Workflow
20/45
3e&e&ber t$e A, B, and : colu&ns? A stands for Acti.ate* :lick on t$e acti)ate icon until t$e e)ent acti)ation icon
turns 'reen* Cow use t$e back arrow icon to return to t$e 'ra$ical flowc$art dislay and use t$e Acti)ate Elit &atc$F
icon at t$e to of t$e screen to acti)ate t$e workflow* :$eck t$e status of your workflow is Acti.e6 )a.edin
t$eInformation Areain t$e to left $and window ane*
So now yo$ have a workflow thats linked to a trierin event of yo$r A%A& 3lass: )f yo$ want to test it,$se transaction S5 to enerate the event, or 4$st wait $ntil yo$ have completed the ne1t section onraisin events/ ?o$ sho$ld see a new
-
8/12/2019 Abap Oops Workflow
21/45
"* RAI)($I$!P2A"($"A)%; for raisin' an e)ent in t$e udate task of a 5o'ical nit of Work
I*
.ere-s so&e e+a&le code to raise our S%LS%P3(P(SD e)ent usin' t$e 3AS &et$od ; wit$out any
ara&eters*DA#A8 ls+Gcl+plant+key #?&5 werks,
lv+ob4type #?&5 sibftypeid, lv+event #?&5 sibfevent, lv+ob4key #?&5 sibfinstid/
lv+ob4type @3.+&.AN#/ lv+event S)#5+H)S)#+&'&'S5D/
Set u t$e 5P(3 instance id
ls+Gcl+plant+keywerks I000/ 9'H5 ls+Gcl+plant+key #' lv+ob4key/
3aise t$e e)ent
#?/ 3A.. 95#E'D cl+swf+evt+eventCraise 5&'#)N" im+ob4cate cl+swf+evt+eventCmc+ob4cate+cl im+ob4type lv+ob4type im+event lv+eventim+ob4key lv+ob4key
#LC%:(C%AC3 O
/ 3A#3E c1+swf+evt+invalid+ob4type / 3A#3E c1+swf+evt+invalid+event / 5ND#?/
3'99)# '-/
Tip( )ust as for *usiness +bect events, the b%+//IT 0+123b statement is crucial when raising a0orkflow event - without this the event will not be raised.
:$eck t$e e)ent was raised correctly by turnin' on t$e e)ent lo' Eusin' transaction SW5SF, and e+ecutin' t$e e)ent
lo'* f your e)ent was raised correctly you s$ould $a)e a new line in t$e e)ent lo' t$at looks so&et$in' like t$is!
%$e 'reen li'$t icon s$ows t$at a workflow was started as a result of t$is e)ent*
%$e abo)e code is fine for &ost e)ents t$at @ust use t$e standard Workflow e)ent container and $a)e no secific
ara&eters* (f course if you want to ass secific ara&eters you need a little e+tra code to!
nstantiate an e&ty e)ent container
Add your e)ent ara&eter na&e)alue airs to t$e e)ent container
3aise t$e e)ent assin' t$e reared e)ent container
http://scn.sap.com/servlet/JiveServlet/showImage/38-42061-45023/evtlog.gifhttp://scn.sap.com/servlet/JiveServlet/showImage/38-42061-45023/evtlog.gif -
8/12/2019 Abap Oops Workflow
22/45
FNote8 ?o$ dont need to worry abo$t fillin any of the standard event container parameters s$ch as theevent creator orkflow will do that as part of raisin the event/ F
DA#A8 ls+Gcl+plant+key #?&5 werks,
lv+ob4type #?&5 sibftypeid, lv+event #?&5 sibfevent, lv+ob4key #?&5 sibfinstid,
lr+event+parameters #?&5 5* #' if+swf+ifs+parameter+container, lv+param+name #?&5
swfdname,
lv+visit+date #?&5 dat$m/
lv+ob4type @3.+&.AN#/ lv+event S)#5+H)S)#+&'&'S5D/
1* Set u t$e 5P(3 instance idls+Gcl+plant+keywerks I000/ 9'H5 ls+Gcl+plant+key #' lv+ob4key/
1* nstantiate an e&ty e)ent container
3A.. 95#E'D cl+swf+evt+eventCet+event+container 5&'#)N" im+ob4cate cl+swf+evt+eventCmc+ob4cate+cl im+ob4type lv+ob4type im+event lv+event 535)H)N"re+reference lr+event+parameters/
1* Set u t$e na&e)alue air to be added to t$e container lv+param+name &'&'S5D+H)S)#+DA#5/ lv+visit+date sydat$m F 7/
1* Add t$e na&e)alue air to t$e e)ent conainer
#?/ 3A.. 95#E'D lr+event+parametersCset 5&'#)N" name lv+param+nameval$e lv+visit+date
1* C% O
2* #P(3%C/
H* 3%3C:(D O
/ 3A#3E c1+swf+cnt+cont+access+denied / 3A#3E c1+swf+cnt+elem+access+denied / 3A#3Ec1+swf+cnt+elem+not+fo$nd / 3A#3E c1+swf+cnt+elem+type+conflict / 3A#3Ec1+swf+cnt+$nit+type+conflict / 3A#3E c1+swf+cnt+elem+def+invalid / 3A#3Ec1+swf+cnt+container / 5ND#?/
1* 3aise t$e e)ent assin' t$e reared e)ent container
#?/ 3A.. 95#E'D cl+swf+evt+eventCraise 5&'#)N" im+ob4cate cl+swf+evt+eventCmc+ob4cate+cl im+ob4type lv+ob4type im+event lv+eventim+ob4key lv+ob4key im+event+container lr+event+parameters/ 3A#3Ec1+swf+evt+invalid+ob4type / 3A#3E c1+swf+evt+invalid+event / 5ND#?/
3'99)# '-/
f you want to c$eck t$at your roosed )isit date was assed to t$e workflow, you-ll need to create a new workflow
container ele&ent to $old t$e roosed )isit date, ad@ust t$e e)ent to workflow bindin', and re;acti)ate your workflow
before testin' it*
-
8/12/2019 Abap Oops Workflow
23/45
What abot *onfigration o-tions for Workflow (.ents?
%$ose of you w$o are fa&iliar wit$ Business (b@ect e)ents in 3H and :: are also aware t$at often no code at all is
needed in t$ese syste&s to raise an e)ent for Workflow ; you @ust need to co&lete t$e confi'uration in one of t$e
&any e)ent confi'uration tables* %$ese tables are ro)ided by &any different &odules wit$in t$e alication, suc$ as
.3, SD &essa'e control, status &ana'e&ent, and c$an'e docu&ents* As of ::6, &ost of t$ese confi'uration tables
unfortunately do not yet suort ABAP (( e)ents )ia confi'uration, wit$ one notable e+cetion ; c$an'e docu&ents*
n transaction SW:, c$an'e docu&ent e)ent confi'uration, you can secify t$e ob@ect cate'ory ABAP *lassw$en
secifyin' an e)ent* %$e only difficulty you &ay $a)e is &atc$in' t$e key of t$e c$an'e docu&ent to t$e key of your
ABAP :lass* ou can o)erco&e t$is con)ersion issue by codin' your own con)ersion routine as a function &odule*
%$is function &odule can be called any )alid na&e Ewit$in t$e custo&er na&esaceF but &ust $a)e t$e sa&e interface
as t$e te&late function &odule )W($*2$"(7P&A"($OB8%(3$#B$9 * All you $a)e to do in t$is function
&odule is use t$e data in t$e c$an'e docu&ent $eaderite&s to build t$e local ersistent ob@ect reference for your
workflow;ready ABAP :lass*
ou t$en add t$e function &odule to t$e #nction modlefield in t$e rele)ant row of transaction SWD ; w$ic$
defines t$e c$an'e docu&ent ob@ect relations$i to an ob@ect tye*
.oefully so&e of t$e ot$er confi'uration otions will catc$ u soon and allow for ABAP (( e)ent confi'uration
also*
Where to now?
#he ne1t blo will look at fleshin o$t o$r workflow by $sin A%A& '' attrib$tes to add meaninf$l te1t,descriptions, and additional parameters to each part of o$r workflow/
$tt!scn*sa*co&co&&unityb&business;workflowblo'20060727raisin';aba;oo;
e)ents;for;workflow
!sing ABAP OO attribtes in workflows and tasks
ow do I know I#$ read& for this!
#his is n$mber K in a series of blos on A%A& '' for workflow, so yo$ it wo$ld be a really ood idea to
make s$re yo$ have worked thro$h the first 6 blos/ #he e1amples well $se here contin$e on from those
we $sed in the earlier blos/
Eeres the list of the earlier blos8
1* W$y use ABAP (( wit$ Workflow?
2* /ettin' started wit$ ABAP (( for Workflow *** usin' t$e W(345(W interface
H* sin' ABAP (( &et$ods in Workflow %asks
"* 3aisin' ABAP (( e)ents for workflow
A little ackground histor& for those who know BOR
.%&) +%*PF-* TIP1 )f yo$ are an A%A& '' prorammer and never did any code in the %$siness 'b4ect
epository, skip this section/// yo$ dont need to know abo$t it, and yo$ probably dont want to know either/
'nce $pon a time, in the land of %' (%$siness 'b4ect epository!, there were = types of attrib$tes8
1* Database attributes
http://scn.sap.com/community/bpm/business-workflow/blog/2006/07/27/raising-abap-oo-events-for-workflowhttp://scn.sap.com/community/bpm/business-workflow/blog/2006/07/27/raising-abap-oo-events-for-workflowhttp://scn.sap.com/community/bpm/business-workflow/blog/2006/08/21/using-abap-oo-attributes-in-workflows-and-taskshttp://scn.sap.com/community/bpm/business-workflow/blog/2006/06/19/why-use-abap-oo-with-workflowhttp://scn.sap.com/community/bpm/business-workflow/blog/2006/06/28/getting-started-with-abap-oo-for-workflow-using-the-ifworkflow-interfacehttp://scn.sap.com/community/bpm/business-workflow/blog/2006/07/25/using-abap-oo-methods-in-workflow-taskshttp://scn.sap.com/community/bpm/business-workflow/blog/2006/07/27/raising-abap-oo-events-for-workflowhttp://scn.sap.com/community/bpm/business-workflow/blog/2006/07/27/raising-abap-oo-events-for-workflowhttp://scn.sap.com/community/bpm/business-workflow/blog/2006/07/27/raising-abap-oo-events-for-workflowhttp://scn.sap.com/community/bpm/business-workflow/blog/2006/08/21/using-abap-oo-attributes-in-workflows-and-taskshttp://scn.sap.com/community/bpm/business-workflow/blog/2006/06/19/why-use-abap-oo-with-workflowhttp://scn.sap.com/community/bpm/business-workflow/blog/2006/06/28/getting-started-with-abap-oo-for-workflow-using-the-ifworkflow-interfacehttp://scn.sap.com/community/bpm/business-workflow/blog/2006/07/25/using-abap-oo-methods-in-workflow-taskshttp://scn.sap.com/community/bpm/business-workflow/blog/2006/07/27/raising-abap-oo-events-for-workflow -
8/12/2019 Abap Oops Workflow
24/45
2* Lirtual attributes
H* Status attributes
2atabase attribteswere always the easiest of attrib$tes 4$st say what table and field yo$ want to read and
the %' wo$ld enerate some code to read all the data from a record of the table/ ?o$ 4$st had to fill in the
blanks/ #hen yo$ co$ld add other database attrib$tes referrin to the same table and they wo$ld all $se the
same preenerated code/ 5asy for workflow devlopers, b$t not always the most efficient way to read code,
as yo$ may only be $sin one or two fields b$t yo$ still read the entire table row/
4irtal attribteswere the most $sef$l type of attrib$te as yo$ co$ld derive anythin here incl$din comple1
val$es, str$ct$res, tables, and instances of other ob4ects/
)tats attribteswere a neat trick for b$siness ob4ects that $sed SA& stat$s manaement, b$t most
prorammers didnt even know they e1isted/ %y $sin a special interface, and fillin in the code behind a few
predefined virt$al attrib$tes, yo$ co$ld then enerate a yesLno fla to indicate if a partic$lar stat$s of that
ob4ect was active/
)n A%A& '' we no loner make the distinctions between these different types of attrib$tes/ So what do yo$
lose> No more preenerated code/ And what do yo$ ain> *le1ibility and control over how yo$r attrib$tes
are coded so that yo$ can make the code as performanceefficient as possible/
Tp1 antin to find whether a stat$s attrib$te is set or not> J$st call f$nction mod$leS#A#S+'%J53#+5AD with the stat$s ob4ect n$mber/ All the stat$ses set for that ob4ect will be ret$rned/
ow do I define ABAP OO attriutes for workflow!
Simple 4$st define them on the attrib$tes tab of the A%A& '' 3lass/ ?o$ need to specify8
Attribute id
nstance or Static or :onstant
Data tye
Dont foret to make the attrib$tes Pblicso they can be $sed by workflow/ ?o$ can also specify a
description and an initial val$e if yo$ wish/ )n the e1ample below a n$mber of attrib$tes have been added to
the @3.+&.AN# class we have been $sin in the previo$s blos to ive yo$ an idea/
+nt1 )f yo$ dont want o$tside prorams to be able to chane yo$r attrib$te its also a ood idea to mark it
as Read Only/ ) like to do this for safetys sake/
"an I ha/e attriutes that are structures or tales!
'f co$rse the data type of yo$r attrib$te 4$st needs to be a str$ct$re or table type/ #heres no restriction on
the comple1ity of the str$ct$re or table and in SA& Neteaver M/20 and above, bein able to handle
components of str$ct$res and tables in workflow is m$ch easier especially d$rin bindin (parameter
passin!/
http://scn.sap.com/servlet/JiveServlet/showImage/38-42160-45219/attributes.gif -
8/12/2019 Abap Oops Workflow
25/45
"an I ha/e attriutes that are o'ects the$sel/es!
'f co$rse the data type of yo$r attrib$te 4$st needs to be a #?&5 5* #' the appropriate A%A& '' class/
?o$ can then refer to attrib$tes of ob4ects that are attrib$tes of another ob4ect/ hile theres no set limit on
how many levels down yo$ can o, most workflow developers dont like to delve too deep beca$se the
technical ids become very lon and $nwieldy/ As a eneral practice if ) want to o down f$rther levels, )
$s$ally create a workflow container element for the ob4ect reference, then $se a *ontainer O-erationstep (a
simple assinment step which behaves somethin like an A%A& 9'H5 command! to assin the attrib$te
whichisanob4ectreference to the container element at r$ntime/ ) can then easily refer to attrib$tes of the
container element in s$bse;$ent steps of the workflow/
"an I ha/e attriutes that are BOR o'ects the$sel/es!
'f co$rse b$t this is a little more involved so its a separate blo topic for later in this blo series/
-o where do I %ut the attriute code!
#his is very straihtforward/ As a r$le of th$mb yo$ p$t the attrib$te code of instance attrib$tes in the
3'NS#3#' method, and the attrib$te code of static attrib$tes in the 3.ASS+3'NS#3#'
method/ .ike this8
"ET-)D /ost/to . > '2ll2= o 7ey att26te @om a paamete > as we d2d
2 the pev2os 6lo=s me!&plat $ 2v_plat. > #ow add some /ode to spply
vales to othe att26tes SELECT SI#+LE > 'R)" T001W I#T) me!&T001W W-EREWER%S $ 2v_plat. /ate=oy $ me!&T001w!vl@7. des/2pt2o $ me!&T001w!ame1.
C)#CATE#ATE me!&plat me!&des/2pt2o I#T) me!&lo=des/. E#D"ET-)D.
)f yo$ dont want to $se the 3'NS#3#' or 3.ASS+3'NS#3#' method thats ok/ ?o$ can
always code a separate &$blic method to derive yo$r attrib$tes, b$t it does mean yo$ add the overhead of
callin that method (as a backro$nd task! prior to $sin the derived attrib$tes in yo$r workflow/ ) dont
personally recommend this approach in M/60 or above, b$t in M/20 its a way of ettin aro$nd the lack of
f$nctional methods (more on these later!/
"i-: 3o can also se -ri.ate methods as a way of modlari;ing code within yor *O)"R!*"OR or
*&A))$*O)"R!*"OR method1
0sing ABAP OO attriutes in tasks
*or the sake of those of yo$ who dont do a lot of workflow, before yo$ $se an attrib$te of an ob4ect, yo$
m$st first have an ob4ect reference in the container (i/e/ the data area of yo$r task!/ 'ften the ob4ect
reference is created a$tomatically for yo$, e// an ob4ect reference with techncial id +)+'b4ectid is
a$tomatically created when yo$ assin yo$r A%A& '' 3lass to the task on the %asic Data tab/
?o$ can also create yo$r own additional ob4ect references in the container ;$ite easily/ "o to transaction
&*#3+3E", open yo$r
-
8/12/2019 Abap Oops Workflow
26/45
?o$ can $se an attrib$te in the Work item te,ton the Basic 2atatab/ J$st position yo$r c$rsor where yo$
want the attrib$te to be inserted, press the Insert 4ariablesb$tton 4$st abo$t the work item te1t, and $se the
e1pression help to e1pand and click on the appropriate attrib$te/ ?o$ can see the e1pression help below/
?o$ see below why it is important to $se the e1pression help as the attrib$te needs to be ret$rned in a
specific format/
http://scn.sap.com/servlet/JiveServlet/showImage/38-42160-45221/attributes_selectexp.gifhttp://scn.sap.com/servlet/JiveServlet/showImage/38-42160-45220/attributes_container.gif -
8/12/2019 Abap Oops Workflow
27/45
'f co$rse it only makes sense to $se simple val$e attrib$tes here as yo$ only have abo$t K070 characters
of te1t that will show as the s$b4ect line of yo$r work item in the inbo1 (dependin on which inbo1 yo$ $se!/?o$ can also $se attrib$tes in the &ong te,tof yo$r work item/ "o to the 2escri-tiontab, make s$re "ask
2escri-tionis selected and press the *hange 2escri-tionb$tton/ &osition yo$r c$rsor where yo$ want the
attrib$te to o/ se the men$ optionInsert 23 %4pressonto brin $p the e1pression help/ #hen 4$st e1pand
the e1pressions and select the appropriate attrib$te/ #he end res$lt sho$ld look somethin like this8
'ote5 If you use co6ple4 attr7utes here you 6ay 7e as#ed for 6ore detals 2 such as whether you want each row of
a ta7le attr7ute to appear as a separate lne of te4t at runt6e$
Now 4$st test yo$r workflow as we did in the previo$s blos/ )n yo$r inbo1 yo$ sho$ld see that the inserted
e1pressions have been replaced by act$al val$es, s$ch as the plant id and description/
0sing ABAP OO attriutes in workflows
J$st as with tasks, before yo$ $se an attrib$te of an ob4ect ion a workflow, yo$ m$st first have an ob4ect
reference in the container (i/e/ the data area of yo$r workflow!/ 'ften the ob4ect reference is created
a$tomatically for yo$, e// when yo$ added yo$r
-
8/12/2019 Abap Oops Workflow
28/45
Tp5 )ou only need to 6ar# t as I6portn! f you are !on! to pass so6e data nto ths ele6ent as you start the
wor#flow 2 f you are 8ust !on! to use t to hold data 7etween steps of the wor#flow t doesn9t need to 7e 6portn!
or e4portn!$
?o$ can $se A%A& '' attrib$tes in any of the control steps in a workflow s$ch as a 3ontainer 'peration,
.oop ntil, 9$ltiple 3ondition, ser Decision, etc/ J$st as with tasks, any time yo$ want to reference an
attrib$te of yo$r A%A& '' 3lass yo$ simply $se the e1pression help to e1pand and select the appropriate
attrib$te/
#o try this o$t, add a $ser decision step as the final step in the workflow we created in the previo$s blo/ )n
the workflow b$ilder flowchart, rihtclick on the
-
8/12/2019 Abap Oops Workflow
29/45
'ote5 The attr7ute wll replace the :; placeholder n the ttle$
#ransfer the step back to the flowchart by pressin the reen tick/ Activate yo$r workflow and test it aain/
Now after viewin yo$r plant yo$ sho$ld be presented with a second work item ivin the ;$estion and
answers yo$ created in yo$r decision step and with the plant attrib$te iven a r$ntime val$e/
ow do I %ass attriutes as %ara$eters and handle narrowing cast!
#heres one other place where yo$ can $se A%A& '' attrib$tes in workflow, Bindings, i/e/ the workflow term
for parameter passin/ 'pen yo$r workflow aain in the workflow b$ilder (transaction SDD!, and drill down
on yo$r
-
8/12/2019 Abap Oops Workflow
30/45
)n the top panes of the window the workflow and task containers are shown/ Down below are the bindins
from workflow to task, and from task to workflow (the arrows show yo$ which direction is bein $sed!/ )n the
imae above yo$ can see )ve e1panded the plant class and draed and dropped some attrib$tes of the
plant class into the bindin/ 'f co$rse each workflow container element on the workflow side needs to be
matched to a task container element on the task side so the above bindin is not complete/ )m missin is a
s$itable container element (aka parameter! in the task to pass it to/ hich ) co$ld easily create in the task as
described earlier in this blo/
hat abo$t if yo$r attrib$te is a reference to another A%A& '' 3lass> 3an yo$ pass it to a more eneric ormore specific class reference> ?es of co$rse/ .ook closely at the bindin window aain/ %etween the
workflow container element and the task container element it has been assined to yo$ will see a bl$e arrow
(ivin the bindin direction! and a b$tton with a filled in arrowhead on it/ &ress the b$tton and yo$ sho$ld
see a window like this/
http://scn.sap.com/servlet/JiveServlet/showImage/38-42160-45226/bindings.gif -
8/12/2019 Abap Oops Workflow
31/45
)f yo$ want to pass an A%A& '' 3lass reference to a more eneric reference (widenin cast! yo$ donthave to even look at this window/ %$t if yo$ want to pass an A%A& '' 3lass reference to a more specific
reference (narrowin cast!, all yo$ have to do is check the Handle (rrors as Warningcheckbo1 and yo$ will
pass yo$r class witho$t problem/ 'f co$rse its still $p to yo$ to make s$re the two references are
compatible/
But what aout the %erfor$ance i$%lications of calculated attriutes!
) know some of yo$ are well aware that 4$st beca$se yo$ miht need an attrib$te for one partic$lar task or
scenario doesnt mean yo$ want to code it in a 3'NS#3#' method/ &artic$larly if that attrib$te is
reso$rce intensive/ So whats the best way to handle this scenario> #nctional methods which of co$rse
are the topic of the ne1t blo/
$tt!scn*sa*co&co&&unityb&business;workflowblo'2006021usin';aba;oo;
attributes;in;workflows;and;tasks
!sing fnctional methods in workflows and tasks
ow do I know I#$ read& for this!
#his is n$mber M in a series of blos on A%A& '' for workflow, so yo$ it wo$ld be a really ood idea to
make s$re yo$ have worked thro$h the first K blos/ #he e1amples well $se here contin$e on from those
we $sed in the earlier blos/
Eeres the list of the earlier blos8
1* W$y use ABAP (( wit$ Workflow?
2* /ettin' started wit$ ABAP (( for Workflow *** usin' t$e W(345(W interfaceH* sin' ABAP (( &et$ods in Workflow %asks
"* 3aisin' ABAP (( e)ents for workflow
I* sin' ABAP (( attributes in workflows and tasks
What are functional $ethods!
A f$nctional method is a method that ret$rns a sinle res$lt, i/e/ a method that has a Retrningparameter/
#ypically a f$nctional method calc$lates a val$e, e// yo$ miht $se a f$nctional method to ret$rn the
http://scn.sap.com/community/bpm/business-workflow/blog/2006/08/21/using-abap-oo-attributes-in-workflows-and-taskshttp://scn.sap.com/community/bpm/business-workflow/blog/2006/08/21/using-abap-oo-attributes-in-workflows-and-taskshttp://scn.sap.com/community/bpm/business-workflow/blog/2006/12/19/using-functional-methods-in-workflows-and-taskshttp://scn.sap.com/community/bpm/business-workflow/blog/2006/06/19/why-use-abap-oo-with-workflowhttp://scn.sap.com/community/bpm/business-workflow/blog/2006/06/28/getting-started-with-abap-oo-for-workflow-using-the-ifworkflow-interfacehttp://scn.sap.com/community/bpm/business-workflow/blog/2006/07/25/using-abap-oo-methods-in-workflow-taskshttp://scn.sap.com/community/bpm/business-workflow/blog/2006/07/27/raising-abap-oo-events-for-workflowhttp://scn.sap.com/community/bpm/business-workflow/blog/2006/08/21/using-abap-oo-attributes-in-workflows-and-taskshttp://scn.sap.com/servlet/JiveServlet/showImage/38-42160-45227/narrowingcast.gifhttp://scn.sap.com/community/bpm/business-workflow/blog/2006/08/21/using-abap-oo-attributes-in-workflows-and-taskshttp://scn.sap.com/community/bpm/business-workflow/blog/2006/08/21/using-abap-oo-attributes-in-workflows-and-taskshttp://scn.sap.com/community/bpm/business-workflow/blog/2006/12/19/using-functional-methods-in-workflows-and-taskshttp://scn.sap.com/community/bpm/business-workflow/blog/2006/06/19/why-use-abap-oo-with-workflowhttp://scn.sap.com/community/bpm/business-workflow/blog/2006/06/28/getting-started-with-abap-oo-for-workflow-using-the-ifworkflow-interfacehttp://scn.sap.com/community/bpm/business-workflow/blog/2006/07/25/using-abap-oo-methods-in-workflow-taskshttp://scn.sap.com/community/bpm/business-workflow/blog/2006/07/27/raising-abap-oo-events-for-workflowhttp://scn.sap.com/community/bpm/business-workflow/blog/2006/08/21/using-abap-oo-attributes-in-workflows-and-tasks -
8/12/2019 Abap Oops Workflow
32/45
n$mber of entries in a table, or the formatted name of an employee or whatever/ #he method can have
importin parameters, b$t does not have any other e1portin parameters/
Eeres a simple e1ample $sin the same A%A& 3lass we $sed for the e1ercises in the previo$s blos/ #his
is a static method that retrieves a list of plants relevant for a nominated co$ntry/ Eere are the parameters8
And the method code as yo$ can see its a very simple e1ample/
"ET-)D plats_o@_/oty. SELECT we7s 'R)" t001w I#T) TA3LE et_plats W-ERE
lad1 $ 2v_/oty. E#D"ET-)D.
What#s the e1ui/alent of functional $ethods in BOR!*or those who are $sed to codin b$siness ob4ects (%'! then f$nctional methods replace /irtualattriutes(a calc$lation derived from the ob4ect instance!/ Hirt$al attrib$tes, and their replacementf$nctional methods, are partic$larly $sef$l where yo$ have a val$e that can be derived from the c$rrentob4ect instance, b$t there is eno$h of a performance cost with derivin the val$e that yo$ dont want toderive the val$e every time yo$ constr$ct the instance/
'ne advantae of f$nctional methods over virt$al attrib$tes is that yo$ can pass importin parameters/ ?o$
can derive yo$r calc$lation from the class instance (ass$min yo$ are $sin an instance method of
co$rse! andthe importin parameters/ Eowever its a fairly simple mechanism so its easy to $se this for
simple parameters that can be hardcoded into the workflow, b$t yo$ may still need to call the f$nctional
method as the main method of a normal task if yo$ want to dynamically set the parameters/
ow can I use functional $ethods in workflows!
?o$ can $se a f$nctional method in m$ch the same way as an ob4ect attrib$te/ *or e1ample8 in a container
operation, or as the so$rce of a bindin/
Eeres an e1ample where a f$nctional method is $sed in container operation8
http://scn.sap.com/servlet/JiveServlet/showImage/38-42547-46051/fm_params.gif -
8/12/2019 Abap Oops Workflow
33/45
hen selectin yo$r f$nctional method from the drop down look for the
-
8/12/2019 Abap Oops Workflow
34/45
"an I use a functional $ethod in a task like other $ethods!
?es of co$rse yo$ can $se a f$nctional method as the main method of a task, and then it behaves e1actly
like any other method called from a task/ #his co$ld be helpf$l if yo$ need to handle e1ceptions for that
partic$lar workflow, or if its simply easier to b$ild that way as for this partic$lar workflow yo$ need to pass
manyLcomple1 importin parameters/
ow do I decide whether to use a functional $ethod or create a task!#he decision is m$ch the same as for virt$al attrib$tes in the %' repository, i/e/
Do you need to return &ore t$an one )alue? ; f so use a task Eof course t$is task will call a nor&al &et$od ;
i*e* one wit$ &ultile e+ortin' ara&etersF
Do you need to $andle e+cetions? ; f so use a task
Do you only need to return a sin'le )alue and e+cetions are unlikley or irrele)ant Ewill be i'nored, or will be
c$ecked in a subse
-
8/12/2019 Abap Oops Workflow
35/45
f you want to try t$e e+ercise in t$is blo' in your own syste&, you will need an ABAP :lass wit$
t$e I#$WOR%#&OWinterface, and a syste&client ESAPCetWea)er 6*20 &ini&u&F wit$ t$e workflow en)iron&ent
acti)ated* ou also need to $a)e created t$e >Dislay Plant> workflow task &entioned in blo' nu&ber H*
NCote! As &entioned in t$e last blo', t$is blo' won-t teac$ you ABAP ((* t won-t teac$ you workflow eit$er, but it
s$ould 'i)e you enou'$ to 'et 'oin' e)en if you-)e ne)er touc$ed workflow before* N
2efining an ABAP OO (.ent for Workflow
Definin an A%A& '' 5vent for orkflow is the same as definin any other event for A%A& ''/ #o start
4$st o to transaction S526, enter yo$r class in edit mode, and o to the 5vents tab/ "ive yo$r event atechnical name and make s$re it is a Pblicevent/
:ontinuin' wit$ t$e G:5P5AC% class e+a&le, $ere-s an e+a&le e)ent S%LS%P3(P(SD*
ou can also define e)ent ara&eters if you wis$ by selectin' t$e Parametersbutton* By definition all e)entara&eters are (,-ortingara&eters, i*e* t$ey are e+orted wit$ t$e e)ent w$en t$e e)ent is raised*
sually $owe)er you don-t need to create any e)ent ara&eters, as t$e standard Workflow e)ent container Ere&e&ber
t$at-s workflow-s na&e for a data areaF adds sufficient standard ara&eters, suc$ as t$e user w$o raised t$e e)ent, and a
local ersistent ob@ect reference to t$e ABAP (( class Eof course you know all about t$at because you-)e read t$e
re)ious blo'sF* (f course, you won-t see t$e standard Workflow e)ent container in your class ; you-ll only see it in t$e
Workflow screens*
.ere-s an e)ent ara&eter P3(P(SDLS%DA% for t$e e)ent S%LS%P3(P(SD* -)e &ade t$e
ara&eterO-tionalso t$at later we can look at $ow to raise an e)ent wit$ or wit$out ara&eters*
Tip( #on't forget to activate your class afterwards.
!sing an ABAP OO (.ent in Workflow
or anyone w$o-s usin' Business (b@ect )ents wit$ Workflow, you use ABAP (( )ents in e+actly t$e sa&e way*
http://scn.sap.com/servlet/JiveServlet/showImage/38-42061-45013/eventdef.gifhttp://scn.sap.com/servlet/JiveServlet/showImage/38-42061-45014/eventparam2.gifhttp://scn.sap.com/servlet/JiveServlet/showImage/38-42061-45013/eventdef.gif -
8/12/2019 Abap Oops Workflow
36/45
%$e only real difference is you secify cate'ory ABAP *lassinstead of Business (b@ect* or t$ose w$o $a)en-t done
&uc$ wit$ e)ents before, in Workflow an e)ent can be used to!
1*
2* %ri''er a &ulti;ste workflow
H*
"* %er&inate a &ulti;ste workflow
I*
6* Perfor& secial functions on a &ulti;ste workflow, e*'* re;e)aluate a'ents of acti)e work ite&s,
cancel and restart wit$ sa&e data
7*
* %ri''er a sin'le workflow task
M*
10* %er&inate a sin'le workflow task
11*
NCote! %$e last otion ; ter&inate a sin'le workflow task ; is articularly useful for async$ronous scenarios* or
e+a&le if you $ad a task Eit could be back'round or dialo' ; i*e* in)ol)in' a userF t$at kicked off a database udate in
back'round, and t$en let t$e raisin' of an e)ent confir& t$at t$e c$an'e $ad been co&&itted to t$e database* f you did
t$is of course you would lea)e t$e )ynchronos object methodfla' off in your back'round task Et$is fla' was
&entioned in blo' nu&ber HF* N
%ri''erin' a sin'le workflow task wit$ an e)ent isn-t a )ery co&&on ractice, si&ly because &ost workflows in)ol)e
&ore t$an one ste* So usually we want to tri''er a &ulti;ste workflow t$at reresents a w$ole business rocess* Solet-s e+and our e+a&le to a &ulti;ste workflow tri''ered by an e)ent*
Start by callin' transaction SWDD, t$e Workflow Builder*
Press t$e *reate ew Workflowbutton ; t$e to;left $and button i&&ediately under t$e te+t >Workflow Builder>*
%$en before you 'o any furt$er, sa)e your new e&ty workflow* ou-ll be asked to 'i)e it an abbre)iation and a na&e
http://scn.sap.com/servlet/JiveServlet/showImage/38-42061-45015/swdd.gif -
8/12/2019 Abap Oops Workflow
37/45
; t$ese are free te+t and are &ainly used w$en searc$in' for your workflow* Just like our task or an ABAP :lass, you-ll
need to add it to a c$an'e reDislay Plant> task in it* So to do
t$at, eit$er sin'le;click on t$e !ndefinedste in eit$er t$e Ca)i'ation area or double;click on t$e ndefined ste icon
in t$e center /ra$ical #odel editin' area* Select t$e ste tye Acti.ityand continue on to t$e ne+t screen*
%$e )ery first field in t$e *ontroltab asks for a task id* Searc$ for your >Dislay Plant> task by usin' t$e searc$ $el
on t$e %ask field* ou can searc$ for all tasks t$at are based on your ABAP :lass*
http://scn.sap.com/servlet/JiveServlet/showImage/38-42061-45016/swdd1.gifhttp://scn.sap.com/servlet/JiveServlet/showImage/38-42061-45017/swd2.gifhttp://scn.sap.com/servlet/JiveServlet/showImage/38-42061-45016/swdd1.gif -
8/12/2019 Abap Oops Workflow
38/45
All we need to do now is no&inate w$o s$ould erfor& t$is ste of our business rocess* %o kee it si&le for our
e+a&le, @ust &ake t$e workflow initiator, i*e* t$e erson w$o started t$e rocess, t$e Agentof t$e ste* n t$e A'ents
section, dro down t$e +ression field to c$oose t$e Workflow initiator*
FNote8 s$ally we want to calc$late whos oin to do the work $sin an aent determination r$le b$t this is4$st an e1ample after all/ F
&ress the reen check icon "ransfer and to gra-hicto ret$rn to the raphical flowchart view/ ?o$ can saveyo$r workflow aain at this point if yo$ wish/
We are 'oin' to start our workflow wit$ an e)ent and ass in our G:5P5AC% reference fro& t$e e)ent, so we need to
allow t$e new G:5P5AC% container ele&ent to be i&orted* (n t$e left $and side, under t$e Ca)i'ation area, use t$e
drodown to swa t$e botto& left $and area to t$e Workflow *ontainerdislay* Double;click on t$e new
G:5P5AC% container ele&ent, and on t$e Pro-ertiestab c$eck t$e Im-ortfla'*
http://scn.sap.com/servlet/JiveServlet/showImage/38-42061-45019/swd4.gifhttp://scn.sap.com/servlet/JiveServlet/showImage/38-42061-45018/swd3.gif -
8/12/2019 Abap Oops Workflow
39/45
So $a)in' co&leted our &ini $ow;to;create;a;workflow e+ercise we now want to add t$e S%LS%P3(P(SD
e)ent as t$e tri''erin' e)ent of t$e workflow* At t$e to of t$e screen ress t$e Basic 2ata$at icon* (n t$e 4ersion5
Inde-endenttab, c$oose t$e sub;tab )tart (.ents* Add a row and enter cate'ory *&, t$en (b@ect %ye O your ABAP
:lass, and t$en )ent of t$e ob@ect O S%LS%P3(P(SD*
F#ip: )ts a ood idea to $se the dropdown help for all of these fields to avoid typin errors/ F
ou can see t$e e)ent row starts wit$ an A, B, and : colu&ns* B stands for Binding*
We need to create t$e bindin' E&ain'F between t$e e)ent container and t$e workflow container to ass across t$e
instance of our ABAP :lass and t$e erson w$o raised t$e e)ent* Just click on t$e Bindin' icon and t$e bindin' will be
'enerated for you*
http://scn.sap.com/servlet/JiveServlet/showImage/38-42061-45021/swd5.gifhttp://scn.sap.com/servlet/JiveServlet/showImage/38-42061-45021/swd5.gifhttp://scn.sap.com/servlet/JiveServlet/showImage/38-42061-45020/swd6.gif -
8/12/2019 Abap Oops Workflow
40/45
3e&e&ber t$e A, B, and : colu&ns? A stands for Acti.ate* :lick on t$e acti)ate icon until t$e e)ent acti)ation icon
turns 'reen* Cow use t$e back arrow icon to return to t$e 'ra$ical flowc$art dislay and use t$e Acti)ate Elit &atc$F
icon at t$e to of t$e screen to acti)ate t$e workflow* :$eck t$e status of your workflow is Acti.e6 )a.edin
t$eInformation Areain t$e to left $and window ane*
So now yo$ have a workflow thats linked to a trierin event of yo$r A%A& 3lass: )f yo$ want to test it,$se transaction S5 to enerate the event, or 4$st wait $ntil yo$ have completed the ne1t section onraisin events/ ?o$ sho$ld see a new
-
8/12/2019 Abap Oops Workflow
41/45
"* RAI)($I$!P2A"($"A)%; for raisin' an e)ent in t$e udate task of a 5o'ical nit of Work
I*
.ere-s so&e e+a&le code to raise our S%LS%P3(P(SD e)ent usin' t$e 3AS &et$od ; wit$out any
ara&eters*DA#A8 ls+Gcl+plant+key #?&5 werks,
lv+ob4type #?&5 sibftypeid, lv+event #?&5 sibfevent, lv+ob4key #?&5 sibfinstid/
lv+ob4type @3.+&.AN#/ lv+event S)#5+H)S)#+&'&'S5D/
Set u t$e 5P(3 instance id
ls+Gcl+plant+keywerks I000/ 9'H5 ls+Gcl+plant+key #' lv+ob4key/
3aise t$e e)ent
#?/ 3A.. 95#E'D cl+swf+evt+eventCraise 5&'#)N" im+ob4cate cl+swf+evt+eventCmc+ob4cate+cl im+ob4type lv+ob4type im+event lv+eventim+ob4key lv+ob4key
#LC%:(C%AC3 O
/ 3A#3E c1+swf+evt+invalid+ob4type / 3A#3E c1+swf+evt+invalid+event / 5ND#?/
3'99)# '-/
Tip( )ust as for *usiness +bect events, the b%+//IT 0+123b statement is crucial when raising a0orkflow event - without this the event will not be raised.
:$eck t$e e)ent was raised correctly by turnin' on t$e e)ent lo' Eusin' transaction SW5SF, and e+ecutin' t$e e)ent
lo'* f your e)ent was raised correctly you s$ould $a)e a new line in t$e e)ent lo' t$at looks so&et$in' like t$is!
%$e 'reen li'$t icon s$ows t$at a workflow was started as a result of t$is e)ent*
%$e abo)e code is fine for &ost e)ents t$at @ust use t$e standard Workflow e)ent container and $a)e no secific
ara&eters* (f course if you want to ass secific ara&eters you need a little e+tra code to!
nstantiate an e&ty e)ent container
Add your e)ent ara&eter na&e)alue airs to t$e e)ent container
3aise t$e e)ent assin' t$e reared e)ent container
http://scn.sap.com/servlet/JiveServlet/showImage/38-42061-45023/evtlog.gifhttp://scn.sap.com/servlet/JiveServlet/showImage/38-42061-45023/evtlog.gif -
8/12/2019 Abap Oops Workflow
42/45
FNote8 ?o$ dont need to worry abo$t fillin any of the standard event container parameters s$ch as theevent creator orkflow will do that as part of raisin the event/ F
DA#A8 ls+Gcl+plant+key #?&5 werks,
lv+ob4type #?&5 sibftypeid, lv+event #?&5 sibfevent, lv+ob4key #?&5 sibfinstid,
lr+event+parameters #?&5 5* #' if+swf+ifs+parameter+container, lv+param+name #?&5
swfdname,
lv+visit+date #?&5 dat$m/
lv+ob4type @3.+&.AN#/ lv+event S)#5+H)S)#+&'&'S5D/
1* Set u t$e 5P(3 instance idls+Gcl+plant+keywerks I000/ 9'H5 ls+Gcl+plant+key #' lv+ob4key/
1* nstantiate an e&ty e)ent container
3A.. 95#E'D cl+swf+evt+eventCet+event+container 5&'#)N" im+ob4cate cl+swf+evt+eventCmc+ob4cate+cl im+ob4type lv+ob4type im+event lv+event 535)H)N"re+reference lr+event+parameters/
1* Set u t$e na&e)alue air to be added to t$e container lv+param+name &'&'S5D+H)S)#+DA#5/ lv+visit+date sydat$m F 7/
1* Add t$e na&e)alue air to t$e e)ent conainer
#?/ 3A.. 95#E'D lr+event+parametersCset 5&'#)N" name lv+param+nameval$e lv+visit+date
1* C% O
2* #P(3%C/
H* 3%3C:(D O
/ 3A#3E c1+swf+cnt+cont+access+denied / 3A#3E c1+swf+cnt+elem+access+denied / 3A#3Ec1+swf+cnt+elem+not+fo$nd / 3A#3E c1+swf+cnt+elem+type+conflict / 3A#3Ec1+swf+cnt+$nit+type+conflict / 3A#3E c1+swf+cnt+elem+def+invalid / 3A#3Ec1+swf+cnt+container / 5ND#?/
1* 3aise t$e e)ent assin' t$e reared e)ent container
#?/ 3A.. 95#E'D cl+swf+evt+eventCraise 5&'#)N" im+ob4cate cl+swf+evt+eventCmc+ob4cate+cl im+ob4type lv+ob4type im+event lv+eventim+ob4key lv+ob4key im+event+container lr+event+parameters/ 3A#3Ec1+swf+evt+invalid+ob4type / 3A#3E c1+swf+evt+invalid+event / 5ND#?/
3'99)# '-/
f you want to c$eck t$at your roosed )isit date was assed to t$e workflow, you-ll need to create a new workflow
container ele&ent to $old t$e roosed )isit date, ad@ust t$e e)ent to workflow bindin', and re;acti)ate your workflow
before testin' it*
-
8/12/2019 Abap Oops Workflow
43/45
What abot *onfigration o-tions for Workflow (.ents?
%$ose of you w$o are fa&iliar wit$ Business (b@ect e)ents in 3H and :: are also aware t$at often no code at all is
needed in t$ese syste&s to raise an e)ent for Workflow ; you @ust need to co&lete t$e confi'uration in one of t$e
&any e)ent confi'uration tables* %$ese tables are ro)ided by &any different &odules wit$in t$e alication, suc$ as
.3, SD &essa'e control, status &ana'e&ent, and c$an'e docu&ents* As of ::6, &ost of t$ese confi'uration tables
unfortunately do not yet suort ABAP (( e)ents )ia confi'uration, wit$ one notable e+cetion ; c$an'e docu&ents*
n transaction SW:, c$an'e docu&ent e)ent confi'uration, you can secify t$e ob@ect cate'ory ABAP *lassw$en
secifyin' an e)ent* %$e only difficulty you &ay $a)e is &atc$in' t$e key of t$e c$an'e docu&ent to t$e key of your
ABAP :lass* ou can o)erco&e t$is con)ersion issue by codin' your own con)ersion routine as a function &odule*
%$is function &odule can be called any )alid na&e Ewit$in t$e custo&er na&esaceF but &ust $a)e t$e sa&e interface
as t$e te&late function &odule )W($*2$"(7P&A"($OB8%(3$#B$9 * All you $a)e to do in t$is function
&odule is use t$e data in t$e c$an'e docu&ent $eaderite&s to build t$e local ersistent ob@ect reference for your
workflow;ready ABAP :lass*
ou t$en add t$e function &odule to t$e #nction modlefield in t$e rele)ant row of transaction SWD ; w$ic$
defines t$e c$an'e docu&ent ob@ect relations$i to an ob@ect tye*
.oefully so&e of t$e ot$er confi'uration otions will catc$ u soon and allow for ABAP (( e)ent confi'uration
also*
Where to now?
#he ne1t blo will look at fleshin o$t o$r workflow by $sin A%A& '' attrib$tes to add meaninf$l te1t,descriptions, and additional parameters to each part of o$r workflow/
hy $se A%A& '' with orkflow>
#his is the start of a series on how to $se A%A& '' with workflow/
ow do I know this is rele/ant to $e!A%A& '' for workflow is available on any SA& Neteaver platform release M/20 or above (A%A& stack ofco$rse!/ #hat incl$des L= 6/7, 533, and the latest versions of S39, S9, 39, 1&9, etc/ &/S/ #hereare a co$ple of minor restrictions in M/20 that are resolved in M/60 b$t well deal with them later in theseries/
What#s the %role$ with BOR 2Business O'ect Re%ositor&3!A little SA&Lorkflow history here/// SA& %$siness orkflow came into bein in L= =/03/ Now for thosewho can remember back that far, there certainly wasnt any s$ch thin as A%A& '' back then (and itwo$ldnt be $ntil L= 6/M3 that A%A& '' was available in s$fficient depth to s$pport workflow handlin!/ Sothe %$siness 'b4ect epository was created as an intermediate, very appro1imate, b$t at least ob4ectoriented, sol$tion for SA& %$siness orkflow/ %eca$se it was never intended to be the final sol$tion, therewas a limit to how far %' was oin to o/ 3onse;$ently %' s$ffers from8
A )ery old ABAP editor and relati)ely feature;oor suort tools
Awkward and non;ob)ious &acro codin' necessitatin' workflow de)eloers to $a)e secial skills abo)e and
beyond nor&al ABAPers or workflow creators
5i&itations for instantiation, in$eritance, 'eneric $andlin', and calculation of attributes
ow does ABAP OO sol/e these %role$s!ell for starters, A%A& '' is now a f$llyfleded ob4ectoriented lan$ae with comprehensive feat$rerichs$pport tools/ A%A& '' also provides8
unctional &et$ods for calculation of attributes
http://scn.sap.com/community/bpm/business-workflow/blog/2006/06/19/why-use-abap-oo-with-workflowhttp://scn.sap.com/community/bpm/business-workflow/blog/2006/06/19/why-use-abap-oo-with-workflow -
8/12/2019 Abap Oops Workflow
44/45
Proer instantiation and 'arba'e collection
:o&le+ in$eritance otions
.i'$ reusability for true 'eneric $andlin' of ob@ects
What other reasons are there for using ABAP OO with workflow!
)ve saved the best for last beca$se A%A& '' for workflow means8Any ABAP develoe! "#o $%n $odeABAP OO $%n &%'(e! !e%d)n* (#)+ +e!)e+, $ode 'o! "o!-'lo".So now pro4ect manaers and workflowcreators can call on any A%A& prorammer to assist with c$stom development for workflow yo$ wont needa speciallytrained workflow codec$tter any more/
Is there an&thing I still need to use BOR for!#here are a few areas where yo$ miht still want to $se %' ob4ects p$rely for convenience reasons/
%$e S5%# ob@ect for sendin' &ails* %$is is still useful as e)eryt$in', includin' t$e >Send #ail> ste
tye, is re;built for you* So it-s robably not wort$ creatin' an ABAP (( e
-
8/12/2019 Abap Oops Workflow
45/45
ob@ect &odel out of an Q#5 strin', t$e transaction $andler translates t$e &odel references to an internal table wit$ no
references Eattribs in Q#5 strin'F, call t$e udate &oduleEass t$e internal table wit$ t$e Q#5&odel infoF, t$is udate&odule will 'et its own transaction $andler, and will transfer t$e internal table wit$ Q#5 to t$is EnewFtransaction
$andler, t$is transaction $andler rebuild its list wit$ ob@ect references to c$an'ed &odels, and t$en will erfor& t$eactual Sa)eEsFK in a lo'ical unit of work*
2emo scri-t:
W$en t$e user c$an'es t$e contents of t$e Price field on t$e screen and $its R%ri''er PAPB( t$e screen structure isbein' coied to t$e &odel Eby t$e controllerF* %$e &odel notifies t$at one of t$e attributes is c$an'ed, c$an'es its
attribute 74$7O2(&$)"A"( in *O$)"A"($*HA+(2 and raise t$e e)ent(4$)I+&($("I"3$7O2(&$*HA+(2* %$is e)ent is $andled by t$e transaction $andler ob@ect, w$ic$ will
store t$e reference in its table wit$ references to &odel ob@ects t$at are c$an'ed*W$en t$e Sa)e button Eof t$e SAP/ ro'ra&F on t$e toolbar is clicked, t$e :ontroller will call
t$e )A4($*HA+()&et$od of t$e transaction $andler ob@ect* %$is &et$od is buildin' an internal table wit$ all t$einfor&ation needed to recreate 3e;instantiate t$e &odel ob@ect, t$is table is transferred to an date unction#odel* n t$is #odule anot$er transaction $andler ob@ect is obtained )ia t$e factory Eanot$er instance because t$eudate will run in a different session F , t$e table wit$ t$e info Q#5 reresentation of t$e instance attributes will be
transferred to t$e transaction $andler* %$e transaction $andler will rebuild t$e table wit$ ob@ects references, wit$ $elof t$e factory* %$an t$is table will be rocessed, of eac$ &odel t$e )A4(&et$od is called, if t$is &et$od returns anerror ob@ect, an Abend &essa'e will be issued, causin' t$e bundled udate to fail, and to rollback re)ious c$an'es* Anotifyin' &essa'e will be deli)ered in )ia t$e Business Worklace*
$a)e been stru''lin' wit$ all kind of recordin'sictures, in t$e end )e 'ot t$e idea to &ake a runti&e analysis, t$atwill 'i)e you an idea of t$e code flow!htt-:>>tinyrl1com>o@g@@e also &ade a screen cature recordin' of t$e user interface, you can watc$ t$at $ere!$tt!www*youtube*co&watc$?
)O%w)=Bsib'conte+tO:Hc6f1H1AD('s%oPDskJft5C34ik7(2/do$"&&bC
:ode is a)ailable in t$e :ode +c$an'e section! $tts!cw*sdn*sa*co&cw'rousaba;oo;&odel;rocessin',eel free to contact &eK3e'ards and t$anks for readin' **
http://tinyurl.com/6o8g88ehttp://tinyurl.com/6o8g88ehttp://www.youtube.com/watch?v=TwvzFBspibg&context=C3c6f131ADOEgsToPDskJftLNRKik7O2Gdoh4mmpbN&rel=0http://www.youtube.com/watch?v=TwvzFBspibg&context=C3c6f131ADOEgsToPDskJftLNRKik7O2Gdoh4mmpbN&rel=0http://www.youtube.com/watch?v=TwvzFBspibg&context=C3c6f131ADOEgsToPDskJftLNRKik7O2Gdoh4mmpbN&rel=0https://cw.sdn.sap.com/cw/groups/abap-oo-model-processinghttps://cw.sdn.sap.com/cw/groups/abap-oo-model-processinghttp://tinyurl.com/6o8g88ehttp://www.youtube.com/watch?v=TwvzFBspibg&context=C3c6f131ADOEgsToPDskJftLNRKik7O2Gdoh4mmpbN&rel=0http://www.youtube.com/watch?v=TwvzFBspibg&context=C3c6f131ADOEgsToPDskJftLNRKik7O2Gdoh4mmpbN&rel=0https://cw.sdn.sap.com/cw/groups/abap-oo-model-processing