Office365-rest-python-client: لا يمكن الوصول إلى أي معلومات حول قوائم SharePoint الخاصة بي ، يبدو أن عنوان URL لمورد القائمة غير صحيح

تم إنشاؤها على ٢٨ أغسطس ٢٠٢٠  ·  5تعليقات  ·  مصدر: vgrem/Office365-REST-Python-Client

هذا ما أستخدمه.

site_url = "https://mycompany.sharepoint.com/sites/mysite/"
clientid = "12345"
clientsecret = "67890"
clientcredentials = ClientCredential(clientid, clientsecret)
ctx = ClientContext(site_url).with_credentials(clientcredentials)
target_list = "ListIWant"
list_object = ctx.web.lists.get_by_title(target_list)
items = list_object.get_items()
ctx.load(items)
ctx.execute_query()

كل شيء يعمل بدون أخطاء ، ولكن في النهاية لا يحتوي list_object الخاصة بي على أي عناصر أو حقول ... عندما أنظر إلى Resource_url في list_object ، فإنه ليس عنوان URL الصحيح. توجد شرطات خلفية إضافية أمام وخلف اسم القائمة. تؤدي إزالة الشرطات المائلة والنسخ في شريط عنوان Edge إلى تنزيل ملف XML به معلومات حول القائمة ، ولكن كما هي ، لن تعمل ... لذلك أفترض أن هذا هو سبب الخطأ ... لكنني لا أفعل ر كيفية اصلاحها.

أشعر أنني قريب جدًا ... هل يمكن لأي شخص المساعدة؟
example

question

ال 5 كومينتر

أنت على وشك الانتهاء.
الكائن items من النوع ListItemCollection .
إذا جربت len(items) ، فيجب أن تُرجع كمية العناصر الموجودة في المجموعة
ويمكنك الآن تعداد هذه العناصر:

for item in items:
    print(item.properties)

أصبح كل عنصر الآن من النوع ListItem الذي يمكنك معالجته

أيضًا ، الشرطات المائلة العكسية الإضافية مخصصة للهروب من ' في سلسلة Python ، هذه طبيعية تمامًا

أنت على وشك الانتهاء.
الكائن items من النوع ListItemCollection .
إذا جربت len(item) ، فيجب أن تُرجع كمية العناصر الموجودة في المجموعة
ويمكنك الآن تعداد هذه العناصر:

for item in items:
    print(item.properties)

أصبح كل عنصر الآن من النوع ListItem الذي يمكنك معالجته

شكرًا لك على مساعدتك ولكن print (len (items)) ترجع 0

إذا لم تكن مشكلة في Resource_url. هل من المحتمل أن يكون هناك خطأ ما في أذونات التطبيق التي قمت بتعيينها لموقع SharePoint؟ لقد اتبعت التوجيهات من https://docs.microsoft.com/en-us/sharepoint/dev/solution-guidance/security-apponly-azureacs (بما في ذلك تعيين طلب الإذن XML) ، ولكن عندما أعود إلى _ Layouts / 15 /appinv.aspx الصفحة وابحث عن معرف العميل الخاص بي ، يكون حقل XML لطلب الإذن فارغًا دائمًا ... هذه هي المرة الأولى التي أقوم فيها بذلك ، لذا لست متأكدًا مما إذا كانت هذه هي الطريقة التي من المفترض أن تعمل بها أم لا.

لقد كنت أستخدم هذه الإعدادات لـ xml (واخترت الثقة في التطبيق بوضوح).

   <AppPermissionRequests AllowAppOnlyPolicy="true">
   <AppPermissionRequest Scope="http://mycompany.sharepoint.com/sites/mysite" Right="FullControl" />
   </AppPermissionRequests>

هذا مختلف قليلاً عما كان في الإرشادات التي وجدتها على docs.microsoft.com ، لكن لدي فقط القدرة على منح حق الوصول إلى موقعي ، وليس المستأجر. تم إدراج التطبيق في "أذونات تطبيق مجموعة الموقع" بعد ذلك ، لذلك أفترض أنه يعمل ... لكن الحقيقة أنني لا أرى أي أذونات xml عندما أعود إلى appinv.aspx.

سؤال جيد ، في ذاكرتي ، عندما كنت أتعامل مع قضايا الإذن ، كان واضحًا جدًا.
سيكون التطبيق الذي تمت الموافقة عليه بالفعل بسعر _layouts/15/AppPrincipals.aspx
ومن الطبيعي ألا ترى xml في appinv.

إذا كانت ذاكرتي تعمل بشكل صحيح ، فإن النطاق الذي استخدمته كان http://sharepoint/site/sitecollection رغم ذلك
(تحرير :) هنا ورقة الغش: https://medium.com/ng-sp/sharepoint-add-in-permission-xml-cheat-sheet-64b87d8d7600

هل حاولت الاتصال بواجهة برمجة التطبيقات من خلال ساعي البريد؟

هذا ما أحصل عليه من المترجم مع اتصالي الحالي.

>>> items = ctx.web.lists.get_by_title('Events').items
>>> items
<office365.sharepoint.listitems.listItem_collection.ListItemCollection object at 0x10d064af0>
>>> len(items)
0
>>> ctx.load(items)
>>> ctx.execute_query()
>>> len(items)
2

تحيات،

أنت على وشك الانتهاء.
الكائن items من النوع ListItemCollection .
إذا جربت len(items) ، فيجب أن تُرجع كمية العناصر الموجودة في المجموعة
ويمكنك الآن تعداد هذه العناصر:

for item in items:
    print(item.properties)

أصبح كل عنصر الآن من النوع ListItem الذي يمكنك معالجته

أيضًا ، الشرطات المائلة العكسية الإضافية مخصصة للهروب من ' في سلسلة Python ، هذه طبيعية تمامًا

توافق ، وفي الواقع ، تعد الخطوط المائلة العكسية الإضافية إلزامية للهروب من حرف الفاصلة العليا لجعل

يبدو أن هذا التعليق يلقي الضوء على السبب الجذري:

لقد كنت أستخدم هذه الإعدادات لـ xml (واخترت الثقة في التطبيق بوضوح).

   <AppPermissionRequests AllowAppOnlyPolicy="true">
   <AppPermissionRequest Scope="http://mycompany.sharepoint.com/sites/mysite" Right="FullControl" />
   </AppPermissionRequests>

هذا مختلف قليلاً عما كان في الإرشادات التي وجدتها على docs.microsoft.com ، لكن لدي فقط القدرة على منح حق الوصول إلى موقعي ، وليس المستأجر. تم إدراج التطبيق في "أذونات تطبيق مجموعة الموقع" بعد ذلك ، لذلك أفترض أنه يعمل ... لكن الحقيقة أنني لا أرى أي أذونات xml عندما أعود إلى appinv.aspx.

يبدو النطاق المقدم _invalid_: http://mycompany.sharepoint.com/sites/mysite

  • mycompany : يجب أن يكون العنصر النائب المحدد مسبقًا sharepoint بدلاً من ذلك
  • sites/mysite نفسه ، يجب أن يكون عنصرًا نائبًا _valid_ ، على سبيل المثال content/sitecollection أو content/sitecollection/web

لذلك ، سيكون الحل هو منح أذونات التطبيق من خلال تقديم طلب أذونات _ صالح_ ، على سبيل المثال:

لكل مجموعة مواقع :

<AppPermissionRequests AllowAppOnlyPolicy="true">
  <AppPermissionRequest Scope="http://sharepoint/content/sitecollection" Right="FullControl" />
</AppPermissionRequests>

لكل ويب :

<AppPermissionRequests AllowAppOnlyPolicy="true">
  <AppPermissionRequest Scope="http://sharepoint/content/sitecollection/web" Right="FullControl" />
</AppPermissionRequests>

يمكن العثور على قائمة _نطاقات الإذن_في أذونات الوظيفة الإضافية في صفحة

وأخيرًا وليس آخرًا ، توجد صفحة wiki تقدم أيضًا إرشادات خطوة بخطوة حول كيفية إعداد التطبيق الأساسي ومنح الأذونات.

شكرا لك! نعم فعلا. يبدو أن نطاق إذن XML كان السبب الجذري للمشكلة!
من الاختبار الأولي الذي أجريته يبدو أنه يعمل الآن.

هذا عظيم. لقد كنت أستخدم البرامج النصية لـ VBA في MS Access خلال العام الماضي لتحديث قوائم SharePoint الخاصة بي. إن تحديد هذا الجزء يجعلني أقرب إلى نقل كل شيء إلى Python.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

stardust85 picture stardust85  ·  4تعليقات

spurthikaribasaiah picture spurthikaribasaiah  ·  10تعليقات

liuliqiu picture liuliqiu  ·  7تعليقات

domdinicola picture domdinicola  ·  4تعليقات

Mark531 picture Mark531  ·  11تعليقات