Office365-rest-python-client: Kein Zugriff auf Informationen zu meinen SharePoint-Listen, Listenressourcen-URL sieht falsch aus

Erstellt am 28. Aug. 2020  ·  5Kommentare  ·  Quelle: vgrem/Office365-REST-Python-Client

Hier ist, was ich verwende.

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

Alles läuft ohne Fehler, aber am Ende hat mein list_object keine Elemente oder Felder... Wenn ich mir die resource_url im list_object ansehe, ist es nicht die richtige URL. Vor und hinter dem Listennamen befinden sich zusätzliche umgekehrte Schrägstriche. Durch das Entfernen der Schrägstriche und das Kopieren in die Edge-Adressleiste wird eine XML-Datei mit Informationen zur Liste heruntergeladen, aber so wie sie ist, funktioniert es nicht ... also gehe ich davon aus, dass dies den Fehler verursacht ... aber ich tue es nicht t wie man es repariert.

Ich fühle mich so nah... kann mir jemand helfen?
example

question

Alle 5 Kommentare

Du bist fast da.
Ihr items Objekt ist vom Typ ListItemCollection .
Wenn Sie len(items) versuchen, sollte die Anzahl der Elemente in der Sammlung zurückgegeben werden
Und Sie können diese Elemente jetzt aufzählen:

for item in items:
    print(item.properties)

Jeder Gegenstand ist jetzt vom Typ ListItem , den Sie bearbeiten können

Außerdem sind die zusätzlichen Backslashes dafür da, die ' im Python-String zu entkommen, das ist völlig normal

Du bist fast da.
Ihr items Objekt ist vom Typ ListItemCollection .
Wenn Sie len(item) versuchen, sollte die Anzahl der Elemente in der Sammlung zurückgegeben werden
Und Sie können diese Elemente jetzt aufzählen:

for item in items:
    print(item.properties)

Jeder Gegenstand ist jetzt vom Typ ListItem , den Sie bearbeiten können

Vielen Dank für Ihre Hilfe, aber print(len(items)) gibt 0 zurück

Wenn es kein Problem mit der resource_url ist. Kann es sein, dass etwas mit den App-Berechtigungen nicht stimmt, die ich für die SharePoint-Site festgelegt habe? Ich habe die Anweisungen von https://docs.microsoft.com/en-us/sharepoint/dev/solution-guidance/security-apponly-azureacs befolgt (einschließlich des Festlegens der Berechtigungsanforderungs-XML), aber wenn ich zu _layouts/15 . zurückkehre /appinv.aspx-Seite und schauen Sie nach meiner Client-ID, das XML-Feld für die Berechtigungsanforderung ist immer leer ... Dies ist das erste Mal, dass ich dies tue, also bin ich mir nicht sicher, ob es so funktionieren soll oder nicht.

Ich habe diese Einstellungen für die XML verwendet (und ich wähle offensichtlich der Anwendung vertrauen).

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

Dies unterscheidet sich ein wenig von den Anweisungen, die ich auf docs.microsoft.com gefunden habe, aber ich habe nur die Möglichkeit, Zugriff auf meine Site zu gewähren, nicht auf den Mandanten. Die App wird danach in den "Websitesammlungs-App-Berechtigungen" aufgeführt, daher gehe ich davon aus, dass sie funktioniert ... aber die Tatsache, dass ich keine XML-Berechtigungen sehe, wenn ich zu appinv.aspx zurückkehre.

Gute Frage, in meiner Erinnerung, als ich mit Berechtigungsproblemen zu tun hatte, war es sehr klar.
Ihre tatsächlich genehmigte App würde _layouts/15/AppPrincipals.aspx
Und es ist normal, dass Sie die XML-Datei bei appinv nicht sehen.

Wenn ich mich richtig erinnere, war das Zielfernrohr, das ich verwendet habe, http://sharepoint/site/sitecollection $$
(Bearbeiten:)Hier ist ein Spickzettel: https://medium.com/ng-sp/sharepoint-add-in-permission-xml-cheat-sheet-64b87d8d7600

Haben Sie versucht, sich über den Postboten mit der API zu verbinden?

Folgendes bekomme ich vom Dolmetscher mit meiner aktuellen Verbindung.

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

Grüße,

Du bist fast da.
Ihr items Objekt ist vom Typ ListItemCollection .
Wenn Sie len(items) versuchen, sollte die Anzahl der Elemente in der Sammlung zurückgegeben werden
Und Sie können diese Elemente jetzt aufzählen:

for item in items:
    print(item.properties)

Jeder Gegenstand ist jetzt vom Typ ListItem , den Sie bearbeiten können

Außerdem sind die zusätzlichen Backslashes dafür da, die ' im Python-String zu entkommen, das ist völlig normal

zustimmen und in der Tat sind zusätzliche Backslashes erforderlich, um Apostroph-Zeichen zu maskieren , um die

Dieser Kommentar scheint Licht auf die Ursache zu werfen:

Ich habe diese Einstellungen für die XML verwendet (und ich wähle offensichtlich der Anwendung vertrauen).

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

Dies unterscheidet sich ein wenig von den Anweisungen, die ich auf docs.microsoft.com gefunden habe, aber ich habe nur die Möglichkeit, Zugriff auf meine Site zu gewähren, nicht auf den Mandanten. Die App wird danach in den "Websitesammlungs-App-Berechtigungen" aufgeführt, daher gehe ich davon aus, dass sie funktioniert ... aber die Tatsache, dass ich keine XML-Berechtigungen sehe, wenn ich zu appinv.aspx zurückkehre.

der angegebene Bereich sieht _ungültig_ aus: http://mycompany.sharepoint.com/sites/mysite

  • mycompany : muss stattdessen ein sharepoint vordefinierter Platzhalter sein
  • sites/mysite gleich, muss ein _gültiger_ Platzhalter sein, zB content/sitecollection oder content/sitecollection/web

Die Lösung wäre also, App-Berechtigungen zu

pro Websitesammlung :

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

pro Web :

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

Die Liste der _Berechtigungsbereiche_ finden Sie auf der Seite Add-In-Berechtigungen auf der SharePoint- Seite

Und zu guter Letzt gibt es eine Wiki-Seite, die auch Schritt-für-Schritt-Anleitungen zum Einrichten des App-Prinzipals und zum Erteilen von Berechtigungen bietet.

Danke! Jawohl. Der XML-Berechtigungsbereich scheint die Hauptursache des Problems gewesen zu sein!
Nach meinen ersten Tests scheint es jetzt zu funktionieren.

Das ist toll. Ich habe im letzten Jahr VBA-Skripte in MS Access verwendet, um meine SharePoint-Listen zu aktualisieren. Nachdem ich diesen Teil herausgefunden habe, bin ich einen Schritt näher daran, alles nach Python zu portieren.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

liuliqiu picture liuliqiu  ·  7Kommentare

etiennecelery picture etiennecelery  ·  4Kommentare

continda picture continda  ·  4Kommentare

oktorok picture oktorok  ·  5Kommentare

Cesaaar picture Cesaaar  ·  7Kommentare