author | Sylvain Thénault <sylvain.thenault@logilab.fr> |
Mon, 21 Jun 2010 15:29:10 +0200 | |
branch | stable |
changeset 5812 | d970049d7cfd |
parent 3322 | a522f86ab617 |
permissions | -rw-r--r-- |
0 | 1 |
.. -*- coding: utf-8 -*- |
2 |
||
3 |
Définition de workflow |
|
4 |
====================== |
|
3322
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
5 |
|
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
6 |
Avant-propos |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
7 |
------------ |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
8 |
|
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
9 |
Un worflow décrit comment les entités vont être utilisés à travers différents états. Nous avons donc pour un workflow donné un ensemble d'états, un "graphe de transition" c'est-à-dire la liste des transitions possibles d'un état à un autre. |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
10 |
|
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
11 |
Nous allons définir ici un simple workflow pour l'exemple du blog avec seulement deux états: `en attente` et `publié`. Il est nécessaire d'avoir préalablement créé une application simple *CubicWeb* en dix minutes (voir :ref:`BlogFiveMinutes`). |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
12 |
|
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
13 |
Mise en place du workflow |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
14 |
------------------------- |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
15 |
|
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
16 |
Nous allons créer un workflow pour contrôler la qualité des BlogEntry soumis à l'instance. Lorsque un BlogEntry est créé par un utilisateur, son état doit être `en attente`. Pour être visible par tous, il doit être ensuite mis à l'état `publié`. Pour le changement d'état d'`en attente` à `publié`, nous avons besoin d'une transition que nous appellerons `approuve_blogentry`. |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
17 |
|
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
18 |
Un état BlogEntry ne doit pas pouvoir être modifiable par les utilisateurs. Nous allons donc créé un groupe de modération `moderateurs` et ce groupe aura les permissions idoines pour publier un BlogEntry. |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
19 |
|
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
20 |
Il existe deux manières de créer un workflow: depuis l'interface utilisateur ou en le définissant dans le fichier ``migration/postcreate.py``. |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
21 |
Ce script est exécuté à chaque lancement de la commande ``cubicweb-ctl db-init``. |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
22 |
Nous encourageons vivement la création dans ``migration/postcreate.py`` que nous allons vous montrer ici. Lire `Sous le capot`_ pour en comprendre les raisons. |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
23 |
|
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
24 |
L'état d'une entité est sauvegardé par l'attribut `in_state` qui peut être ajouté à votre schéma d'entité par deux façons: |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
25 |
|
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
26 |
* héritage direct en utilisant la classe `cubicweb.schema.WorkflowableEntityType` |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
27 |
* par délégation en utilisant `cubicweb.schema.make_worflowable` (utilisable comme un décorateur également) |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
28 |
|
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
29 |
Pour notre exemple de BlogEntry, nous devons avoir: |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
30 |
|
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
31 |
.. sourcecode:: python |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
32 |
|
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
33 |
from cubicweb.schema import WorkflowableEntityType |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
34 |
|
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
35 |
class BlogEntry(EntityType, WorkflowableEntityType): |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
36 |
... |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
37 |
|
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
38 |
|
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
39 |
Création des états, transitions et les permissions de groupe |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
40 |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
41 |
|
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
42 |
Le script ``postcreate.py`` est exécuté dans un environnement spécial où plusieurs primitives *CubicWeb* peuvent être utilsées. |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
43 |
Elles sont toutes définies dans ``class ServerMigrationHelper``. |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
44 |
Nous allons maintenant voir dans le prochain example celles utilisées pour créer un workflow. |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
45 |
|
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
46 |
Pour définir notre workflow pour BlogDemo, veuillez ajouter les lignes suivantes au script ``migration/postcreate.py``: |
0 | 47 |
|
3322
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
48 |
.. sourcecode:: python |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
49 |
|
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
50 |
_ = unicode |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
51 |
|
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
52 |
moderators = add_entity('CWGroup', name=u"modérateurs") |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
53 |
|
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
54 |
Cela va ajouter le groupe utilisateur `moderators`. |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
55 |
|
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
56 |
.. sourcecode:: python |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
57 |
|
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
58 |
wf = add_workflow(u'une description succincte de votre workflow', 'BlogEntry') |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
59 |
|
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
60 |
Ceci va premièrement instancier un nouvel objet workflow avec une description sommaire mais pertinente et le type d'entité concerné (un tuple pour être utilisé pour des valeurs multiples). |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
61 |
|
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
62 |
.. sourcecode:: python |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
63 |
|
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
64 |
submitted = wf.add_state(_('submitted'), initial=True) |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
65 |
published = wf.add_state(_('published')) |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
66 |
|
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
67 |
``add_state`` attend comme premier argument le nom de l'état que vous voulez créer et un argument optionnel pour signifier si c'est l'état initial supposé pour ce type d'entité. |
0 | 68 |
|
3322
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
69 |
.. sourcecode:: python |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
70 |
|
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
71 |
wf.add_transition(_('approuve_blogentry'), (submitted,), published, ('moderators', 'managers'),) |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
72 |
|
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
73 |
``add_transition`` attend: |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
74 |
|
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
75 |
* comme premier argument le nom de la transition |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
76 |
* ensuite la liste des états pour lesquels les transitions peuvent être tirées, |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
77 |
* l'état attendu en fin de transition, |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
78 |
* et les permissions |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
79 |
(c'est-à-dire la liste des goupes utilisateurs qui peuvnet appliquer la transition; l'utilisateur devant appartenir à l'un des groupes listés pour être autoriser à exécuter l'action). |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
80 |
|
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
81 |
.. sourcecode:: python |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
82 |
|
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
83 |
|
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
84 |
checkpoint() |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
85 |
|
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
86 |
.. note:: |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
87 |
Dans le script de création d'un workflow, penser à mettre `_()` autour des noms d'états et de transitions pour que ceux si soient pris en compte par les scripts de gestion des catalogues i18n. |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
88 |
|
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
89 |
En complément de condition sur des groupes utilisateur dont l'utilisateur doit appartenir à l'in d'entre eux, vous pouvez utiliser une RQL condition. |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
90 |
Dans ce cas, l'utilisateur peut seulement exécuter une action si les deux conditions sont satisfaites. |
0 | 91 |
|
92 |
Pour la condition RQL sur une transition, on peut y mettre les substitutions suivantes : |
|
93 |
||
94 |
* `%(eid)s`, eid de l'objet |
|
95 |
* `%(ueid)s`, eid de l'utilisateur qui fait la requête |
|
96 |
* `%(seid)s`, eid de l'état courant de l'objet |
|
97 |
||
3322
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
98 |
.. image:: ../../images/03-transitions-view.en.png |
71
69a4bf8f5e49
Moved content from tutoriel to introduction and to wrokflow chapter.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents:
50
diff
changeset
|
99 |
|
3322
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
100 |
Vous pouvez remarqué que dans la boîte d'action d'un BlogEntry, l'état est maintenant listé ainsi que les possibles transitions définis pour l'état en cours dans le workflow. Les transitions ne sont seulement affichées pour les utilisateurs ayant les bonnes permissions. |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
101 |
Dans notre exemple, la transition `approuve_blogentry` sera seulement affichée pour les utilisateurs appartenant au groupe `moderators` or `managers`. |
71
69a4bf8f5e49
Moved content from tutoriel to introduction and to wrokflow chapter.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents:
50
diff
changeset
|
102 |
|
69a4bf8f5e49
Moved content from tutoriel to introduction and to wrokflow chapter.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents:
50
diff
changeset
|
103 |
|
3322
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
104 |
Sous le capot |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
105 |
~~~~~~~~~~~~~ |
71
69a4bf8f5e49
Moved content from tutoriel to introduction and to wrokflow chapter.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents:
50
diff
changeset
|
106 |
|
3322
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
107 |
Un workflow est une collection d'entités de type `State`` et ``Transition`` qui sont des types d'entités standards de *CubicWeb*. |
71
69a4bf8f5e49
Moved content from tutoriel to introduction and to wrokflow chapter.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents:
50
diff
changeset
|
108 |
|
3322
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
109 |
Par exemple, les lignes précédentes: |
71
69a4bf8f5e49
Moved content from tutoriel to introduction and to wrokflow chapter.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents:
50
diff
changeset
|
110 |
|
3322
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
111 |
.. sourcecode:: python |
71
69a4bf8f5e49
Moved content from tutoriel to introduction and to wrokflow chapter.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents:
50
diff
changeset
|
112 |
|
3322
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
113 |
submitted = wf.add_state(_('en attente'), initial=True) |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
114 |
published = wf.add_state(_('publié')) |
71
69a4bf8f5e49
Moved content from tutoriel to introduction and to wrokflow chapter.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents:
50
diff
changeset
|
115 |
|
3322
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
116 |
vont créé deux entités de type ``State``, l'une avec le nom 'submitted' et l'autre avec le nom 'published'. Tandis que: |
71
69a4bf8f5e49
Moved content from tutoriel to introduction and to wrokflow chapter.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents:
50
diff
changeset
|
117 |
|
3322
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
118 |
.. sourcecode:: python |
71
69a4bf8f5e49
Moved content from tutoriel to introduction and to wrokflow chapter.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents:
50
diff
changeset
|
119 |
|
3322
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
120 |
wf.add_transition(_('approuve_blogentry'), (submitted,), published, ('moderators', 'managers'),) |
71
69a4bf8f5e49
Moved content from tutoriel to introduction and to wrokflow chapter.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents:
50
diff
changeset
|
121 |
|
3322
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
122 |
va créé une entité de type ``Transition`` avec le nom `approuve_blogentry` qui sera relié aux entités ``State`` créées précédemment. |
71
69a4bf8f5e49
Moved content from tutoriel to introduction and to wrokflow chapter.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents:
50
diff
changeset
|
123 |
|
3322
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
124 |
Dès lors, nous pouvons utiliser l'interface d'administration pour ces opérations. Mais ce n'est pas recommandé à cause de la complexité superflue et du fait que ces changements ne seront locaux qu'à cette instance. |
71
69a4bf8f5e49
Moved content from tutoriel to introduction and to wrokflow chapter.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents:
50
diff
changeset
|
125 |
|
3322
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
126 |
En effet, si vous créez les états et les transitions à travers l'interface utilisateur, la prochaine initialisation de la base de données vous oblige à recréer toutes les entités. |
a522f86ab617
[D] book: define a workflow
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
1398
diff
changeset
|
127 |
L'interface utilisateur devrait être seulement connu par vous pour la visualisation des états et transitions, mais ce n'est pas celle appropriée pour définir vos workflows applicatifs. |
71
69a4bf8f5e49
Moved content from tutoriel to introduction and to wrokflow chapter.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents:
50
diff
changeset
|
128 |
|
69a4bf8f5e49
Moved content from tutoriel to introduction and to wrokflow chapter.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents:
50
diff
changeset
|
129 |