在SAP CX 1905.0的OData服务中查找父集成对象项时出现的问题

2020-09-07 12:01发布

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

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


我们发现类似Hybris 1905.0版中的问题

当您尝试定义一个集成对象,该集成对象试图为具有多个父定义的对象建立响应时,会出现类似于此错误的错误

提供的集成对象和ItemModel类具有多个匹配项,请调整Item的集成对象定义

我们已经检查了用于检索 de.hybris.platform.integrationservices.service.impl.DefaultIntegrationObjectService 类中的IntegrationObjectItems的代码是否与1811.x和 1905.0。 在1905.0版中,有一个新的后备方法可以通过父类型检索集成对象,此方法可以完成

de.hybris.platform.integrationservices.service.IntegrationObjectService#findIntegrationObjectItemByParentTypeCode 执行以下查询

 最终字符串queryString =
                  " SELECT DISTINCT {inteObjItem。"  + IntegrationObjectItemModel.PK +"}"
                          +" FROM {" + IntegrationObjectItemModel._TYPECODE +"作为inteObjItem"
                          +" JOIN" + IntegrationObjectModel._TYPECODE +"作为inteObj"
                          +"开启{inteObjItem:" + IntegrationObjectItemModel.INTEGRATIONOBJECT +"} = {inteObj:" + IntegrationObjectModel.PK +"}"
                          +" JOIN" + ComposedTypeModel._TYPECODE +" as ct"
                          +" ON {inteObjItem:" + IntegrationObjectItemModel.TYPE +"} = {ct:" + ComposedTypeModel.PK +"}}"
                          +" WHERE {inteObj。"  + IntegrationObjectModel.CODE +"} =?integrationObjectCode AND {ct。"  + ComposedTypeModel.PK +"} IN(?pks)";


  

该物品的所有超类型都可能是pk

  itemType.getAllSuperTypes();

  

通过这种修改,对集成对象的定义如下:

  INSERT_UPDATE IntegrationObject; 代码[唯一= true]
                                 ; 入站产品
 
  INSERT_UPDATE IntegrationObjectItem;  integrationObject(code)[unique = true]; 代码[unique = true]; 类型(代码)
                                     ; 入站产品; 产品; 产品
                                     ; 入站产品; 目录            ; 目录
                                     ; 入站产品;  CatalogVersion; 目录版本
                                     ; 入站产品;  VariantProduct; 变体产品
 
 
  INSERT_UPDATE IntegrationObjectItemAttribute;  integrationObjectItem(integrationObject(code),code)[unique = true];  attributeName [unique = true];  attributeDescriptor(enclosingType(code),qualifier);  returnIntegrationObjectItem(integrationObject(code),code);  unique [default = false];  autoCreate [默认=假]
                                              ;  InboundProduct:VariantProduct;  catalogVersion;  VariantProduct:catalogVersion;  InboundProduct:CatalogVersion; 真实;
                                              ;  InboundProduct:VariantProduct; 代码;  VariantProduct:code;  ; 真实;
                                              ;  InboundProduct:目录;  ID                          ; 目录:id;
                                              ;  InboundProduct:CatalogVersion; 目录                     ;  CatalogVersion:catalog; 入站产品:目录
                                              ;  InboundProduct:CatalogVersion; 版本;  CatalogVersion:version;
                                              ;  InboundProduct:CatalogVersion; 活跃;  CatalogVersion:active;
                                              ;  InboundProduct:产品; 变体; 产品:变体 InboundProduct:VariantProduct;  ;
 

  

并使用GET https://localhost:9002/odata2webservices/InboundProduct/Products 由于存在 variant 属性而失败,而在1811.x版中则没有失败,尽管在尝试进行此类查询时未正确填写响应 :

获取 https://localhost:9002/odata2webservices/InboundProduct/Products('Online%7CdemoProductCatalog%7C1111')/variants

这是SAP CX方面的预期行为吗? 还是尝试通过父类型检索数据时确实存在问题?

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

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


我们发现类似Hybris 1905.0版中的问题

当您尝试定义一个集成对象,该集成对象试图为具有多个父定义的对象建立响应时,会出现类似于此错误的错误

提供的集成对象和ItemModel类具有多个匹配项,请调整Item的集成对象定义

我们已经检查了用于检索 de.hybris.platform.integrationservices.service.impl.DefaultIntegrationObjectService 类中的IntegrationObjectItems的代码是否与1811.x和 1905.0。 在1905.0版中,有一个新的后备方法可以通过父类型检索集成对象,此方法可以完成

de.hybris.platform.integrationservices.service.IntegrationObjectService#findIntegrationObjectItemByParentTypeCode 执行以下查询

 最终字符串queryString =
                  " SELECT DISTINCT {inteObjItem。"  + IntegrationObjectItemModel.PK +"}"
                          +" FROM {" + IntegrationObjectItemModel._TYPECODE +"作为inteObjItem"
                          +" JOIN" + IntegrationObjectModel._TYPECODE +"作为inteObj"
                          +"开启{inteObjItem:" + IntegrationObjectItemModel.INTEGRATIONOBJECT +"} = {inteObj:" + IntegrationObjectModel.PK +"}"
                          +" JOIN" + ComposedTypeModel._TYPECODE +" as ct"
                          +" ON {inteObjItem:" + IntegrationObjectItemModel.TYPE +"} = {ct:" + ComposedTypeModel.PK +"}}"
                          +" WHERE {inteObj。"  + IntegrationObjectModel.CODE +"} =?integrationObjectCode AND {ct。"  + ComposedTypeModel.PK +"} IN(?pks)";


  

该物品的所有超类型都可能是pk

  itemType.getAllSuperTypes();

  

通过这种修改,对集成对象的定义如下:

  INSERT_UPDATE IntegrationObject; 代码[唯一= true]
                                 ; 入站产品
 
  INSERT_UPDATE IntegrationObjectItem;  integrationObject(code)[unique = true]; 代码[unique = true]; 类型(代码)
                                     ; 入站产品; 产品; 产品
                                     ; 入站产品; 目录            ; 目录
                                     ; 入站产品;  CatalogVersion; 目录版本
                                     ; 入站产品;  VariantProduct; 变体产品
 
 
  INSERT_UPDATE IntegrationObjectItemAttribute;  integrationObjectItem(integrationObject(code),code)[unique = true];  attributeName [unique = true];  attributeDescriptor(enclosingType(code),qualifier);  returnIntegrationObjectItem(integrationObject(code),code);  unique [default = false];  autoCreate [默认=假]
                                              ;  InboundProduct:VariantProduct;  catalogVersion;  VariantProduct:catalogVersion;  InboundProduct:CatalogVersion; 真实;
                                              ;  InboundProduct:VariantProduct; 代码;  VariantProduct:code;  ; 真实;
                                              ;  InboundProduct:目录;  ID                          ; 目录:id;
                                              ;  InboundProduct:CatalogVersion; 目录                     ;  CatalogVersion:catalog; 入站产品:目录
                                              ;  InboundProduct:CatalogVersion; 版本;  CatalogVersion:version;
                                              ;  InboundProduct:CatalogVersion; 活跃;  CatalogVersion:active;
                                              ;  InboundProduct:产品; 变体; 产品:变体 InboundProduct:VariantProduct;  ;
 

  

并使用GET https://localhost:9002/odata2webservices/InboundProduct/Products 由于存在 variant 属性而失败,而在1811.x版中则没有失败,尽管在尝试进行此类查询时未正确填写响应 :

获取 https://localhost:9002/odata2webservices/InboundProduct/Products('Online%7CdemoProductCatalog%7C1111')/variants

这是SAP CX方面的预期行为吗? 还是尝试通过父类型检索数据时确实存在问题?

付费偷看设置
发送
1条回答
土豆飞人
1楼-- · 2020-09-07 12:53

我们在建模中做了一些小的修改,以使阻抗以这种方式出现:

  INSERT_UPDATE IntegrationObject; 代码[唯一= true]
                                 ; 入站产品
 
  INSERT_UPDATE IntegrationObjectItem;  integrationObject(code)[unique = true];  code [unique = true]; 类型(代码)
                                     ; 入站产品; 产品; 产品
                                     ; 入站产品; 目录               ; 目录
                                     ; 入站产品;  CatalogVersion; 目录版本
                                     ; 入站产品;  GenericVariantProduct; 通用变量产品
 
 
  INSERT_UPDATE IntegrationObjectItemAttribute;  integrationObjectItem(integrationObject(code),code)[unique = true];  attributeName [unique = true];  attributeDescriptor(enclosingType(code),qualifier);  returnIntegrationObjectItem(integrationObject(code),code);  unique [default = false];  autoCreate [默认=假]
                                              ;  InboundProduct:GenericVariantProduct;  catalogVersion;  GenericVariantProduct:catalogVersion;  InboundProduct:CatalogVersion; 真实;
                                              ;  InboundProduct:GenericVariantProduct; 代码;  GenericVariantProduct:code;  ; 真实;
                                              ;  InboundProduct:目录;  ID                          ; 目录:id;
                                              ;  InboundProduct:CatalogVersion; 目录                     ;  CatalogVersion:catalog; 入站产品:目录
                                              ;  InboundProduct:CatalogVersion; 版本;  CatalogVersion:version;
                                              ;  InboundProduct:CatalogVersion; 活跃;  CatalogVersion:active;
                                              ;  InboundProduct:产品; 变体; 产品:变体 InboundProduct:GenericVariantProduct;  ;
 
  

之所以可以这样做,是因为我们知道我们可以拥有的每个VariantProduct都是GenericVariantProduct,但是对于其他可能具有不同类型的变量类型的项目,例如服装数据建模,我们仍然认为这是一个问题 。

一周热门 更多>