Можно ли добавить дополнительные поля под Create User в Liferay
Я использую Liferay 6 для разработки портала. Во время создания пользователей под Liferay мне нужно также добавить несколько дополнительных полей?? Пожалуйста, дайте мне знать, если это возможно или нет??
Пожалуйста, смотрите скриншот, приложенный здесь, а также, пожалуйста, дайте мне знать, в какой таблице это будет храниться в базе данных??
5 ответов
Да, вы можете использовать функциональность Custom Attributes для объектов Liferay (в вашем случае, User) и можете добавлять столько дополнительных полей, сколько необходимо для каждого объекта Liferay.
Настраиваемое поле для пользовательского объекта может быть создано через:
Панель управления ->
Портал ->
Настраиваемые поля ->
Пользователь.
И программно может быть создан следующим образом:
user.getExpandoBridge().addAttribute("yourCustomFieldKey");
Затем установите значение как:
user.getExpandoBridge().setAttribute("yourCustomFieldKey", "valueForCustomField");
Если ваше настраиваемое поле уже присутствует, вы можете проверить это так:
if (user.getExpandoBridge().hasAttribute("yourCustomFieldKey")) { ... };
Данные хранятся в таблицах с префиксом "EXPANDO":
- EXPANDOCOLUMN: хранит ключ настраиваемого поля и другие настройки (содержит ссылки на tableId)
- EXPANDODATA: хранит значение настраиваемого поля для ключа (содержит ссылки на columnId и tableId)
- EXPANDOTABLE: хранит, для какого объекта (пользователя) liferay вы добавляете настраиваемое поле
- EXPANDOROW: хранит информацию о связях между пользователем и его значениями (содержит ссылки на tableId и userId)
Надеюсь это поможет.
Да, вы можете добавить настраиваемые поля к user-entity и добавить их значения полей для user:
user.getExpandoBridge().addAttribute(...);
Поле Custim для пользовательской сущности, которую вы можете создать с помощью панели управления Portal->Custom Fields
или программно при запуске liferay.
Данные будут храниться в ExpandoValue
столы.
На всякий случай, если кто-то попытается получить значения из настраиваемых полей, и возникнут проблемы с нулевыми значениями, возвращаемыми методом user.getExpandoBridge().getAttribute("yourCustomFieldKey")
(даже когда вы следили за темами о разрешениях), я нашел другой способ получить значения пользовательских полей:
ExpandoTable table = ExpandoTableLocalServiceUtil.getDefaultTable(user.getCompanyId(), User.class.getName() );
ExpandoColumn column = ExpandoColumnLocalServiceUtil.getColumn(table.getTableId(), "yourCustomFieldKey");
ExpandoValue expandoValue = ExpandoValueLocalServiceUtil.getValue(table.getTableId(), column.getColumnId(), user.getUserId());
Тогда вы можете сделать простое (если поле текстовое) expandoValue.getString();
Не так красиво, но делай работу.
Используйте следующие команды, если у вас возникли проблемы с разрешением при добавлении или настройке атрибута.
user.getExpandoBridge().addAttribute("yourCustomFieldKey",false);
user.getExpandoBridge().setAttribute("yourCustomFieldKey", "valueForCustomField",false);
Страницу создания пользователя в LifeRay можно настроить. Вы можете решить, какие поля будут присутствовать на странице создания пользователя. Подробнее об этом здесь.