【问题标题】:How to update custom field expando values for all users?如何更新所有用户的自定义字段扩展值?
【发布时间】:2015-05-13 15:25:16
【问题描述】:

我为每个用户设置了一个布尔自定义字段扩展值。 在某些事件上,我想更新该字段。

目前我的钩子中的以下代码工作正常:

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");

【问题讨论】:

  • 如果第一个代码块工作正常,为什么要尝试第二个?无论如何都不会编译,因为具有给定签名的addValues 不存在。
  • 您是否使用 expando 桥创建了自定义“myfield”?
  • 哦,我现在明白了,您是要一次更改所有用户的自定义字段值,而不是一次更改单个用户的自定义字段值吗?

标签: liferay liferay-6


【解决方案1】:

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

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

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

现在,如果你告诉我你的循环运行了 2 天,我可能会有不同的看法,但你的问题听起来并不像你很痛苦,而是关于消除循环的偏好。

【讨论】:

  • 感谢您回答我的问题。我们的产品有 10000 名用户,因此并没有太大的不同。
猜你喜欢
  • 2022-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-25
相关资源
最近更新 更多