Multilingual Wiki Documentation

You are currently using syntax.
In an attempt to improve PlantUML documentation...
Please do not use this website for your own diagrams.
You can click here and use the online server here for your own documentation.

Wiki Toc    View page history    Add new chapter    Reorder page    Raw


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:
  • if (...) then (...)

@startuml

start

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

stop

@enduml

  • if (...) is (...) then

@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.

  • kill

@startuml
if (condition?) then
  #pink:error;
  kill
endif
#palegreen:action;
@enduml

[Ref. QA-265]

  • detach

@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:

  • kill

@startuml
if (condition?) then
  #pink:error;
  kill
endif
#palegreen:action;
@enduml

[Ref. QA-265]

  • detach

@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 :

  • detach

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

  • kill

@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:

  • detach

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

  • kill

@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)

  • Avec une branche

@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)

  • Avec une branche

@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)

  • With one branch

@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

  • With one branch

@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


Please report any bugs to plantuml@gmail.com or here.
This website is still in beta testing.