Текущий синтаксис диаграммы активности имеет несколько ограничений и недостатков (например, её сложно поддерживать). Таким образом, новый синтаксис и реализация предложены как бета версия пользователям (начиная с V7947), так что мы сможем определить новый формат и синтаксис. Другое преимущество этой новой реализации, это то, что для неё не будет требоваться установленный Graphviz (как для диаграмм последовательностей). Новый синтаксис заменит старый. Однако, по причине совместимости, старый синтаксис всё ещё будет распознаваться, чтобы обеспечивать восходящую совместимость. Пользователи будут просто поощряться при мигрировании на новый синтаксис.
Простая активность
Описания активностей начинаются с : и заканчиваются ;. Форматировать текст возможно, используя синтаксис creole. Активности косвенно связаны в порядке их определения.
@startuml
:Hello world;
:This is on defined on
several **lines**;
@enduml
Старт/Стоп
Вы можете использовать ключевые слова start и stop, чтобы обозначать начало и конец диаграммы.
@startuml
start
:Hello world;
:This is on defined on
several **lines**;
stop
@enduml
Вы также можете использовать ключевое слово end.
@startuml
start
:Hello world;
:This is on defined on
several **lines**;
end
@enduml
Условия
Вы можете использовать ключевые слова if, then и else, чтобы добавить проверяющие условия на вашу диаграмму. Описания можно добавить, используя круглые скобки.
@startuml
start
if (Graphviz installed?) then (yes)
:process all\ndiagrams;
else (no)
:process only
__sequence__ and __activity__ diagrams;
endif
stop
@enduml
Ряд проверок (горизонтальное отображение)
Вы можете использовать ключевое слово elseif, чтобы создать несколько проверок (по умолчанию используется режим горизонтального отображения):
@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
Ряд проверок (вертикальное отображение)
Используйте команду !pragma useVerticalIf on для отображения проверок в вертикальном режиме:
@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
Для включения в обратный путь цикла самостоятельного действия используйте ключевое слово backward.
@startuml
start
repeat :foo as starting label;
:read data;
:generate diagrams;
backward:This is backward;
repeat while (more data?)
stop
@enduml
Break on a repeat loop [break]
You can break 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 "Sucess";
stop
@enduml
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
Заметки
Форматирование текста может быть сделано с использованием синтаксиса creole. Заметку можно сделать отсоединенной с помощью ключевого слова 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
Заметка также может быть добавлена к действию, входящему в обратный поток цикла.
@startuml
start
repeat :Enter data;
:Submit;
backward :Warning;
note right: Note
repeat while (Valid?) is (No) not (Yes)
stop
@enduml
@startuml
start
:starting progress;
#HotPink:reading configuration files
These files should edited at this point!;
#AAAAAA:ending of the process;
@enduml
Линии без стрелок
Используйте команду skinparam ArrowHeadColor none для соединения действий линиями без стрелок.
@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
Стрелки
Используя нотацию ->, вы можете добавить текст к стрелке, aи поменять их цвет. Так же можно сделать стрелки: из точек (dotted), из дефисов (dashed), жирные (bold) и скрытые (hidden).
@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;
-[hidden]->
:foo4a;
endif
-[#gray,bold]->
:foo5;
@enduml
@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
Возможно убрать стрелку используя ключевое слово detach.
@startuml
:start;
fork
:foo1;
:foo2;
fork again
:foo3;
detach
endfork
if (foo4) then
:foo5;
detach
endif
:foo6;
detach
:foo7;
stop
@enduml
SDL
Изменяя последний разделитель ;, вы можете установить различный рендеринг для активности:
|
<
>
/
]
}
@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
Полноценный пример
@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