Acceso a datos desde una Aplicación en SharePoint 2013 usando API Rest


Muy buenas a todos, En una entrada anterior os contaba cómo se podía crear una app para SharePoint 2013 o SharePoint OnLine y lo hacía por medio de una sencilla aplicación “Hola Mundo”.

Creando una app para SharePoint OnLine

En el post de hoy quiero mostrar las opciones básicas que tenemos para acceder a datos desde una app de SharePoint. Vamos a mostrar tres opciones para el acceso a datos:

  • Acceso a datos dentro del ámbito de la aplicación
  • Acceso a datos dentro de la misma colección de sitios
  • Acceso a datos de colecciones de sitio distintas

Para llevar a cabo este ejemplo, lo primero que se hará es crear el proyecto, crearemos una aplicación para SharePoint de tipo “App for SharePoint”. Vamos a ver cada uno de los distintos tipos de acceso a datos que podemos encontrar y cómo implementar cada uno de ellos.

Para mostrar los resultados, utilizaremos el siguiente código HTML en la página de inicio de la aplicación, Default.aspx

<asp:Content ContentPlaceHolderID="PlaceHolderMain" runat="server">
    <div id="renderAnnouncements"></div>
</asp:Content>

En la aplicación usaremos la librería cross-domain para acceder a los datos, lo haremos a través del siguiente código:

var hostweburl;
var appweburl;

$(document).ready(function () {
    hostweburl =
        decodeURIComponent(
            getQueryStringParameter("SPHostUrl")
    );
    appweburl =
        decodeURIComponent(
            getQueryStringParameter("SPAppWebUrl")
    );

    var scriptbase = hostweburl + "/_layouts/15/";

    $.getScript(scriptbase + "SP.RequestExecutor.js", execRequest);
});

function getQueryStringParameter(paramToRetrieve) {
    var params =
        document.URL.split("?")[1].split("&");
    var strParams = "";
    for (var i = 0; i < params.length; i = i + 1) {
        var singleParam = params[i].split("=");
        if (singleParam[0] == paramToRetrieve)
            return singleParam[1];
    }
}

En cada uno de los apartados que vienen a continuación, vamos a redefinir la función execRequest, en cada caso, con el código necesario para obtener la información del lugar deseado. En cada caso, los dos aspectos que van a hacer posible acceder a los datos son, por un lado, los permisos que le proporcionemos a la aplicación y por otro, el valor del parámetro url de la función executeAsync

Acceso dentro del ámbito de la aplicación

Esta es la opción más sencilla con la que nos podemos encontrar, dentro del ámbito de la aplicación es suficiente con los propios permisos inherentes a la propia app, por lo que sólo tenemos que hacer la llamada a través de API REST para obtener la información

function execRequest() {
    var executor = new SP.RequestExecutor(appweburl);

    executor.executeAsync(
        {
            url:
        appweburl +
        "/_api/web/lists/getbytitle('Noticias')/items",
            method: "GET",
            headers: { "Accept": "application/json; odata=verbose" },
            success: successHandler,
            error: errorHandler
        }
    );
}

Acceso dentro de la misma colección de sitios

Otro de los escenarios que se puede presentar es la necesidad de acceder a datos que se encuentran almacenados dentro de la misma colección de sitios. Para que esto sea posible, deberemos establecer los permisos adecuados para la aplicación, lo que se hará a través del archivo AppManifest.xml. En este caso, le daremos permisos para acceder en modo lectura a la colección de sitios, abriendo el archivo y el apartado de permisos seleccionando lo siguiente.

Captura de pantalla 2015-01-28 a las 0.22.48

El código de la función que ejecuta la llamada, quedaría de la siguiente manera:

function execRequest() {
    var executor = new SP.RequestExecutor(appweburl);

    executor.executeAsync(
        {
            url:
        appweburl +
        "/_api/SP.AppContextSite(@target)/web/lists/getbytitle('Noticias')/items?@target='" + hostweburl +"'",
            method: "GET",
            headers: { "Accept": "application/json; odata=verbose" },
            success: successHandler,
            error: errorHandler
        }
    );
}

Acceso a datos de distintas colecciones de sitio

La última de las opciones que vamos a plantear, tiene que ver con la posibilidad de acceder a información que se encuentra almacenada en colecciones de sitio distintas. Para ello, deberemos conceder permisos a nivel de tenant en nuestra AppManifes.xml, tal y como hicimos en el caso anterior, aunque cambiando el tipo de permisos que se concede.

Captura de pantalla 2015-01-28 a las 0.21.57

El código de la función, en este caso quedaría de la siguiente forma:

function execRequest() {
    var executor = new SP.RequestExecutor(appweburl);

    executor.executeAsync(
        {
            url:
        appweburl +
        "/_api/SP.AppContextSite(@target)/web/lists/getbytitle('Noticias')/items?@target='https://DifferentSiteUrl/'",
            method: "GET",
            headers: { "Accept": "application/json; odata=verbose" },
            success: successHandler,
            error: errorHandler
        }
    );
}

A continuación se incluye el código de las funciones successHandler y errorHandler.

function successHandler(data) {
    var jsonObject = JSON.parse(data.body);
    var announcementsHTML = "";

    var results = jsonObject.d.results;
    for (var i = 0; i < results.length; i++) {
        announcementsHTML = announcementsHTML +
            "<p><h1>" + results[i].Title +
            "</h1>" + results[i].nwhz +
            "</p><hr>";
    }

    document.getElementById("renderAnnouncements").innerHTML =
        announcementsHTML;
}

function errorHandler(data, errorCode, errorMessage) {
    document.getElementById("renderAnnouncements").innerText =
        "Could not complete cross-domain call: " + errorMessage;
}

Y esto es todo por hoy, como podéis ver es muy sencillo obtener información en las distintas aplicaciones de SharePoint, en unos días espero poder enseñaros como hacer lo mismo, pero en vez de accediendo por API REST, hacerlo usando JSOM .

Os dejo algunos enlaces de interés que espero que os sean de utilidad y que he utilizado a la hora de escribir el post:

http://blog.ctp.com/2014/06/23/data-access-in-sharepoint-hosted-apps/

https://msdn.microsoft.com/en-us/library/office/fp179927(v=office.15).aspx

https://msdn.microsoft.com/en-us/library/office/fp179897(v=office.15).aspx

Un saludo, hasta la próxima.

Anuncios

Un comentario en “Acceso a datos desde una Aplicación en SharePoint 2013 usando API Rest

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s