我正在就在 Salesforce Commerce Cloud 实例的业务管理器中设置挂钩时遇到的问题寻求一些帮助。
我已经激活了 BM 中的钩子并创建了一个
hooks.json
文件,我也在我的 package.json
中引用了该文件。
我的 hooks.json 看起来像这样:
{
"hooks": [{
"name" : "app.template.afterFooter",
"script" : "./cartridge/scripts/hooks/initGlobals.js"
},
{
"name": "dw.ocapi.data.customer_list.customer.afterDELETE",
"script": "./cartridge/scripts/hooks/customerHooks.js"
}
]
}
此外,我还制作了 customerHooks.js 文件,如下所示:
var HookManager = require("dw/system/HookMgr");
var LOGGER = require('dw/system/Logger').getLogger('logme');
exports.afterDELETE = function afterDELETE(customerListId) {
var Status = require('dw/system/Status');
LOGGER.debug('Test');
return new Status(Status.OK);
};
但是,尽管进行了此设置,我在日志中心中没有看到与此挂钩相关的任何日志。谁能提供有关可能出现问题或我可能缺少什么的见解?
只是添加一点,钩子:“app.template.afterFooter”工作正常,我有一个日志。
提前感谢您的时间和帮助!
致以诚挚的问候。
您对
dw.ocapi.data.customer_list.customer.afterDELETE
的设置在结构方面似乎是正确的。由于 app.template.afterFooter
挂钩按预期工作,因此该问题可能特定于 afterDELETE
挂钩或其执行上下文。
以下是识别和解决问题的分步分析:
dw.ocapi.data.customer_list.customer.afterDELETE
挂钩是开放商务 API (OCAPI) 数据 API 的一部分。确保在 OCAPI 设置中正确配置了
DELETE
中 customer
的 customer_list
操作。
DELETE
下的 customer
对象启用 customer_list
。{
"_v": "22.9",
"resource": "/customer_lists/*/customers/*",
"methods": ["DELETE"]
}
当通过 OCAPI 数据 API 发出删除客户的
dw.ocapi.data.customer_list.customer.afterDELETE
请求时,会触发 DELETE
挂钩。在 Business Manager 或其他非 OCAPI 上下文中手动执行的操作不会触发。
DELETE
请求:
https://<your-site-domain>/s/-/dw/data/v22_9/customer_lists/<customerListID>/customers/<customerID>
Authorization: Bearer <your-access-token>
Content-Type: application/json
通过监控日志来检查您的
afterDELETE
钩子是否被触发。
如果钩子没有触发,请添加调试日志以确认问题所在:
客户删除逻辑: 确保
customerListId
有效且与 OCAPI 请求匹配。
修改
customerHooks.js
:
var HookManager = require("dw/system/HookMgr");
var LOGGER = require('dw/system/Logger').getLogger('logme');
exports.afterDELETE = function afterDELETE(customerListId) {
var Status = require('dw/system/Status');
LOGGER.debug('afterDELETE hook called for CustomerListId: ' + customerListId);
if (!customerListId) {
LOGGER.error('CustomerListId is null or undefined.');
return new Status(Status.ERROR, 'ERROR', 'Invalid CustomerListId');
}
LOGGER.info('Customer successfully deleted for list: ' + customerListId);
return new Status(Status.OK);
};
部署此更新后的代码并重复 OCAPI
DELETE
测试。
hooks.json
确保
hooks.json
文件链接正确并且不存在拼写错误。该文件应位于盒式磁带的根目录中,并且路径应正确解析。
例如:
{
"hooks": [
{
"name": "app.template.afterFooter",
"script": "./cartridge/scripts/hooks/initGlobals.js"
},
{
"name": "dw.ocapi.data.customer_list.customer.afterDELETE",
"script": "./cartridge/scripts/hooks/customerHooks.js"
}
]
}
如果
app.template.afterFooter
挂钩正常工作,则 hooks.json
文件本身不太可能是问题所在。
logme
日志类别:
logme
的日志级别设置为 DEBUG
。确保您用于测试的 API 客户端具有对客户执行
DELETE
操作的必要权限。
如果上述步骤未能解决问题:
customerHooks.js
文件是否已正确部署到服务器。让我知道进展如何或者您是否需要进一步的帮助!