Есть нода с workflow. Нужно создать rules, который при смене состояния workflow создаёт ноду определённого типа контента, но это действие происходит только при одном определённом переходе, например с состояния А в Б, но не при переходе с Б в В или А в В.
Комментарии
Проблема в создании условий или в создании новой ноды?
Ноды создаются, но при каждом изменении состояния. А надо только в одном случае. Проблема в создании условий.
____________
У нас есть 4 состояния workflow: А, Б, В, Г.
Нужно чтоб действие исполнялось только при перехаде с состояния А в Б и не реагировало на другие изменения состояний.
Сейчас оно исполняется при любом изменении состояния.
В чём конкретно проблема? Вы не знаете, что такое условие или не знаете, как его создавать? Или вы создаёте какое-то условие, а оно не срабатывает?
Проблема в том, что при создании правила (Rule) в списке "React on event" нету условий чтобы наше правило реагировало только на определенную смену состояний workflow, а не на любую смену как сейчас. Сейчас в настройке события стоит "Workflow state has changed", что заставляет наше правило реагировать на любое изменение состояния и других вариантов в списке "React on event" нету. По большому счету я не знаю как задать условие.
Это видно на рисунке:
Видимо, проблема в том, что rules не знает и никак не может получить предыдущее состояние.
Может настроить ноды с workflow так, чтобы при редактировании создавалась новая ревизия, затем в rules загружать предыдущую ревизию (там старое значение поля workflow), добавить loop где проверять значение workflow текущей и предыдущей ревизий и создавать новую ноду. Правда, не уверен, что загрузка последней ревизии будет простой задачей, но наверняка решаема.
Зачем так усложнять. Не получается настроить rules, создайте модуль, реализуйте hook_node_presave($node).
Кажется в $node есть предыдущее состояние.
Ну так вы создайте Rules, а потом в нём создайте условия какие вам нужны. "React on event" переводится как "Реакция на событие". В данном случае событием является "Состояние workflow изменилось".
Алгоритм примерно такой: произошло событие, rules узнал об этом, проверил, должна ли быть какая-то реакция. Если реакция должна быть (т.е. на этом событии висит какой-то rules), тогда проверяются условия внутри rules, и если условия выполняются, тогда происходит собственно реакция (действие).
У меня есть созданый рулз. Все нужные "Conditions" и "Actions" я прописал, в "Events" стоит только "Workflow state has changed". Все работает, но сам рулз срабатывает при каждом изменении состояния workflow.
Напишите пожалуйста где прописать "условия внутри rules"? В "Events" как дополнительные?
Conditions - переводится, как Условия.
Собственно в Conditions вам и нужно разместить условия при которых будет выполнятся нужное вам действие.
Спасибо большое! Проблема решена!
Добавил "Content has a workflow state" в "Conditions" и всё заработало как надо.
Отлично. Добавьте в заголовок темы [РЕШЕНО]. Тут так принято.