Добавление пользовательского поля для пользователя программно через liferay.expando
Я пытаюсь добавить поля в com.liferay.portal.model.User
, дополнительный атрибут, использующий Expando
, Может кто-нибудь объяснить мне, как этот метод добавляет поле, потому что документы не имеют большого описания.
private void addUserCustomAttribute(long companyId, ExpandoTable userExpandoTable, String attributeName, int type) throws PortalException, SystemException {
ExpandoColumnLocalServiceUtil.getColumn(userExpandoTable.getTableId(), attributeName); //should be addColumn(long tableId, String name, int type) ???
} //and where can find type description couse i have very specific type, Map(String,Object) couse in ExpandoColumnConstants didn't see it
Я взял это из " Добавление пользовательских атрибутов пользователя Liferay Expando Wiki".
Когда я должен назвать это все? Где поставить это в моем проекте? Какое изменение требуется или все должно быть изменено, чтобы вызвать его.
Хороший учебник будет хорош, потому что трудно найти что-то от 0 до конца, всегда находят только часть без объяснения.
1 ответ
Вопрос не очень понятен. Но если вы просто хотите добавить собственный атрибут для вашего User
тогда вы можете сослаться на мой ответ здесь и воспроизвести для вашей справки:
Настраиваемое поле для пользовательского объекта может быть создано через:
Панель управления ->
Портал ->
Настраиваемые поля ->
Пользователь.
И программно может быть создан следующим образом:
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)
Надеюсь это поможет.
Если ваше настраиваемое поле многозначное, вы можете использовать это:
String customVal = "yourCustomFieldValue";
user.getExpandoBridge().setAttribute("yourCustomFieldKey", new String[] {customVal }, false);
Последний параметр, установленный в "false", позволяет избежать проверки прав доступа.