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?
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 objetoitems
es de tipoListItemCollection
.
Si pruebalen(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 objetoitems
es de tipoListItemCollection
.
Si pruebalen(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 manipularAdemá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 lugarsites/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.