Obtendo o tutorial de scripts python de dados SharePoint usando o connect bridge

Obtendo dados do SharePoint em scripts Python - um tutorial usando o Connect Bridge

Ana NetoConnectors, Technical 1 Comment

"Você já se perguntou como acessar o Microsoft SharePoint em seus scripts Python?

Este tutorial aborda exatamente isso:
você será capaz de fazê-lo de uma maneira fácil, usando uma ferramenta chamada Connect Bridge".

Última actualização: Janeiro, 10, 2022

Introdução

Este artigo descreve como fazer Python ligar ao SharePointO sistema Microsoft SharePoint (2010, 2013 ou 2019), ou seja, como aceder aos dados dos sistemas Microsoft SharePoint a partir de scripts em linguagem Python (utilizando a versão 3.7). As transferências de dados são feitas através da camada ODBC. Conseguimos isto em Python usando a módulo de pyodbc ver. 4.0.26.

É importante notar que neste artigo utilizamos um produto comercial chamado Connect Bridge. Isto é, de facto, o que torna possível a integração Python / SharePoint, ao permitir a comunicação de dados de uma forma que de certeza não compromete a integrida do lado do SharePoint (e, acredite em mim, isto é MUITO importante). Pode iniciar um período de teste gratuito com o Connect Bridge, para que possa experimentar tudo isto por si mesmo.

O que é este "Connect Bridge"?

Fico contente por teres perguntado! Connect Bridge é uma plataforma de integração desenvolvida pelo Connecting Software que permite conectar qualquer software através de drivers ODBC, drivers JDBC ou Web Services. A visão geral da arquitetura da ferramenta está neste diagrama de cenário cliente-servidor.

Ligar

Connect Bridge arquitetura da plataforma de integração

Como pode ver no diagrama, a ferramenta pode ser usada para aceder não apenas aos dados do Microsoft SharePoint a partir do seu script Python, mas também pode ir buscar/portar dados de/para o Microsoft Exchange e Microsoft Dynamics CRM, entre muitos outros.

O objectivo - obter dados SharePoint usando o Python

O objectivo do nosso trabalho era criar um script Python que nos permitisse falar com o SharePoint via Connect Bridge.

Nós usamos SharePoint, mas é possível usar lógica similar para conectar a Microsoft Exchange ou a um CRM como o Salesforce ou Dynamics.

A começar...

Agora vamos começar este tutorial! Nosso objetivo é criar um script Python simples que acesse uma instância de SharePoint. Assumimos que a instância SharePoint já existe (certifique-se que tem as suas credenciais de login em mãos). Estes são passos simples que você precisa seguir:

1. Peça uma avaliação gratuita e instale o Connect Bridge
2. Instale o Python para Windows ver. 3.7+. Por favor note que para facilitar a escrita, execução e depuração do meu script, temos usado Liclipse 5.2.4 com o plugin pydev, mas isto é, é claro, opcional. Você pode usar um editor à sua escolha.
3. Instale o módulo de pyodbc 4.0.26+
4. Execute o Connect Bridge Management Studio e
4.1. Adicionar uma conta para SharePoint (Contas - Adicionar conta). Aqui é onde você vai precisar das credenciais que mencionamos anteriormente.
4.2. Abra o Nova Consulta e depois a opção Navegador de Conexão. Encontre o Conector SharePoint e abra-o até ver o DefaultConnection. Clique com o botão direito do mouse sobre ele e escolha Obter cadeia de ligação. Depois copie a cadeia de ligação ODBC. Você vai precisar dela para passá-la para o script.
4.3. Use a opção Nova Consulta para testar uma consulta que irá acessar o que você precisa no SharePoint. Vamos fazer uma consulta de exemplo aqui, mas é aqui que deve colocar o que procura no SharePoint. Uma vez que você tenha clicado em Nova Consultaabra o Navegador de Conexão. Encontre o Conector SharePoint e abra-o até ver o Tabelas opção. Você verá que o esquema contém uma "tabela" chamada Site_Pages para que possamos construir nossa consulta como

SELECT UniqueId, ContentType, Created, Modified, ContentVersion FROM Site_Pages LIMIT 10;

para seleccionar as 10 primeiras entradas de SharePoint's Páginas do site lista. É importante notar que embora pareça que estamos usando uma base de dados diretamente, não é o caso.

Connect Bridge está acessando a API e depois apresentando-a como se fosse uma base de dados. Uma vez que você tenha sua consulta, copie-a, pois você também vai precisar dela para passá-la para o script.

Finalmente o script de Python!

O núcleo e, ao mesmo tempo, o único arquivo em nossa solução é o CBQuery.py. O código fonte completo está abaixo. Por favor, concentre-se nas linhas 70-92 que retratam a solução do núcleo. Uma descrição completa de como este script funciona está abaixo.

#!/usr/local/bin/python3.7 

# encoding: utf-8 

''' 

CBQuery -- query data from, write data to SharePoint 

  

CBQuery is a script that allows to run SQL queries via Connect Bridge ODBC driver 

  

@author:    Ana Neto and Michal Hainc 

  

@copyright:  2019 

  

@contact:    ana@connecting-soiftware.com 

@deffield    updated: 04.07.2019 

''' 

  

import sys 

import os 

import pyodbc 

  

from argparse import ArgumentParser 

from argparse import RawDescriptionHelpFormatter 

  

__all__ = [] 

__version__ = 0.2 

__date__ = '2019-07-04' 

__updated__ = '2019-07-04' 

  

DEBUG = 1 

TESTRUN = 0 

PROFILE = 0 

  

class CLIError(Exception): 

    '''Generic exception to raise and log different fatal errors.''' 

    def __init__(self, msg): 

        super(CLIError).__init__(type(self)) 

        self.msg = "E: %s" % msg 

    def __str__(self): 

        return self.msg 

    def __unicode__(self): 

        return self.msg 

  

def main(argv=None): # IGNORE:C0111 

    '''Command line options.''' 

  

    if argv is None: 

        argv = sys.argv 

    else: 

        sys.argv.extend(argv) 

  

    program_name = os.path.basename(sys.argv[0]) 

    program_version = "v%s" % __version__ 

    program_build_date = str(__updated__) 

    program_version_message = '%%(prog)s %s (%s)' % (program_version, program_build_date) 

    program_shortdesc = __import__('__main__').__doc__.split("n")[1] 

    program_license = '''%s 

  

  Created by Ana Neto and Michal Hainc on %s. 

  

  Licensed under the Apache License 2.0 

  http://www.apache.org/licenses/LICENSE-2.0 

  

  Distributed on an "AS IS" basis without warranties 

  or conditions of any kind, either express or implied. 

  

USAGE 

''' % (program_shortdesc, str(__date__)) 

  

    try: 

        # Setup argument parser 

        parser = ArgumentParser(description=program_license, formatter_class=RawDescriptionHelpFormatter) 

        parser.add_argument('connstr')         

        parser.add_argument('query') 

         

        # Process arguments 

        args = parser.parse_args() 

  

        query = args.query 

        connstr = args.connstr 

  

        conn = pyodbc.connect(connstr) 

        cursor = conn.cursor() 

        cursor.execute(query) 

        while 1: 

            row = None 

            try: 

                row = cursor.fetchone() 

            except:  

                print(sys.exc_info()[1]) 

                break 

            if not row: 

                break                     

            print(row) 

                         

             

    except KeyboardInterrupt: 

        ### handle keyboard interrupt ### 

        return 0 

    except: 

        print(sys.exc_info()[1]) 

        #indent = len(program_name) * " "         

        #sys.stderr.write(program_name + ": " + repr(e) + "n") 

        #sys.stderr.write(indent + "  for help use --help") 

        return 2 

  

if __name__ == "__main__": 

          

    if TESTRUN: 

        import doctest 

        doctest.testmod() 

    if PROFILE: 

        import cProfile 

        import pstats 

        profile_filename = 'CBQuery_profile.txt' 

        cProfile.run('main()', profile_filename) 

        statsfile = open("profile_stats.txt", "wb") 

        p = pstats.Stats(profile_filename, stream=statsfile) 

        stats = p.strip_dirs().sort_stats('cumulative') 

        stats.print_stats() 

        statsfile.close() 

        sys.exit(0) 

    sys.exit(main()) 

Aqui está o que o nosso script está a fazer:

- As linhas 71-80 servem para obter as variáveis connstr e query a partir de parâmetros de entrada em linha de comando. Para isso usamos a template argparse do pydev.
- A variável connstr contém a string de conexão ODBC que passamos para o módulo pyodbc para criar uma conexão ODBC (armazenada na variável conn)
- No próximo passo abrimos um database cursor usando a conexão armazenada em conn
- Tendo a conexão armazenada em conn abrimos um database cursor usando conn
- Executamos a query SQL (esta é a query que foi passada através do parâmetro query)
- Finalmente, usamos um ciclo while para ler os resultados do cursor linha por linha. Quando cursor.fetchone retorna None, nós quebramos o ciclo
- Se ocorrer uma exceção durante o fetch ODBC, também quebramos o ciclo e mostramos um erro no output
- Se o método fetchone tiver sucesso e retornar uma linha de dados, nós mostramos a linha de dados diretamente no output. Esta foi a nossa opção para esta demonstração, mas naturalmente podemos formatar como xml ou json, csv... ou qualquer outro tipo de formato desejado. Poderíamos também simplesmente usar os dados em bruto para usar em código adicional para levar a cabo tarefas personalizadas.

Executando o script CBQuery.py

Sabemos que o nosso CBQuery.py aceita dois parâmetros posicionais: connstr e query.

Precisamos de copiá-los do Connect Bridge Management Studio como explicado acima (ponto 4).

E se eu quiser criar uma lista de contatos SharePoint e escrever nela?

Vamos agora supor que queremos criar uma lista de contatos no SharePoint e criar um contato nessa lista. Basicamente precisamos seguir o mesmo processo, mas alterar a consulta para usar um "Procedimento Armazenado". Novamente esse "Stored Procedure" estará, de fato, acessando o SharePoint através da API, mas ele está recebendo os dados no SharePoint que você especificou. Aqui está a consulta que precisamos executar:

EXEC SP_CREATE_TABLE 'MyContacts', 'This table was created using Connect Bridge', true, 'Contacts';

A consulta cria uma nova lista do SharePoint (MyContacts), com uma descrição que aparecerá na barra de lançamento rápido da página do SharePoint.

Agora precisamos de executar a seguinte query para atualizar o ODBC schema do Connect Bridge para que reflita o schema SharePoint. Assim, a nossa nova "tabela" fica visível para o cliente ODBC.

EXEC SP_UPDATE_SCHEMA;

Neste ponto, podemos inserir uma entrada de contacto na nossa lista de contactos.

INSERT INTO MyContacts (FirstName, LastName) VALUES ('Ana', 'Neto');

Deverá agora poder ver a nossa entrada e a nossa nova lista do SharePoint entrando no SharePoint.

Podemos selecionar a entrada que acabamos de criar, executando a seguinte consulta.

SELECT FirstName,LastName FROM MyContacts

Upload e download de documentos compartilhados

Para carregar um documento partilhado, utilizaremos a lista existente SharePoint "Documentos" e o "Procedimento Armazenado" SP_INSERT_SHAREDDOCUMENT. Os parâmetros necessários são:

- Nome da tabela de documentos compartilhados

- Nome do ficheiro

- Folder (caminho relativo, no servidor)

- tipo MIME

- Dados para o arquivo

Podemos inserir o documento executando a seguinte declaração:

EXEC SP_INSERT_SHAREDDOCUMENT
    'Documents',
    'hello2.txt',
    '/Shared Documents/NewFolder',
    'text/plain',
    'SGVsbG8gV29ybGQ=';

Se você quiser verificar a presença da pasta com antecedência, você pode executar a declaração:

EXEC SP_ENSURE_FOLDER_PATH
    'Documents', 
    '/NewFolder';

Depois de executar o SP_INSERT_SHAREDDOCUMENT podemos verificar a presença do documento na tabela "Documentos", executando a declaração:

SELECT Id,Name FROM Documents;

Também podemos baixar o conteúdo binário de um determinado documento de uma determinada biblioteca de documentos, executando a declaração:

EXEC SP_SAVE_SHAREDDOCUMENT_BY_ID 'Documents', 2; 

Chegado a este ponto você pode verificar a existência do documento partilhado entrando no SharePoint.

Restrições

Até agora, vimos como utilizar a ferramenta Connect Bridge, mas usámos apenas sistemas operativos Windows, porque não existe uma biblioteca cliente ODBC Linux disponível (e não temos a certeza se isso é sequer possível). Portanto, certifique-se de usar estes scripts Python numa máquina Windows.

Conclusão

Vimos como aceder a dados do SharePoint em Python de forma fácil usando a plataforma de integração do Connect Bridge. Mas o que o que você viu neste artigo é possível também com o Microsoft Dynamics CRM e o Microsoft Exchange! Sim, com o Connect Bridge é possível e pode ser feito de forma semelhante.

A quem posso dirigir-me para fazer perguntas?

Ana Neto

“O meu nome é Ana Netoe sou consultora técnica na Connecting Software. Sou Engenheira Informática desde 1997 e adoro todas as possibilidades de usar o Connect Bridge para desenvolver software de integração.

Se você tiver alguma pergunta sobre isso, por favor deixe uma resposta abaixo"!

Comments 1

  1. Avatar para o tempo de trabalho

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

For security, use of Google's reCAPTCHA service is required which is subject to the Google Privacy Policy and Terms of Use.

I agree to these terms.