1

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

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

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

问题:为了能够清除 Intershop 中的任何引用以便我可以再次创建具有相同 ID 的通道,需要采取哪些存储过程和步骤?

更新 9/26:
我确实在 SMC 中配置了一个新作业来调用 DeleteDomainReferencesTransaction 管道,其中 ToBeRemovedDomainID 属性设置为我要清理的域 id。

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

然后我在 SMC 中运行了 DeleteDomainReferences 作业。这是我通常在删除该频道后在该频道中没有订单时运行的作业。此作业未能在日志文件中出现以下异常。

ORA-02292:违反完整性约束 (INTERSHOP.BASKETADDRESS_CO001) - 发现子记录 ORA-06512:在“INTERSHOP.SP_DELETELINEITEMCTNRBYDOMAIN”,第 226 行 ORA-06512:在第 1 行

然后我检查了 BASKETADDRESS 表,确实看到了该域 id 的记录。我猜这就是 DeleteDomainReferences 作业失败的原因。

我还使用该域 id 执行 SP_BASKET_OBSERVER,但似乎没有什么不同。

有什么我想念的吗?

4

2 回答 2

0
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)

这个存储过程应该删除命令。在 domaininformation 表中查找要删除的 domainid 并调用此过程。

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

更新 9/27

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

于 2017-09-26T11:01:51.623 回答
0

在 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 修补程序中可用。

于 2017-10-18T02:00:13.577 回答