javascript - 如何通过代码更新 SFCC 中自定义属性(字符串枚举)的值?
问题描述
要求:我想通过代码更新产品的自定义属性(名称:徽章)(类型:字符串枚举)的值。我想将值“bestSeller”设置为选中。由于下面的代码不起作用,我应该如何进行更新?
代码片段:
function updateBestSeller() {
var ProductMgr = require('dw/catalog/ProductMgr');
var Site = require('dw/system/Site');
var UUIDUtils = require('dw/util/UUIDUtils');
var CustomObjectMgr = require('dw/object/CustomObjectMgr');
var currentSite = Site.getCurrent();
var bestSellerOrderUnits = Object.hasOwnProperty.call(currentSite.preferences.custom, 'bestSellerOrderUnits') ? currentSite.getCustomPreferenceValue('bestSellerOrderUnits') : 0;
try {
Transaction.wrap(function () {
var count = 1;
var products = ProductMgr.queryAllSiteProducts();sni
var HashSet = require('dw/util/HashSet');
var badges = new HashSet();
if (products.count > 0) {
while (products.hasNext() && count < 5) {
var product = products.next();
var badges = [];
badges.push('bestSeller');
if (Object.hasOwnProperty.call(product.custom, 'badges')) {
product.custom.badges = badges
}
count++;
Logger.debug('{0}',product.ID);
}
}
products.close();
});
} catch (ex) {
Logger.error(ex.toString());
return new Status(Status.ERROR, 'ERROR', 'UPDATE failed');
}
return new Status(Status.OK, 'OK', 'UPDATE successful');
}
解决方案
我认为这里可能发生的事情是您尝试验证产品在属性集合中是否具有badges
键的尝试失败了。product.custom
这可以防止更新发生。
我建议删除以下行周围的条件:
product.custom.badges = badges;
如果该行不执行,那么对数据库的更新将永远不会发生。
自定义属性的工作方式是,在为给定持久对象的该属性设置值之前,它们永远不会存在。'badges' in product.custom
(例如:产品)因此,即使存在自定义属性定义,也通常会通过以下方式检查它是否存在:(这是推荐的方式) false
,因为许多产品从未设置过徽章值。一旦对象已将值设置为特定的自定义属性,即使它现在设置为null
,它也会存在。
此外,代码还有一些其他问题可能会导致问题。一个例子是badges
在同一范围内定义变量两次。另一个示例是sni
放置在定义products
变量的行的末尾。这可能会导致您的代码出错。最后,如果可以,最好避免使用该queryAllSiteProducts
方法。另一种方法可能是ProductSearchModel
改用;queryAllSiteProducts
这可能并不总能满足您的需求,但出于性能原因,在使用之前将其排除是个好主意。
其他需要考虑的事情是,如果badges
当前有任何选定的值,您将使用您今天拥有的代码覆盖这些值。考虑badges
最初设置为,[]
然后通过执行以下操作检查该产品是否存在价值:
if ('badges' in product.custom && !empty(product.custom.badges) {
badges = product.custom.badges;
}
推荐阅读
- r - 在 R 中的 showSRID(uprojargs, format = "PROJ", multiline = "NO") 错误
- javascript - 不能让猫鼬 find().then() 工作
- jquery - 尝试将数据从数据库导出到 django 中的 excel
- php - Zend 框架 - Json::encode 不返回任何内容
- c# - 从 .Net Framework 项目添加对 .Net Core 项目的引用
- flutter - 使用提供者在无状态小部件中调用 dispose 函数
- python - 如何在 Django Rest Framework 中选择视图类型
- javascript - 改变 View 设计,React Native
- python - Keras L2 正则化使网络不学习
- reactjs - 片段可以有属性吗?