문제

나는 다양한 항목을 표시하는 을 기반으로 SPView.

또한 키워드를 입력하면 입력한 키워드의 일부가 포함된 제목이 있는 모든 항목을 가져오는 검색 모듈을 구현했습니다. SPQuery.

사용 SPList.GetItems() 사용할 때 잘 작동합니다. SPQuery =>

var itemCollection = SPList.GetItems(SPQuery);

위의 코드는 내가 원하는 항목을 제공하지만 불행히도 내가 원하지 않는 모든 항목도 제공합니다.내가 원하는 것은 SPView 입력한 키워드와 일치하는 것입니다.

SPView와 함께 SPQuery를 사용할 수 있다는 것을 알았습니다 =>

var itemCollection = SPList.GetItems(SPQuery, "viewName");

꽤 괜찮은 것 같지만 자세히 살펴보면 "viewName"이 실제로는 SPView아이디 ToString에드.그리고 만약에 SPQuery 포함 <Where> 절에서 "viewName"은 해당 쿼리를 재정의하고 해당 특정 보기의 모든 항목을 반환합니다.

그래서 제 질문은, SPView 직접적으로 아니면 고통스러운 해결 방법을 찾아야 합니까?


솔루션 코드

힌트를 주신 Simon Doy에게 감사드립니다.

var query = new SPQuery(SPList.GetView(ListViewId))
{
    Query = string.Format(string.Concat(
            "<Where>",
                "<Or>",
                    "<Or>",
                        "<Contains>",
                            "<FieldRef Name='Title'/>",
                            "<Value Type='Text'>{0}</Value>",
                        "</Contains>",
                        "<Contains>",
                            "<FieldRef Name='FieldAutoGeneratedName'/>",
                            "<Value Type='Text'>{0}</Value>",
                        "</Contains>",
                    "</Or>",
                    "<Contains>",
                        "<FieldRef Name='FieldATTCode'/>",
                        "<Value Type='Text'>{0}</Value>",
                    "</Contains>",
                "</Or>",
            "</Where>"
            ), param)
};
var items = SPList.GetItems(query);

위의 코드는 지정된 목록 보기에서 일치하는 모든 항목을 반환합니다. param

도움이 되었습니까?

해결책

적절한 SPView를 전달할 수 있는 생성자를 사용하여 SPQuery 개체를 만드는 것은 어떻습니까?

http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spquery.spquery.aspx

그런 다음 다음과 같이 적절한 항목을 포함하는 쿼리를 추가할 수 있습니다.

var query = new SPQuery(spView); 

query.Query = String.Format("<Where><Eq><FieldRef Name='Title'/><Value Type='Text'>{0}</Value></Eq></Where>", keyword);

SPListItemCollection listItems = oList.GetItems(query);

다른 팁

SPQuery가 목록의 모든 항목을 반환하는 경우 대부분의 경우 QueryString은 단순히 잘못된 것입니다.(내 옵션에서 이상한) 기본 동작은 잘못된 QueryStrings의 경우 Caml-Query가 모든 항목을 반환한다는 것입니다.

일반적인 실수의 예:SPQuery.Query의 QueryString에는 "<Query>"-태그가 포함되어서는 안 됩니다.그렇다면 모든 항목을 반환하고 Where-Clause를 완전히 무시합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 sharepoint.stackexchange
scroll top