2014-01-21 45 views
3

在IBM WebSphere Commerce中如何从命令调用Facade而不是从jsp调用它。我们称之为从JSP像如何通过命令调用Facade

<wcf:getData type="com.ibm.commerce.catalog.facade.datatypes.CatalogNavigationViewType" var="catalogNavigationView" 
      expressionBuilder="${navigationView}" varShowVerb="showCatalogNavigationView" 
      maxItems="${pageSize}" recordSetStartNumber="${WCParam.beginIndex}"> 
      <wcf:param name="searchProfile" value="${searchProfile}" /> 
      <wcf:param name="searchTerm" value="${newSearchTerm}" /> 
      <wcf:param name="intentSearchTerm" value="${intentSearchTerm}" /> 
      <wcf:param name="searchType" value="${searchType}" /> 
      <wcf:param name="searchSource" value="${WCParam.searchSource}" /> 
      <wcf:param name="metaData" value="${WCParam.metaData}" /> 
      <wcf:param name="orderBy" value="${WCParam.orderBy}" /> 
      <c:forEach var="facetValue" items="${param.facet}"> 
       <c:if test="${fn:contains(facetValue , '|')}"> 
        <c:set var="facetValue" value="${fn:replace(facetValue,'|',',')}"/> 
       </c:if> 
       <wcf:param name="facet" value="${facetValue}" /> 
      </c:forEach> 
      <wcf:param name="advancedFacetList" value="${newAdvancedFacetList}"/> 
      <wcf:param name="categoryId" value="${currentCategoryId}" /> 
      <wcf:param name="filterTerm" value="${newFilterTerm}" /> 
      <wcf:param name="filterType" value="${WCParam.filterType}" /> 
      <wcf:param name="filterFacet" value="${removeFacet}" /> 
      <wcf:param name="manufacturer" value="${newManufacturer}" /> 
      <wcf:param name="minPrice" value="${WCParam.minPrice}" /> 
      <wcf:param name="maxPrice" value="${WCParam.maxPrice}" /> 
      <wcf:contextData name="storeId" data="${WCParam.storeId}" /> 
      <wcf:contextData name="catalogId" data="${WCParam.catalogId}" /> 
     </wcf:getData> 

这是我们如何能够从JSP调用它,但我想打电话给在命令这个门面(从Java代码) 请给我任何建议

感谢 ANKIT

回答

3

你可以这样说:

public someMethod(){ 
.... 
CatalogFacadeClient catalogFacadeClient = new CatalogFacadeClient(getBusinessContextType(), null); 

GetType getVerb = CatalogFacadeClient.createGetVerb("_wcf:XPath", getXPathExpressionString()); 

ShowCatalogNavigationViewDataAreaType showDataArea = catalogFacadeClient.getCatalogNavigationView(getVerb); 
response = showDataArea.getCatalogNavigationView(); 
.... 
} 

public String getXPathExpressionString() { 

    StringBuffer expression = new StringBuffer(); 
    expression.append("{_wcf.ap='IBM_Store_CatalogEntrySearch';"); 
    expression.append("_wcf.search.term='" + toto+ "';"); 
    expression.append("_wcf.search.spellcheck='false';"); 
    expression.append("_wcf.search.type='1000';"); 
    expression.append("_wcf.search.source='Q'}"); 
    expression.append("/CatalogNavigationView"); 
return expression.toString(); 
} 

protected BusinessContextType getBusinessContextType() { 
    BusinessContextType businessContext = CommerceFoundationFactory.eINSTANCE.createBusinessContextType(); 
    ContextDataType storeId = CommerceFoundationFactory.eINSTANCE.createContextDataType(); 
    storeId.setName("storeId"); 
    storeId.setValue(currentStoreId); 
    ContextDataType catalogId = CommerceFoundationFactory.eINSTANCE.createContextDataType(); 
    catalogId.setName("catalogId"); 
    catalogId.setValue(currentCatalogId); 
    ContextDataType langIdContext = CommerceFoundationFactory.eINSTANCE.createContextDataType(); 
    langIdContext.setName("langId"); 
    langIdContext.setValue(langId.toString()); 
    businessContext.getContextData().add(storeId); 
    businessContext.getContextData().add(catalogId); 
    businessContext.getContextData().add(langIdContext); 

    return businessContext; 
} 
+0

谢谢你它适合我 –

0

你的代码的工作!非常感谢!

约getXPathExpressionString一些备注()方法:

1.-为了正确准备表达式生成器请获取数据-config.xml文件并通过名称获取表达式生成器。名称是WCF中expressionBuilder PARAM:的getData

expressionBuilder="${navigationView}" 


<wcf:getData type="com.ibm.commerce.catalog.facade.datatypes.CatalogNavigationViewType" var="catalogNavigationView" 
       expressionBuilder="${navigationView}" varShowVerb="showCatalogNavigationView" 
       maxItems="${pageSize}" recordSetStartNumber="${WCParam.beginIndex}"> 

价值$ {} navigationView是= “getCatalogNavigationView”

搜索中获取数据-config.xml文件中这个值,看起来像这样:

<expression-builder> 
    <name>getCatalogNavigationView</name> 
    <data-type-name>CatalogNavigationView</data-type-name> 
    <expression-template>{_wcf.ap='$accessProfile$';_wcf.search.profile='$searchProfile$';_wcf.search.facet.field.limit='$facetLimit$';_wcf.search.term='$searchTerm$';_wcf.search.intent.term='$intentSearchTerm$';_wcf.search.originalterm='$originalSearchTerm$';_wcf.search.category='$categoryId$';_wcf.search.type='$searchType$';_wcf.search.exclude.term='$filterTerm$';_wcf.search.exclude.type='$filterType$';_wcf.search.manufacturer='$manufacturer$';_wcf.search.price.minimum='$minPrice$';_wcf.search.price.maximum='$maxPrice$';_wcf.search.facet='$facet$';_wcf.search.advanced.facet='$advancedFacetList$';_wcf.search.exclude.facet='$filterFacet$';_wcf.search.sort='$orderBy$';_wcf.search.meta='$metaData$';_wcf.search.source='$searchSource$';_wcf.search.store='$physicalStoreIds$'}/CatalogNavigationView</expression-template> 
    <param> 
     <name>accessProfile</name> 
     <value>IBM_Store_CatalogEntrySearch</value> 
    </param> 
    <param> 
     <name>searchType</name> 
     <value>0</value> 
    </param> 
    <param> 
     <name>searchSource</name> 
     <value>O</value> 
    </param> 
    <param> 
     <name>searchProfile</name> 
     <value>IBM_findCatalogEntryByNameAndShortDescription</value> 
    </param> 
</expression-builder> 

来源:http://158.85.49.234/WEB-INF/config/com.ibm.commerce.catalog-fep/get-data-config.xml

所以本文标签:<expression-template>包含宝:),即Solr的查询表达式。

2:有了这个表达模板,我们可以可以创建一个正确的表达:

public String getXPathExpressionString() throws JspException, AbstractBusinessObjectDocumentException { 

     String expressionTemplate = "{_wcf.ap='$accessProfile$';_wcf.search.profile='$searchProfile$';_wcf.search.category='$categoryId$';_wcf.search.type='$searchType$';_wcf.search.sort='$orderBy$';_wcf.search.source='$searchSource$';_wcf.search.facet='$facet$';_wcf.search.exclude.facet='$filterFacet$';_wcf.search.meta='$metaData$';_wcf.search.price.minimum='$minPrice$';_wcf.search.price.maximum='$maxPrice$'}/CatalogNavigationView"; 

     ExpressionBuilderConfig expressionBuilderConfig = new ExpressionBuilderConfig(); 
     expressionBuilderConfig.setName("getCatalogNavigationView"); 
     expressionBuilderConfig.setDataTypeName("CatalogNavigationView"); 
     expressionBuilderConfig.setExpressionLanguage("_wcf:XPath"); 
     expressionBuilderConfig.setExpressionTemplate(expressionTemplate); 

     HashMap<String,String[]> parameters = new HashMap<String, String[]>(); 
     parameters.put("accessProfile", new String[]{"IBM_Store_CatalogEntrySearch"}); 
     parameters.put("searchProfile", new String[]{"IBM_findCatalogEntryByNameAndShortDescription"}); 
     parameters.put("searchType", new String[]{"xyz"}); 
     parameters.put("categoryId",new String[]{ "123"}); 
     parameters.put("minPrice",new String[]{"0"}); 

     ExpressionType expressionType = expressionBuilderConfig.buildExpression(parameters); 

     return expressionType.getValue(); 
    } 

----------------------- -------- * -------------------------------------

这可以用来转换后端或服务提供商中的websphere电子商务。有了这个,我们可以停止使用jsp,scriplets,dojo 1.5,并且像前一个js框架一样使用前端层中的任何东西。