Office365-rest-python-client: No puedo acceder a ninguna información sobre mis listas de SharePoint, la URL del recurso de lista parece incorrecta

Creado en 28 ago. 2020  ·  5Comentarios  ·  Fuente: vgrem/Office365-REST-Python-Client

Esto es lo que estoy usando.

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

Todo funciona sin errores, pero al final mi list_object no tiene ningún elemento o campo ... Cuando miro resource_url en list_object, no es la URL correcta. Hay barras diagonales inversas adicionales delante y detrás del nombre de la lista. Al eliminar las barras y copiar en la barra de direcciones de Edge, se descarga un archivo XML con información sobre la lista, pero tal como está, no funcionará ... así que supongo que eso es lo que está causando el error ... pero no lo hago ' t cómo solucionarlo.

Siento que estoy tan cerca ... ¿alguien puede ayudar?
example

question

Todos 5 comentarios

Ya casi estás ahí.
Su objeto items es de tipo ListItemCollection .
Si prueba len(items) , debería devolver la cantidad de elementos de la colección
Y ahora puede enumerar esos elementos:

for item in items:
    print(item.properties)

cada elemento es ahora del tipo ListItem que puede manipular

Además, las barras invertidas adicionales son para escapar de ' en la cadena de Python, son totalmente normales

Ya casi estás ahí.
Su objeto items es de tipo ListItemCollection .
Si prueba len(item) , debería devolver la cantidad de elementos de la colección
Y ahora puede enumerar esos elementos:

for item in items:
    print(item.properties)

cada elemento es ahora del tipo ListItem que puede manipular

Gracias por su ayuda, pero print (len (items)) devuelve 0

Si no es un problema con resource_url. ¿Es posible que haya algún problema con los permisos de la aplicación que configuré para el sitio de SharePoint? Seguí las instrucciones de https://docs.microsoft.com/en-us/sharepoint/dev/solution-guidance/security-apponly-azureacs (incluida la configuración del XML de solicitud de permiso), pero cuando vuelvo a _layouts / 15 /appinv.aspx y mire mi ID de cliente, el campo XML de solicitud de permiso siempre está vacío ... Esta es la primera vez que hago esto, así que no estoy seguro si así es como se supone que funciona o no.

He estado usando esta configuración para el xml (y obviamente selecciono confiar en la aplicación).

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

Esto es un poco diferente de lo que estaba en las instrucciones que encontré en docs.microsoft.com, pero solo tengo la capacidad de otorgar acceso a mi sitio, no al inquilino. La aplicación aparece en los 'Permisos de la aplicación de colección de sitios' después, así que supongo que está funcionando ... pero el hecho de que no veo ningún permiso xml cuando vuelvo a appinv.aspx.

Buena pregunta, en mi memoria, cuando estaba lidiando con problemas de permisos, estaba muy clara.
Su aplicación realmente aprobada estaría en _layouts/15/AppPrincipals.aspx
Y es normal que no vea el xml en appinv.

Si mi memoria funciona bien, el alcance que usé fue http://sharepoint/site/sitecollection aunque
(Editar :) Aquí hay una hoja de trucos: https://medium.com/ng-sp/sharepoint-add-in-permission-xml-cheat-sheet-64b87d8d7600

¿Ha intentado conectarse a la API a través de cartero?

Esto es lo que obtengo del intérprete con mi conexión actual.

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

Saludos,

Ya casi estás ahí.
Su objeto items es de tipo ListItemCollection .
Si prueba len(items) , debería devolver la cantidad de elementos de la colección
Y ahora puede enumerar esos elementos:

for item in items:
    print(item.properties)

cada elemento es ahora del tipo ListItem que puede manipular

Además, las barras invertidas adicionales son para escapar de ' en la cadena de Python, son totalmente normales

de acuerdo y, de hecho, las barras invertidas adicionales son obligatorias para escapar del carácter de apóstrofo para que la URL de OData sea válida

Este comentario parece arrojar luz sobre la causa raíz:

He estado usando esta configuración para el xml (y obviamente selecciono confiar en la aplicación).

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

Esto es un poco diferente de lo que estaba en las instrucciones que encontré en docs.microsoft.com, pero solo tengo la capacidad de otorgar acceso a mi sitio, no al inquilino. La aplicación aparece en los 'Permisos de la aplicación de colección de sitios' después, así que supongo que está funcionando ... pero el hecho de que no veo ningún permiso xml cuando vuelvo a appinv.aspx.

el alcance proporcionado parece _invalido_: http://mycompany.sharepoint.com/sites/mysite

  • mycompany : debe ser sharepoint marcador de posición predefinido en su lugar
  • sites/mysite igual, debe ser un marcador de posición _valid_, por ejemplo, content/sitecollection o content/sitecollection/web

Entonces, la solución sería otorgar permisos a la aplicación proporcionando una solicitud de permisos _valid_, por ejemplo:

por colección de sitios :

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

por web :

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

La lista de _ alcances de permisos_ se puede encontrar en Permisos de complementos en la página de

Y por último, pero no menos importante, hay una página wiki que también proporciona instrucciones paso a paso sobre cómo configurar el director de la aplicación y otorgar permisos.

¡Gracias! sí. ¡El alcance del permiso XML parece haber sido la causa principal del problema!
Desde mi prueba inicial, parece estar funcionando ahora.

Esto es genial. He estado usando scripts de VBA en MS Access durante el último año para actualizar mis listas de SharePoint. Tener esta parte resuelta me pone un paso más cerca de portar todo a Python.

¿Fue útil esta página
0 / 5 - 0 calificaciones