2011-02-07 4 views
7

SharePoint에서 CAML을 통해 목록을 가져 오는 중이고 특정 필드에 따라 목록이 반환되도록하고 싶습니다. 필드는 조회 필드입니다. 조회가 OrderBy를 조회 필드로 설정할 때 조회가 정렬되지 않은 상태로 되돌아옵니다. 텍스트 필드를 사용하면 괜찮습니다.SharePoint 목록에 대한 CAML 쿼리, 조회 필드에 의한 순서

U2U CAML 쿼리 작성기는 편집기에서 빌드 할 때이 쿼리를 반환합니다.

String baseQuery = "<Query><Where><Eq><FieldRef Name='paApproved' /><Value Type='Boolean'>1</Value></Eq></Where><OrderBy><FieldRef Name='paState' Ascending='True' LookupValue='TRUE' /></OrderBy></Query>"; 

qStates.Query = baseQuery; 

SPListItemCollection byState = web.Lists["paUpdates"].GetItems(qStates); 

나머지는 컬렉션을 분석하고 표시합니다 for 루프입니다 :

는 여기에 쿼리를 작성하고 실행하는 방법에 대한 코드입니다. 필요한 경우 게시 할 수 있습니다.

다음은 CAML 쿼리 도구에서 작성한 SOAP 호출이며 wireshark를 사용하여 HTTP 스트림에서 긁어 냈습니다.

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope 
     xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<soap:Body> 
    <GetListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/"> 
    <listName>paUpdates</listName> 
    <query> 
    <Query xmlns=""> 
    <Where> 
     <Eq> 
     <FieldRef Name="paApproved" /> 
     <Value Type="Boolean">1</Value> 
     </Eq> 
    </Where> 
    <OrderBy> 
     <FieldRef Name="paState" Ascending="False" /> 
    </OrderBy> 
    </Query> 
    </query> 
    <viewFields> 
    <ViewFields xmlns="" /> 
    </viewFields> 
    <queryOptions> 
    <QueryOptions xmlns="" /> 
    </queryOptions> 
    </GetListItems> 
</soap:Body> 
</soap:Envelope> 

어떤 이유로 CAML 쿼리 도구가 작동하더라도 내 코드는 작동하지 않습니다. 왜 그런지 알아? 미리 감사드립니다.

코드를 수정하여 실제로 테스트하고 있습니다. 잘못된 값을 가진 코드가 있습니다.

답변

7

당신이 Wireshark를 쿼리와 일치하지 않습니다 게시 된 코드 샘플 :

<Query><Where><Eq><FieldRef Name='paApproved' /><Value Type='Boolean'>1</Value></Eq></Where><OrderBy><FieldRef Name='Title' Ascending='True' /></OrderBy></Query>

가되어야한다

<Where><Eq><FieldRef Name="paApproved" /><Value Type="Boolean">1</Value></Eq></Where><OrderBy><FieldRef Name="paState" Ascending="False" /></OrderBy>

당신은 <Query></Query> 요소 (see here for an example)이 필요하지 않습니다.

+0

네 말이 맞아. 미안, 뭔가 테스트 중이 었어. 조회 대신 텍스트 필드에서 정렬할지 여부를 확인하기 위해 "제목"을 사용하고있었습니다. 내가 사용하고 있던 코드는 필드로 "paState"를 가지고 있었지만 작동하지 않습니다. 나는 잘못된 버전을 자르고 붙였다. 그것은 텍스트 필드를 정렬하지만 지금은 조회 필드에 있습니다. – kevingreen

+0

오름차순 값도 같지 않지만 두 가지 방법으로 C# 쿼리에서 여전히 순서가 지정되지 않습니다. – kevingreen

+0

Woops 오타가있었습니다. 또한 SPQuery를 사용할 때 ''노드를 포함하면 안됩니다. 내 업데이트를 참조하십시오. –

1

문제를 재현하려고했습니다. 검색어가 실제로 올바르게 정렬되지 않습니다. 나는 그것이 작동하도록 두 가지 변경을 가했다. - Query 요소를 제거하고 LookupValue = 'TRUE'를 제거했다. (요소 스키마에 그러한 이름을 가진 속성이 없다.) 그 후 모두 괜찮아 보인다.

관련 문제