Buscar..


Observaciones

URL de punto final de servicio REST

La API de acceso de cliente REST se introdujo por primera vez en SharePoint 2010, pero se amplió considerablemente en SharePoint 2013. Se accede a la API REST en SharePoint 2010 a través del servicio web ListData en la URL /_vti_bin/ListData.svc . SharePoint 2013 introdujo las URL de punto final de /_api/lists/ y /_api/web , que se comportan de forma ligeramente diferente.

Las URL de puntos finales anteriores deben ir precedidas por http://server/site donde el server representa el nombre del servidor, y el site representa el nombre o la ruta al sitio específico.

URL de ejemplo para ... SharePoint 2010 SharePoint 2013
Obteniendo una lista: /_vti_bin/ListData.svc/ListName /_api/lists('ListGuid')
Obteniendo un artículo: /_vti_bin/ListData.svc/ListName(1) /_api/lists('ListGuid')/items(1)
Obteniendo una web: (no equivalente) /_api/web

A pesar de las diferencias en el acceso a las listas y los elementos de la lista, trabajar con esos resultados es muy similar en ambas versiones.

Tenga en cuenta que el servicio ListData.svc todavía está disponible en SharePoint 2013 por compatibilidad con versiones anteriores.

Enviando solicitudes de REST

Una solicitud REST se puede enviar a través de un JavaScript nativo XMLHttpRequest o a través de la construcción de envoltura jQuery AJAX.

Sintaxis de XMLHttpRequest

var xhr = new XMLHttpRequest();
xhr.open(verb, url, true);
xhr.setRequestHeader("Content-Type","application/json");
xhr.send(data);

jQuery AJAX Sintaxis

$.ajax({
    method: verb,
    url: url,
    headers: { "Content-Type":"application/json" },
    data: data
});

Para obtener más detalles sobre el envío de solicitudes a través de AJAX, consulte la documentación de JavaScript AJAX .

Trabajando con listas

Obtener artículos de la lista

Este ejemplo muestra cómo recuperar todos los elementos de la lista e iterarlos. Puede utilizar el parámetro top para solicitar un cierto número de resultados. También puede usar el parámetro select para seleccionar ciertos campos ( $select=id, Title, uri ).

JavaScript

function GetListItems(){
    $.ajax({
        url: "../_api/web/lists/getbytitle('List Title')/items?$top=50"
        contentType: "application/json;odata=verbose",
        method: "GET",
        headers: { "accept": "application/json;odata=verbose" },
        success: function (data) {
            $.each(data.d.results, function(index,item){
                //use item to access the individual list item
                console.log(item.Id);
            });
        },
        error: function(error){
            console.log(error);
        }
    });
    }

Obtener un elemento de lista individual

JavaScript

function GetListItem(){
    $.ajax({
        url: "../_api/web/lists/getbytitle('List Title')/items(1)",
        contentType: "application/json;odata=verbose",
        method: "GET",
        headers: { "accept": "application/json;odata=verbose" },
        success: function (data) {
            console.log(data.d.Id);
        },
        error: function(error){
            console.log(error);
        }
    });
    }

Obtener elementos de lista con columnas de búsqueda

A veces, puede tener una estructura de lista que se parece a esto:

Tabla de listado de animales

Nombre Tipo Descripción
Título Cadena (Texto) Nombre del animal
Años Número Cuantos años tiene el animal
Valor Moneda Valor del animal
Tipo Búsqueda (tabla de tipos de animales) Campo de búsqueda (ofrece un menú desplegable de opciones de la tabla de tipos de animales)

Tabla de tipos de animales

Nombre Tipo Descripción
Título Cadena (Texto) Nombre de la especie / tipo de animal (ej. Cerdo)
NumLegs Número Número de patas sobre el animal.

Probablemente no sea el ejemplo más serio, pero el problema aquí sigue siendo válido. Cuando utiliza la solicitud habitual para recuperar valores de la lista de SharePoint, para el Type del animal, solo obtendrá un campo llamado TypeId en la respuesta JSON. Para expandir estos elementos en una sola llamada AJAX, se requiere un marcado adicional en los parámetros de la URL.

Este ejemplo se aplica a más que solo columnas de búsqueda también. Cuando utiliza las columnas People/Groups , también son esencialmente solo búsquedas, por lo que puede extraer elementos como Title , EMail y otros fácilmente.

Código de ejemplo

Nota importante : cuando defina los campos que desea recuperar de las columnas de búsqueda, debe prefijar el nombre del campo con el nombre del campo de búsqueda en la tabla original. Por ejemplo, si desea recuperar el atributo NumLegs de la columna de búsqueda, debe escribir Type/NumLegs .

JavaScript

// webUrl: The url of the site (ex. https://www.contoso.com/sites/animals)
// listTitle: The name of the list you want to query
// selectFields: the specific fields you want to get back
// expandFields: the name of the fields that need to be pulled from lookup tables
// callback: the name of the callback function on success
function getItems(webUrl,listTitle,selectFields, expandFields, callback){
    var endpointUrl = webUrl + "/_api/web/lists/getbytitle('" + listTitle + "')/items";
    endpointUrl+= '?$select=' + selectFields.join(",");
    endpointUrl+= '&$expand=' + expandFields.join(",");
    return executeRequest(endpointUrl,'GET', callback);
}

function executeRequest(url,method,callback,headers,payload) 
{
    if (typeof headers == 'undefined'){
        headers = {};
    }
    headers["Accept"] = "application/json;odata=verbose";
    if(method == "POST") {
        headers["X-RequestDigest"] = $("#__REQUESTDIGEST").val();
    }   

    var ajaxOptions = 
    {       
    url: url,   
    type: method,  
    contentType: "application/json;odata=verbose",
    headers: headers,
    success: function (data) { callback(data) }
    };
    if(method == "POST") {
    ajaxOptions.data = JSON.stringify(payload);
    }  

    return $.ajax(ajaxOptions);
}

// Setup the ajax request by setting all of the arguments to the getItems function
function getAnimals() {
    var url = "https://www.contoso.com/sites/animals";
    var listTitle = "AnimalListing";
    
    var selectFields = [
        "Title",
        "Age",
        "Value",
        "Type/Title",
        "Type/NumLegs"
    ];

    var expandFields = [
        "Type/Title",
        "Type/NumLegs"
    ];

    getItems(url, listTitle, selectFields, expandFields, processAnimals);
}

// Callback function
// data: returns the data given by SharePoint
function processAnimals(data) {
    console.log(data);
    // Process data here
}

// Start the entire process
getAnimals();

Agregar selecciones a un campo de búsqueda multivalor

Este ejemplo asume que su columna de búsqueda se llama MultiLookupColumnName y que desea configurar su campo de búsqueda múltiple para buscar los elementos con ID 1 y 2.

Usando jQuery AJAX

2010
var listName = "YourListName";
var lookupList = "LookupListName";
var idOfItemToUpdate = 1;
var url = "/server/site/_vti_bin/ListData.svc/"+listName+"("+idOfItemToUpdate+")"; 
var data = JSON.stringify({
    MultiLookupColumnName:[
        {__metadata:{uri:"http://yoursiteurl/_vti_bin/ListData.svc/"+lookupList+"(1)"}},
        {__metadata:{uri:"http://yoursiteurl/_vti_bin/ListData.svc/"+lookupList+"(2)"}}
    ]
});
$.ajax({
    method: 'POST',
    url: url,
    contentType: 'application/json',
    headers: {
      "X-HTTP-Method" : "MERGE",
      "If-Match" : "*"
    },
    data: data
});
2013
var listGuid = "id-of-list-to-update"; // use list GUID here
var lookupGuid = "id-of-lookup-list"; // use lookup list GUID here
var idOfItemToUpdate = 1;
var url = "/server/site/_api/lists('"+ listGuid + "')/items("+ idOfItemToUpdate + ")";
var data = JSON.stringify({
    MultiLookupColumnName:[
        {__metadata:{uri:"http://yoursiteurl/_api/lists('" + lookupGuid + "')/items(1)"}},
        {__metadata:{uri:"http://yoursiteurl/_api/lists('" + lookupGuid + "')/items(2)"}}
    ]
});
$.ajax({
    method: 'POST',
    url: url,
    contentType: 'application/json',
    headers: {
      "X-HTTP-Method" : "MERGE",
      "If-Match" : "*"
    },
    data: data
});

Usando XMLHttpRequest

2010
var listName = "YourListName";
var lookupList = "LookupListName";
var idOfItemToUpdate = 1;
var url = "/server/site/_vti_bin/ListData.svc/YourListName("+idOfItemToUpdate+")";
var data = JSON.stringify({
    MultiLookupColumnName:[
       {__metadata:{uri:"http://yoursiteurl/_vti_bin/ListData.svc/"+lookupList+"(1)"}},
        {__metadata:{uri:"http://yoursiteurl/_vti_bin/ListData.svc/"+lookupList+"(2)"}}
    ]
});
var xhr = new XMLHttpRequest();
xhr.open("POST",url,true);
xhr.setRequestHeader("X-HTTP-Method", "MERGE");
xhr.setRequestHeader("If-Match", "*");
xhr.setRequestHeader("Content-Type","application/json");
xhr.send(data);
2013
var listGuid = "id-of-list-to-update";
var lookupGuid = "id-of-lookup-list";
var idOfItemToUpdate = 1;
var url = "/server/site/_api/lists('"+ listGuid + "')/items("+ idOfItemToUpdate + ")"; 
var data = JSON.stringify({
    MultiLookupColumnName:[
        {__metadata:{uri:"http://yoursiteurl/_api/lists('" + lookupGuid + "')/items(1)"}},
        {__metadata:{uri:"http://yoursiteurl/_api/lists('" + lookupGuid + "')/items(2)"}}
    ]
});
var xhr = new XMLHttpRequest();
xhr.open("POST",url,true);
xhr.setRequestHeader("X-HTTP-Method", "MERGE");
xhr.setRequestHeader("If-Match", "*");
xhr.setRequestHeader("Content-Type","application/json");
xhr.send(data);

Elementos de la lista de paginación devueltos de una consulta

Para simular la paginación usando REST puedes hacer lo siguiente:

  1. Use el parámetro $skip=n para omitir las primeras n entradas de acuerdo con el parámetro $orderby

  2. Use el parámetro $top=n para devolver las entradas top n acuerdo con los parámetros $orderby y $skip .

var endpointUrl = "/_api/lists('guid')/items"; // SP2010: "/_vti_bin/ListData.svc/ListName";
$.getJSON(
    endpointUrl + "?$orderby=Id&$top=1000",
    function(data){
        processData(data); // you can do something with the results here
        var count = data.d.results.length;
        getNextBatch(count, processData, onComplete); // fetch next page 
    }
);

function getNextBatch(totalSoFar, processResults, onCompleteCallback){
    $.getJSON(
        endpointUrl + "?$orderby=Id&$skip="+totalSoFar+"&$top=1000",
        function(data){
            var count = data.d.results.length;
            if(count > 0){
                processResults(data); // do something with results
                getNextBatch(totalSoFar+count, callback); // fetch next page
            }else{
                onCompleteCallback();
            }
        }
    );
}

Recuperar una ID del elemento recién creado en la lista de SharePoint

Este ejemplo muestra cómo recuperar una ID de un elemento recién creado mediante la API REST de SharePoint.

Nota :

listName : esta variable contiene el nombre de tu lista.

newItemBody : este será el cuerpo de su solicitud para agregar un nuevo elemento a la lista.

por ejemplo, var newItemBody = {__metadata: {'type': 'SP.Data.MyListNameItem'}, Título: 'Some value value'};

function CreateListItemWithDetails(listName, newItemBody) {

    var item = newItemBody;
    return $.ajax({
        url: _spPageContextInfo.siteAbsoluteUrl + "/_api/web/lists/getbytitle('" + listName + "')/items",
        type: "POST",
        contentType: "application/json;odata=verbose",
        data: JSON.stringify(item),
        headers: {
            "Accept": "application/json;odata=verbose",
            "X-RequestDigest": $("#__REQUESTDIGEST").val(),
            "content-Type": "application/json;odata=verbose"
        }

    });
}

CreateListItemWithDetails(listName, newItemBody)
    .then(function(data){
        //success callback
        var NewlyCreatedItemId = data.d.ID;
    }, function(data){
        //failure callback
    });

Cómo realizar operaciones CRUD mediante la interfaz REST de SharePoint 2010

Crear

Para realizar una operación Crear a través de REST, debe realizar las siguientes acciones:

Cree una solicitud HTTP utilizando el verbo POST . Utilice la URL de servicio de la lista a la que desea agregar una entidad como objetivo para el POST. Establezca el tipo de contenido en application/json . Serialice los objetos JSON que representan sus nuevos elementos de lista como una cadena y agregue este valor al ejemplo de JavaScript del cuerpo de la solicitud:

function createListItem(webUrl,listName, itemProperties, success, failure) {

    $.ajax({
        url: webUrl + "/_vti_bin/listdata.svc/" + listName,
        type: "POST",
        processData: false,
        contentType: "application/json;odata=verbose",
        data: JSON.stringify(itemProperties),
        headers: {
            "Accept": "application/json;odata=verbose"
        },
        success: function (data) {
            success(data.d);
        },
        error: function (data) {
            failure(data.responseJSON.error);
        }
    });
}

Uso

var taskProperties = {
    'TaskName': 'Order Approval',
    'AssignedToId': 12
};

createListItem('https://contoso.sharepoint.com/project/','Tasks',taskProperties,function(task){
    console.log('Task' + task.TaskName + ' has been created'); 
  },
  function(error){
    console.log(JSON.stringify(error));
  }
);

Leer

Para realizar una operación de lectura a través de REST, debe realizar las siguientes acciones:

Crea una solicitud HTTP usando el verbo GET . Utilice la URL de servicio del elemento de la lista a la que desea agregar una entidad como objetivo para el GET. Establezca el tipo de contenido en application/json . Ejemplo de JavaScript:

function getListItemById(webUrl,listName, itemId, success, failure) {
    var url = webUrl + "/_vti_bin/listdata.svc/" + listName + "(" + itemId + ")";
    $.ajax({
        url: url,
        method: "GET",
        headers: { "Accept": "application/json; odata=verbose" },
        success: function (data) {
            success(data.d);
        },
        error: function (data) {
            failure(data.responseJSON.error);
        }
    });
}

Uso

getListItemById('https://contoso.sharepoint.com/project/','Tasks',2,function(taskItem){
    console.log(taskItem.TaskName); 
  },
  function(error){
    console.log(JSON.stringify(error));
  }
);

Actualizar

Para actualizar una entidad existente, debe realizar las siguientes acciones:

Cree una solicitud HTTP utilizando el verbo POST . Agregue un encabezado X-HTTP-Method con un valor de MERGE . Use la URL de servicio del elemento de la lista que desea actualizar como objetivo para la POST. Agregue un encabezado If-Match con un valor del ETag original de la entidad, o *. Ejemplo de JavaScript:

function updateListItem(webUrl,listName,itemId,itemProperties,success, failure)
{
   getListItemById(webUrl,listName,itemId,function(item){

      $.ajax({
         type: 'POST',
         url: item.__metadata.uri,
         contentType: 'application/json',
         processData: false,
         headers: {
                "Accept": "application/json;odata=verbose",
                "X-HTTP-Method": "MERGE",
                "If-Match": item.__metadata.etag
         },
         data: Sys.Serialization.JavaScriptSerializer.serialize(itemProperties),
         success: function (data) {
                success(data);
         },
         error: function (data) {
                failure(data);
         }
      });

   },
   function(error){
       failure(error);
   });

}

Uso

var taskProperties = {
    'TaskName': 'Approval',
    'AssignedToId': 12  
};


updateListItem('https://contoso.sharepoint.com/project/','Tasks',2,taskProperties,function(item){
    console.log('Task has been updated'); 
  },
  function(error){
    console.log(JSON.stringify(error));
  }
);

Borrar

Para eliminar una entidad, debe realizar las siguientes acciones:

Cree una solicitud HTTP utilizando el verbo POST . Agregue un encabezado X-HTTP-Method con un valor de DELETE . Utilice la URL de servicio del elemento de la lista que desea actualizar como objetivo para la POST. Agregue un encabezado If-Match con un valor de la etiqueta original de la entidad. Ejemplo de JavaScript:

function deleteListItem(webUrl, listName, itemId, success, failure) {
    getListItemById(webUrl,listName,itemId,function(item){
        $.ajax({
            url: item.__metadata.uri,
            type: "POST",
            headers: {
                "Accept": "application/json;odata=verbose",
                "X-Http-Method": "DELETE",
                "If-Match": item.__metadata.etag
            },
            success: function (data) {
                success();
            },
            error: function (data) {
                failure(data.responseJSON.error);
            }
        });
    },
   function (error) {
       failure(error);
   });
}

Uso

deleteListItem('https://contoso.sharepoint.com/project/','Tasks',3,function(){
    console.log('Task has been deleted'); 
  },
  function(error){
    console.log(JSON.stringify(error));
  }
);


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow