Фильтр для @Lockup User

У Entity есть поле типа com.haulmont.cuba.security.entity.User, т.е. ссылка на пользователя системы.

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "USER_ID")
@Lookup(type = LookupType.SCREEN, actions = {})
private com.haulmont.cuba.security.entity.User user;

При заполнении поля user можно выбрать значение из таблицы пользователей, но
можно ли задать фильтр при выборе пользователей, чтобы нельзя было выбрать всяких системных пользователей типа “admin”, “anonymous” и т.п.?

На форме для lookup-поля можно указывать запрос, который будет использоваться в качестве источника данных.

Например, в дескрипторе формы задаем коллекцию:

    <collection id="usersDc" class="com.haulmont.cuba.security.entity.User" view="_local">
        <loader id="usersLc">
            <query>
                <![CDATA[select e from sec$User e
                where e.active = true
                and e.login not in ('admin', 'anonymous')
                order by e.name]]>
            </query>
        </loader>
    </collection>

а потом в контроле используем эту коллекцию для lookup-поля:

<lookupField id="userField" optionsContainer="usersDc"/>
2 симпатии

Добрый день.

В экране редактирования основной сущности вы можете задать отдельную коллекцию для сущности User, где в запросе отсортируете пользователей:

<collection id="billersDc" class="com.haulmont.cuba.security.entity.User" view="_minimal">
       <loader id="billersDl">
             <query>
               <![CDATA[select e from sec$User e where e.login not in ('admin', 'anonymous') order by e.login]]>
             </query>
       </loader>
</collection>

А потом в поле LookupField указать эту коллекцию как optoinalContainer

<lookupField id="billerField" optionsContainer="billersDc" property="biller"/>
2 симпатии

Всем большое спасибо!