Dynamische gebruikersbeslissingen in SAP Workflow

VNSG Magazine | maart 2014
Dynamische gebruikersbeslissingen in SAP Workflow
Inleiding
Een gebruikersbeslissing in een SAP Workflow definitie biedt de mogelijkheid om een
optiescherm aan de gebruiker aan te bieden. Hiermee kan de gebruiker bijvoorbeeld een
SAP document goed- of afkeuren. Naast deze goedkeuringsopties worden vaak andere
opties aangeboden die het proces ondersteunen. Een recente verbetering van de SAP
Workflow ontwikkelomgeving biedt de mogelijkheid om bepaalde opties wel of niet weer
te geven en de omschrijving te variëren aan de hand van condities. In deze tip wordt
dieper ingegaan op deze zogenaamde dynamische gebruikersbeslissingen.
Toelichting
Na de recente verbeteringen in de SAP workflow omgeving is het mogelijk om opties in
de gebruikersbeslissingen te onderdrukken en/of te variëren in de te hanteren teksten.
Deze functionaliteit, ook wel “dynamic decision options” genoemd, staat beschreven in
OSS note 1648822.
Deze functionaliteit wordt in dit document toegelicht via een concreet voorbeeld. Dit
voorbeeld proces is het goedkeuren van ATB’s (Aanvraag tot bestellen) in SAP. Het
functionele proces werkt als volgt. Op de aanleg van een ATB document is een vrijgave
strategie ingericht. Een vrijgave strategie is standaard MM functionaliteit en wordt via
customizing geactiveerd en ingeregeld. Een vrijgave strategie voorkomt dat een ATB,
bestelling of contract zonder goedkeuring gebruikt kan worden in het inkoopproces.
Indien de ATB onder een vrijgavestrategie valt zal het betreffende SAP document één of
meerdere keren vrijgegeven moeten worden. In onderstaand voorbeeld dient de ATB 3
keer vrijgegeven worden voordat op basis van deze ATB een bestelling kan worden
aangemaakt.
Figuur 1: Vrijgavestrategie
Het vrijgeven kan gerealiseerd worden via de standaard MM transacties ME54N of ME55.
Hierbij moet de gebruiker zelfstandig de relevante ATB’s selecteren en handmatig
vrijgeven. Hierbij wordt uitgegaan van het “pull mechanisme” waarbij het uitgangspunt is
dat de relevante gebruiker zelfstandig in staat is om op het juiste moment de juiste
documenten zelfstandig naar zicht “toe te trekken” en deze zal vrijgeven.
Een betere manier is om voor de vrijgave een SAP Workflow in te regelen. Hierbij wordt
uitgegaan van het “push mechanisme”, waarbij de eindgebruiker via email genotificeerd
wordt dat er één of meerdere goedkeuringstaken in zijn of haar workflow inbox staan. De
VNSG Magazine | maart 2014
gebruiker krijgt dan direct een lijst met ATB’s gepresenteerd die goedkeuring behoeven
en waarvoor de gebruiker verantwoordelijk is volgens het procuratieschema.
Dit zou er in de praktijk als volgt uit zien.
Figuur 2: Afhandelen goedkeuringstaken
Een eenvoudige workflow inrichting zou kunnen zijn dat de workflow een aantal keren
over een SAP Workflow gebruikersbeslissing heen “loopt”. Deze gebruikersbeslissing
biedt een aantal opties aan. In alleen de laatste vrijgave door Inkoop mag de optie
“Wijzig ATB” getoond worden.
In de eerste vrijgave stap(pen) dienen de opties zoals getoond in onderstaande linker
schermafdruk beschikbaar zijn, in de laatste vrijgave door afdeling Inkoop dienen de
opties zoals in de rechter schermafdruk beschikbaar te zijn.
VNSG Magazine | maart 2014
Figuur 3: Mogelijke opties
Realisatie
In de workflow ontwikkelomgeving dienen alle mogelijke opties opgenomen te worden.
Deze ziet er dan als volgt uit.
Figuur 4: Definitie van gebruikersbeslissingsopties
Zonder de dynamische gebruikersbeslissing zullen alle opties altijd getoond worden.
Indien we toch opties willen onderdrukken was het in het verleden noodzakelijk om een
tweede gebruikersbeslissing in te richten met alleen de op dat moment mogelijke opties.
Dit zou dubbel onderhoud vereisen en de workflow definitie onnodig complex maken.
VNSG Magazine | maart 2014
Om de optie “Wijzigen ATB” conditioneel te verbergen implementeren we een
zogenaamde work item exit in het tablad “programmeerexits”.
Figuur 5: Programmeerexit
De ABAP klasse die hiervoor gebruikt wordt, dient de in interface
IF_SWF_IFS_WORKITEM_EXIT en IF_SWF_IFS_DECISION_EXIT te bevatten. Deze
laatste maakt het mogelijk opties te onderdrukken of teksten aan te passen.
Figuur 6: Work item exit definitie
In bovenstaande voorbeeld implementatie zorgt de methode
IF_SWF_IFS_WORKITEM_EXIT~EVENT_RAISED voor de afvraging van het relevante
moment in de verwerking van het work item.
METHOD if_swf_ifs_workitem_exit~event_raised.
************************************************************************
* Work item exits tbv inkoop workflows
************************************************************************
DATA: lv_wihead TYPE swr_wihdr,
lv_result
TYPE string.
CLEAR: lv_wihead.
me->m_ctx = im_workitem_context.
lv_wihead = im_workitem_context->get_header( ).
VNSG Magazine | maart 2014
CASE im_event_name.
* Beperk user decion opties indien goedkeuring niet bij inkoop ligt
WHEN if_swf_ifs_decision_exit~c_evttyp_before_decision.
TRY.
CALL METHOD me->UPDATE_USER_DECISION_OPTIONS
EXPORTING
workitem_context = im_workitem_context.
CATCH cx_root.
ENDTRY.
ENDCASE.
ENDMETHOD.
In de runtime omgeving zal vlak voor het doorlopen van de gebruikersbeslissing de
methode “update_user_decision_options” doorlopen worden. In deze methode kunnen de
opties conditioneel worden gemaakt. Zie hieronder een stukje voorbeeld code.
METHOD update_user_decision_options.
DATA: lt_decialts
TYPE
lo_container TYPE
lv_wihead
TYPE
lv_releasecode TYPE
swrtdecialts,
REF TO if_swf_ifs_parameter_container,
swr_wihdr,
frgco.
CONSTANTS:
gc_wftask(10) VALUE 'TS97300001',
gc_releasecode1(2) VALUE 'IL',
gc_releasecode2(2) VALUE 'L1'.
FIELD-SYMBOLS: <decialt> TYPE swr_decialts.
CLEAR: lv_wihead.
lv_wihead = workitem_context->get_header( ).
*
Get the workflow container from the workitem context
lo_container = workitem_context->get_wf_container( ).
TRY.
lo_container->get( EXPORTING name = 'ReleaseCode'
IMPORTING value = lv_releasecode ).
CATCH cx_root.
ENDTRY.
*
Get the decision alternatives from the container as defined in the workflow builder.
TRY.
CALL METHOD workitem_context->get_decision_alts
IMPORTING
et_decialts = lt_decialts.
CATCH cx_root.
ENDTRY.
*
Remove the 4th option if task is in inbox of a purchaser
IF NOT lv_releasecode = gc_releasecode1 AND NOT lv_releasecode = gc_releasecode2 AND
lv_wihead-wi_rh_task EQ gc_wftask.
DELETE lt_decialts WHERE altkey = '0004'.
ENDIF.
*
Set the new alternatives values to the workitem context.
TRY.
CALL METHOD workitem_context->set_decision_alts
EXPORTING
it_decialts = lt_decialts.
CATCH cx_root.
ENDTRY.
ENDMETHOD.
Indien de teksten van de gebruikersbeslissing gemanipuleerd moeten worden kan het
volgende stukje code gebruikt worden.
READ TABLE lt_decialts ASSIGNING <decialt>
WITH KEY altkey = '0001'.
VNSG Magazine | maart 2014
IF sy-subrc = 0.
IF conditie.
<decialt>-alttext = 'Tekst 1'.
ELSE.
<decialt>-alttext = 'Tekst 2'.
ENDIF.
ENDIF.
Bovenstaande tip geldt uitsluitend in de verwerking van de goedkeuringstaak in de SAP
Gui of SAP NetWeaver Business Client. In de verwerking van goedkeuringstaken in
overige user intefaces, bijvoorbeeld via de Fiori apps rondom goedkeuring van ATB’s en
bestellingen gelden andere mogelijkheden voor het aanbieden en onderdrukken van
opties.
Figuur 7: SAP Fiori goedkeuring van ATB's en bestellingen
Maart 2014, Sander van der Wijngaart, Avelon SAP workflow tips & tricks