Dans SAP, les workflows ont depuis longtemps maintenant deux technologies pour représenter les objets workflow :
les Business Objects (BOR)
les Classes ABAP OO
Les Business Objets sont aussi connus sous le terme BOR ou BUS, ils sont créés et étendus dans la transaction SWO1.
Les Classes Workflows sont moins connues moins utilisés mais on clairement un net avantage.
Un ABAPEUR se retrouve beaucoup plus à l'aise avec une classe ABAP qu'avec nos bons vieux BOR.
Les BOR étaient là avant même que l'ABAP Objet existent, mais leur langage est basé sur des macro, qui je trouve se comprennent bien mais ne sont pas trop à la mode et pas vraiment réutilisable dans vos programme.
L'avantage des classes workflow, est donc le nombre de développeur qui seront à l'aise avec et qu'elles peuvent se poser au dessus (sous classe) des classes de l'application, ou avoir un BOR ou la classe d'application (ou business) en attribut pour bénéficier de tout le développement déjà fait.
C'est plutôt simple, elles implémentent l'interface IF_WORFLOW
6 méthodes arrivent alors et je vais essayé d'expliquer comment les implémenter.
Une autre particularité, quand vous déclarez l'interface, les attributs ont alors une colonne supplémentaire afin de déclarer la clée
Son rôle est de permettre de raffraichir les attributs, un workflow dure longtemps et des rafraichissements interviennent souvent, très souvent.
Cette méthode fait un peu office de constructeur.
Sans elle, votre workflow ne trouvera aucune valeur car il ne retiendra que l'identifiant de votre classe.
L'implémentation est obligatoire.
Alors cette méthode fait office de factory, afin de s'assurer que la classe garde la même référence tout au long du workflow (singleton principle). Car si la référence changeait alors le worflow ne pourrait plus réagir aux évènements, ni aux conditions.
Comment fait elle cela, et bien un attribut statique (une table interne) est crée elle contient la clée de l'objet et la référence de l'instance.
L'implémentation de cette méthode est obligatoire.
Mais quel ce type TT_INSTANCE ?
Il faut qu'il soit déclaré pour être disponible pour la classe
C'est pour cela que le constructeur est privé, il faut passer par cette méthode pour obtenir une instances, celle-ci sera présente dans la table tant que le workflow en aura besoin.
Mais comment SAP la retire l'entrée de la table ? L'implémentation de cette méthode est obligatoire;
Et bien ce n'est pas SAP, SAP appelle une autre des méthodes quand le workflow n'a plus besoin de la l'objet, la méthode RELEASE
Elle fait le ménage, supprime les attributs, libère les objets liés...
Cette méthode est optionnelle mais je vous conseille de l'implémentée surtout si vous utilisez la table mst_instances
Cette méthode retourne " l'objet"
Elle est obligatoire et c'est l'une des plus simples à implémenter.
L'implémentation de cette méthode n'est pas obligatoire, mais elle permet de retourner la valeur de l'attribut qui est supposé être intégrer avec le work item. Généralement il s'agit de la clée.
C'est une implémentation plutôt rapide
L'implémentation de cette méthode n'est pas obligatoire.
Mais je la conseille car si vous cliquez sur votre work item c'est cette méthode qui est appelée.
Il suffit pour l'implémenter de mettre dedans me->display( ).
(si votre méthode par défaut est display( )
Plutôt simple car la plupart du code est ailleurs (refresh et find_by_lpor)
Et bien elle doit appelée la méthode qui gère les instances et assure le singleton principle.
Principalement il s'agit des évènements, ils réagissent différemment entre les classes et les workfows.
Ce n'est pas le meilleurs de points mais il peut être facilement contourner.
J'en parlerai peut être une autre fois.
Pour moi la meilleure source est un livre ABAP Development for SAP Business Workflow de Ija-Daniel Werner (2021) Galileo Press.
ISBN 978-1-229-394-0 (print)
ISBN 978-1-229-783-2 (ebook)
Malheureusement je ne le vois plus en vente sur SAP Press mais peut être le trouverez vous ailleurs.