Intershop:如何在创建订单后删除渠道

Intershop: How To Delete a Channel After Orders Have Been Created

我能够从后台 UI 和 运行 SMC 中的 DeleteDomainReferences 作业删除一个频道以清除引用并能够使用相同的 ID 再次创建一个新频道。

但是,一旦创建了订单,上述过程将不起作用。

我听说我们可以 运行 一些针对数据库的存储过程来应对这种情况。

问题:要清除 Intershop 中的任何引用,以便我可以再次创建具有相同 ID 的频道,需要执行哪些存储过程和步骤?

9 月 26 日更新:
我确实在 SMC 中配置了一个新作业来调用 DeleteDomainReferencesT运行saction 管道,并将 ToBeRemovedDomainID 属性设置为我要清理的域 ID。

作业 运行 在日志文件中没有错误。不过,这项工作几乎是立即完成的。

然后我 运行 SMC 中的 DeleteDomainReferences 作业。这是我在删除频道后通常 运行 的工作,因为该频道没有订单。此作业因日志文件中的以下异常而失败。

ORA-02292: 违反完整性约束 (INTERSHOP.BASKETADDRESS_CO001) - 找到子记录 ORA-06512: 在 "INTERSHOP.SP_DELETELINEITEMCTNRBYDOMAIN",第 226 行 ORA-06512: 在第 1 行

然后我检查了 BASKETADDRESS table 并确实看到了该域 ID 的记录。我想这就是 DeleteDomainReferences 作业失败的原因。

我也用那个域 ID 执行了 SP_BASKET_OBSERVER,但似乎没有什么不同。

有什么我遗漏的吗?

sp_deleteLineItemCtnrByDomain
-- Description : This procedure deletes basket/order related stuff.
-- Input       : domainID   The domain id of the domain to be deleted.
-- Output      : none
-- Example     : exec sp_deleteLineItemCtnrByDomain(domainid)

此存储过程应删除订单。在域信息中查找要删除的域ID table 并调用此过程。

您也可以调用管道DeleteDomainReferencesTransaction。设置一个调用此管道的 smc 作业,并将要清理的域 ID 作为参数。它还会调用第二个 sp 来清理支付数据,因此它实际上是一种更好的方法。

9 月 27 日更新

我在我的本地 7.7 环境中尝试了这个。 DeleteDomainReferences 作业还从 isorder table 中删除订单。无需单独 运行 sp_deleteLineItemCtnrByDomain。重新创建频道我没有看到旧订单。我猜您在 运行ning 的版本中发现了一个错误。可能与地址 table 被拆分成 different tables 有关。开一张支持票让他们看看这个。

在 intershop 支持的协助下,已确定在 IS 7.8.1.4 中,sp_deleteLineItemCtnrByDomain.sql 有问题。

7.8.1.4 中的第 117 和 118 行

delete from staticaddress_av where ownerid in (select uuid from staticaddress where lineitemctnrid = i.uuid);
delete from staticaddress where lineitemctnrid = i.uuid;

应替换为

delete from basketaddress_av where ownerid in (select uuid from basketaddress where basketid = i.uuid);
delete from basketaddress where basketid = i.uuid;

更新存储过程后,运行 DeleteDomainReference 作业完成且没有错误,我能够再次重新创建相同的频道。

如我所知,该修复程序将在 7.8.2 修补程序中可用。