Cómo obtener acceso a los datos de SharePoint desde complementos con la biblioteca entre dominiosAccess SharePoint data from add-ins using the cross-domain library

Al compilar complementos de SharePoint, normalmente tiene que incorporar datos de orígenes diferentes.When you build SharePoint Add-ins, you usually have to incorporate data from various sources. En cambio, por motivos de seguridad, hay mecanismos de bloqueo que impiden la comunicación con más de un dominio a la vez.But for security reasons, blocking mechanisms prevent communication with more than one domain at a time. Estos mecanismos de seguridad se implementan en la mayoría de los exploradores, lo que dificulta o imposibilita realizar llamadas del lado cliente entre dominios.These security mechanisms are implemented in most browsers, making it difficult or impossible to accomplish client-side calls across domains.

Cuando un usuario solicita una página de su dominio de complemento, la comunicación del lado cliente se enlaza solo a ese dominio.When a user requests a page from your add-in domain, the client-side communication is bound only to that domain. El complemento puede emitir llamadas del lado cliente desde la página solo a otros recursos en el mismo dominio.Your add-in can issue client-side calls from the page only to other resources in the same domain. Sin embargo, los complementos suelen requerir recursos de otros dominios, como el dominio de SharePoint, para completar sus escenarios.However, add-ins usually require resources from other domains, such as the SharePoint domain, to fulfill their scenarios. En el código de la página, puede intentar enviar una solicitud al dominio de SharePoint, que bloquea el explorador.In the code on your page, you may try to issue a request to the SharePoint domain, which is blocked by the browser. Normalmente ve el error Acceso denegado.You usually see an Access is denied error. El error no implica que no tenga permisos a los recursos solicitados, sino que lo más probable es que ni pueda enviar una solicitud a los recursos mencionados.The error doesn't imply that you don't have permissions to the requested resources but, most likely, you can't even issue a request to the mentioned resources.

Al usar la biblioteca entre dominios, las páginas web del complemento pueden tener acceso a datos de su dominio de complemento y del dominio de SharePoint.When you use the cross-domain library, the webpages in your add-in can access data in your add-in domain and the SharePoint domain. La biblioteca entre dominios es una alternativa del lado cliente en forma de archivo JavaScript (SP.RequestExecutor.js) que se hospeda en el sitio web de SharePoint al que puede hacer referencia en el complemento remoto.The cross-domain library is a client-side alternative in the form of a JavaScript file (SP.RequestExecutor.js) that is hosted on the SharePoint website that you can reference in your remote add-in. La biblioteca entre dominios le permite interactuar con más de un dominio en la página de complemento remoto mediante un proxy.The cross-domain library lets you interact with more than one domain in your remote add-in page through a proxy. Es una buena opción si quiere que el código del complemento se ejecute en el cliente en lugar de en el servidor, y si existen barreras de conectividad, como firewalls, entre SharePoint y su infraestructura remota.It is a good option if you like your add-in code to run on the client instead of on the server, and if there are connectivity barriers, such as firewalls, between SharePoint and your remote infrastructure.

Puede tener acceso a datos en la web de host, por ejemplo, puede tener acceso a las listas con las que interactúan los usuarios finales independientemente del complemento.You can access data in the host web—for example, you can access lists that end users interact with regardless of your add-in. O bien, puede tener acceso a datos en la web de complemento, como listas aprovisionadas específicamente para el complemento.Or you can access data in the add-in web, such as lists specifically provisioned for your add-in. Los complementos pueden obtener acceso a otros sitios web y colecciones de sitios siempre que el complemento tenga permisos con ámbito de espacio empresarial y que se haya implementado como una instalación por lotes mediante el catálogo de complementos.Add-ins can also access other site collections and websites as long as the add-in has tenant-scoped permissions and it has been deployed as a batch installation by using the add-in catalog.

Nota

En este tema, el dominio de complemento hace referencia al dominio que hospeda las páginas de complemento.In this topic, add-in domain refers to the domain that hosts the add-in pages. Este puede ser el dominio de una aplicación web remota en un complemento hospedado por el proveedor, pero las páginas de complemento también pueden estar en SharePoint en la web de complemento y realizar llamadas al dominio web de host.This can be the domain of a remote web application in a provider-hosted add-in, but add-in pages can also be on SharePoint in the add-in web and make calls to the host web domain. En el último escenario, el dominio de complemento es el dominio de la web de complemento.In the latter scenario, the add-in domain is the domain of the add-in web.

El ejemplo principal de este artículo muestra cómo compilar un complemento que lee datos en la web de complemento y los muestra en una página web.The main example in this article shows how to build an add-in that reads data on the add-in web and displays it on a webpage. La sección Pasos siguientes muestra más escenarios que se basan en el ejemplo principal.The Next steps section shows more scenarios that build on top of the main example.

Requisitos previosPrerequisites

Para seguir los ejemplos de este artículo, necesita lo siguiente:To follow the examples in this article, you need the following:

Leer datos en la web de complemento con la biblioteca entre dominiosRead data on the add-in web using the cross-domain library

En este ejemplo, hay una página sencilla hospedada fuera de SharePoint que usa un punto de conexión de transferencia de estado presencial (REST) para leer datos en un sitio web de SharePoint (la web de complemento).In this example, there is a simple page hosted outside of SharePoint that uses a Representational State Transfer (REST) endpoint to read data in a SharePoint website (the add-in web). Dado que la biblioteca entre dominios necesita una web de complemento, tiene sentido empezar con este escenario.Because the cross-domain library requires an add-in web, it makes sense to start with this scenario.

Para leer datos de la web de complemento, debe hacer lo siguiente:To read data from the add-in web, you must do the following:

  1. Crear un complemento de SharePoint y proyectos web.Create a SharePoint Add-in and web projects.

  2. Crear elementos de lista en la web de complementoCreate list items on the add-in web. Este paso también garantiza que se cree una web de complemento cuando los usuarios implementen el complemento.This step also ensures that an add-in web is created when users deploy the add-in.

  3. Crear una página de complemento que use la biblioteca entre dominios para leer los elementos de lista.Create an add-in page that uses the cross-domain library to read the list items.

En la siguiente ilustración se muestra una página web con los datos en la web de complemento.The following figure shows a webpage that displays the data on the add-in web.

Pantalla de resultados de ejemplo de lectura de elementos entre dominios

Para crear un complemento de SharePoint y proyectos webTo create a SharePoint Add-in and web projects

  1. Abra Visual Studio como administrador.Open Visual Studio as administrator. (Para ello, haga clic con el botón derecho en el icono de Visual Studio del menú Inicio y seleccione Ejecutar como administrador).(To do this, right-click the Visual Studio icon on the Start menu, and select Run as administrator.)

  2. Cree un proyecto con la plantilla Complemento para SharePoint.Create a new project by using the Add-in for SharePoint template. La plantilla Complemento para SharePoint en Visual Studio está ubicada en Plantillas > Visual C# > Office SharePoint > Complementos.The Add-in for SharePoint template in Visual Studio is located under Templates > Visual C# > Office SharePoint > Add-ins.

  3. Especifique la dirección URL del sitio web de SharePoint que quiere usar para la depuración.Provide the SharePoint website URL that you want to use for debugging.

  4. Seleccione Hospedado por el proveedor como la opción de hospedaje del complemento.Select Provider-hosted as the hosting option for your add-in.

    Nota

    Puede usar la biblioteca entre dominios en un complemento hospedado en SharePoint.You can also use the cross-domain library in a SharePoint-hosted add-in. Sin embargo, en un complemento hospedado en SharePoint, la página de complemento ya está en la web de complemento y, en este caso, no necesita que la biblioteca entre dominios lea los elementos de lista.However, in a SharePoint-hosted add-in, the add-in page is already on the add-in web, in which case it wouldn't need the cross-domain library to read the list items. Para ver un ejemplo de complemento hospedado en SharePoint que lea los datos en la web de host, consulte Usar la biblioteca entre dominios en un complemento hospedado en SharePoint (REST) o vea Obtener acceso a datos desde la web de host más adelante en este artículo.For a SharePoint-hosted add-in sample that reads data on the host web, see Use the cross-domain library in a SharePoint-hosted add-in (REST) or see Access data from the host web later in this article.

Para crear elementos de lista en la web de complementoTo create list items on the add-in web

  1. Haga clic con el botón derecho en el proyecto de complemento de SharePoint en el Explorador de soluciones.Right-click the SharePoint Add-in project in Solution Explorer. Seleccione Agregar > Nuevo elemento.Select Add > New Item.

  2. Seleccione Elementos de Visual C# > Office/SharePoint > Lista.Select Visual C# Items > Office/SharePoint > List. Asigne a la lista el nombre Anuncios.Set the name of your list to Announcements.

  3. Haga doble clic en Anuncios > Elements.xml.Double-click Announcements > Elements.xml. Pegue los siguientes nodos XML como elementos secundarios del elemento ListInstance.Paste the following XML nodes as children of the ListInstance element.

    <Data>
        <Rows>
            <Row>
                <Field Name="Title">Lorem ipsum 1</Field>
                <Field Name="Body">Sed ut perspiciatis, unde omnis iste...</Field>
            </Row>
            <Row>
                <Field Name="Title">Lorem ipsum 2</Field>
                <Field Name="Body">Sed ut perspiciatis, unde omnis iste...</Field>
            </Row>
        </Rows>
    </Data>
    

Para crear una página de complemento que use la biblioteca entre dominiosTo create an add-in page that uses the cross-domain library

  1. Haga doble clic en Default.aspx en el proyecto web en el Explorador de soluciones.Double-click Default.aspx in the web project in Solution Explorer.

  2. Copie el siguiente código en el archivo Default.aspx. El código realiza las siguientes tareas:Copy the following code and paste it in the Default.aspx file. The code performs the following tasks:

    • Carga la biblioteca jQuery desde la CDN de Microsoft.Loads the jQuery library from the Microsoft CDN.

    • Proporciona un marcador de posición para el resultado.Provides a placeholder for the result.

    • Extrae la dirección URL de la web de complemento de la cadena de consulta.Extracts the add-in web URL from the query string.

    • Carga la biblioteca entre dominios JavaScript con la función getScript de jQuery.Loads the cross-domain library JavaScript by using the getScript function in jQuery.

      La función carga los recursos necesarios y luego continúa en la función especificada, garantizando que la biblioteca entre dominios se cargue y esté disponible para que la use el código subsiguiente.The function loads the required resources and then continues to the specified function, ensuring that the cross-domain library is loaded and available to use by the subsequent code.

    • Crea una instancia del objeto RequestExecutor. De manera predeterminada, RequestExecutor usa la web de complemento como el sitio de contexto.Instantiates the RequestExecutor object. By default, RequestExecutor uses the add-in web as the context site.

      Nota

      (REST) o el objeto (JSOM).(REST) or object (JSOM). Para obtener más información sobre AppContextSite, consulte Obtener acceso a datos desde la web de host más adelante en este artículo.To learn more about AppContextSite, see Access data from the host web later in this article.

    • Emite una llamada REST al punto de conexión de los elementos de lista.Issues a REST call to the list items endpoint.

    • Controla la finalización correcta y muestra los elementos de lista en la página web.Handles successful completion, displaying the list items on the webpage.

    • Controla los errores y muestra los mensajes de error en la página web.Handles errors, displaying the error message on the webpage.

  
<html>
    <head>
        <title>Cross-domain sample</title>
    </head>
    <body>
        <!-- This is the placeholder for the announcements -->
        <div id="renderAnnouncements"></div>
        <script 
            type="text/javascript" 
            src="//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.js">
        </script>
        <script type="text/javascript">
          var hostweburl;
          var appweburl;

          // Load the required SharePoint libraries
          $(document).ready(function () {
            //Get the URI decoded URLs.
            hostweburl =
                decodeURIComponent(
                    getQueryStringParameter("SPHostUrl")
            );
            appweburl =
                decodeURIComponent(
                    getQueryStringParameter("SPAppWebUrl")
            );

            // resources are in URLs in the form:
            // web_url/_layouts/15/resource
            var scriptbase = hostweburl + "/_layouts/15/";

            // Load the js files and continue to the successHandler
            $.getScript(scriptbase + "SP.RequestExecutor.js", execCrossDomainRequest);
          });

          // Function to prepare and issue the request to get
          //  SharePoint data
          function execCrossDomainRequest() {
            // executor: The RequestExecutor object
            // Initialize the RequestExecutor with the add-in web URL.
            var executor = new SP.RequestExecutor(appweburl);

            // Issue the call against the add-in web.
            // To get the title using REST we can hit the endpoint:
            //      appweburl/_api/web/lists/getbytitle('listname')/items
            // The response formats the data in the JSON format.
            // The functions successHandler and errorHandler attend the
            //      sucess and error events respectively.
            executor.executeAsync(
                {
                  url:
                      appweburl +
                      "/_api/web/lists/getbytitle('Announcements')/items",
                  method: "GET",
                  headers: { "Accept": "application/json; odata=verbose" },
                  success: successHandler,
                  error: errorHandler
                }
            );
          }

          // Function to handle the success event.
          // Prints the data to the page.
          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].Body +
                  "</p><hr>";
            }

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

          // Function to handle the error event.
          // Prints the error message to the page.
          function errorHandler(data, errorCode, errorMessage) {
            document.getElementById("renderAnnouncements").innerText =
                "Could not complete cross-domain call: " + errorMessage;
          }

          // Function to retrieve a query string value.
          // For production purposes you may want to use
          //  a library to handle the query string.
          function getQueryStringParameter(paramToRetrieve) {
            var params =
                document.URL.split("?")[1].split("&amp;");
            var strParams = "";
            for (var i = 0; i < params.length; i = i + 1) {
              var singleParam = params[i].split("=");
              if (singleParam[0] == paramToRetrieve)
                return singleParam[1];
            }
          }
        </script>
    </body>
</html>

Para compilar y ejecutar la soluciónTo build and run the solution

  1. Seleccione la tecla F5.Select the F5 key.

    Nota

    Al seleccionar F5, Visual Studio compila la solución, implementa el complemento y abre la página de permisos del complemento.When you select F5, Visual Studio builds the solution, deploys the add-in, and opens the permissions page for the add-in.

  2. Seleccione el botón Confiar.Select the Trust It button.

  3. Seleccione el icono del complemento en la página Contenidos del sitio.Select the add-in icon on the Site Contents page.

Si prefiere ejemplos de código descargables, puede obtener lo siguiente de la galería de código:If you prefer downloadable code samples, you can get the following from the code gallery:

Solución de problemasTroubleshooting the solution

Si ve este mensaje de error...If you see this error message… Pruebe...Try…
“Lo sentimos, pero hemos tenido algunos problemas para acceder a su sitio. También hay un botón para solucionar el error, pero no corrige el problema”."Sorry, we had some trouble accessing your site.There is also a button to fix the error, but it doesn't correct the problem." Puede que se haya encontrado con un problema conocido con zonas de seguridad en Internet Explorer. Vea Trabajar con la biblioteca entre dominios en diferentes zonas de seguridad de Internet Explorer en los complementos para SharePoint.You may have hit a known problem with security zones in Internet Explorer; see Work with the cross-domain library across different Internet Explorer security zones in SharePoint Add-ins.
“Las funciones necesarias no son compatibles con su explorador."The required functionalities are not supported by your browser. Utilice IE 8 o versiones posteriores, o bien otro explorador actual.Please make sure you are using IE 8 or above, or other modern browser. Asegúrese de que la etiqueta meta 'X-UA-Compatible' tiene el valor 'IE=8' u otro posterior”.Please make sure the 'X-UA-Compatible' meta tag is set to be 'IE=8' or above." La biblioteca entre dominios requiere un modo de documentos de IE8 o posterior.The cross-domain library requires a document mode of IE8 or later. En algunos escenarios, el modo de documento se establece en IE7 de forma predeterminada.In some scenarios, the document mode is set to IE7 by default. Puede usar las herramientas de desarrollo de Internet Explorer para determinar y cambiar el modo de documento de la página.You can use the Internet Explorer developer tools to determine and change the document mode of your page. Para obtener más información, vea Definir la compatibilidad del documento.For more information, see Defining Document Compatibility.
“‘Type’ no está definido."'Type' is undefined. Además, el complemento usa el modelo de objetos de JavaScript (JSOM)”.Additionally, your add-in uses the JavaScript Object Model (JSOM)." El JSOM usa el método Type.registerNamespace en la biblioteca de Microsoft Ajax para registrar el espacio de nombres SP. Use el siguiente código para agregar una referencia a la biblioteca de Microsoft Ajax desde la página: The JSOM uses the Type.registerNamespace method in the Microsoft Ajax library to register the SP namespace. Use the following code to add a reference to the Microsoft Ajax library from your page:

HTML <script type="text/javascript" src="//ajax.aspnetcdn.com/ajax/4.0/1/MicrosoftAjax.js"></script>

Pasos siguientes: más escenarios de la biblioteca entre dominiosNext steps: more cross-domain library scenarios

En este artículo se muestra cómo consultar un extremo de REST para leer datos de la web de complemento mediante una página de complementos que no esté hospedada en SharePoint. También puede explorar los siguientes escenarios y detalles sobre la biblioteca entre dominios.This article shows how to query a REST endpoint to read data from the add-in web by using an add-in page that is not hosted on SharePoint. You can also explore the following scenarios and details about the cross-domain library.

Use JSOM para leer datos de la web de complementoUse the JSOM to read data from the add-in web

Según su preferencia, tal vez quiera usar el JSOM en lugar de REST para consultar datos de la web de complemento. Debe completar tareas adicionales para usar la biblioteca entre dominios con JSOM:Depending on your preference, you might want to use the JSOM instead of REST to query data from the add-in web. You must complete additional tasks to use the cross-domain library with JSOM:

  • Haga referencia a SharePoint JSOM en la página del complemento.Reference the SharePoint JSOM in your add-in page.

  • Inicialice el objeto ProxyWebRequestExecutorFactory y establézcalo como la fábrica del objeto de contexto.Initialize the ProxyWebRequestExecutorFactory object and set it as the factory of the context object.

  • Obtenga acceso a objetos de SharePoint para leer los datos de la lista.Access the SharePoint objects to read the data from the list.

  • Cargue los objetos en el contexto y ejecute la consulta.Load the objects in the context and execute the query.

Para ver el ejemplo de código que muestra cómo realizar las tareas, vea SharePoint-Add-in-JSOM-CrossDomain.For a code sample that shows how to perform the tasks, see SharePoint-Add-in-JSOM-CrossDomain.

Para obtener más información sobre cómo usar el JSOM, consulte Usar el modelo de objetos de JavaScript (JSOM) en complementos de SharePoint.For more information about how to use the JSOM, see Using the JavaScript object model (JSOM) in add-ins for SharePoint.

Obtener acceso a datos desde la web de hostAccess data from the host web

En el ejemplo de esta página se muestra cómo leer datos desde la web de complemento.The example on this page shows how to read data from the add-in web. Esto sirve como ejemplo inicial porque la biblioteca entre dominios usa inicialmente el complemento como el sitio de contexto.This works fine as the starting example because the cross-domain library initially uses the add-in as the context site. Sin embargo, hay muchos escenarios en los que quiere tener acceso a datos en la web de host.However, there are many scenarios where you want to access data on the host web. Es necesario realizar algunas tareas para tener acceso a datos en la web de host:A few tasks are required to access data on the host web:

  • Establezca la web de host como el sitio de contexto para la biblioteca entre dominios.Set the host web as the context site for the cross-domain library.

  • Proporcione permisos adecuados al complemento.Provide appropriate permissions to the add-in.

Puede cambiar el sitio de contexto mediante el punto de conexión AppContextSite (REST) o el objeto (JSOM).You can change the context site by using the AppContextSite endpoint (REST) or object (JSOM). En el ejemplo siguiente se muestra cómo cambiar el sitio de contexto con el punto de conexión de REST:The following example shows how to change the context site by using the REST endpoint:

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

En el ejemplo de código siguiente se muestra cómo cambiar el sitio de contexto con JSOM:The following code example shows how to change the context site using JSOM:

context = new SP.ClientContext(appweburl);
factory = new SP.ProxyWebRequestExecutorFactory(appweburl);
context.set_webRequestExecutorFactory(factory);
appContextSite = new SP.AppContextSite(context, hostweburl);

this.web = appContextSite.get_web();
context.load(this.web);

De manera predeterminada, el complemento tiene permisos para la web de complemento, pero no para la web de host. El siguiente ejemplo muestra una sección de manifiesto que declara una solicitud de permiso para leer datos de la web de host:By default, your add-in has permissions to the add-in web, but not to the host web. The following example shows a manifest section that declares a permission request to read data from the host web:

<AppPermissionRequests>
    <AppPermissionRequest 
        Scope="http://sharepoint/content/sitecollection/web" 
        Right="Read" />
</AppPermissionRequests>

Asegúrese de que crea un recurso en la web de complemento (como una lista o página vacía) para forzar el aprovisionamiento de la web de complemento, que es necesario para usar la biblioteca entre dominios.Ensure that you create a resource on the add-in web (such as an empty page or list) to force the provisioning of the add-in web, which is required to use the cross-domain library.

Obtener acceso a datos en colecciones de sitiosAccess data across site collections

Con la biblioteca entre dominios, puede acceder a datos en colecciones de sitios en el mismo inquilino. Hay algunas tareas que necesita completar para acceder a datos en las colecciones de sitios:With the cross-domain library, you can access data across site collections in the same tenant. There are some tasks that you need to complete to access data across site collections:

  • Agregue una solicitud de permiso para acceder a datos en el inquilino.Add a permission request to access data in the tenant.

  • En el código, cambie el sitio de contexto a las colecciones de sitios que quiera consultar.In your code, switch the context site to the site collections that you want to query.

  • Agregue el complemento al catálogo de complementos.Add the add-in to the add-in catalog.

  • Implemente el complemento como un complemento con ámbito de espacio empresarial en un sitio web.Deploy the add-in as a tenant-scoped add-in to a website. Para ver un ejemplo de cómo implementar un complemento con ámbito de espacio empresarial, consulte la descripción del ejemplo de código Usar la biblioteca entre dominios en un complemento con ámbito de espacio empresarial (REST).For an example on how to deploy as a tenant-scoped add-in, see the description of the Use the cross-domain library in a tenant-scoped add-in (REST) code sample.

El complemento también necesita permiso para acceder a datos del inquilino. El siguiente ejemplo muestra una sección de manifiesto que declara una solicitud de permiso para leer datos del inquilino:Your add-in also needs permission to access data from the tenant. The following example shows a manifest section that declares a permission request to read data from the tenant:

<AppPermissionRequests>
  <AppPermissionRequest 
    Scope="http://sharepoint/content/tenant" 
    Right="Read" />
</AppPermissionRequests>

Para cambiar el sitio de contexto en el código, use el punto de conexión AppContextSite (REST) o el objeto (JSOM), del mismo modo que en la sección Obtener acceso a datos desde la web de host.To switch the context site in your code, use the AppContextSite endpoint (REST) or object (JSOM), just like in the Access data from the host web section.

Aquí tiene un recordatorio del punto de conexión de REST: /_api/SP.AppContextSite(@target)/web/title?@target='weburl', y un ejemplo sobre cómo crear una instancia del objeto en JSOM: appContextSite = new SP.AppContextSite(context, weburl);.Here is a reminder of the REST endpoint: /_api/SP.AppContextSite(@target)/web/title?@target='weburl', and an example on how to instantiate the object in JSOM: appContextSite = new SP.AppContextSite(context, weburl);.

Como desarrollador, solo puede implementar complementos con ámbito de espacio empresarial del catálogo de complementos.As a developer, you can only deploy tenant-scoped add-ins from the add-in catalog. Puede aprovisionar un catálogo de complementos en los entornos de SharePoint Online o locales.You can provision an add-in catalog to your on-premises or SharePoint Online environments. Cargar el complemento en el catálogo de complementos es tan sencillo como cargar un archivo en una biblioteca de documentos.Uploading your add-in to the add-in catalog is as simple as uploading a file to a document library. Para obtener instrucciones detalladas, consulte Usar el catálogo de aplicaciones para que las aplicaciones empresariales personalizadas estén disponibles en su entorno de SharePoint Online.For detailed instructions, see Use the app catalog to make custom business apps available for your SharePoint Online environment.

Desde el catálogo de complementos, puede implementar el complemento en uno o varios sitios web del espacio empresarial.From the add-in catalog, you can deploy the add-in to one or more websites in the tenant. Dado que el complemento tiene permisos para obtener acceso a los datos del espacio empresarial, solo tiene que implementarlo en un sitio web para obtener acceso a los datos de todo el espacio empresarial.Because your add-in has permissions to access data in the tenant, you only have to deploy to one website to access data on the whole tenant. Para obtener instrucciones sobre cómo implementar un complemento desde el catálogo de complementos, vea Implementar un complemento personalizado.For instructions on how to deploy an add-in from the add-in catalog, see Deploy a custom add-in

Para descargar un ejemplo de código que muestre cómo obtener acceso a datos en colecciones de sitios, vea Usar la biblioteca entre dominios en un complemento con ámbito de espacio empresarial (REST).To download a code sample that shows how to access data across site collections, see Use the cross-domain library in a tenant-scoped add-in (REST).

Emitir llamadas entre diferentes zonas de seguridadIssuing calls across different security zones

La biblioteca entre dominios usa una página de proxy hospedada en un IFrame en la página de complemento para habilitar la comunicación.The cross-domain library uses a proxy page that is hosted in an IFrame on the add-in page to enable communication. Cuando la página de complemento y el sitio web de SharePoint están en diferentes zonas de seguridad, no se pueden enviar cookies de autorización.When the add-in page and SharePoint website are in different security zones, authorization cookies can't be sent. Si no hay ninguna cookie de autorización e IFrame intenta cargar la página de proxy, se redirige a la página de inicio de sesión de SharePoint.If there are no authorization cookies, and the IFrame tries to load the proxy page, it is redirected to the SharePoint sign-in page. La página de inicio de sesión de SharePoint no puede contener ningún IFrame por motivos de seguridad.The SharePoint sign-in page can't be contained in an IFrame for security reasons. En estos escenarios, la biblioteca no puede cargar la página de proxy y no es posible la comunicación con SharePoint.In these scenarios, the library cannot load the proxy page, and communication with SharePoint is not possible.

Sin embargo, hay una solución para estos escenarios. La solución es el patrón apphost, que consiste en ajustar las páginas de complementos en una página hospedada en la web de complemento. Es una buena idea usar el patrón apphost en complementos que usan la biblioteca entre dominios, aun cuando no haya límites de seguridad evidentes. Para obtener más información, vea Trabajar con la biblioteca entre dominios en diferentes zonas de seguridad de Internet Explorer en los complementos para SharePoint.However, there is a solution for these scenarios. The solution is the apphost pattern, which consists in wrapping the add-in pages in a page hosted in the add-in web. It's a good idea to use the apphost pattern in add-ins that use the cross-domain library, even if there are no evident security boundaries. For more information, see Work with the cross-domain library across different Internet Explorer security zones in SharePoint Add-ins.

Obtener acceso a datos desde un host remoto adicional en un complemento hospedado en SharePointAccess data from an additional remote host in a SharePoint-hosted add-in

De manera predeterminada, Complementos hospedados en SharePoint tiene permitido emitir llamadas entre dominios a la web de host, siempre y cuando tenga permisos adecuados. Sin embargo, una Complementos hospedados en SharePoint también puede especificar un host remoto en el atributo AllowedRemoteHostUrl de su AppPrincipal. Esto efectivamente permite emitir llamadas entre dominios de la web de complemento y de otro host en otro sitio.By default, a SharePoint-hosted add-in is allowed to issue cross-domain calls to the host web, provided that it has proper permissions. However, a SharePoint-hosted add-in can also specify a remote host in the AllowedRemoteHostUrl attribute of its AppPrincipal. This effectively lets you issue cross-domain calls from the add-in web and from another host elsewhere.

Para descargar un ejemplo de un complemento hospedado en SharePoint que use la biblioteca entre dominios, vea Ejemplo de código: usar la biblioteca entre dominios en un complemento hospedado en SharePoint (REST).To download a sample of a SharePoint-hosted add-in that uses the cross-domain library, see Code sample: Use the cross-domain library in a SharePoint-hosted add-in (REST).

Consulte tambiénSee also