Pregunta

Quiero seleccionar un elemento de la lista de SharePoint que tiene el valor máximo de una columna en particular. ¿Cómo puedo hacer esto utilizando consultas CAML?

¿Fue útil?

Solución

<Query>
    <OrderBy>
            <FieldRef Name="particularcolumn" Ascending="FALSE" />
    </OrderBy>
</Query>

Otros consejos

La siguiente consulta CAML devolvería el valor máximo de una columna dada:

var maxValue;

try
{
    using (SPSite objSite = new SPSite(sSiteUrl))
    {
        using (SPWeb objWeb = objSite.OpenWeb())
        {
            SPList objList = objWeb.Lists[sListName];

            SPQuery objQuery = new SPQuery();
            objQuery.Query = "<OrderBy><FieldRef Name='ColumnName' Ascending='False' /></OrderBy><RowLimit>1</RowLimit>";
            objQuery.Folder = objList.RootFolder;

            // Execute the query against the list
            SPListItemCollection colItems = objList.GetItems(objQuery);

            if (colItems.Count > 0)
            {
                maxValue = (<Insert Appropriate Cast>) colItems[0];
            }
        }
    }
}
catch (Exception ex)
{
    ...
}

return maxValue;

Esto se puede hacer el pedido por este campo en forma descendente y tomando el primer elemento de la colección devuelta.

Usando el modelo de objetos de cliente, esta es la forma en que estoy recuperando el ID máximo de una lista.

using (ClientContext clientContext = new ClientContext("https://sharepointed.com"))
    {
        clientContext.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;

        oWeb = clientContext.Web;

        List myList= oWeb.Lists.GetByTitle("MyList");

        CamlQuery camlQuery = new CamlQuery();
        camlQuery.ViewXml = ("<View><Query> <OrderBy> <FieldRef Name='ID' Ascending='False' /> </OrderBy> </Query> <RowLimit>1</RowLimit> </View>");
        Microsoft.SharePoint.Client.ListItemCollection listItems = myList.GetItems(camlQuery);
        clientContext.Load(listItems);
        clientContext.ExecuteQuery();
     }
<script type="text/javascript" charset="utf8" src="/jquery-3.2.1.min.js"></script>
<script type="text/javascript" charset="utf8" src="/jquery.SPServices-2014.02.min.js"></script>

<script type="text/javascript">

    function getLastItemId() {
    var userId = _spPageContextInfo.userId;
    var caml = "<View><Query><Where>"
        + "<Eq><FieldRef Name='Author' LookupId='TRUE' /><Value Type='Integer'>" 
        + userId + "</Value></Eq></Where>" 
        + "<OrderBy><FieldRef Name='Created' Ascending='False' /></OrderBy>" 
        + "</Query><RowLimit>1</RowLimit></View>";
    var ctx = SP.ClientContext.get_current()
    var web = ctx.get_web()
//ENTER YOUR LIST NAME BELOW
    var list = web.get_lists().getByTitle("YOUR LIST NAME")
    var query = new SP.CamlQuery();
    query.set_viewXml(caml);
    var items = list.getItems(query);
    ctx.load(items)
    ctx.executeQueryAsync(function() {
// success actions
        var count = items.get_count();
        //should only be 1
        if (count > 1)  {
           throw "Something is wrong. Should only be one latest list item / doc";
        }

        var enumerator = items.getEnumerator();
        enumerator.moveNext();
        var item = enumerator.get_current();
        var id = item.get_id();
// do something with your result!!!!
        alert(id);
}, function() { 
        //failure handling comes here
        alert("failed"); 
});
}
getLastItemId();

</script>
<button id="button1" type="button" onclick="getLastItemId();">click to get last ID</button>

Me las arreglé para conseguir el siguiente trabajo utilicé una parte secuencias de comandos web y añadió lo siguiente a la pieza de la tela. Al hacer clic en el botón aparecerá una alerta con el número del elemento de identificación más alto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top