Liferay 如何为所有用户更新自定义字段expando值?

Liferay 如何为所有用户更新自定义字段expando值?,liferay,liferay-6,Liferay,Liferay 6,每个用户有一个布尔自定义字段expando值。 在某些事件中,我希望更新该字段 目前,我的钩子中的以下代码运行良好: for (User user : users) { user.getExpandoBridge().setAttribute("myfield", false); } 我试过下面的代码,但不起作用: ExpandoTable expandoTable = ExpandoTableLocalServiceUtil.getTable(companyId); Expando

每个用户有一个布尔自定义字段expando值。 在某些事件中,我希望更新该字段

目前,我的钩子中的以下代码运行良好:

for (User user : users) {
    user.getExpandoBridge().setAttribute("myfield", false);
}
我试过下面的代码,但不起作用:

ExpandoTable expandoTable = ExpandoTableLocalServiceUtil.getTable(companyId);

ExpandoColumn expandoColumn =  ExpandoColumnLocalServiceUtil.getColumn(companyId, classNameId, expandoTable.getName(), "myfield");
ExpandoValueLocalServiceUtil.addValues(classNameId, expandoTable.getTableId(),expandoColumn.getColumnId(), classNameId, "myfield");

工作代码(例如,您给出的循环)是您问题的解决方案。如果您正在寻找一条SQL指令来更新所有字段:请注意,这可能会留下过时的缓存

如果用户数量不多,则循环不会运行很长时间

另一方面,如果您有大量的用户,我的假设是您的门户相当繁忙——在这种情况下,我不想清除缓存以确保它们不过时。最好接受这项手术需要一段时间。您的另一个选项是在更改所有值后清除所有缓存,这将确保产生巨大的性能下降,因为现在需要从DB加载所有内容


现在,如果您告诉我您的循环运行了2天,我可能会有不同的意见,但您的问题听起来并不是很痛苦,而是希望消除循环。

如果第一个代码块工作正常,为什么要尝试第二个?这不是编译,因为具有给定签名的addValues不存在。您使用expando bridge创建了自定义myfield吗?哦,我现在明白了,您是想一次更改所有用户的自定义字段值,而不是一次更改一个用户的自定义字段值吗?谢谢您回答我的问题。我们的产品有10000个用户,所以不会产生太大的不同。