Donate236Patreon119


Diagrammes d'activité (béta)

La syntaxe courante pour les diagrammes d'activité possède plusieurs limitations et inconvénients (par exemple, la difficulté à maintenir un diagramme lors de modifications).

Une complète nouvelle syntaxe et implémentation est proposée avec beta version aux utilisateurs (commence avec V7947), ainsi cela permet de définir une nouvelle et meilleure syntaxe.

Un autre avantage de cette nouvelle implémentation est qu'il n'y a pas besoin d'avoir Graphviz d'installé (comme pour les diagrammes de séquences).

La nouvelle syntaxe remplace l'ancienne. Cependant, pour des raisons de compatibilité, l'ancienne syntaxe reste reconnu, pour assurer la compatibilité ascendante.

Les utilisateurs sont simplement encouragés à migrer vers la nouvelle syntaxe.

Activité simple

Les étiquettes d'activités commencent avec : et finissent avec ;.

Le formatage de texte peut être fait en utilisant la syntaxe créole wiki.

Les activités sont implicitement liées à leur ordre de définition.

@startuml
:Hello world;
:This is on defined on
several **lines**;
@enduml

Départ/Arrêt [start, stop, end]

Vous pouvez utiliser les mots clés start et stop pour indiquer le début et la fin du diagramme.

@startuml
start
:Hello world;
:This is on defined on
several **lines**;
stop
@enduml

Vous pouvez aussi utiliser le mot clés end.

@startuml
start
:Hello world;
:This is on defined on
several **lines**;
end
@enduml

Conditionnel [if, then, else]

Vous pouvez utiliser les mots clés if, then et else pour mettre des tests dans votre diagramme. Les étiquettes peuvent être fournies entre parenthèses.

@startuml

start

if (Graphviz installed?) then (yes)
  :process all\ndiagrams;
else (no)
  :process only
  __sequence__ and __activity__ diagrams;
endif

stop

@enduml

Plusieurs conditions (en mode horizontal)

Vous pouvez utiliser le mot clé elseif pour avoir plusieurs tests, par défaut le mode est horizontal :

@startuml
start
if (condition A) then (yes)
  :Text 1;
elseif (condition B) then (yes)
  :Text 2;
  stop
elseif (condition C) then (yes)
  :Text 3;
elseif (condition D) then (yes)
  :Text 4;
else (nothing)
  :Text else;
endif
stop
@enduml

Plusieurs conditions (en mode vertical)

Vous pouvez utiliser la commande !pragma useVerticalIf on pour avoir les conditions en mode vertical :

@startuml
!pragma useVerticalIf on
start
if (condition A) then (yes)
  :Text 1;
elseif (condition B) then (yes)
  :Text 2;
  stop
elseif (condition C) then (yes)
  :Text 3;
elseif (condition D) then (yes)
  :Text 4;
else (nothing)
  :Text else;
endif
stop
@enduml

[Réf. QA-3931]

Boucle de répétition [repeat, repeatwhile, backward]

Vous pouvez utiliser les mots clés repeat et repeatwhile pour créer une boucle.

@startuml

start

repeat
  :read data;
  :generate diagrams;
repeat while (more data?)

stop

@enduml

Il est également possible :

@startuml

start

repeat :foo as starting label;
  :read data;
  :generate diagrams;
backward:This is backward;
repeat while (more data?)

stop

@enduml

Boucle « tant que » [while]

Vous pouvez utiliser les mots clés while et end while pour définir une boucle.

@startuml

start

while (data available?)
  :read data;
  :generate diagrams;
endwhile

stop

@enduml

Il est possible de mettre un libellé après le mot clé endwhile ou bien avec le mot clé is.

@startuml
while (check filesize ?) is (not empty)
  :read file;
endwhile (empty)
:close file;
@enduml

Processus parallèle [fork, fork again, end fork]

Vous pouvez utiliser les mots clés fork, fork again et end fork pour indiquer un processus parallèle.

@startuml

start

if (multiprocessor?) then (yes)
  fork
    :Treatment 1;
  fork again
    :Treatment 2;
  end fork
else (monoproc)
  :Treatment 1;
  :Treatment 2;
endif

@enduml

Notes

Le formattage de texte peut être fait en utilisant la syntaxe créole wiki.

Une note peut aussi être détachée, à l'aide du mot-clé floating.

@startuml

start
:foo1;
floating note left: This is a note
:foo2;
note right
  This note is on several
  //lines// and can
  contain <b>HTML</b>
  ====
  * Calling the method ""foo()"" is prohibited
end note
stop

@enduml

Couleurs

Vous pouvez spécifier une couleur pour certaines activités.

@startuml

start
:starting progress;
#HotPink:reading configuration files
These files should edited at this point!;
#AAAAAA:ending of the process;

@enduml

Flèches

En utilisant la notation ->, vous pouvez ajouter du texte à une flèche, et changer sa couleur.

Il est aussi possible d'avoir des flèches en pointillé, en gras, avec des tirets ou bien complètement cachées.

@startuml
:foo1;
-> You can put text on arrows;
if (test) then
  -[#blue]->
  :foo2;
  -[#green,dashed]-> The text can
  also be on several lines
  and **very** long...;
  :foo3;
else
  -[#black,dotted]->
  :foo4;
endif
-[#gray,bold]->
:foo5;
@enduml

Connecteurs

Il est possible d'utiser des parenthèses pour dessiner des connecteurs.

@startuml
start
:Some activity;
(A)
detach
(A)
:Other activity;
@enduml

Groupement

Vous pouvez grouper les activités ensembles en définissant les partitions.

@startuml
start
partition Initialization {
    :read config file;
    :init internal variable;
}
partition Running {
    :wait for user interaction;
    :print information;
}

stop
@enduml

Couloirs [|]

À l'aide du symbole |, il est possible de définir des couloirs d'éxecution.

Il est aussi possible de changer la couleur d'un couloir.

@startuml
|Swimlane1|
start
:foo1;
|#AntiqueWhite|Swimlane2|
:foo2;
:foo3;
|Swimlane1|
:foo4;
|Swimlane2|
:foo5;
stop
@enduml

Détacher [detach]

Il est possible de supprimer une flèche en utilisant le mot clé detach.

@startuml
 :start;
 fork
   :foo1;
   :foo2;
 fork again
   :foo3;
   detach
 endfork
 if (foo4) then
   :foo5;
   detach
 endif
 :foo6;
 detach
 :foo7;
 stop
@enduml

SDL (Specification and Description Language)

En changeant le séparateur final ;, vous pouvez déterminer différents rendus pour l’activité, conformément au langage de description et de spécification (LDS) ou Specification and Description Language (SDL) (en anglais) :

@startuml
:Ready;
:next(o)|
:Receiving;
split
 :nak(i)<
 :ack(o)>
split again
 :ack(i)<
 :next(o)
 on several line|
 :i := i + 1]
 :ack(o)>
split again
 :err(i)<
 :nak(o)>
split again
 :foo/
split again
 :bar\\
split again
 :i > 5}
stop
end split
:finish;
@enduml

Exemple complet

@startuml

start
:ClickServlet.handleRequest();
:new page;
if (Page.onSecurityCheck) then (true)
  :Page.onInit();
  if (isForward?) then (no)
    :Process controls;
    if (continue processing?) then (no)
      stop
    endif

    if (isPost?) then (yes)
      :Page.onPost();
    else (no)
      :Page.onGet();
    endif
    :Page.onRender();
  endif
else (false)
endif

if (do redirect?) then (yes)
  :redirect process;
else
  if (do forward?) then (yes)
    :Forward request;
  else (no)
    :Render page template;
  endif
endif

stop

@enduml