在SFCC B2C中,处理新客户注册、购物车更新、从墨盒发布订单等事件的典型方式是什么?
在这里,我可以看到一些资源通过证明钩子来"支持服务器端定制",但支持定制的资源数量很少,而且那里没有"客户注册"或"购物车更新"事件的钩子。
Vitaly,我认为您具体谈论的是OCAPI接口,而不是传统的DemandwareScript店面接口。然而,我将对这两种情况作出回答。没有一个接口可以让您知道事件何时发生。此外,还有多个接口可以触发此类事件:
开放商务API(OCAPI)
如果您希望侦听和/或向外部服务通知使用此接口触发的事件,则必须为要跟踪其创建或修改的资源使用适当的挂钩。这个钩子是用Demandware脚本(ECMAScript 5+自定义扩展)编写的
店面接口
店面界面中有一个MVC架构,它是Commerce Cloud B2C最流行的用例。这种MVC体系结构有几个版本,但所有版本都有几个控制器,用于处理服务器端的各种用户交互。要跟踪数据对象的所有各种突变和创建,您需要向每个控制器添加代码。也许更适合控制器用来创建和变异这些数据对象的模型。
进口
有两种方法可以将数据导入平台:
- XML文件导入
- OCAPI数据API
这两种导入数据都无法根据操作结果触发自定义行为。在许多情况下,您将对数据的创建或修改时间视而不见。
修正此问题的方法可以是查找缺少自定义属性的对象(此作业或其他两个接口的自定义设置),并添加自定义属性和/或使用时间戳更新另一个属性。除了该活动之外,此作业可能还需要在所有对象上循环,以确定导入活动自上次设置上述自定义属性以来是否发生了任何更改。这可以通过另一个包含某种散列或校验和的自定义属性来实现。此作业需要持续运行,并且可能分为两个部分,以不同的间隔运行。它不是一个性能良好且可扩展的解决方案。
相反,理想情况下,所有通过这些导入机制发送数据的系统都会预先设置自定义属性,以便在导入时更新这些字段。
获取数据
在Salesforce Commerce Cloud中,您可以通过店面请求&响应上下文或通过在后台运行的异步批处理作业。这些作业可以编写文件,通过SFTP、HTTPS传输文件,或者进行外部API调用。还有OCAPIDataneneneba API,它可以让您在轮询API以获取新数据的基础上知道何时添加/修改某些内容。
在许多情况下,您会受到配额的限制,这些配额有助于保持系统的整体性能。
方法
有几种不同的方法可以用来捕获和传输表示这类事件所需的数据。它们总结如下。
导出队列
可能性能最好的选项是导出队列。您可以将已发生的事件列表排队,然后在后台运行的作业中将其传输到第三方系统,而不是立即通知外部系统发生的事件。队列通常是使用系统的自定义对象概念构建的。当事件发生时,您将创建一个新的自定义对象,该对象将包含有关该事件以及如何在队列中处理该事件的所有必要信息。您可以创建一个添加到定期运行的作业流中的作业组件。例如,每15分钟。该作业组件将遍历队列,并执行将该事件传输到第三方系统所需的任何操作。一旦传输,项目就会从队列中删除。
实时传输
您必须小心使用这种方法,因为它最有可能降低商家店面和/或OCAPI接口的性能。事件发生时,您将对收集事件通知的第三方系统执行web服务调用。如果第三方系统不可用,您必须对此请求设置非常激进的超时,以避免对店面或API性能造成太大影响。我甚至建议将这种方法与上面描述的Queue方法结合起来,这样您就可以将失败的API调用添加到队列中,以便稍后重新发送。
OCAPI轮询
为了知道什么时候真正修改或创建了某个东西,您需要实现一个自定义属性来跟踪这些时间戳。不幸的是,虽然几乎每个对象上都有creationDate
和lastModified
DateTime戳,但OCAPI和DW脚本API通常都无法访问它们。您的自定义属性将需要修改OCAPI挂钩和店面控制器/模型,以适当地设置这些属性。设置后,可以使用OCAPIDataneneneba API基于这些自定义属性查询对象。第三方系统会定期连接以查询自上次检查以来的新数据对象。请注意,并非所有数据对象都可以通过OCAPIDataneneneba API访问,并且您可能会受到查询某些对象的方式限制,因此这绝不是银弹方法。
我祝您好运,如果您在制定适当的解决方案时需要任何支持,市场上有许多系统集成商合作伙伴。你可以在AppExchange上找到它们。按Salesforce B2C Commerce筛选顾问以获得合作伙伴的分层列表。
全面披露:我为一个这样的合作伙伴工作:Astound Commerce