Рубрики
Без рубрики

Требуется: Данные Microsoft Dynamics в скриптах Python

В Microsoft Dynamics есть много интересных вещей, которые можно использовать для анализа данных или проектов визуализации данных в крупных организациях. Так как же вы получите его в свои руки, используя скрипт Python? Хорошие новости, это не так уж сложно!

Автор оригинала: Ana Neto.

Я считаю, что большинство разработчиков Python считают программное обеспечение Microsoft необходимым злом. Когда дело доходит до Microsoft Dynamics, причина, которая заставит вас захотеть подключиться из Python, заключается в богатстве информации, которую компании имеют в Dynamics.

Динамика сама по себе огромна (от старой CRM, которая теперь называется Dynamics 365 Customer Engagement, до ERP-части, которая теперь называется Dynamics 365 for Finance, и это только верхушка айсберга).

Короче говоря, в динамике есть много интересных вещей, которые вы можете использовать для анализа данных или проектов визуализации данных, которые происходят в крупных организациях (компаниях, университетах или других). Так как же вы получите его в свои руки, используя скрипт Python? Это не так уж сложно.

Технический стек

Мы рассмотрим, как получить доступ к данным Microsoft Dynamics (Dynamics CRM 2011, 2013, 2015, 2016, Dynamics 365 Customer Engagement, включая Dynamics 365 Sales, Dynamics 365 Customer Service и Dynamics 365 Field Service) из скрипта языка Python (мы будем использовать версию 3.7). Мы будем осуществлять передачу данных через слой ODBC, используя модуль pyodbc версии 4.0.26.

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

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

CB с динамикой.PNG

Как вы можете видеть на диаграмме, вы можете использовать этот инструмент для доступа не только к данным Microsoft Dynamics, но и ко многим другим программам. К ним относятся Microsoft SharePoint и Microsoft Exchange , а также программное обеспечение, не относящееся к Microsoft, например Salesforce . Доступ к данным может быть двунаправленным (чтение и запись).

Динамика в скрипте Python

Теперь, наконец, пришло время начать наш сценарий! Мы создадим скрипт на Python, который будет получать данные из Dynamics самым простым способом. Надеюсь, это может стать хорошей отправной точкой для вашего собственного проекта в этой области.

Предположим, что экземпляр Dynamics уже существует. Вам понадобятся ваши учетные данные для входа в систему Dynamics, поэтому имейте их под рукой.

Вот пошаговая процедура, которой вам нужно следовать:

  1. Запросите бесплатную пробную версию , а затем установите Connect Bridge
  2. Установите Python для Windows версия 3.7+ вместе с pyodbc модуль 4.0.26+
  3. Запустите Connect Bridge Management Studio и в нем: 3.1 Используя учетные данные, о которых я упоминал ранее, добавьте учетную запись для Dynamics в Connect Bridge (Accounts – Добавить учетную запись). Вам нужно заполнить свойство ServerURL адресом службы организации. Этот адрес можно получить в пользовательском интерфейсе Dynamics, перейдя в Настройки > Настройки > Ресурсы разработчика > Конечные точки службы > Служба организации. Проверьте соединение, прежде чем продолжить. 3.2. Откройте опцию New Query , а затем Connection Browser . Найдите коннектор Dynamics connector и разверните его, пока не увидите Default Connection . Щелкните его правой кнопкой мыши и выберите опцию Get Connection string . Скопируйте строку подключения ODBC, как вы передадите ее скрипту далее. 3.3. Начните с запуска хранимой процедуры SP_UPDATE_SCHEMA. Это значительно увеличит количество видимых таблиц, которые вы можете протестировать в своих запросах. Просто выберите Query > New Query и запустите EXEC SP_

Пусть начнутся сценарии

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

#!/usr/local/bin/python3.7
# encoding: utf-8
'''
CBQuery -- query data from, write data to Dynamics
 
CBQuery is a script that allows you to run SQL queries via Connect Bridge ODBC driver
 
@author: Ana Neto 
 
@copyright: 2019 
 
@contact: ana@connecting-software.com
@deffield updated: 18.02.2020
'''
 
import sys
import os
import pyodbc
 
from argparse import ArgumentParser
from argparse import RawDescriptionHelpFormatter
 
__all__ = []
__version__ = 0.4
__date__ = '2020-02-18'
__updated__ = '2020-02-18'
 
DEBUG = 1
TESTRUN = 0
PROFILE = 0
 
class CLIError(Exception):
   '''Generic exception to raise and log 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 on %s.
 
 Licensed under the Apache License 2.0
 http://www.apache.org/licenses/LICENSE-2.0
 
 Distributed on an "AS IS" basis without warranty 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')
        
       # Get 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 the 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-76 используют шаблон скрипта argparse pydev для получения переменных connstr и query из ввода командной строки.
  • Переменный конденсатор используется для строки подключения ODBC, которую я затем передаю модулю pyodbc, который построит соединение ODBC (которое входит в переменную conn)
  • Следующий шаг-открытие курсора базы данных с использованием соединения, которое мы сохранили в соединении
  • Я запускаю запрос (это SQL-запрос, который я получил через параметр командной строки с именем query, я предлагаю использовать тот, который мы видели в обсуждении выше для начала)
  • Я циклически использую цикл while для чтения результатов из курсора строка за строкой. Когда курсор.fetchone возвращает None, я разрываю цикл
  • Я также разрываю цикл, если во время выборки ODBC возникает исключение. В этом случае я также печатаю проблему для вывода.
  • Если метод fetchone возвращает datarow (success!), я печатаю эту строку данных непосредственно на выходе. Естественно, я мог бы отформатировать его как JSON, XML, CSV или любой другой формат обмена данными, который я хотел. Кроме того, можно было бы использовать объект строки необработанных данных в дальнейшем коде для выполнения любых конкретных задач, которые мне нужны. При запуске скрипта имейте в виду, что CBQuery.py скрипт принимает два аргумента командной строки: connect и query. Вам нужно будет скопировать их из Connect Bridge Management Studio, как я объяснил в пунктах 3.2 и 3.4.

Ограничения

Клиентская библиотека ODBC Linux недоступна, поэтому, естественно, использование инструмента Connect Bridge ограничено машинами Windows.

Вывод

Мы видели, как можно быстро разработать скрипт Python, который обращается к динамическим данным с помощью платформы интеграции Connect Bridge. Вы также можете использовать Connect Bridge для доступа к другим программам Microsoft, таким как SharePoint или Exchange , или к различным видам программного обеспечения, таким как Salesforce или SAP.

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

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

Вы также можете Оставить ответ ниже, и я сделаю все возможное, чтобы помочь вам.

Вы также можете || Оставить ответ || ниже, и я сделаю все возможное, чтобы помочь вам.