Вот что я использую.
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-файл с информацией о списке, но как есть, это не сработает ... поэтому я предполагаю, что это причина ошибки ... но я не т как это исправить.
Я чувствую себя так близко ... Кто-нибудь может помочь?
Ты почти там.
Ваш объект 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.