Перевод в 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"; 
}
prettyPrint();

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

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

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

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


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

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

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

Please sign in to leave a comment.