2017-09-26 49 views
1

我可以从后台用户界面中删除一个频道,然后在SMC中运行DeleteDomainReferences作业以清除该参考,并可以使用相同的方法再次创建一个新频道ID。Intershop:如何在创建订单后删除频道

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

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

问题:为了能够在Intershop中清除任何引用而需要执行的存储过程和步骤是什么,以便我可以再次创建具有相同ID的通道?

更新9/26:
我没有配置SMC新的工作叫DeleteDomainReferencesTransaction管道与ToBeRemovedDomainID属性设置为我试图清理域ID。

作业在日志文件中没有错误地运行。尽管这项工作几乎立即完成。

然后我运行了SMC中的DeleteDomainReferences作业。这是我通常在通道没有订单时删除通道后执行的工作。该作业使日志文件中的以下异常失败。

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

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

我也使用该域ID执行SP_BASKET_OBSERVER,但它似乎没有区别。

有什么我失踪?

+0

我会在自己的机器上试用它,我会回到你身边。 –

+0

你在哪个版本上?我猜7.8或更高? –

+0

我正在使用7.8.1.4 – user102486

回答

0

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

来自7.8.1的线117和118。4

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修补程序中变得可用,正如我所了解的。

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) 

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

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

更新9/27

我想这一点上我的本地7.7环境。 DeleteDomainReferences作业也会从isorder表中删除订单。无需分别运行sp_deleteLineItemCtnrByDomain。重新创建频道我看不到任何旧订单。我猜你发现你正在运行的版本中有一个错误。也许与地址表被分成different tables有关。打开支持票,让他们看看这个。

+0

尝试了建议。请参阅原始问题中的更新 – user102486