用于获取 CATENTDESCOVR 的 Databean

Databean to fetch CATENTDESCOVR

我需要使用 Databean 获取 CATENTDESCOVR 的数据。

有IBM提供的databean可以获取数据吗?

我正在使用 IBM WebSphere Commerce V7.0 Feature Pack 8

简短的回答是没有用于访问此数据的 DataBean。

长答案的[开头]是您需要使用 BOD+DSL 层才能访问此类数据。 通过 JSP 使用 getData 标签(Aurora 广泛使用此标签)或使用 Java 代码(有时使用 XPath 表达式...)。 您还可以跟踪查询:see here.

然而,据我了解,覆盖的思想是它们对前端是透明的。 IE。描述覆盖在设置时替换主要描述。 see here

不确定您尝试直接访问此数据的目的。覆盖 WCS 逻辑?

CATENTDESCOVR 已经在您的 solr 核心中编制了索引。

查看 solr\home\MC_10001\en_US\CatalogEntry\conf,因为在 wc-data-config.xml 中,您可以看到它被映射到核心中。

当您从 solr 请求数据时,Search EAR 项目的 wc-search.xml 中定义的 Post 处理过滤器之一将填写覆盖值作为 "name"或 "shortdesc" 个返回值。

所以,您真的只需要正常调用其余服务即可获取此值。当然,前提是您希望从前端获得它。

如果你需要它的后端,你可以使用 CatalogEntryFacadeClient 来执行 solr 查询。

这是一个很好的问题,下面是对 CATENTDESCOVR 工作原理的解释,这个答案基于 WCS 7.0,FEP 7。但我相信 fep 8 具有相同的 api ,我不认为 IBM 在 fep8 中增强了这一点!

  • CATENTDESCOVR 的信息被索引并存储在 solr 中,但索引的原因只是为了搜索和拼写检查,您可以看到我们如何将这些信息复制到 defultSearch 和 spellCheck 以使这些值可搜索并成为一部分拼写检查(schema.xml 结束)。

如果您查看这些数据是如何在 schema.xml 的 solr 中建立索引和存储的,您会发现以下行

   <!--
   Catentry's description override: map to table CATENTDESCOVR
   -->
   <field name="nameOverride" type="wc_text" indexed="true" stored="true"  multiValued="true"/>
   <field name="shortDescriptionOverride" type="wc_text" indexed="true" stored="true"  multiValued="true"/>
   <field name="keywordOverride" type="wc_text" indexed="true" stored="true"  multiValued="true"/>

请注意这里的 multiValued="true" ,这意味着如果您有多个商店属于同一个 Esite ,则 solr 将 nameOvr 和 descOvr 索引为该 catentryId 的多值,但 solr 不知道哪个覆盖名称属于到哪个存储,那个bean说,IBM solr index the master catalog data not store specific data .

这带来了一个问题,即如何在店面的每个商店中显示被覆盖的名称?

答案是利用 WC-Search post-处理器:

com.ibm.commerce.foundation.server.services.rest.search.postprocessor.solr.SolrRESTSearchCatalogEntryViewDescriptionQueryPostprocessor

如果您查看此 post 处理器的实现,您会发现以下高级步骤:

1- 通过以下方式获取 catOvrGrpId:

catOvrGrpId = CatalogOverrideHelper.getOverrideGroupIdForStore(this.iStoreId)

2-通过调用DSL服务获取需要的覆盖数据:

JDBCQueryService service = new JDBCQueryService("com.ibm.commerce.catalog");

queryParameters.put("language", langIds);
queryParameters.put("UniqueID", catEntryUniqueIDs);
queryParameters.put("catOverrideGroupID", groupIds);

service.executeQuery("IBM_Get_CatentryDescOverride_By_LangId_And_CatentryId_And_GroupId", 
          queryParameters);

3-将返回的数组列表转换为JSON兼容结果:

populateOverrideCatalogEntries((List)listOfPhysicalObjects, catalogEntryViews);

您可以重复使用上面的代码并尝试反编译SolrRESTSearchCatalogEntryViewDescriptionQueryPostprocessor以了解如何从数据库中读取这些信息。

IBM_Get_CatentryDescOverride_By_LangId_And_CatentryId_And_GroupId 的查询存在于 Search/xml/config/com.ibm.commerce.catalog/wc-query-utilities.tpl

希望这对您有所帮助。

谢谢 阿贝德