为什么 Salesforce Ocapi 客户删除不起作用?

问题描述 投票:0回答:1

我正在就在 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”工作正常,我有一个日志。

提前感谢您的时间和帮助!

致以诚挚的问候。

salesforce salesforce-commerce-cloud
1个回答
0
投票

您对

dw.ocapi.data.customer_list.customer.afterDELETE
的设置在结构方面似乎是正确的。由于
app.template.afterFooter
挂钩按预期工作,因此该问题可能特定于
afterDELETE
挂钩或其执行上下文。

以下是识别和解决问题的分步分析:


1。验证 OCAPI 设置

dw.ocapi.data.customer_list.customer.afterDELETE
挂钩是开放商务 API (OCAPI) 数据 API 的一部分。确保在
OCAPI 设置
中正确配置了
DELETE
customer
customer_list 操作。

  1. 前往 BM → 管理 → 网站开发 → 开放商务 API 设置
  2. 检查Data API配置:
    • 确保为
      DELETE
      下的
      customer
      对象启用
      customer_list
    • 示例:
      {
        "_v": "22.9",
        "resource": "/customer_lists/*/customers/*",
        "methods": ["DELETE"]
      }
      
  3. 保存并发布设置。

2。确认钩子执行上下文

当通过 OCAPI 数据 API 发出删除客户的

dw.ocapi.data.customer_list.customer.afterDELETE
请求时,会触发
DELETE
挂钩。在 Business Manager 或其他非 OCAPI 上下文中手动执行的操作不会触发。

测试钩子

  • 使用 Postman 等 REST 客户端或类似工具。
  • 向端点发送
    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
钩子是否被触发。


3.调试日志记录

如果钩子没有触发,请添加调试日志以确认问题所在:

  • 客户删除逻辑: 确保

    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
    测试。


4。验证
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
文件本身不太可能是问题所在。


5。常见调试步骤

  • 检查日志: 确保在 Business Manager 中启用
    logme
    日志类别:
    • 管理→站点开发→日志设置
    • logme
      的日志级别设置为
      DEBUG
  • 清除缓存: 更新配置后始终清除站点缓存:
    • 管理→操作→缓存→清除所有站点缓存

6。验证权限

确保您用于测试的 API 客户端具有对客户执行

DELETE
操作的必要权限。

  • 进入BM → 管理 → 组织 → 角色和权限
  • 检查您正在使用的客户端 ID 的权限。

7。最后的考虑因素

如果上述步骤未能解决问题:

  • 确保代码部署: 验证更新后的
    customerHooks.js
    文件是否已正确部署到服务器。
  • 环境特定配置: 挂钩在沙箱、登台和生产环境之间的行为可能有所不同。在正确的环境中进行测试。

让我知道进展如何或者您是否需要进一步的帮助!

© www.soinside.com 2019 - 2024. All rights reserved.