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

时间:2015-05-12 05:09:41

标签: liferay liferay-6

我为每个用户提供了一个布尔自定义字段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");

1 个答案:

答案 0 :(得分:0)

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

如果您没有大量用户,则循环不应该运行很长时间。

另一方面,如果您拥有大量用户,我的假设是您的门户网站相当繁忙 - 在这种情况下,我不想清除缓存以确保它们不会过时这个单一的价值。例如。最好接受这个操作需要一段时间。另一个选择是,在更改所有值后清除所有缓存,确保生成巨大的性能下降,因为现在需要从数据库加载所有

现在,如果你告诉我你的循环运行了2天,我可能会有不同的意见,但你的问题听起来并不像你在痛苦,但它更倾向于消除循环。