Déclenchement d’un workflow avec les messages
Pour déclencher un événement à partir des messages (NACE), il faut
Business Workflow / Développement / Outils de définition / Evènement /Génération d’un événement / Pilotage des messages ou transaction NACE .
Puis vous devez choisir l’application concernée (pour moi EF, pour les commandes d’achat).
Pour ma part j’ai fait une copie de ce programme pour pouvoir transmettre la clé du message afin de le placer en erreur si jamais mon workflow connaissait un souci.
Mes programmes
ZRVNSWE01 copie de RVNSWE01
REPORT ZRVNSWE01.
TABLES: NAST.
*———————————————————————*
* FORM CREATE_EVENT *
*———————————————————————*
FORM CREATE_EVENT USING RETURNCODE
US_SCREEN.
* das anwendungsunspezifische Verarbeitungsprogramm ist RSWEMC01
PERFORM CREATE_EVENT(ZRSWEMC01) USING RETURNCODE
US_SCREEN.
ENDFORM.
ZRSWEMC01 copie de RSWEMC01
report zrswemc01.
include <cntn01>.
tables: nast, t681z.
*———————————————————————*
* FORM CREATE_EVENT *
*———————————————————————*
form create_event using returncode
us_screen.
include rswuincl.
data: l_object type swc_object.
data: l_event_creator like swhactor .
data: l_objkey like sweinstcou-objkey.
data: l_eventid like swedumevid-evtid,
ls_nastkey type nast_key.
*
if nast-event eq space or nast-objtype eq space.
clear: syst-msgid, syst-msgno, syst-msgty, syst-msgv1,
syst-msgv2, syst-msgv3, syst-msgv4.
syst-msgid = ‘VN’.
syst-msgty = ‘E’.
syst-msgno = 075.
syst-msgv1 = nast-event.
syst-msgv2 = nast-objtype.
call function ‘NAST_PROTOCOL_UPDATE’
exporting
msg_arbgb = syst-msgid
msg_nr = syst-msgno
msg_ty = syst-msgty
msg_v1 = syst-msgv1
msg_v2 = syst-msgv2
msg_v3 = syst-msgv3
msg_v4 = syst-msgv4
exceptions
message_type_not_valid = 01
no_sy_message = 02.
returncode = 4.
else.
swc_container l_cont.
l_event_creator-otype = org_objtype_user . « global in RSWUINCL
l_event_creator-objid = sy-uname. « hopefully sy-uname
« does exist!
move-corresponding nast to ls_nastkey.
* convert NAST key (if necessary)
* instantiate an application object
swc_create_object l_object nast-objtype space.
* set required parameters for ‘ConvertKey’
swc_set_element l_cont ‘Application’ nast-kappl.
swc_set_element l_cont ‘OutputType’ nast-kschl.
swc_set_element l_cont ‘NASTObjectKEy’ nast-objky.
swc_call_method l_object ‘ConvertKey’ l_cont.
swc_get_element l_cont ‘BORObjectKey’ l_objkey.
swc_set_element l_cont ‘IS_NASTKEY’ ls_nastkey.
if l_objkey is initial.
* use unconverted key
l_objkey = nast-objky.
endif.
* Ereignis
call function ‘SWE_EVENT_CREATE’
exporting
objtype = nast-objtype
objkey = l_objkey
event = nast-event
creator = l_event_creator
importing
event_id = l_eventid
tables
event_container = l_cont
exceptions
objtype_not_found = 01.
* Ereignis konnte nicht erzeugt werden, da Objkttyp nicht gefunden
if sy-subrc <> 0.
clear: syst-msgid, syst-msgno, syst-msgty, syst-msgv1,
syst-msgv2, syst-msgv3, syst-msgv4.
syst-msgid = ‘VN’.
syst-msgty = ‘E’.
syst-msgno = 074.
syst-msgv1 = t681z-oj_name.
call function ‘NAST_PROTOCOL_UPDATE’
exporting
msg_arbgb = syst-msgid
msg_nr = syst-msgno
msg_ty = syst-msgty
msg_v1 = syst-msgv1
msg_v2 = syst-msgv2
msg_v3 = syst-msgv3
msg_v4 = syst-msgv4
exceptions
message_type_not_valid = 01
no_sy_message = 02.
returncode = 4.
elseif not l_eventid is initial.
returncode = 0.
else.
clear: syst-msgid, syst-msgno, syst-msgty, syst-msgv1,
syst-msgv2, syst-msgv3, syst-msgv4.
syst-msgid = ‘VN’.
syst-msgty = ‘E’.
syst-msgno = 355.
syst-msgv1 = nast-event.
syst-msgv2 = nast-objtype.
call function ‘NAST_PROTOCOL_UPDATE’
exporting
msg_arbgb = syst-msgid
msg_nr = syst-msgno
msg_ty = syst-msgty
msg_v1 = syst-msgv1
msg_v2 = syst-msgv2
msg_v3 = syst-msgv3
msg_v4 = syst-msgv4
exceptions
message_type_not_valid = 01
no_sy_message = 02.
returncode = 4.
endif.
endif.
endform.
Si l’évènement est lancé alors le message est considéré comme réussi, voila donc ma méthode si le workflow ne réussi pas pour placer le message en erreur.
Pour mettre le message en erreur au cas ou le workflow ne fonctionne pas
data : ls_nast type nast,
lt_nast type table of nast.
call function ‘RV_MESSAGE_SELECT_SINGLE’
exporting
pi_nast_key = ME->GS_NASTKEY
IMPORTING
PE_NAST = ls_NAST
* EXCEPTIONS
* RECORD_NOT_FOUND = 1
* OTHERS = 2
.
append ls_nast to lt_nast.
if sy-subrc <> 0.
* Implement suitable error handling here
else.
call function ‘RV_MESSAGE_SET_PROCESS_STATE’
exporting
msg_vstat = ‘2’
tables
msg_nast = lt_nast
* EXCEPTIONS
* NO_UPDATE = 1
* OTHERS = 2
.
if sy-subrc <> 0.
* Implement suitable error handling here
endif.
endif.
endmethod.