Office365-rest-python-client: Não consigo acessar nenhuma informação sobre minhas listas do SharePoint, o URL do recurso da lista parece incorreto

Criado em 28 ago. 2020  ·  5Comentários  ·  Fonte: vgrem/Office365-REST-Python-Client

Aqui está o que estou 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()

Tudo corre sem erros, mas no final meu list_object não tem nenhum item ou campo ... Quando eu olho para resource_url em list_object, não é o URL correto. Existem barras invertidas extras na frente e atrás do nome da lista. Remover as barras e copiar para a barra de endereço do Edge baixa um arquivo XML com informações sobre a lista, mas como está, não funcionará ... então presumo que seja isso o que está causando o erro ... mas não t como consertá-lo.

Sinto que estou tão perto ... Alguém pode ajudar?
example

question

Todos 5 comentários

Você está quase lá.
Seu objeto items é do tipo ListItemCollection .
Se você tentar len(items) , ele deve retornar a quantidade de itens na coleção
E agora você pode enumerar esses itens:

for item in items:
    print(item.properties)

cada item agora é do tipo ListItem que você pode manipular

também, as barras invertidas extras são para escapar de ' na string python, elas são totalmente normais

Você está quase lá.
Seu objeto items é do tipo ListItemCollection .
Se você tentar len(item) , ele deve retornar a quantidade de itens na coleção
E agora você pode enumerar esses itens:

for item in items:
    print(item.properties)

cada item agora é do tipo ListItem que você pode manipular

Obrigado pela sua ajuda, mas print (len (items)) retorna 0

Se não for um problema com resource_url. poderia haver algo errado com as permissões do aplicativo que defini para o site do SharePoint? Segui as instruções de https://docs.microsoft.com/en-us/sharepoint/dev/solution-guidance/security-apponly-azureacs (incluindo a configuração do XML de solicitação de permissão), mas quando volto para _layouts / 15 /appinv.aspx e olhe meu ID de cliente, o campo XML de solicitação de permissão está sempre vazio ... Esta é a primeira vez que faço isso, então não tenho certeza se é assim que deve funcionar ou não.

Tenho usado essas configurações para o xml (e seleciono confiar no aplicativo, obviamente).

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

Isso é um pouco diferente do que estava nas instruções que encontrei em docs.microsoft.com, mas só posso conceder acesso ao meu site, não ao locatário. O aplicativo é listado em 'Permissões do aplicativo do conjunto de sites' posteriormente, então presumo que esteja funcionando ... mas o fato de não ver nenhuma permissão xml quando volto para appinv.aspx.

Boa pergunta, na minha memória, quando estava lidando com questões de permissão, era muito claro.
Seu aplicativo realmente aprovado estaria em _layouts/15/AppPrincipals.aspx
E é normal que você não veja o xml no appinv.

Se minha memória está correta, o escopo que usei foi http://sharepoint/site/sitecollection embora
(Editar :) Aqui está uma folha de dicas: https://medium.com/ng-sp/sharepoint-add-in-permission-xml-cheat-sheet-64b87d8d7600

Você já tentou se conectar à api pelo carteiro?

Aqui está o que recebo do intérprete com minha conexão atual.

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

Saudações,

Você está quase lá.
Seu objeto items é do tipo ListItemCollection .
Se você tentar len(items) , ele deve retornar a quantidade de itens na coleção
E agora você pode enumerar esses itens:

for item in items:
    print(item.properties)

cada item agora é do tipo ListItem que você pode manipular

também, as barras invertidas extras são para escapar de ' na string python, elas são totalmente normais

concordar e, de fato, barras invertidas extras são obrigatórias para o caractere de apóstrofo de escape para tornar o URL OData válido

Este comentário parece lançar uma luz sobre a causa raiz:

Tenho usado essas configurações para o xml (e seleciono confiar no aplicativo, obviamente).

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

Isso é um pouco diferente do que estava nas instruções que encontrei em docs.microsoft.com, mas só posso conceder acesso ao meu site, não ao locatário. O aplicativo é listado em 'Permissões do aplicativo do conjunto de sites' posteriormente, então presumo que esteja funcionando ... mas o fato de não ver nenhuma permissão xml quando volto para appinv.aspx.

o escopo fornecido parece _inválido_: http://mycompany.sharepoint.com/sites/mysite

  • mycompany : deve ser sharepoint espaço reservado predefinido
  • sites/mysite mesmo, precisa ser um marcador _válido_, por exemplo, content/sitecollection ou content/sitecollection/web

Portanto, a solução seria conceder permissões de aplicativo fornecendo uma solicitação de permissões _válidas_, por exemplo:

por conjunto de sites :

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

A lista de _escopos de permissão_ pode ser encontrada em Permissões de suplemento SharePoint

E por último, mas não menos importante, há uma página wiki que também fornece instruções passo a passo sobre como configurar o aplicativo principal e conceder permissões.

Obrigada! sim. O escopo da permissão XML parece ter sido a causa raiz do problema!
Pelo meu teste inicial, parece estar funcionando agora.

Isso é ótimo. Tenho usado scripts VBA no MS Access no ano passado para atualizar minhas listas do SharePoint. Ter essa parte resolvida me deixa um passo mais perto de portar tudo para Python.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

attibalazs picture attibalazs  ·  10Comentários

florinmihut picture florinmihut  ·  4Comentários

continda picture continda  ·  4Comentários

Cesaaar picture Cesaaar  ·  7Comentários

Bachatero picture Bachatero  ·  3Comentários