La
syntaxe précédente utilisée pour les diagrammes d'activité présentait plusieurs limitations et problèmes de maintenabilité. Conscients de ces inconvénients, nous avons introduit une syntaxe et une implémentation entièrement remaniées qui sont non seulement conviviales mais aussi plus stables.
Avantages de la nouvelle syntaxe
- Aucune dépendance à l'égard de Graphviz : Tout comme pour les diagrammes de séquence, la nouvelle syntaxe élimine la nécessité d'installer Graphviz, ce qui simplifie le processus de configuration.
- Facilité de maintenance : La nature intuitive de la nouvelle syntaxe signifie qu'il est plus facile de gérer et de maintenir vos diagrammes.
Transition vers la nouvelle syntaxe
Bien que nous continuions à prendre en charge l'ancienne syntaxe pour maintenir la compatibilité, nous encourageons vivement les utilisateurs à migrer vers la nouvelle syntaxe pour tirer parti des fonctionnalités améliorées et des avantages qu'elle offre.
Faites le changement dès aujourd'hui et découvrez un processus de création de diagrammes plus rationalisé et plus efficace avec la nouvelle syntaxe de diagramme d'activité.
L'étiquette des activités commence par
:
et se termine par
;
.
Le formatage du texte peut se faire en utilisant la
syntaxe wiki créole.
Ils sont implicitement liés dans l'ordre de leur définition.
🎉 Copied!
|
@startuml
:Hello world;
:This is defined on
several **lines**;
@enduml
|
Vous pouvez utiliser les mots clés
start
et
stop
pour indiquer le début et la fin du diagramme.
🎉 Copied!
|
@startuml
start
:Hello world;
:This is on defined on
several **lines**;
stop
@enduml
|
Vous pouvez aussi utiliser le mot clé
end
.
🎉 Copied!
|
@startuml
start
:Hello world;
:This is on defined on
several **lines**;
end
@enduml
|
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.
Les trois syntaxes possibles sont:
🎉 Copied!
|
@startuml
start
if (Graphviz installed?) then (yes)
:process all\ndiagrams;
else (no)
:process only
__sequence__ and __activity__ diagrams;
endif
stop
@enduml
|
🎉 Copied!
|
@startuml
if (color?) is (<color:red>red) then
:print red;
else
:print not red;
@enduml
|
if (...) equals (...) then
🎉 Copied!
|
@startuml
if (counter?) equals (5) then
:print 5;
else
:print not 5;
@enduml
|
[Ref. QA-301]
Plusieurs conditions (en mode horizontal)
Vous pouvez utiliser le mot clé
elseif
pour avoir plusieurs tests, par défaut le mode est horizontal :
🎉 Copied!
|
@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 :
🎉 Copied!
|
@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]
*[Refs. [QA-3931](https:
forum.plantuml.net/3931/please-provide-elseif-structure-vertically-activity-diagrams), [issue-582](https:github.com/plantuml/plantuml/issues/582)]*
*[Refs. [QA-3931](https:
forum.plantuml.net/3931/please-provide-elseif-structure-vertically-activity-diagrams), [GH-582](https:github.com/plantuml/plantuml/issues/582)]*
WARNING
This translation need to be updated. WARNING
Vous pouvez utiliser les mots clés
switch
,
case
et
endswitch
pour mettre des tests dans votre diagramme.
Les étiquettes peuvent être fournies entre parenthèses.
🎉 Copied!
|
@startuml
start
switch (test?)
case ( condition A )
:Text 1;
case ( condition B )
:Text 2;
case ( condition C )
:Text 3;
case ( condition D )
:Text 4;
case ( condition E )
:Text 5;
endswitch
stop
@enduml
|
Vous pouvez arrêter le processus après une action.
🎉 Copied!
|
@startuml
if (condition?) then
:error;
stop
endif
#palegreen:action;
@enduml
|
Vous pouvez également utiliser les mots clé
kill
ou
detach
pour mettre fin au processus directement dans une action.
🎉 Copied!
|
@startuml
if (condition?) then
#pink:error;
kill
endif
#palegreen:action;
@enduml
|
[Ref. QA-265]
🎉 Copied!
|
@startuml
if (condition?) then
#pink:error;
detach
endif
#palegreen:action;
@enduml
|
WARNING
This translation need to be updated. WARNING
Vous pouvez utiliser les mots clés
repeat
et
repeatwhile
pour créer une boucle.
🎉 Copied!
|
@startuml
start
repeat
:read data;
:generate diagrams;
repeat while (more data?)
stop
@enduml
|
Il est également possible :
- d'utiliser une vrai action comme cible de répétition, après le premier mot clé
repeat
,
- d'insérer une action dans le chemin de retour à l'aide du mot clé
backward
.
🎉 Copied!
|
@startuml
start
repeat :foo as starting label;
:read data;
:generate diagrams;
backward:This is backward;
repeat while (more data?)
stop
@enduml
|
[Ref. QA-5826]
WARNING
This translation need to be updated. WARNING
Vous pouvez utiliser le mot clé
break
après une action sur une boucle:
🎉 Copied!
|
@startuml
start
repeat
:Test something;
if (Something went wrong?) then (no)
#palegreen:OK;
break
endif
->NOK;
:Alert "Error with long text";
repeat while (Something went wrong with long text?) is (yes) not (no)
->//merged step//;
:Alert "Success";
stop
@enduml
|
[Ref. QA-6105]
⚠ It is currently only experimental 🚧
You can use
label
and
goto
keywords to denote goto processing, with:
label <label_name>
goto <label_name>
🎉 Copied!
|
@startuml
title Point two queries to same activity\nwith `goto`
start
if (Test Question?) then (yes)
'space label only for alignment
label sp_lab0
label sp_lab1
'real label
label lab
:shared;
else (no)
if (Second Test Question?) then (yes)
label sp_lab2
goto sp_lab1
else
:nonShared;
endif
endif
:merge;
@enduml
|
[Ref. QA-15026, QA-12526 and initially QA-1626]
Vous pouvez utiliser les mots clés
while
et
end while
pour définir une boucle.
🎉 Copied!
|
@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
.
🎉 Copied!
|
@startuml
while (check filesize ?) is (not empty)
:read file;
endwhile (empty)
:close file;
@enduml
|
WARNING
This translation need to be updated. WARNING
Vous pouvez utiliser les mots clés
fork
,
fork again
et
end fork
ou
end merge
pour indiquer un traitement parallèle.
Simple fork
🎉 Copied!
|
@startuml
start
fork
:action 1;
fork again
:action 2;
end fork
stop
@enduml
|
fork
avec fusion finale
🎉 Copied!
|
@startuml
start
fork
:action 1;
fork again
:action 2;
end merge
stop
@enduml
|
[Réf. QA-5320]
🎉 Copied!
|
@startuml
start
fork
:action 1;
fork again
:action 2;
fork again
:action 3;
fork again
:action 4;
end merge
stop
@enduml
|
🎉 Copied!
|
@startuml
start
fork
:action 1;
fork again
:action 2;
end
end merge
stop
@enduml
|
[Réf. QA-13731]
Label sur end fork
(ou UML joinspec)
🎉 Copied!
|
@startuml
start
fork
:action A;
fork again
:action B;
end fork {or}
stop
@enduml
|
🎉 Copied!
|
@startuml
start
fork
:action A;
fork again
:action B;
end fork {and}
stop
@enduml
|
[Réf. QA-5346]
Autre exemple
🎉 Copied!
|
@startuml
start
if (multiprocessor?) then (yes)
fork
:Treatment 1;
fork again
:Treatment 2;
end fork
else (monoproc)
:Treatment 1;
:Treatment 2;
endif
@enduml
|
Split
Vous pouvez utiliser les mots-clés
split
,
split again
et
end split
pour indiquer un traitement fractionné
🎉 Copied!
|
@startuml
start
split
:A;
split again
:B;
split again
:C;
split again
:a;
:b;
end split
:D;
end
@enduml
|
Fractionnement de l'entrée (multidébut)
Vous pouvez utiliser les flèches
hidden
pour effectuer un fractionnement de l'entrée (multidébut)
🎉 Copied!
|
@startuml
split
-[hidden]->
:A;
split again
-[hidden]->
:B;
split again
-[hidden]->
:C;
end split
:D;
@enduml
|
🎉 Copied!
|
@startuml
split
-[hidden]->
:A;
split again
-[hidden]->
:a;
:b;
split again
-[hidden]->
(Z)
end split
:D;
@enduml
|
[Ref. QA-8662]
Fractionnement de la sortie (plusieurs extrémités)
Vous pouvez utiliser
kill
ou
detach
pour effectuer un fractionnement de la sortie (plusieurs extrémités)
🎉 Copied!
|
@startuml
start
split
:A;
kill
split again
:B;
detach
split again
:C;
kill
end split
@enduml
|
🎉 Copied!
|
@startuml
start
split
:A;
kill
split again
:b;
:c;
detach
split again
(Z)
detach
split again
end
split again
stop
end split
@enduml
|
Le formatage du texte peut être fait en utilisant la
syntaxe wiki créole.
Une note peut être flottante, en utilisant le mot clé
floating
🎉 Copied!
|
@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
|
Vous pouvez ajouter une note sur l'activité de retour en arrière
🎉 Copied!
|
@startuml
start
repeat :Enter data;
:Submit;
backward :Warning;
note right: Note
repeat while (Valid?) is (No) not (Yes)
stop
@enduml
|
[Ref. QA-11788]
Vous pouvez ajouter une note sur l'activité de partition
🎉 Copied!
|
@startuml
start
partition "**process** HelloWorld" {
note
This is my note
----
//Creole test//
end note
:Ready;
:HelloWorld(i)>
:Hello-Sent;
}
@enduml
|
[Réf. QA-2398]
Vous pouvez spécifier une
couleur pour certaines activités
🎉 Copied!
|
@startuml
start
:starting progress;
#HotPink:reading configuration files
These files should be edited at this point!;
#AAAAAA:ending of the process;
@enduml
|
Vous pouvez également utiliser une
couleur dégradée
🎉 Copied!
|
@startuml
start
partition #red/white testPartition {
#blue\green:testActivity;
}
@enduml
|
[Réf. QA-4906]
Vous pouvez utiliser
skinparam ArrowHeadColor none
pour connecter des activités en utilisant uniquement des lignes, sans flèches (sans pointe sur les flèches).
🎉 Copied!
|
@startuml
skinparam ArrowHeadColor none
start
:Hello world;
:This is on defined on
several **lines**;
stop
@enduml
|
🎉 Copied!
|
@startuml
skinparam ArrowHeadColor none
start
repeat :Enter data;
:Submit;
backward :Warning;
repeat while (Valid?) is (No) not (Yes)
stop
@enduml
|
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.
🎉 Copied!
|
@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
|
Il est possible d'utiliser des parenthèses pour dessiner des connecteurs.
🎉 Copied!
|
@startuml
start
:Some activity;
(A)
detach
(A)
:Other activity;
@enduml
|
Vous pouvez ajouter des
couleurs aux connecteurs.
🎉 Copied!
|
@startuml
start
:The connector below
wishes he was blue;
#blue:(B)
:This next connector
feels that she would
be better off green;
#green:(G)
stop
@enduml
|
[Ref. QA-10077]
Groupe
Vous pouvez regrouper des activités en définissant un groupe
🎉 Copied!
|
@startuml
start
group Initialization
:read config file;
:init internal variable;
end group
group Running group
:wait for user interaction;
:print information;
end group
stop
@enduml
|
Partition
Vous pouvez regrouper des activités en définissant une partition
🎉 Copied!
|
@startuml
start
partition Initialization {
:read config file;
:init internal variable;
}
partition Running {
:wait for user interaction;
:print information;
}
stop
@enduml
|
Il est également possible de changer la
couleur de la partition
🎉 Copied!
|
@startuml
start
partition #lightGreen "Input Interface" {
:read config file;
:init internal variable;
}
partition Running {
:wait for user interaction;
:print information;
}
stop
@enduml
|
[Réf. QA-2793]
Il est également possible d'ajouter un
lien à la partition
🎉 Copied!
|
@startuml
start
partition "[[http://plantuml.com partition_name]]" {
:read doc. on [[http://plantuml.com plantuml_website]];
:test diagram;
}
end
@enduml
|
[Réf. QA-542]
Groupe, partition, paquet, rectangle ou carte
Vous pouvez regrouper des activités en définissant :
- groupe ;
- partition ;
- paquet ;
- rectangle ;
- carte
🎉 Copied!
|
@startuml
start
group Group
:Activity;
end group
floating note: Note on Group
partition Partition {
:Activity;
}
floating note: Note on Partition
package Package {
:Activity;
}
floating note: Note on Package
rectangle Rectangle {
:Activity;
}
floating note: Note on Rectangle
card Card {
:Activity;
}
floating note: Note on Card
end
@enduml
|
En utilisant le tube
|
, vous pouvez définir des swimlanes.
Il est également possible de changer la
couleur des swimlanes
🎉 Copied!
|
@startuml
|Swimlane1|
start
:foo1;
|#AntiqueWhite|Swimlane2|
:foo2;
:foo3;
|Swimlane1|
:foo4;
|Swimlane2|
:foo5;
stop
@enduml
|
Vous pouvez ajouter une boucle conditionnelle
if
ou
repeat
ou
while
à l'intérieur des swimlanes
🎉 Copied!
|
@startuml
|#pink|Actor_For_red|
start
if (color?) is (red) then
#pink:**action red**;
:foo1;
else (not red)
|#lightgray|Actor_For_no_red|
#lightgray:**action not red**;
:foo2;
endif
|Next_Actor|
#lightblue:foo3;
:foo4;
|Final_Actor|
#palegreen:foo5;
stop
@enduml
|
Vous pouvez également utiliser
alias
avec les swimlanes, avec cette syntaxe :
|[#<color>|]<swimlane_alias>| <swimlane_title>
🎉 Copied!
|
@startuml
|#palegreen|f| fisherman
|c| cook
|#gold|e| eater
|f|
start
:go fish;
|c|
:fry fish;
|e|
:eat fish;
stop
@enduml
|
[Réf. QA-2681]
Il est possible de supprimer une flèche en utilisant le mot clé
detach
ou
kill
:
🎉 Copied!
|
@startuml
:start;
fork
:foo1;
:foo2;
fork again
:foo3;
detach
endfork
if (foo4) then
:foo5;
detach
endif
:foo6;
detach
:foo7;
stop
@enduml
|
🎉 Copied!
|
@startuml
:start;
fork
:foo1;
:foo2;
fork again
:foo3;
kill
endfork
if (foo4) then
:foo5;
kill
endif
:foo6;
kill
:foo7;
stop
@enduml
|
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) :
🎉 Copied!
|
@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
|
WARNING
This translation need to be updated. WARNING
🎉 Copied!
|
@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
|
Style intérieur (par défaut)
🎉 Copied!
|
@startuml
skinparam conditionStyle inside
start
repeat
:act1;
:act2;
repeatwhile (<b>end)
:act3;
@enduml
|
🎉 Copied!
|
@startuml
start
repeat
:act1;
:act2;
repeatwhile (<b>end)
:act3;
@enduml
|
Style diamant
🎉 Copied!
|
@startuml
skinparam conditionStyle diamond
start
repeat
:act1;
:act2;
repeatwhile (<b>end)
:act3;
@enduml
|
Style InsideDiamond (ou Foo1)
🎉 Copied!
|
@startuml
skinparam conditionStyle InsideDiamond
start
repeat
:act1;
:act2;
repeatwhile (<b>end)
:act3;
@enduml
|
🎉 Copied!
|
@startuml
skinparam conditionStyle foo1
start
repeat
:act1;
:act2;
repeatwhile (<b>end)
:act3;
@enduml
|
Ref. QA-1290 et #400]
Style diamant (par défaut)
🎉 Copied!
|
@startuml
skinparam ConditionEndStyle diamond
:A;
if (decision) then (yes)
:B1;
else (no)
endif
:C;
@enduml
|
- Avec deux branches (
B1
, B2
)
🎉 Copied!
|
@startuml
skinparam ConditionEndStyle diamond
:A;
if (decision) then (yes)
:B1;
else (no)
:B2;
endif
:C;
@enduml
@enduml
|
Style ligne horizontale (hline)
🎉 Copied!
|
@startuml
skinparam ConditionEndStyle hline
:A;
if (decision) then (yes)
:B1;
else (no)
endif
:C;
@enduml
|
- Avec deux branches (
B1
, B2
)
🎉 Copied!
|
@startuml
skinparam ConditionEndStyle hline
:A;
if (decision) then (yes)
:B1;
else (no)
:B2;
endif
:C;
@enduml
@enduml
|
[Réf. QA-4015]
Sans style (par défaut)
🎉 Copied!
|
@startuml
start
:init;
-> test of color;
if (color?) is (<color:red>red) then
:print red;
else
:print not red;
note right: no color
endif
partition End {
:end;
}
-> this is the end;
end
@enduml
|
Avec style
Vous pouvez utiliser le
style pour modifier le rendu des éléments.
🎉 Copied!
|
@startuml
<style>
activityDiagram {
BackgroundColor #33668E
BorderColor #33668E
FontColor #888
FontName arial
diamond {
BackgroundColor #ccf
LineColor #00FF00
FontColor green
FontName arial
FontSize 15
}
arrow {
FontColor gold
FontName arial
FontSize 15
}
partition {
LineColor red
FontColor green
RoundCorner 10
BackgroundColor PeachPuff
}
note {
FontColor Blue
LineColor Navy
BackgroundColor #ccf
}
}
document {
BackgroundColor transparent
}
</style>
start
:init;
-> test of color;
if (color?) is (<color:red>red) then
:print red;
else
:print not red;
note right: no color
endif
partition End {
:end;
}
-> this is the end;
end
@enduml
|