لا يحصل التطبيق المستضاف على SharePoint على قوائمي
-
10-12-2019 - |
سؤال
أقوم بتطوير تطبيق مستضاف على 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
نأمل أن يساعد.
نصائح أخرى
يبدو أنك نسيت منح أذونات التطبيق الخاص بك:قائمة "جهات الاتصال" غير موجودة في الموقع مع عنوان URL.
عندما تقوم بتثبيت أحد التطبيقات، سيُطلب منك حقوق الوصول إلى مكتبة أو قائمة معينة على سبيل المثال.
سيكون عليك إضافة شيء مثل هذا ...مثال على الشكل الذي تبدو عليه العلامات في بيان التطبيق:
<AppPermissionRequests>
<AppPermissionRequest Scope="http://sharepoint/content/sitecollection/web/list" Right="Write"/></AppPermissionRequests>
للوصول إلى القائمة من Web المضيف، ستحتاج إلى الاعتماد على "الرموز القياسية" ثم استخدم eithe jsom أو بقية API للوصول إلى البيانات. giveacodicetagpre.
ثم يمكنك استخدام شيء مثل هذا: giveacodicetagpre.