我们有一个需要添加到产品的新属性(特殊??)。并且只有一些产品具有该属性的值为true。所有其他人都认为这个价值是假的。
如果我们在产品级别创建该属性....有人必须进入并在后台手动为所有产品设置该值....这是太多的工作..
有哪些更好的方法来解决这个问题?....我们可以为产品子集创建产品组,然后在该组级别设置该属性吗?这样维护变得容易......
答案 0 :(得分:0)
您可以考虑以下几个选项: 您可以使用默认值false:
在Product item级别声明该属性 <attribute qualifier="myAttribute" type="java.lang.Boolean">
<description>what it dodes</description>
<persistence type="property" />
<defaultvalue>Boolean.FALSE</defaultvalue>
</attribute>
这将保证每个新创建的产品的默认值为false。 请注意,这不会将值false设置为任何现有实例。 如果您将此属性添加到现有系统(例如,作为迁移的一部分),您可以例如在代码中将null值视为false,或者您可以将其视为false。编写一个beanshell脚本,作为迁移的一部分执行,该更新将更新值仍设置为null的所有产品(参见http://experts.hybris.com/answers/3446/view.html)。
复制/修改(但未测试:))来自hybris专家论坛上的链接答案:
import de.hybris.platform.jalo.SearchResult;
import de.hybris.platform.jalo.product.Product;
import java.util.Collections;
SearchResult products = de.hybris.platform.jalo.flexiblesearch.FlexibleSearch.getInstance().search("select {PK} from {Product} where {myAttribute} IS NULL", Collections.emptyMap(), Customer.class);
int updatedCnt = 0;
for (Product product : products.getResult())
{
try
{
product.setAttribute("myAttribute", false);
updatedCnt++;
} catch (Exception e)
{
System.out.println("failed to update product " + product.getPK() + " " + e.getMessage());
}
}
System.out.println("number updated = " + java.lang.Integer.toString(updatedCnt));
请注意,您仍然需要一些自定义逻辑来将您想要的产品的值设置为true,除非只能通过后台手动完成。
希望这有帮助, 塞巴斯蒂安