Развернуть выражение в условии?

Я пытаюсь использовать поле «conditionExpression» объекта StatusFlowTransition в виджете состояния.

Но я думаю, что вы не можете расширить, скажем, ${statusTransition.conditionExpression} в условии в Moqui?

Как тогда должно использоваться поле conditionExpression?

e.g.

<widgets>
   <link url="${statusChangeTransition ?: 'updateStatus'}"  text="StatusTransitionNameTemplate" text-map="statusTransition" parameter-map="[statusId:statusTransition.toStatusId]" condition="${statusTransition.conditionExpression}" />
</widgets>

person Ronan Keane    schedule 14.12.2016    source источник


Ответы (1)


Ключевая часть вашего вопроса: как мне оценить выражение Groovy, которое находится в переменной? Вы можете сделать это непосредственно с помощью Groovy API, но самый простой и эффективный (поскольку скомпилированные выражения кэшируются) способ сделать это — использовать метод ResourceFacade.condition(), т. е.:

<link ... condition="ec.resource.condition(statusTransition.conditionExpression, '')"/>

Второй параметр — это место отладки, и он может быть пустым. При использовании выражения conditionExpression важно, чтобы ваши условия были простыми и использовались только поля контекста, которые всегда доступны. Вы также можете передать третий параметр в метод condition(), который представляет собой Map с полями для использования в conditionExpression в дополнение к тому, что в текущем контексте.

person David E. Jones    schedule 14.12.2016
comment
Это здорово, спасибо. Поскольку поля контекста всегда доступны, я хотел использовать userGroupId, который, на самом деле, не всегда доступен, например, доступен ec.user.userId. Чтобы обойти это, я собирался добавить пару EECA для создания/удаления соответствующего ключа и значения UserPreference при создании/удалении записи UserGroupMember. Очевидно, неуклюже, но есть ли лучший способ сделать это? - person Ronan Keane; 15.12.2016
comment
Извините, просто чтобы уточнить/исправить - хотя в моем собственном случае использования я в настоящее время ограничиваю членство в userGroup только одной группой для каждого пользователя, в общем случае было бы правильным список членства в группе для этого пользователя, который будет проверяется в выражении условия. - person Ronan Keane; 15.12.2016
comment
Посмотрите на интерфейс UserFacade (для ec.user), там есть методы для данных о группах пользователей, предпочтениях и т.д. - person David E. Jones; 15.12.2016