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

时间:2017-09-26 00:36:06

标签: intershop

我可以从后台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,但它似乎没有什么区别。

我有什么遗失的吗?

2 个答案:

答案 0 :(得分:0)

DeleteDomainReferencesTransaction

此存储过程应删除订单。在domaininformation表中查找要删除的domainid并调用此过程。

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

更新9/27

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

答案 1 :(得分: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修复程序中可用。