PlantUML画复杂流程图


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

PlantUML画复杂流程图_第1张图片

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

PlantUML画复杂流程图_第2张图片

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

PlantUML画复杂流程图_第3张图片

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

PlantUML画复杂流程图_第4张图片

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

PlantUML画复杂流程图_第5张图片

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

PlantUML画复杂流程图_第6张图片

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

PlantUML画复杂流程图_第7张图片

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>HTMLb>
  ====
  * Calling the method ""foo()"" is prohibited
end note
stop

@enduml

PlantUML画复杂流程图_第8张图片

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

PlantUML画复杂流程图_第9张图片

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

PlantUML画复杂流程图_第10张图片

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

PlantUML画复杂流程图_第11张图片

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

PlantUML画复杂流程图_第12张图片

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

PlantUML画复杂流程图_第13张图片

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

PlantUML画复杂流程图_第14张图片

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

PlantUML画复杂流程图_第15张图片

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

你可能感兴趣的:(tools)