AmbiguousItemException从impEx更新动态过程定义

2020-09-10 17:36发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好

我们正在运行Sap commerce 1811,使用动态流程定义时,您可以创建如下的impEx:

  INSERT_UPDATE DynamicProcessDefinition; 代码[unique = true]; 活性; 内容;
                                        ; 过程; 真实;  "
  <?xml version ='1.0'encoding ='utf-8'?>
  
 
      ...
  
  ";
  

这第一次运行正常,您获得版本0。第二次运行于版本1,但是,在版本2中,您从ImpExImportReader获得了AmbiguousItemException。 impEx为了更新动态流程定义是否错误?

我的示例基于此处的impEx文档: https://help。 hybris.com/1811/hcd/8c3065f186691014bdd09fa25ffa7e6a.html

顺便说一句,当从Backoffice进行更新时,它可以正常工作,并且该版本如预期那样发生碰撞,并且可以使用新版本。

更新:

如果我将impEx更改为

  INSERT_UPDATE DynamicProcessDefinition; 代码[unique = true];  active [unique = true]; 版本[unique = true]; 内容;
                                            ; 过程; 真实;  4;  "
      <?xml version ='1.0'encoding ='utf-8'?>
      
     
          ...
      
      ";
  

它不会停留在AmbiguousItemException上,而是停留在:

DynamicProcessDefinitionModel()的验证失败,并显示消息"具有相同代码(进程)的内容已经存在。

那么.. Hybris/SAP Commerce是否不支持从impEx更新流程定义,或者我在这里做错了吗?

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好

我们正在运行Sap commerce 1811,使用动态流程定义时,您可以创建如下的impEx:

  INSERT_UPDATE DynamicProcessDefinition; 代码[unique = true]; 活性; 内容;
                                        ; 过程; 真实;  "
  <?xml version ='1.0'encoding ='utf-8'?>
  
 
      ...
  
  ";
  

这第一次运行正常,您获得版本0。第二次运行于版本1,但是,在版本2中,您从ImpExImportReader获得了AmbiguousItemException。 impEx为了更新动态流程定义是否错误?

我的示例基于此处的impEx文档: https://help。 hybris.com/1811/hcd/8c3065f186691014bdd09fa25ffa7e6a.html

顺便说一句,当从Backoffice进行更新时,它可以正常工作,并且该版本如预期那样发生碰撞,并且可以使用新版本。

更新:

如果我将impEx更改为

  INSERT_UPDATE DynamicProcessDefinition; 代码[unique = true];  active [unique = true]; 版本[unique = true]; 内容;
                                            ; 过程; 真实;  4;  "
      <?xml version ='1.0'encoding ='utf-8'?>
      
     
          ...
      
      ";
  

它不会停留在AmbiguousItemException上,而是停留在:

DynamicProcessDefinitionModel()的验证失败,并显示消息"具有相同代码(进程)的内容已经存在。

那么.. Hybris/SAP Commerce是否不支持从impEx更新流程定义,或者我在这里做错了吗?

付费偷看设置
发送
3条回答
软件心理学工程师
1楼 · 2020-09-10 18:02.采纳回答

你好

我现在已经调试并找到了解决方案。 它结合了impEx处理引擎中使用的各种技巧来使其正常工作。

使用impEx首次插入动态流程定义后,由于SAP如何实现处理器,因此无法再再次使用这种方式。 严格不允许同一项目的多个实例直接与动态流程定义相抵触。 没有记录在任何地方。 我认为这是一个错误,他们可能会称其为功能。

我已经阅读了有关修饰符的文档并进行调试,以查看它们在引擎中采用的路线能够构造出可以正常工作的impEx。

 更新DynamicProcessDefinition [batchmode = true]; code [unique = true]; active [unique = true]; 版; 内容;
                                             ; 过程; 真实;  ;  "
       <?xml version ='1.0'encoding ='utf-8'?>
       
      
           ...
       
       ";

  

您启用批处理模式。 这将禁用重复错误检查,因此您可以跳过模棱两可的项目异常。 现在,它将使用该代码查找所有旧版本的DynamicProcessDefinitions。 启用批处理模式时,不能使用INSERT_UPDATE。 您必须使用UPDATE。

为了只触发最新的更新而不必跟踪版本号,并让DynamicProcessDefinitions的默认拦截器执行所有繁重的工作,因为您还必须将活动标志设置为标头中的唯一字段。 这将滤除所有较旧的DynamicProcessDefinition,这些默认设置在被取代时将默认设置为false。

现在,它仅查找最近发送的动态流程定义,并且您将对此触发更新。 您不必指定版本,因为幕后的拦截器将自动为您完成所有操作。

我希望这对某人有帮助,因为我花了一些时间来解决这个问题……现在解决方案看起来很简单。

打个大熊猫
2楼-- · 2020-09-10 18:12

请注意,由于impEx通常的用法,语法可能会造成混淆 作品。 看起来我们正在更新某些内容,但实际上我们都是在隐式更新不相关的模型,因为已经存在的当前活动定义将被设置为非活动,并且我们将基于此更新的内容插入一个新版本并将其设置为活动 并从上一个活动定义获取版本增量。 这里发生了很多魔术,因此您将来可能不得不向新开发人员甚至是您自己解释几次。

DafaDDDa
3楼-- · 2020-09-10 17:47

谢谢,真的很有帮助。

对于我们的环境(同样是SAP Commerce 1811),我们不需要在impex中设置属性版本,因为它会在AbstractDynamicContentPrepareInterceptor.HistoricalContentCreator#incrementActiveModelVersion方法中抛出NPE

在本例中,有效的impim是:

 更新DynamicProcessDefinition [batchmode = true]; code [unique = true]; active [unique = true]; content;
      ; process; true;" 
  ...
        



  

一周热门 更多>