سؤال

أقوم بتطوير تطبيق مستضاف على SharePoint لـ SharePoint 2013 (في Office365)، ولكن أواجه مشكلة في الوصول إلى القوائم داخل تطبيق مستضاف على SharePoint.

يقوم الكود الخاص بي بطباعة القوائم بشكل جيد، ولكنه يظهر لي فقط قائمة "المظاهر المركبة" وقوائم "معرض الصفحات الرئيسية"، ولا يمكنني الوصول إلى القوائم التي قمت بإنشائها في موقع Sharepoint الخاص بي.

وعندما أحاول الوصول إلى قائمة "جهات الاتصال" (الموجودة في موقع Sharepoint حيث أقوم بنشر التطبيق)، حصلت على هذا الاستثناء:

قائمة "جهات الاتصال" غير موجودة في الموقع مع عنوان URL "https://mysharepointsite-03ea186502297f.sharepoint.com/SPHostedApp12

وبالتالي يبدو أن تطبيقي يعمل من موقع آخر غير موقعي الرئيسي، ولهذا السبب لا أستطيع الوصول إلى القوائم الموجودة من موقع الويب الرئيسي الخاص بي...

هل يعرف أحد كيفية حل هذه المشكلة والوصول إلى القوائم الموجودة في الموقع الرئيسي؟

شكرًا جزيلاً !

إليك رمز 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!');
});
هل كانت مفيدة؟

المحلول

تعمل التطبيقات في مجال مختلف بالمقارنة مع الويب المضيف الخاص بك. لذلك، استدعاء المجال الصغير عند محاولة الوصول إلى بعض القائمة الموجودة في الويب المضيف من الويب الخاص بك. عادة لا تسمح المتصفحات بإجراء هذه المجال الصليب يدعو لأسباب أمنية. ومع ذلك، في التطبيقات، للتفاعل مع Web المضيف، هناك مكتبة تسمى SP.REQUESTEXECUTOR.JS، وهو مجال عبور ليباراري يمكنك استخدامه لإجراء هذه المكالمات. يرجى إلقاء نظرة على الروابط التالية التي ستساعدك في إجراء مكالمات المجال الصليب هذه للوصول إلى بيانات الويب المضيف داخل ويب التطبيق.

href="http://msdn.microsoft.com/en-in/library/fp179927.aspx" rel="nofollow"> http://msdn.microsoft.com/en-in/library/ FP179927.aspx

الصفحة

href="http://www.mavenision.com/blog/sharepoint-aprading-data-from-host-web" rel="nofollow"> http://www.mavention.com/ مدونة / SharePoint-app-reading-data-host-host-web

http://blogs.msdn.com/b/officapps/archive2/2012/11/29/solving-cross-prose-pro-problems-in-apps-for-sharepoint.aspx

نأمل أن يساعد.

نصائح أخرى

يبدو أنك نسيت منح أذونات التطبيق الخاص بك:قائمة "جهات الاتصال" غير موجودة في الموقع مع عنوان URL.

عندما تقوم بتثبيت أحد التطبيقات، سيُطلب منك حقوق الوصول إلى مكتبة أو قائمة معينة على سبيل المثال.

سيكون عليك إضافة شيء مثل هذا ...مثال على الشكل الذي تبدو عليه العلامات في بيان التطبيق:

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

للوصول إلى القائمة من Web المضيف، ستحتاج إلى الاعتماد على "الرموز القياسية" ثم استخدم eithe jsom أو بقية API للوصول إلى البيانات. giveacodicetagpre.

ثم يمكنك استخدام شيء مثل هذا: giveacodicetagpre.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى sharepoint.stackexchange
scroll top