Получение данных SharePoint с помощью скриптов python с использованием connect bridge

Получение данных SharePoint в скриптах Python - учебник, использующий Connect Bridge.

Ana NetoConnectors, Technical 1 Comment

"Вы когда-нибудь задавались вопросом, как получить доступ к Microsoft SharePoint в ваших сценариях Python?

В этом учебнике так и написано:
вы сможете сделать это простым способом, используя инструмент под названием Connect Bridge".

Последнее обновление: 10 января 2022 года

Введение

В этой статье описывается, как сделать Питон подключается к SharePointто есть, как получить доступ к данным систем Microsoft SharePoint (2010, 2013 или 2019) с помощью языковых скриптов Python (используя версию 3.7). Передача данных осуществляется через уровень ODBC. Мы достигли этого на Python с помощью скрипта модуль пиодбк Вер. 4.0.26.

Важно отметить, что в этой статье мы используем коммерческий продукт под названием Connect Bridge. На самом деле, это то, что делает возможным интеграцию Python / SharePoint, позволяя передачу данных таким образом, что вы уверены, что не испортите сторону SharePoint (и, поверьте мне, это ОЧЕНЬ важно). Вы можете получить бесплатную пробную версию для Connect Bridge, так что вы можете попробовать все это для себя.

Что это за "Connect Bridge"?

Я рад, что вы спросили! Connect Bridge это интеграционная платформа, разработанная компанией Connecting Software, которая позволяет подключать любое программное обеспечение через драйверы ODBC, JDBC или веб-сервисы. Общий обзор архитектуры инструмента представлен на этой диаграмме сценария клиент-сервер.

Подключайтесь

Connect Bridge архитектура платформы интеграции

Как видно на архитектурной схеме, этот инструмент можно использовать не только для доступа к данным Microsoft SharePoint из вашего скрипта на Python, но и для захвата/вывода данных из/в Microsoft Exchange и Microsoft Dynamics CRM среди многих других.

Цель - получение данных SharePoint с помощью Python

Целью нашей работы было создание скрипта на языке Python, который позволил бы нам общаться с SharePoint через Connect Bridge.

Мы используем SharePoint, но можно использовать аналогичную логику для подключения к Microsoft Exchange или в CRM, например Salesforce или Dynamics.

Начало...

Теперь давайте начнем это руководство! Наша цель - создать простой сценарий Python, который получит доступ к экземпляру SharePoint. Мы предполагаем, что экземпляр SharePoint уже существует (убедитесь, что у вас под рукой есть учетные данные для входа). Вот простые шаги, которые вам необходимо выполнить:

1. Запрос a бесплатная пробная версия и установить Connect Bridge
2. Установить Питон для Windows ver. 3.7+. Пожалуйста, обратите внимание, что для облегчения написания, запуска и отладки моего скрипта мы использовали Лицензия 5.2.4 с плагином пидева, но это, конечно, необязательно. Вы можете использовать редактор по вашему выбору.
3. Установить модуль пиодбк 4.0.26+
4. Запустите Connect Bridge студию управления и
4.1. Добавьте учетную запись для SharePoint (Учетные записи - Добавить учетную запись). Здесь вам понадобятся учетные данные, о которых мы упоминали ранее.
4.2. Откройте Новый запрос опцию, а затем Браузер соединений. Найдите Разъем SharePoint и открывайте его, пока не увидите DefaultConnection. Щелкните на нем правой кнопкой мыши и выберите Получить строку подключения. Затем скопируйте строку подключения ODBC. Она понадобится для передачи сценарию.
4.3. Используйте опцию "Новый запрос" для проверки запроса, который позволит получить доступ к тому, что вам нужно в SharePoint. Мы приведем здесь пример запроса, но именно здесь вы должны указать, что именно вы ищете в SharePoint. После того как вы нажмете кнопку Новый запрос, откройте Браузер соединений. Найдите Разъем SharePoint и открывайте его, пока не увидите Таблицы опция. Вы увидите, что схема содержит "таблицу" под названием Site_Pages, поэтому мы можем построить наш запрос следующим образом

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

для выбора первых 10 записей из SharePoint Страницы сайта список. Важно отметить, что хотя это выглядит так, как будто мы используем базу данных напрямую, это не так.

Connect Bridge получает доступ к API и затем представляет его так, как будто это база данных. Как только вы получите свой запрос, скопируйте его, поскольку он также понадобится вам для передачи скрипту.

Руки на сценарии!

Основным и в то же время единственным файлом нашего решения является CBQuery.py. Полный исходный код приведен ниже. Пожалуйста, сосредоточьтесь на строках 70-92, которые изображают ядро решения. Полное описание того, как работает этот скрипт, приведено ниже.

#!/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()) 

Вот что делает наш сценарий:

- В строках 71-80 основное внимание уделяется получению переменных connstr и запросу из аргументов командной строки. Для этого мы использовали шаблон скрипта argparse от pydev, чтобы сделать мою жизнь проще.
- В переменной connstr хранится строка ODBC соединения, которую мы передаем в модуль pyodbc для создания ODBC соединения (хранится в переменной conn).
- в качестве следующего шага мы открываем курсор базы данных, используя соединение, хранящееся в подключении.
- Имея соединение, хранящееся в коннекторе, мы открываем курсор базы данных с помощью коннектора.
- Мы выполняем SQL-запрос (это запрос, который был передан через параметр командной строки с именем запроса)
- Наконец, мы используем некоторый цикл для считывания результатов с курсора ряд за рядом. Когда курсор.fetchone возвращает None, мы прерываем цикл.
- Если во время извлечения ODBC происходит исключение, мы также прерываем цикл и выводим на печать проблему.
- Если метод fetchone работает успешно и возвращает строку данных, мы распечатываем строку исходных данных, как она есть, на выходе. Это был наш выбор для этой демонстрации, но, пожалуйста, обратите внимание, что это может быть любой вид вывода... мы можем отформатировать как xml или json, csv... или любой другой вид формата обмена данными. Мы также можем просто использовать объект необработанной строки данных, чтобы быть в дальнейшем в коде для выполнения пользовательских задач.

Запуск сценария CBQuery.py

Мы знаем, что наш CBQuery.py принимает два аргумента позиционной командной строки: connstr и запрос.

Нам необходимо скопировать их из студии управления Connect Bridge, как описано выше (пункт 4).

Можем ли мы создать список контактов SharePoint и написать запись?

Теперь предположим, что мы хотим создать список контактов в SharePoint и создать контакт в этом списке. В принципе, нам нужно выполнить тот же процесс, но изменить запрос, чтобы использовать "хранимую процедуру". Опять же, эта "Хранимая процедура" будет фактически обращаться к SharePoint через API, но она получает данные в указанную вами SharePoint. Вот запрос, который нам нужно выполнить:

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

Запрос создает новый список SharePoint (MyContacts) с описанием, которое будет отображаться в панели быстрого запуска на странице SharePoint.

Теперь нам нужно позвонить по следующему запросу, чтобы обновить отражение схемы Connect Bridge ODBC схемы SharePoint. Итак, наша новая "таблица" становится видимой клиенту ODBC.

EXEC SP_UPDATE_SCHEMA;

На этом этапе мы можем вставить запись о контакте в наш список контактов.

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

Теперь вы сможете увидеть нашу запись и наш новый список SharePoint в интерфейсе SharePoint.

Мы можем выбрать только что созданную запись, выполнив следующий запрос.

SELECT FirstName,LastName FROM MyContacts

Загрузка и скачивание общих документов

Для загрузки общего документа мы будем использовать существующий список SharePoint "Документы" и "Хранимую процедуру" SP_INSERT_SHAREDDOCUMENT. Она принимает следующие параметры:

- Имя таблицы общих документов

- Имя файла

- Папка (относительный путь, на сервере)

- MIME-тип

- Данные для файла

Мы можем вставить документ, запустив следующее заявление:

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

Если вы хотите предварительно проверить наличие папки, вы можете выполнить оператор:

EXEC SP_ENSURE_FOLDER_PATH
    'Documents', 
    '/NewFolder';

После выполнения SP_INSERT_SHAREDDOCUMENT мы можем проверить наличие документа в таблице "Документы", выполнив оператор:

SELECT Id,Name FROM Documents;

Мы также можем загрузить бинарный констант конкретного документа из определенной библиотеки документов, запустив оператор:

EXEC SP_SAVE_SHAREDDOCUMENT_BY_ID 'Documents', 2; 

На данном этапе вы можете проверить существование общего документа в SharePoint UI

Ограничения

До сих пор мы могли использовать инструмент Connect Bridge только из операционных систем Windows, потому что клиентская библиотека ODBC Linux отсутствует (и мы не уверены, что это вообще возможно). Поэтому не забудьте поиграть со своими Python-скриптами на Windows-машине.

Заключение

Мы видели, как можно легко получить доступ к данным SharePoint на Python с помощью интеграционной платформы Connect Bridge. Теперь представьте себе, что то, что вы видели в этой статье, возможно и с Microsoft Dynamics CRM и Microsoft Exchange! Да, с Connect Bridge это возможно, и способ сделать это похож.

К кому я могу обратиться за вопросами?

Ана Нето

"Меня зовут Ana Neto, я технический советник для Connecting Software. Я работаю инженером-разработчиком программного обеспечения с 1997 года, и мне нравится мир возможностей, которые соединяют Bridge opens..

Если у Вас возникли вопросы по этому поводу, пожалуйста, оставьте ответ ниже".

Comments 1

  1. Аватар для рабочего времени

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

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.