Перевод в Fixed или Won't Fix невозможен без In Progress

Ребят, привет ещё раз! :)
Снова я, ваш террорист по workflow =P
Need Help!)

Пишу правило, которое запрещает Перевод в Fixed или Won't Fix из Open или Submitted без состояния In Progress всем кроме группы "Management".
Накидал такое:
rule can't to move to Fixed without In progress State 
 
when State.oldValue == {Open} || State.oldValue == {Submitted} && !(loggedInUser.isInGroup("Management")) && State.becomes({Fixed}) || State.becomes({Verified}) { 
  assert false: "Нельзя переводить в Fixed или Verified если статус не In Progress"; 
}


Понимаю, что не правильно (да и работает не правильно), так как получается что всё связано в и/или как одно целое...

Помогите разделить, пожалуйста.
0
8 comments
Привет,

для такого случая есть специальный тип правила - state machine. Подробнее можно почитать тут - http://confluence.jetbrains.com/display/YTD5/Workflow+Rules#WorkflowRules-StatemachineRule

А пример есть тут - http://confluence.jetbrains.com/display/YTD5/Workflow+Language+Quick+Reference
0
Avatar
Permanently deleted user
Дим, не уверен... Хотя, наверное туплю %) assert надо выводить сразу, а не используя schedule ежедневно или как то ещё...
0
Удобнее всего использовать "state machine" правило (не путать с "schedule rule"). State machine - это конечный автомат, который описывает допустимые переходы между состояниями. Т.о. assert просто не придется писать.
0
Avatar
Permanently deleted user
Удобнее всего использовать "state machine" правило (не путать с "schedule rule"). State machine - это конечный автомат, который описывает допустимые переходы между состояниями. Т.о. assert просто не придется писать.


Да, Дим, но assert нужен... Основной вопрос как раз именно в том, чтобы не использовать как schedule и выводить assert, чтобы пользователь видел такой алерт, и не пользовался бы этим в дальнейшем...

Что-то я совсем запутался в вашей яве))))
0
При использовании state machine все состояния, которые недоступны из данного состояния, просто не показываются.

Если все же хочется показывать предупреждающее сообщение, то воркфлоу из поста похож на правильный, только надо верно скобки расставить в условии - либо перед тем как набирать выражение просто написать "()" и внутри уже писать выражение, либо выделить уже написанное выражение, использую Ctrl+W или Ctrl+Up, и далее Ctrl+Alt+T > (expression).
0
Avatar
Permanently deleted user
То есть лучше тогда Statement rule и заюзать как ты рекомендуешь скобки... Завтра постестю, напишу тогда..))
0
Avatar
Permanently deleted user
Что-то я заковырялся с частью того, что именно следует внести в скобки ((
0
Вроде так:
when (State.oldValue == {Open} || State.oldValue == {Submitted}) && !(loggedInUser.isInGroup("Management")) && (State.becomes({Fixed}) || State.becomes({Verified})) { }
0

Please sign in to leave a comment.