L'ancienne syntaxe pour les diagrammes d'activité possédait plusieurs limitations et inconvénients (par exemple, la difficulté à maintenir un diagramme lors de modifications). Une nouvelle syntaxe est maintenant proposée aux utilisateurs. 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 reconnue, pour assurer la compatibilité ascendante. Les utilisateurs sont simplement encouragés à migrer vers la nouvelle syntaxe. 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)]* 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
|
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
|
🎉 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
|
| - Action simple
- Départ/Arrêt [start, stop, end]
- Conditionnel [if, then, else]
- Switch and case [switch, case, endswitch]
- Arrêt après une action au sein d'une condition [kill, detach]
- Boucle de répétition [repeat, repeatwhile, backward]
- Interruption d'une boucle [break]
- Goto and Label Processing [label, goto]
- Boucle « tant que » [while]
- Traitement parallèle [fork, fork again, end fork, end merge]
- Traitement fractionné
- Notes
- Couleurs
- Lignes sans pointe de flèches
- Flèches
- Connecteurs
- Connecteurs en couleur
- Regroupement ou partition
- Swimlanes
- Détacher ou arrêter [detach, kill]
- SDL (Specification and Description Language)
- Exemple complet
- Style de condition
- Style de fin de condition
- Avec le style (global)
|