2014-04-17 4 views
0

Hello Domino 프로그래머! XPages보기 - 동시에 필터 및 검색

나는 Xpages 응용 프로그램을 작동하고 나는 다음과 같은 문제로 실행 :

나는 많은 Xpages은 이름에 의해 필터링되는 컨트롤을 볼 수 있습니다. 최근에 기존 검색에 전체 검색을 추가해야했습니다. "보기 결과에서 검색"옵션이 "열 값 별 필터링"옵션을 무시하는 것으로 보이므로 다른 사용자 문서를 명확하게 볼 수 있습니다.

검색 조건을 필터링하기 위해 추가 조건을 쿼리에 추가 할 수는 있지만 그 방법은 무엇입니까?

도움이 될 것입니다.

+0

불행히도 FT 쿼리에 필터 조건을 추가하는 것보다 나은 솔루션을 찾지 못했습니다. –

답변

0

좋아요, 다음은이 문제에 접근 한 방법입니다. 전 일반 뷰 데이터 소스로 데이터보기를 사용하고 있습니다.

필드에 무언가를 입력하면 "startKeys"속성을 사용하여 적절한 항목으로 이동합니다. 검색 필드에는 부울 값인 "viewMoveTo"를 true로 설정하는 onFocus 이벤트가 있습니다. 이 값을 bean 또는 sessionScope에 저장하거나 중요하지 않은 곳에 저장할 수 있습니다. 데이터보기의 부분 새로 고침을 수행하는 또 다른 이벤트가 onKeyUp입니다.

검색 버튼을 클릭하면 데이터보기에서 "검색"속성을 사용하여 FT 검색을 수행합니다. 검색 버튼의 onClick 이벤트에서 "viewMoveTo"값을 false로 설정합니다. 여기

 <xp:inputText 
      id="viewSearchField1" 
      value="#{UserProfile.viewSearchStr}" 
      styleClass="form-control rpdViewSearchField"> 
      <xp:this.attrs> 
       <xp:attr name="placeHolder" value="Search"></xp:attr> 
      </xp:this.attrs> 
      <xp:eventHandler 
       event="onfocus" 
       submit="true" 
       refreshMode="norefresh" 
          action="#{javascript:UserProfile.setViewMoveTo(true);}"> 
      </xp:eventHandler> 
      <xp:eventHandler 
       event="onkeyup" 
       submit="true" 
       refreshMode="partial" 
       refreshId="dataView1"> 
      </xp:eventHandler> 
     </xp:inputText> 

검색 버튼에 대한 코드입니다 :

<xp:link id="link2" title="Perform Search"> 
    <xp:eventHandler 
     event="onclick" 
     submit="true" 
     refreshMode="partial" 
     refreshId="dataView1" 
     action="#{javascript:UserProfile.setViewMoveTo(false);}"> 
    </xp:eventHandler> 
    <i class="fa fa-search" /> 
</xp:link> 

그리고 마지막으로 여기에 데이터 뷰에 대한 데이터 소스 코드입니다 :

<xe:this.data> 
    <xp:dominoView 
     var="currentView" 
     expandLevel="1" 
     viewName="#{javascript:return PortalContext.getCollection() != null ? PortalContext.getCollection().getViewName() : null;}" 
     databaseName="#{javascript:return DesktopContext.getCurrentContainer().getFilePath();}"> 
     <xp:this.startKeys><![CDATA[#{javascript:var returnVal = UserProfile.getViewSearchStr(); 
if (!UserProfile.getViewFTSearch()) { 
    returnVal = null; 
} 
return returnVal;}]]></xp:this.startKeys> 
     <xp:this.search><![CDATA[#{javascript:var returnVal = UserProfile.getViewSearchStr(); 
if (UserProfile.getViewFTSearch()) { 
    returnVal = null; 
} 
return returnVal;}]]></xp:this.search> 
    </xp:dominoView> 
</xe:this.data> 

다음은 필드 내 코드입니다

이렇게하면 사용자가 검색 필드에 커서를 놓고 'viewMoveTo'변수가 설정됩니다. onFocus 이벤트를 통해 true로 설정합니다. 데이터 소스의 "startKeys"속성은 "viewMoveTo"가 false인지 확인하고, 그렇지 않으면 검색 필드의 값을 이동할 키로 반환합니다. viewMoveTo 값이 false이면 null 값을 반환합니다. onKeyUp 이벤트에서 데이터 뷰를 부분적으로 새로 고칩니다.

검색 버튼은 그 반대입니다. "viewMoveTo"의 값을 false로 설정합니다. 데이터 소스의 "검색"속성은 "viewMoveTo"가 true인지 확인하고, 그렇지 않으면 검색 필드의 값을 검색 할 값으로 반환합니다. viewMoveTo 값이 true이면 null 값을 반환합니다. 마지막으로 onclick 이벤트는 데이터 뷰의 부분 새로 고침을 수행합니다.