Добавление пользовательского поля для пользователя программно через 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", позволяет избежать проверки прав доступа.

Другие вопросы по тегам