0

我正在尝试将字段添加到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 到结尾的东西,总是只找到一些没有解释的部分。

4

2 回答 2

2

问题不是很清楚。但是,如果您只是想为您添加自定义属性,那么您可以在此处User参考我的答案并复制以供您参考:

可以通过以下方式创建用户实体的自定义字段:
Control Panel -> Portal -> Custom Fields -> User

并且可以通过编程方式创建如下:

user.getExpandoBridge().addAttribute("yourCustomFieldKey");

然后将值设置为:

user.getExpandoBridge().setAttribute("yourCustomFieldKey", "valueForCustomField");

如果您的自定义字段已经存在,您可以像这样检查:

if (user.getExpandoBridge().hasAttribute("yourCustomFieldKey")) { ... };

数据存储在以“EXPANDO”为前缀的表中:

  • EXPANDOCOLUMN:存储自定义字段键和其他设置(包含 tableId 引用)
  • EXPANDODATA:存储key的自定义字段值(包含columnId和tableId引用)
  • EXPANDOTABLE:存储您为其添加自定义字段的 liferay 实体(用户)
  • EXPANDOROW:存储用户及其值之间的链接信息(包含 tableId 和 userId 引用)

希望这可以帮助。

于 2012-07-19T10:37:56.087 回答
0

如果您的自定义字段是多值的,您可以使用:

String customVal = "yourCustomFieldValue";

user.getExpandoBridge().setAttribute("yourCustomFieldKey", new String[] {customVal }, false);

最后一个参数设置为“false”避免了权限检查。

于 2019-07-23T08:55:02.643 回答