"Вы когда-нибудь задавались вопросом, как получить доступ к Microsoft SharePoint в ваших сценариях Python?
В этом учебнике так и написано:
вы сможете сделать это простым способом, используя инструмент под названием Connect Bridge".
Введение
В этой статье описывается, как сделать Питон подключается к 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
Спасибо за четкое объяснение!