Déclenchement d’un workflow avec les messages

water-drop1

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).
Vous pourrez alors créer une nouvelle catégorie de message (Pour moi ZCAE)
Vous pourrez alors lui affecter le programme RVNSWE01 et la routine form CREATE_EVENT.
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.
Pour que cela fonctionne, mon événement à un paramètre :
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.

 

Publicités

Répondre

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l'aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s