2011-02-07 38 views
7

Tôi đang cố kéo danh sách từ SharePoint qua CAML và tôi muốn danh sách được trả về theo thứ tự bởi một trường cụ thể. Trường là trường tra cứu. Truy vấn trở lại không có thứ tự khi tôi đặt OrderBy là trường tra cứu, nếu tôi sử dụng trường văn bản thì tốt.Truy vấn CAML vào danh sách SharePoint, sắp xếp theo trường tra cứu

Trình tạo truy vấn CAML U2U sẽ trả về truy vấn này được yêu cầu khi tôi tạo nó trong trình chỉnh sửa.

Dưới đây là một đoạn mã như thế nào tôi xây dựng và thực hiện các truy vấn:

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); 

Phần còn lại là một vòng lặp for mà phân tích việc thu thập và hiển thị nó. Tôi có thể đăng bài đó nếu cần thiết.

Đây là cuộc gọi SOAP được thực hiện bởi công cụ truy vấn CAML, tôi đã xóa nó khỏi luồng HTTP bằng wireshark.

<?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> 

Vì lý do nào đó công cụ truy vấn CAML hoạt động, mã của tôi không hoạt động. Có ai biết tại sao không? Cảm ơn trước.

Được chỉnh sửa để phản ánh mã tôi thực sự đang thử nghiệm. Tôi đã có một số mã có giá trị không chính xác.

Trả lời

7

Các mẫu mã bạn được đăng không phù hợp với truy vấn Wireshark:

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

nên là:

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

Bạn không cần <Query></Query> yếu tố (see here for an example).

+0

Bạn nói đúng. Xin lỗi, tôi đã thử nghiệm một cái gì đó. Tôi đã sử dụng "tiêu đề" để xem nó có sắp xếp trên một trường văn bản hay không, thay vì tra cứu. Mã tôi đang sử dụng đã có "paState" làm trường, và nó không hoạt động. Tôi cắt và dán phiên bản sai. Nó sẽ sắp xếp trên một trường văn bản, nhưng bây giờ trên một trường tra cứu. – kevingreen

+0

Giá trị tăng dần không giống nhau, nhưng tôi đã thử nghiệm cả hai cách mà nó vẫn không đặt trong truy vấn C#. – kevingreen

+0

Woops Tôi đã có một lỗi đánh máy. Bạn cũng không nên bao gồm nút '' khi sử dụng SPQuery. Xem cập nhật của tôi. –

1

Tôi đã cố gắng tạo lại sự cố. Truy vấn của bạn thực sự không sắp xếp chính xác. Tôi đã thực hiện hai thay đổi để làm cho nó hoạt động - gỡ bỏ phần tử truy vấn và loại bỏ LookupValue = 'TRUE' (không có thuộc tính với tên như vậy trong lược đồ phần tử). Sau đó tất cả có vẻ ổn.

Các vấn đề liên quan