Question

Je développe une application hébergée par SharePoint pour SharePoint 2013 (dans Office365), mais j'ai un problème pour accéder aux listes dans une application hébergée par SharePoint.

Mon code imprime bien les listes, mais il ne me montre que la liste « Looks composés » et les listes « Galerie de pages maîtres », je ne peux pas accéder aux listes que j'ai créées dans mon site sharepoint.

Et lorsque j'essaie d'accéder à la liste 'Contacts' (qui existe sur le site sharepoint où je déploie l'application), j'obtiens cette exception :

La liste des «contacts» n'existe pas sur le site avec URL »https://mysharepointsite-03ea186502297f.sharepoint.com/SPHostedApp12

Il semble donc que mon application s'exécute depuis un autre site que mon site principal, et c'est pourquoi je ne peux pas accéder aux listes existantes depuis mon site principal...

Quelqu'un sait-il comment résoudre ce problème et accéder aux listes existantes sur le site principal ?

Merci beaucoup !

Voici mon code App.js :

'use strict';

var gobbe = window.gobbe || {};

gobbe.Contacts;
gobbe.ContactList = function () {
    // private members
    var createItem = function (lname, fname, bphone) {
        var ctx = new SP.ClientContext.get_current();
        var list = ctx.get_web().get_lists().getByTitle('Contacts');
        ctx.load(list);
        var listItemCreationInfo = new SP.ListItemCreationInformation();
        var newContact = list.addItem(listItemCreationInfo);
        newContact.set_item('Last Name', lname);
        newContact.set_item('First Name', fname);
        newContact.set_item('Business Phone', bphone);
        newContact.update();
        ctx.executeQueryAsync(success, error);
    },
    readAll = function () {
        // Not implemented
    },
    readAllSuccess = function () {
        // Not implemented
    },
    updateItem = function () {
        // Not implemented
    },
    updateItem = function (id, lname, fname, bphone) {
        // Not implemented
    },
    removeItem = function (id) {
        // Not implemented
    },
    success = function () {
        readAll();
    },
    error = function (sender, args) {
        alert(args.get_message());
    }

    // public interface
    return {
        createContact: createItem,
        updateContact: updateItem,
        deleteContact: removeItem
    }
}();

gobbe.Collections = function () {
    // private members
    var site,
        listCollection,

        getListCollection = function () {
            var ctx = new SP.ClientContext.get_current();
            site = ctx.get_web();
            ctx.load(site);
            listCollection = site.get_lists();
            ctx.load(listCollection,     'Include(Title,Id,Fields.Include(Title,Description))');
        ctx.executeQueryAsync(success, failure);
        },

        success = function () {
            var html = [];

            // List Information
            html.push('<ul>');
            var listEnumerator = listCollection.getEnumerator();
            while (listEnumerator.moveNext()) {
                // List Title
                html.push('<li>');
                html.push(listEnumerator.get_current().get_title());
                html.push('<ul>');

                // Fields Names
                var fieldEnumerator =     listEnumerator.get_current().get_fields().getEnumerator();
                while (fieldEnumerator.moveNext()) {
                    html.push('<li>');
                    html.push(fieldEnumerator.get_current().get_title());
                    html.push('</li>');
                }

                html.push('</ul></li>')
            }
            html.push('</ul>');

            // Show results
            $('#displayDiv').html(html.join(''));
        },

        failure = function (sender, args) {
            alert(args.get_message());
        }

    // public interface
    return {
        execute: getListCollection
    }
}();

$().ready(function () {
    // Show lists
    gobbe.Collections.execute();

    // Try to add a contact
    gobbe.ContactList.createContact('Cox', 'Brian', '555-555-5555');
    alert('Contact Created!');

    // Update it
    gobbe.ContactList.updateContact(1, 'Cox', 'Brian', '111-111-1111');
    alert('Contact Updated!');

    // Delete it
    gobbe.ContactList.deleteContact(1);
    alert('Contact Deleted!');
});
Était-ce utile?

La solution

Applications fonctionnent dans un domaine différent par rapport à votre Web hôte. Ainsi, son appel de domaine croisé lorsque vous essayez d'accéder à une liste qui réside dans votre Web hôte de votre site Web Web. Normalement, les navigateurs ne permettent pas de rendre ces appels de domaine croisés pour des raisons de sécurité. Toutefois, dans les applications, pour interagir avec l'hôte Web, il existe une bibliothèque appelée SP.RequestExecutor.js, qui est un domaine transversal Libarary que vous pouvez utiliser pour effectuer ces appels. Veuillez consulter les liens suivants qui vous aideront à faire ces appels de domaine croisés pour accéder aux données Web hôtes dans une application App.

http://msdn.microsoft.com/en-in/library/ FP179927.aspx

http://www.maventen.com/ Blog / SharePoint-App-Reading-Data-Data-Web-web

http://blogs.msdn.com/b/oFeficiaps/archive/2012/11/29/solving-cross-Domain-problems-in-apps-for-sharepoint.aspx

espère que cela aide.

Autres conseils

Il semble que vous ayez oublié d'accorder les autorisations à votre application :La liste « Contacts » n'existe pas sur le site avec l'URL.

Lorsque vous installez une application, il vous sera demandé les droits pour accéder à une bibliothèque ou une liste spécifique par exemple.

Vous devrez ajouter quelque chose comme ceci...Exemple de ce à quoi ressemble le balisage dans un manifeste d'application :

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

Pour accéder à la liste du web hôte, vous devez compter sur les "jetons standard", puis utilisez l'API EITHE JSOM ou REST pour accéder aux données.

 //Get the URI decoded URLs.
                hostweburl =
                    decodeURIComponent(
                        getQueryStringParameter("SPHostUrl")
                );
                appweburl =
                    decodeURIComponent(
                        getQueryStringParameter("SPAppWebUrl")
                );

alors vous pouvez utiliser quelque chose comme ceci:

 // Initialize the RequestExecutor with the app web URL.
                executor = new SP.RequestExecutor(appweburl);

                // Issue the call against the host web.
                // To get the title using REST we can hit the endpoint:
                //      app_web_url/_api/SP.AppContextSite(@target)/web/title?@target='siteUrl'
                // The response formats the data in the JSON format.
                // The functions successHandler and errorHandler attend the
                //      success and error events respectively.
                executor.executeAsync(
                    {
                        url:
                            appweburl +
                            "/_api/SP.AppContextSite(@target)/web/title?@target='" +
                            hostweburl + "'",
                        method: "GET",
                        headers: { "Accept": "application/json; odata=verbose" },
                        success: successHandler,
                        error: errorHandler
                    }
                );

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top