2011-02-07 25 views
7

Estoy intentando extraer una lista de SharePoint mediante CAML y quiero que la lista devuelta ordene por un campo específico. El campo es un campo de búsqueda. La consulta vuelve desordenada cuando configuro OrderBy para que sea el campo de búsqueda, si utilizo un campo de texto está bien.Consulta de CAML a una lista de SharePoint, ordenada por un campo de búsqueda

El constructor de consultas CAML de U2U devolverá esta consulta ordenada cuando la construya en el editor.

He aquí un fragmento de código de cómo crear y ejecutar la consulta:

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

El resto es un bucle que analiza la colección y lo muestra. Puedo publicar eso si es necesario.

Aquí está la llamada SOAP realizada por la herramienta de consulta CAML, la eliminé de la secuencia HTTP con 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> 

Por alguna razón, la herramienta de consulta CAML funciona, mi código no. Alguien sabe por qué? Gracias por adelantado.

Editado para reflejar el código que estoy realmente probando. Tenía un código que tenía valores incorrectos.

Respuesta

7

La muestra de código que envió no coincide con la consulta Wireshark:

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

debe ser:

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

No es necesario <Query></Query> los elementos (see here for an example).

+0

Tienes razón. Lo siento, estaba probando algo. Estaba usando "título" para ver si se ordenaría en un campo de texto, en lugar de una búsqueda. El código que estaba usando tenía el "paState" como campo y no funciona. Corté y pegué la versión incorrecta. Se ordenará en un campo de texto, pero ahora en un campo de búsqueda. – kevingreen

+0

Los valores ascendentes tampoco son los mismos, pero lo he probado de las dos formas en que todavía no se ordenará en la consulta C#. – kevingreen

+0

Woops Tuve un error tipográfico. Tampoco debe incluir el nodo '' cuando use SPQuery. Ver mi actualización –

1

He intentado reproducir el problema. Su consulta realmente no se ordena correctamente. Hice dos cambios para que funcione: quité el elemento Query y eliminé LookupValue = 'TRUE' (no hay ningún atributo con ese nombre en el esquema del elemento). Después de eso, todo parece estar bien.

Cuestiones relacionadas