Websphere Commerce Aurora Store - как найти структуру данных?
Я пытаюсь понять более новую модель программирования (не Access Bean).
Как в WebSphere Commerce 7 FEP 5 определить структуру объекта, извлеченного из тегов GetData?
Например, во фрагменте ниже, как я узнаю, какова структура данных catalogEntryDetails? Имя класса, методы и т. Д.?
Также кто-то может объяснить, откуда появилось поле "metaData"? Должно ли это быть в определении существительного, или это то, что установлено в коде на уровне посредника? Я не мог видеть ссылку на это как непосредственное поле в определении существительного....
<c:forEach var="metadata" items="${catalogEntryDetails.metaData}" varStatus="status2">
<c:if test="${metadata.key == 'ThumbnailPath'}">
<c:set var="thumbNail" value="${env_imageContextPath}/${metadata.value}" />
</c:if>
<c:if test="${metadata.key == 'FullImagePath'}">
<c:set var="fullImage" value="${metadata.value}" />
</c:if>
</c:forEach>
Объект catalogEntryDetails устанавливается из этого фрагмента:
<c:if test="${!empty productId}">
<%-- Try to get it from our internal hashMap --%>
<c:set var="key1" value="${productId}+getCatalogEntryViewAllByID"/>
<c:set var="catalogEntryDetails" value="${cachedCatalogEntryDetailsMap[key1]}"/>
<c:if test="${empty catalogEntryDetails}">
<wcf:getData type="com.ibm.commerce.catalog.facade.datatypes.CatalogNavigationViewType" var="catalogNavigationView"
expressionBuilder="getCatalogEntryViewAllByID" varShowVerb="showCatalogNavigationView" maxItems="1" recordSetStartNumber="0">
<wcf:param name="UniqueID" value="${productId}"/>
<wcf:contextData name="storeId" data="${storeId}" />
<wcf:contextData name="catalogId" data="${catalogId}" />
</wcf:getData>
<wcf:set target = "${cachedCatalogEntryDetailsMap}" key="${key1}" value="${catalogNavigationView.catalogEntryView[0]}"/>
</c:if>
</c:if>
<c:if test="${empty productId && !empty WCParam.partNumber}">
<c:set var="key1" value="${WCParam.partNumber}+getCatalogEntryViewAllByPartnumber"/>
<c:set var="catalogEntryDetails" value="${cachedCatalogEntryDetailsMap[key1]}"/>
<c:if test="${empty catalogEntryDetails}">
<wcf:getData type="com.ibm.commerce.catalog.facade.datatypes.CatalogNavigationViewType" var="catalogNavigationView"
expressionBuilder="getCatalogEntryViewAllByPartnumber" varShowVerb="showCatalogNavigationView" maxItems="1" recordSetStartNumber="0">
<wcf:param name="PartNumber" value="${WCParam.partNumber}" />
<wcf:contextData name="storeId" data="${storeId}" />
<wcf:contextData name="catalogId" data="${catalogId}" />
</wcf:getData>
<c:set var="catalogEntryDetails" value="${catalogNavigationView.catalogEntryView[0]}"/>
<wcf:set target = "${cachedCatalogEntryDetailsMap}" key="${key1}" value="${catalogNavigationView.catalogEntryView[0]}"/>
</c:if>
</c:if>
2 ответа
Лучшее, что вы можете сделать, - изучить IBM Infocenter. wcf: документы GetData говорят нам, что полученный результат определяется параметром "type". В вашем случае это "com.ibm.commerce.catalog.facade.datatypes.CatalogNavigationViewType". Еще раз откройте документы для CatalogNavigationViewType. Документы говорят нам, что это метод getCatalogEntryView():
Возвращает значение списка ссылок на содержимое "Представление каталога". Содержимое списка имеет тип CatalogEntryViewType. Список записей каталога в заданной области просмотра каталога.
Так что это ответ на ваш вопрос: catalogEntryDetails является экземпляром CatalogEntryViewType. По какой-то причине я не смог найти этот интерфейс в документации IBM. Но вы все равно можете найти его в пакете com.ibm.commerce.catalog.facade.datatypes (находится в \WCDE_ENT70\workspace\WC\Catalog-DataObjects.jar)
Вот:
public interface CatalogEntryViewType
{
public abstract String getUniqueID();
public abstract void setUniqueID(String s);
public abstract String getPartNumber();
public abstract void setPartNumber(String s);
public abstract String getName();
public abstract void setName(String s);
public abstract String getThumbnail();
public abstract void setThumbnail(String s);
public abstract String getFullImage();
public abstract void setFullImage(String s);
public abstract String getShortDescription();
public abstract void setShortDescription(String s);
public abstract String getLongDescription();
public abstract void setLongDescription(String s);
public abstract String getManufacturer();
public abstract void setManufacturer(String s);
public abstract String getKeyword();
public abstract void setKeyword(String s);
public abstract boolean isHasSingleSKU();
public abstract void setHasSingleSKU(boolean flag);
public abstract void unsetHasSingleSKU();
public abstract boolean isSetHasSingleSKU();
public abstract String getSingleSKUCatalogEntryID();
public abstract void setSingleSKUCatalogEntryID(String s);
public abstract String getStoreID();
public abstract void setStoreID(String s);
public abstract List getAttachments();
public abstract List getPrice();
public abstract String getParentCatalogGroupID();
public abstract void setParentCatalogGroupID(String s);
public abstract String getParentCatalogEntryID();
public abstract void setParentCatalogEntryID(String s);
public abstract Map getMetaData();
public abstract UserDataType getUserData();
public abstract void setUserData(UserDataType userdatatype);
public abstract String getNumberOfSKUs();
public abstract void setNumberOfSKUs(String s);
public abstract List getSKUs();
public abstract List getComponents();
public abstract List getMerchandisingAssociations();
public abstract List getAttributes();
public abstract String getSubscriptionTypeCode();
public abstract void setSubscriptionTypeCode(String s);
public abstract String getDynamicKitURL();
public abstract void setDynamicKitURL(String s);
public abstract String getDynamicKitDefaultConfiguration();
public abstract void setDynamicKitDefaultConfiguration(String s);
public abstract boolean isDynamicKitDefaultConfigurationComplete();
public abstract void setDynamicKitDefaultConfigurationComplete(boolean flag);
public abstract void unsetDynamicKitDefaultConfigurationComplete();
public abstract boolean isSetDynamicKitDefaultConfigurationComplete();
public abstract String getDynamicKitModelReference();
public abstract void setDynamicKitModelReference(String s);
public abstract String getTitle();
public abstract void setTitle(String s);
public abstract String getMetaDescription();
public abstract void setMetaDescription(String s);
public abstract String getMetaKeyword();
public abstract void setMetaKeyword(String s);
public abstract String getFullImageAltDescription();
public abstract void setFullImageAltDescription(String s);
public abstract boolean isBuyable();
public abstract void setBuyable(boolean flag);
public abstract void unsetBuyable();
public abstract boolean isSetBuyable();
public abstract Object getCatalogEntryTypeCode();
public abstract void setCatalogEntryTypeCode(Object obj);
public abstract boolean isDisallowRecurringOrder();
public abstract void setDisallowRecurringOrder(boolean flag);
public abstract void unsetDisallowRecurringOrder();
public abstract boolean isSetDisallowRecurringOrder();
}
Поле metaData получено из этой строки:
public abstract Map getMetaData();
Да, вы правы, оно исходит из определения существительного, настроенного в конфигурации медиатора бизнес-объекта: WC\xml\config\com.ibm.commerce.catalog-fep\wc-business-object-mediator.xml. По умолчанию он встроен в SolrReadCatalogEntryViewPartMediator. Из любой документации, которую я мог найти, не ясно, что мне пришлось декомпилировать, чтобы понять это. ВЕСЕЛЬЕ:-(
<_config:part-mediator interfaceName="com.ibm.commerce.foundation.server.services.dataaccess.bom.mediator.ReadBusinessObjectPartMediator">
<_config:part-mediator-implementation className="com.ibm.commerce.catalog.facade.server.services.dataaccess.bom.mediator.solr.SolrReadCatalogEntryViewPartMediator" />
<_config:part-mediator-implementation className="com.ibm.commerce.catalog.facade.server.services.dataaccess.bom.mediator.solr.SolrReadCatalogGroupViewPartMediator" />
<_config:part-mediator-implementation className="com.ibm.commerce.catalog.facade.server.services.dataaccess.bom.mediator.solr.SolrReadAttachmentAssetViewPartMediator" />
<_config:part-mediator-implementation className="com.ibm.commerce.catalog.facade.server.services.dataaccess.bom.mediator.solr.SolrReadSuggestionViewPartMediator" />
<_config:part-mediator-implementation className="com.ibm.commerce.catalog.facade.server.services.dataaccess.bom.mediator.solr.SolrReadFacetViewPartMediator" />
<_config:part-mediator-implementation className="com.ibm.commerce.catalog.facade.server.services.dataaccess.bom.mediator.solr.SolrReadBreadCrumbTrailViewPartMediator" />
<_config:part-mediator-implementation className="com.ibm.commerce.catalog.facade.server.services.dataaccess.bom.mediator.solr.SolrReadWebContentViewPartMediator" />
<!--
Note: SolrReadCatalogNavigationViewPostMediator must be declared as the last entry.
-->
<_config:part-mediator-implementation className="com.ibm.commerce.catalog.facade.server.services.dataaccess.bom.mediator.solr.SolrReadCatalogNavigationViewPostMediator" />