|
|
|
|
Diagramme d'activité (nouvelle syntaxe)
|
Activity Diagram (New Syntax)
|
|
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é.
|
The previous syntax used for activity diagrams encountered several limitations and maintainability issues. Recognizing these drawbacks, we have introduced a wholly revamped syntax and implementation that is not only user-friendly but also more stable.
Benefits of the New Syntax
- No Dependency on Graphviz: Just like with sequence diagrams, the new syntax eliminates the necessity for Graphviz installation, thereby simplifying the setup process.
- Ease of Maintenance: The intuitive nature of the new syntax means it is easier to manage and maintain your diagrams.
Transition to the New Syntax
While we will continue to support the old syntax to maintain compatibility, we highly encourage users to migrate to the new syntax to leverage the enhanced features and benefits it offers.
Make the shift today and experience a more streamlined and efficient diagramming process with the new activity diagram syntax.
|
Action simple
|
Simple action
|
|
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.
@startuml
:Hello world;
:This is defined on
several **lines**;
@enduml
|
Activities label starts with : and ends with ; .
Text formatting can be done using creole wiki syntax.
They are implicitly linked in their definition order.
@startuml
:Hello world;
:This is defined on
several **lines**;
@enduml
|
Départ/Arrêt [start, stop, end]
|
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é end .
@startuml
start
:Hello world;
:This is on defined on
several **lines**;
end
@enduml
|
You can use start and stop keywords to denote the
beginning and the end of a diagram.
@startuml
start
:Hello world;
:This is defined on
several **lines**;
stop
@enduml
You can also use the end keyword.
@startuml
start
:Hello world;
:This is defined on
several **lines**;
end
@enduml
|
Conditionnel [if, then, else]
|
Conditional
|
|
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:
@startuml
start
if (Graphviz installed?) then (yes)
:process all\ndiagrams;
else (no)
:process only
__sequence__ and __activity__ diagrams;
endif
stop
@enduml
@startuml
if (color?) is (<color:red>red) then
:print red;
else
:print not red;
@enduml
if (...) equals (...) then
@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 :
@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]
*[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
|
You can use if , then , else and endif keywords to put tests in your diagram.
Labels can be provided using parentheses.
The 3 syntaxes are possible:
if (...) then (...) ... [else (...) ...] endif
@startuml
start
if (Graphviz installed?) then (yes)
:process all\ndiagrams;
else (no)
:process only
__sequence__ and __activity__ diagrams;
endif
stop
@enduml
if (...) is (...) then ... [else (...) ...] endif
@startuml
if (color?) is (<color:red>red) then
:print red;
else
:print not red;
endif
@enduml
if (...) equals (...) then ... [else (...) ...] endif
@startuml
if (counter?) equals (5) then
:print 5;
else
:print not 5;
endif
@enduml
[Ref. QA-301]
Several tests (horizontal mode)
You can use the elseif keyword to have several tests (by default, it is the horizontal mode):
@startuml
start
if (condition A) then (yes)
:Text 1;
elseif (condition B) then (yes)
:Text 2;
stop
(no) elseif (condition C) then (yes)
:Text 3;
(no) elseif (condition D) then (yes)
:Text 4;
else (nothing)
:Text else;
endif
stop
@enduml
Several tests (vertical mode)
You can use the command !pragma useVerticalIf on to have the tests in vertical mode:
@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
You can use the -P command-line option to specify the pragma:
java -jar plantuml.jar -PuseVerticalIf=on
[Refs. QA-3931, GH-582]
|
Switch and case [switch, case, endswitch]
|
Switch and case [switch, case, endswitch]
|
|
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.
@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
|
You can use switch , case and endswitch keywords to put switch in your diagram.
Labels can be provided using parentheses.
@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
|
Arrêt après une action au sein d'une condition [kill, detach]
|
Conditional with stop on an action [kill, detach]
|
|
Vous pouvez arrêter le processus après une action.
@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.
@startuml
if (condition?) then
#pink:error;
kill
endif
#palegreen:action;
@enduml
[Ref. QA-265]
@startuml
if (condition?) then
#pink:error;
detach
endif
#palegreen:action;
@enduml
WARNING This translation need to be updated. WARNING
|
You can stop action on a if loop.
@startuml
if (condition?) then
:error;
stop
endif
#palegreen:action;
@enduml
But if you want to stop at the precise action, you can use the kill or detach keyword:
@startuml
if (condition?) then
#pink:error;
kill
endif
#palegreen:action;
@enduml
[Ref. QA-265]
@startuml
if (condition?) then
#pink:error;
detach
endif
#palegreen:action;
@enduml
|
Boucle de répétition [repeat, repeatwhile, backward]
|
Repeat loop
|
|
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 :
- 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 .
@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
|
Simple repeat loop
You can use repeat and repeat while keywords to have repeat loops.
@startuml
start
repeat
:read data;
:generate diagrams;
repeat while (more data?) is (yes) not (no)
stop
@enduml
Repeat loop with repeat action and backward action
It is also possible to use a full action as repeat target and insert an action in the return path using the backward keyword.
@startuml
start
repeat :foo as starting label;
:read data;
:generate diagrams;
backward:This is backward;
repeat while (more data?) is (yes)
->no;
stop
@enduml
[Ref. QA-5826]
|
Interruption d'une boucle [break]
|
Break on a repeat loop [break]
|
|
Vous pouvez utiliser le mot clé break après une action sur une boucle:
@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]
|
You can use the break keyword after an action on a loop.
@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]
|
|
Goto and Label Processing [label, goto]
|
|
|
⚠ It is currently only experimental 🚧
You can use label and goto keywords to denote goto processing, with:
label <label_name>
goto <label_name>
@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]
|
Boucle « tant que » [while]
|
While loop
|
|
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
WARNING This translation need to be updated. WARNING
|
Simple while loop
You can use while and endwhile keywords to have while loop.
@startuml
start
while (data available?)
:read data;
:generate diagrams;
endwhile
stop
@enduml
It is possible to provide a label after the endwhile keyword, or using the is keyword.
@startuml
while (check filesize ?) is (not empty)
:read file;
endwhile (empty)
:close file;
@enduml
While loop with backward action
It is also possible to insert an action in the return path using the backward keyword.
@startuml
while (check filesize ?) is (not empty)
:read file;
backward:log;
endwhile (empty)
:close file;
@enduml
[Ref. QA-11144]
Infinite while loop
If you are using detach to form an infinite while loop, then you will want to also hide the partial arrow that results using -[hidden]->
@startuml
:Step 1;
if (condition1) then
while (loop forever)
:Step 2;
endwhile
-[hidden]->
detach
else
:end normally;
stop
endif
@enduml
|
Traitement parallèle [fork, fork again, end fork, end merge]
|
Parallel processing [fork, fork again, end fork, end merge]
|
|
Vous pouvez utiliser les mots clés fork , fork again et end fork ou end merge pour indiquer un traitement parallèle.
Simple fork
@startuml
start
fork
:action 1;
fork again
:action 2;
end fork
stop
@enduml
fork avec fusion finale
@startuml
start
fork
:action 1;
fork again
:action 2;
end merge
stop
@enduml
[Réf. QA-5320]
@startuml
start
fork
:action 1;
fork again
:action 2;
fork again
:action 3;
fork again
:action 4;
end merge
stop
@enduml
@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)
@startuml
start
fork
:action A;
fork again
:action B;
end fork {or}
stop
@enduml
@startuml
start
fork
:action A;
fork again
:action B;
end fork {and}
stop
@enduml
[Réf. QA-5346]
Autre exemple
@startuml
start
if (multiprocessor?) then (yes)
fork
:Treatment 1;
fork again
:Treatment 2;
end fork
else (monoproc)
:Treatment 1;
:Treatment 2;
endif
@enduml
|
You can use fork , fork again and end fork or end merge keywords to denote parallel processing.
Simple fork
@startuml
start
fork
:action 1;
fork again
:action 2;
end fork
stop
@enduml
fork with end merge
@startuml
start
fork
:action 1;
fork again
:action 2;
end merge
stop
@enduml
[Ref. QA-5320]
@startuml
start
fork
:action 1;
fork again
:action 2;
fork again
:action 3;
fork again
:action 4;
end merge
stop
@enduml
@startuml
start
fork
:action 1;
fork again
:action 2;
end
end merge
stop
@enduml
[Ref. QA-13731]
Label on end fork (or UML joinspec):
@startuml
start
fork
:action A;
fork again
:action B;
end fork {or}
stop
@enduml
@startuml
start
fork
:action A;
fork again
:action B;
end fork {and}
stop
@enduml
[Ref. QA-5346]
Other example
@startuml
start
if (multiprocessor?) then (yes)
fork
:Treatment 1;
fork again
:Treatment 2;
end fork
else (monoproc)
:Treatment 1;
:Treatment 2;
endif
@enduml
|
Traitement fractionné
|
Split processing
|
|
Split
Vous pouvez utiliser les mots-clés split , split again et end split pour indiquer un traitement fractionné
@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)
@startuml
split
-[hidden]->
:A;
split again
-[hidden]->
:B;
split again
-[hidden]->
:C;
end split
:D;
@enduml
@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)
@startuml
start
split
:A;
kill
split again
:B;
detach
split again
:C;
kill
end split
@enduml
@startuml
start
split
:A;
kill
split again
:b;
:c;
detach
split again
(Z)
detach
split again
end
split again
stop
end split
@enduml
|
Split
You can use split , split again and end split keywords to denote split processing.
@startuml
start
split
:A;
split again
:B;
split again
:C;
split again
:a;
:b;
end split
:D;
end
@enduml
Input split (multi-start)
You can use hidden arrows to make an input split (multi-start):
@startuml
split
-[hidden]->
:A;
split again
-[hidden]->
:B;
split again
-[hidden]->
:C;
end split
:D;
@enduml
@startuml
split
-[hidden]->
:A;
split again
-[hidden]->
:a;
:b;
split again
-[hidden]->
(Z)
end split
:D;
@enduml
[Ref. QA-8662]
Output split (multi-end)
You can use kill or detach to make an output split (multi-end):
@startuml
start
split
:A;
kill
split again
:B;
detach
split again
:C;
kill
end split
@enduml
@startuml
start
split
:A;
kill
split again
:b;
:c;
detach
split again
(Z)
detach
split again
end
split again
stop
end split
@enduml
|
Notes
|
Notes
|
|
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
@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
@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
@startuml
start
partition "**process** HelloWorld" {
note
This is my note
----
//Creole test//
end note
:Ready;
:HelloWorld(i)>
:Hello-Sent;
}
@enduml
[Réf. QA-2398]
|
Text formatting can be done using creole wiki syntax.
A note can be floating, using floating keyword.
@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
You can add note on backward activity:
@startuml
start
repeat :Enter data;
:Submit;
backward :Warning;
note right: Note
repeat while (Valid?) is (No) not (Yes)
stop
@enduml
[Ref. QA-11788]
You can add note on partition activity:
@startuml
start
partition "**process** HelloWorld" {
note
This is my note
----
//Creole test//
end note
:Ready;
:HelloWorld(i)>
:Hello-Sent;
}
@enduml
[Ref. QA-2398]
|
Couleurs
|
Colors
|
|
Vous pouvez spécifier une couleur pour certaines activités
@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
@startuml
start
partition #red/white testPartition {
#blue\green:testActivity;
}
@enduml
[Réf. QA-4906]
|
You can specify a color for some activities.
@startuml
start
:starting progress;
#HotPink:reading configuration files
These files should be edited at this point!;
#AAAAAA:ending of the process;
@enduml
You can also use gradient color.
@startuml
start
partition #red/white testPartition {
#blue\green:testActivity;
}
@enduml
[Ref. QA-4906]
|
Lignes sans pointe de flèches
|
Lines without arrows
|
|
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).
@startuml
skinparam ArrowHeadColor none
start
:Hello world;
:This is on defined on
several **lines**;
stop
@enduml
@startuml
skinparam ArrowHeadColor none
start
repeat :Enter data;
:Submit;
backward :Warning;
repeat while (Valid?) is (No) not (Yes)
stop
@enduml
|
You can use skinparam ArrowHeadColor none in order to connect activities using lines only, without arrows.
@startuml
skinparam ArrowHeadColor none
start
:Hello world;
:This is on defined on
several **lines**;
stop
@enduml
@startuml
skinparam ArrowHeadColor none
start
repeat :Enter data;
:Submit;
backward :Warning;
repeat while (Valid?) is (No) not (Yes)
stop
@enduml
|
Flèches
|
Arrows
|
|
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
|
Using the -> notation, you can add texts to arrow, and change
their color.
It's also possible to have dotted, dashed, bold or hidden arrows.
@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
|
Connector
|
|
Il est possible d'utiliser des parenthèses pour dessiner des connecteurs.
@startuml
start
:Some activity;
(A)
detach
(A)
:Other activity;
@enduml
|
You can use parentheses to denote connector.
@startuml
start
:Some activity;
(A)
detach
(A)
:Other activity;
@enduml
|
Connecteurs en couleur
|
Color on connector
|
|
Vous pouvez ajouter des couleurs aux connecteurs.
@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]
|
You can add color on connector.
@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]
|
Regroupement ou partition
|
Grouping or partition
|
|
Groupe
Vous pouvez regrouper des activités en définissant un groupe
@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
@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
@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
@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
@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
|
Group
You can group activity together by defining group:
@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
You can group activity together by defining partition:
@startuml
start
partition Initialization {
:read config file;
:init internal variable;
}
partition Running {
:wait for user interaction;
:print information;
}
stop
@enduml
It's also possible to change partition color:
@startuml
start
partition #lightGreen "Input Interface" {
:read config file;
:init internal variable;
}
partition Running {
:wait for user interaction;
:print information;
}
stop
@enduml
[Ref. QA-2793]
It's also possible to add link to partition:
@startuml
start
partition "[[http://plantuml.com partition_name]]" {
:read doc. on [[http://plantuml.com plantuml_website]];
:test diagram;
}
end
@enduml
[Ref. QA-542]
Group, Partition, Package, Rectangle or Card
You can group activity together by defining:
- group;
- partition;
- package;
- rectangle;
- card.
@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
|
Swimlanes
|
Swimlanes
|
|
En utilisant le tube | , vous pouvez définir des swimlanes.
Il est également possible de changer la couleur des swimlanes
@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
@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>
@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]
|
Using pipe | , you can define swimlanes.
It's also possible to change swimlanes color.
@startuml
|Swimlane1|
start
:foo1;
|#AntiqueWhite|Swimlane2|
:foo2;
:foo3;
|Swimlane1|
:foo4;
|Swimlane2|
:foo5;
stop
@enduml
You can add if conditional or repeat or while loop within swimlanes.
@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
You can also use alias with swimlanes, with this syntax:
|[#<color>|]<swimlane_alias>| <swimlane_title>
@startuml
|#palegreen|f| fisherman
|c| cook
|#gold|e| eater
|f|
start
:go fish;
|c|
:fry fish;
|e|
:eat fish;
stop
@enduml
[Ref. QA-2681]
|
Détacher ou arrêter [detach, kill]
|
Detach or kill [detach, kill]
|
|
Il est possible de supprimer une flèche en utilisant le mot clé detach ou kill :
@startuml
:start;
fork
:foo1;
:foo2;
fork again
:foo3;
detach
endfork
if (foo4) then
:foo5;
detach
endif
:foo6;
detach
:foo7;
stop
@enduml
@startuml
:start;
fork
:foo1;
:foo2;
fork again
:foo3;
kill
endfork
if (foo4) then
:foo5;
kill
endif
:foo6;
kill
:foo7;
stop
@enduml
|
It's possible to remove an arrow using the detach or kill keyword:
@startuml
:start;
fork
:foo1;
:foo2;
fork again
:foo3;
detach
endfork
if (foo4) then
:foo5;
detach
endif
:foo6;
detach
:foo7;
stop
@enduml
@startuml
:start;
fork
:foo1;
:foo2;
fork again
:foo3;
kill
endfork
if (foo4) then
:foo5;
kill
endif
:foo6;
kill
:foo7;
stop
@enduml
|
SDL (Specification and Description Language)
|
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
WARNING This translation need to be updated. WARNING
|
Table of SDL Shape Name
Name
|
Old syntax
|
Stereotype syntax
|
Input
|
<
|
<<input>>
|
Output
|
>
|
<<output>>
|
Procedure
|
|
|
<<procedure>>
|
Load
|
\
|
<<load>>
|
Save
|
/
|
<<save>>
|
Continuous
|
}
|
<<continuous>>
|
Task
|
]
|
<<task>>
|
[Ref. QA-11518, GH-1270]
SDL using final separator (Deprecated form)
By changing the final ; separator, you can set different rendering for the activity:
@startuml
:Ready;
:next(o)|
:Receiving;
split
:nak(i)<
:ack(o)>
split again
:ack(i)<
:next(o)
on several lines|
: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
SDL using Normal separator and Stereotype (Current offiial form)
@startuml
start
:SDL Shape;
:input; <<input>>
:output; <<output>>
:procedure; <<procedure>>
:load; <<load>>
:save; <<save>>
:continuous; <<continuous>>
:task; <<task>>
end
@enduml
@startuml
:Ready;
:next(o); <<procedure>>
:Receiving;
split
:nak(i); <<input>>
:ack(o); <<output>>
split again
:ack(i); <<input>>
:next(o)
on several lines; <<procedure>>
:i := i + 1; <<task>>
:ack(o); <<output>>
split again
:err(i); <<input>>
:nak(o); <<output>>
split again
:foo; <<save>>
split again
:bar; <<load>>
split again
:i > 5; <<continuous>>
stop
end split
:finish;
@enduml
|
Exemple complet
|
Complete example
|
|
@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
|
@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 de condition
|
Condition Style
|
|
Style intérieur (par défaut)
@startuml
skinparam conditionStyle inside
start
repeat
:act1;
:act2;
repeatwhile (<b>end)
:act3;
@enduml
@startuml
start
repeat
:act1;
:act2;
repeatwhile (<b>end)
:act3;
@enduml
Style diamant
@startuml
skinparam conditionStyle diamond
start
repeat
:act1;
:act2;
repeatwhile (<b>end)
:act3;
@enduml
Style InsideDiamond (ou Foo1)
@startuml
skinparam conditionStyle InsideDiamond
start
repeat
:act1;
:act2;
repeatwhile (<b>end)
:act3;
@enduml
@startuml
skinparam conditionStyle foo1
start
repeat
:act1;
:act2;
repeatwhile (<b>end)
:act3;
@enduml
Ref. QA-1290 et #400]
|
Inside style (by default)
@startuml
skinparam conditionStyle inside
start
repeat
:act1;
:act2;
repeatwhile (<b>end)
:act3;
@enduml
@startuml
start
repeat
:act1;
:act2;
repeatwhile (<b>end)
:act3;
@enduml
Diamond style
@startuml
skinparam conditionStyle diamond
start
repeat
:act1;
:act2;
repeatwhile (<b>end)
:act3;
@enduml
InsideDiamond (or Foo1) style
@startuml
skinparam conditionStyle InsideDiamond
start
repeat
:act1;
:act2;
repeatwhile (<b>end)
:act3;
@enduml
@startuml
skinparam conditionStyle foo1
start
repeat
:act1;
:act2;
repeatwhile (<b>end)
:act3;
@enduml
[Ref. QA-1290 and #400]
|
Style de fin de condition
|
Condition End Style
|
|
Style diamant (par défaut)
@startuml
skinparam ConditionEndStyle diamond
:A;
if (decision) then (yes)
:B1;
else (no)
endif
:C;
@enduml
- Avec deux branches (
B1 , B2 )
@startuml
skinparam ConditionEndStyle diamond
:A;
if (decision) then (yes)
:B1;
else (no)
:B2;
endif
:C;
@enduml
@enduml
Style ligne horizontale (hline)
@startuml
skinparam ConditionEndStyle hline
:A;
if (decision) then (yes)
:B1;
else (no)
endif
:C;
@enduml
- Avec deux branches (
B1 , B2 )
@startuml
skinparam ConditionEndStyle hline
:A;
if (decision) then (yes)
:B1;
else (no)
:B2;
endif
:C;
@enduml
@enduml
[Réf. QA-4015]
|
Diamond style (by default)
@startuml
skinparam ConditionEndStyle diamond
:A;
if (decision) then (yes)
:B1;
else (no)
endif
:C;
@enduml
- With two branches (
B1 , B2 )
@startuml
skinparam ConditionEndStyle diamond
:A;
if (decision) then (yes)
:B1;
else (no)
:B2;
endif
:C;
@enduml
@enduml
Horizontal line (hline) style
@startuml
skinparam ConditionEndStyle hline
:A;
if (decision) then (yes)
:B1;
else (no)
endif
:C;
@enduml
- With two branches (
B1 , B2 )
@startuml
skinparam ConditionEndStyle hline
:A;
if (decision) then (yes)
:B1;
else (no)
:B2;
endif
:C;
@enduml
@enduml
[Ref. QA-4015]
|
Avec le style (global)
|
Using (global) style
|
|
Sans style (par défaut)
@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.
@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
|
Without style (by default)
@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
With style
You can use style to change rendering of elements.
@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
|
|
|