1.They are implicitly linked in their definition order.
@startuml
:Hello world;
:This is on defined on
several **lines**;
@enduml
basic diagram activity
Start/Stop
2.Conditional
You can use if, then and else keywords to put tests if your diagram. Labels can be provided using parentheses.
@startuml
start
if (Graphviz installed?) then (yes)
:process all\ndiagrams;
else (no)
:process only
__sequence__ and __activity__ diagrams;
endif
stop
@enduml
3.if then else example
You can use the elseif keyword to have several tests :
@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
4.several if test
Repeat loop
You can use repeat and repeatwhile keywords to have repeat loops.
@startuml
start
repeat
:read data;
:generate diagrams;
repeat while (more data?)
stop
@enduml
5.basic repeat while loop
While loop
You can use while and end while keywords to have repeat loops.
@startuml
start
while (data available?)
:read data;
:generate diagrams;
endwhile
stop
@enduml
6.another while loop
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
7.while loop with labels
Parallel processing
You can use fork, fork again and end fork keywords to denote parallel processing.
@startuml
start
if (multiprocessor?) then (yes)
fork
:Treatment 1;
fork again
:Treatment 2;
end fork
else (monoproc)
:Treatment 1;
:Treatment 2;
endif
@enduml
8.activity diagram with parallel processing
Notes
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
9.add notes on activity diagram
Colors
You can use specify a color for some activities.
@startuml
start
:starting progress;
#HotPink:reading configuration files
These files should edited at this point!;
#AAAAAA:ending of the process;
@enduml
10.changing colors
Arrows
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
11.colored arrows
Grouping
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
12.grouping and partitionning in activity diagram
Swimlanes
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
13.swimlanes
Detach
It’s possible to remove an arrow using the detach keyword.
@startuml
:start;
fork
:foo1;
:foo2;
fork again
:foo3;
detach
endfork
if (foo4) then
:foo5;
detach
endif
:foo6;
detach
:foo7;
stop
@enduml
14.stop in activity diagrams
SDL
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 line|
:i := i + 1]
:ack(o)>
split again
:err(i)<
:nak(o)>
split again
:foo/
split again
:i > 5}
stop
end split
:finish;
@enduml
15.SDL example
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
16.一个复杂流程图的例子
@startuml
start
:初始化;
:创建看门狗线程;
fork
#00FF00:while(1);
note right
看门狗线程
end note
repeat
if(>2min没喂狗) then (Y)
#8EE5EE:取消点;
endif
:sleep(5);
repeat while(1)
fork again
#HotPink:while(1);
note left
a线程
end note
repeat
if (注册标志==1) then (Y)
:喂狗;
else (N)
endif
:db;
if(检测成功?) then (Y)
#A020F0:获取;
note left
根据
end note
if(有d? && 未?) then (Y)
:clear;
note left
clear共干了4件事
====
* 1.kill
* 2.set !!!
* 3.set global
* 4.stop
end note
if(c_m成功?) then (Y)
:调m脚本;
note left
脚本在这里调用的
end note
if(调用成功?) then (Y)
#A020F0:修改DONE_SUCCESS;
else (N)
#A020F0:修改DONE_FAIL;
endif
else (N)
#HotPink:goto while(1);
detach
endif
else (N)
endif
if(注册标志==0 && >60) then(Y)
#8EE5EE:注册;
:标志=1;
else (N)
endif
:10min更新一次;
note left
1.保存master机器
否则……
2.实例的,
所以去除……
end note
:10min运行一次;
else (N)
#A020F0:获取d;
if(有d?) then (Y)
if(未?) then (Y)
:"clear";
if(clear成功) then (Y)
else (N)
#HotPink:goto while(1);
detach
endif
else (N)
endif
:重新;
if("检测成功?") then (N)
else (Y)
#HotPink:goto while(1);
detach
endif
else (N)
endif
if("可忽略err?") then (N)
#8EE5EE:取消al;
:标志=0;
#0000FF:exit(0);
stop
else (Y)
endif
endif
:sleep(1);
#HotPink:goto while(1);
@enduml
————————————————