我可以从后台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,但它似乎没有什么区别。
我有什么遗失的吗?
答案 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修复程序中可用。