2013-10-10 8 views
1

저는 Oracle ATG 10.1.2 및 Endeca 3.1.1 (Endeca Experience Manager 미포함)이있는 웹 응용 프로그램을 작성 중이며 키워드 리디렉션 기능을 작동 시키려고합니다.ATG를 사용하여 JSP 레이어에서 Endeca 키워드 리디렉션 결과에 액세스하는 방법은 무엇입니까?

궁극적으로, 내 JSP 레이어에 Endeca에서 반환 된 키워드 리디렉션 정보에 대한 액세스 권한을 얻으려고 사용자를 키워드 리디렉션 URL로 리디렉션 할 수 있고/해당 URL을 렌더링 된 페이지의 일부로 표시 할 수 있습니다.

우리가 Assembler Application Developer's Guide (v3.1.1)의 P51에 설명 된대로 /services/guidedsearch 패키지 서비스를 (사용, 엔데 카에서 결과를 얻을 수 있습니다.

내가 직접 엔데 카 MDEX 서버에서 원시 가이드 검색 출력에 액세스하는 브라우저를 사용하는 경우, 반환 된 XML에서 endeca:redirect 속성의 가이드 검색 항목과 URL을 볼 수 있으며 Endeca JSP 참조 응용 프로그램 ("오렌지 응용 프로그램")에서도 문제없이 안내 된 검색 항목을 볼 수 있습니다. "오렌지 응용 프로그램"

그러나 내가 Endeca에서 결과를 얻으려면 ATG InvokeAssembler 방울을 사용하십시오. endeca:redirect 항목은 thec에 포함되지 않은 것으로 보입니다. 응답. 나는 원시 /services/guidedsearch XML에서 볼 수있는 것처럼

@type, name는, navigationbreadcrumbs는, resultsListsearchAdjustments는, zonesendeca:siteRootPath는,

endeca:contentPathendeca:redirect 키가 없습니다 : 만 반환 가져옵니다의 ContentItem지도는 다음과 같은 키가 산출.

<dsp:droplet name="/atg/endeca/assembler/droplet/InvokeAssembler"> 
    <dsp:param name="includePath" value="/services/guidedsearch" /> 
    <dsp:oparam name="output"> 
    <dsp:getvalueof param="contentItem" var="contentItem" vartype="com.endeca.infront.assembler.ContentItem" /> 
    </dsp:oparam> 
</dsp:droplet> 

가 어떻게 액세스 할 수 있습니다 엔데 카에서 반환 된 정보를 재 키워드 :

여기 내 JSP 코드의 관련 조각이야?

답변

1

오라클 지원 문서 1530390.1에 따르면 문제는 ATG 10.1.2에서 InvokeAssembler 드롭 릿이 RedirectAwareContentIncludeHandler를 사용하는 대신 Endeca ContentInclude 객체 (키워드 리디렉션을 지원하지 않음)를 사용하도록 내부적으로 코딩된다는 것입니다.).

해당 지식 문서에 따라 Oracle Support에서 핫픽스 p16099140을 요청하여 해결할 수 있습니다.

2

RedirectAwareHandler도 개발하여 SupplementList에서 리디렉션을 추출하면됩니다.

public ContentItem process(ContentItem pContentItem) throws CartridgeHandlerException { 
    ENEQueryResults executeMdexRequest = executeMdexRequest(mMdexRequest); 
    Object redirectURL = null; 
    if (executeMdexRequest.getNavigation() != null && executeMdexRequest.getNavigation().getSupplements() != null){ 
     SupplementList supplements = executeMdexRequest.getNavigation().getSupplements(); 
     Supplement supplement = null; 

     for (Object object : supplements) { 
      if (object instanceof Supplement) { 
       supplement = (Supplement) object; 
       if (supplement.getProperties() != null) { 
        redirectURL = supplement.getProperties().get("DGraph.KeywordRedirectUrl"); 
        if (redirectURL != null) { 
         break; 
        } 
       } 
      } 
     } 
    } 

//And now do your redirect 
}