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