Office365-rest-python-client: Нет доступа к информации о моих списках SharePoint, URL ресурса списка выглядит неверно

Созданный на 28 авг. 2020  ·  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

Вы пробовали подключиться к api через почтальона?

Вот что я получаю от интерпретатора с моим текущим подключением.

>>> 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, это совершенно нормально

согласен, и действительно, дополнительные обратные косые черты являются обязательными для экранирования символа апострофа, чтобы сделать URL-адрес OData действительным

Этот комментарий, кажется, проливает свет на основную причину:

Я использовал эти настройки для 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

Итак, решением было бы предоставить разрешения приложения , предоставив _valid_ запрос разрешений, например:

на семейство сайтов :

<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>

Список _ областей разрешений_ можно найти на странице разрешений надстройки на странице

И последнее, но не менее важное: есть вики-страница, на которой также приведены пошаговые инструкции по настройке принципала приложения и предоставлению разрешений.

Спасибо! да. Область разрешений XML, по-видимому, была основной причиной проблемы!
Судя по моему первоначальному тестированию, теперь он работает.

Это здорово. В течение последнего года я использовал сценарии VBA в MS Access для обновления своих списков SharePoint. Разобравшись с этой частью, я еще на один шаг приблизился к переносу всего на Python.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

liuliqiu picture liuliqiu  ·  7Комментарии

Cesaaar picture Cesaaar  ·  7Комментарии

ahulist picture ahulist  ·  5Комментарии

etiennecelery picture etiennecelery  ·  4Комментарии

AakashBasu picture AakashBasu  ·  9Комментарии