用于获取 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
下
希望这对您有所帮助。
谢谢
阿贝德
我需要使用 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
希望这对您有所帮助。
谢谢 阿贝德