PythonスクリプトでSharePointデータを取得する - Connect Bridgeを使ったチュートリアル

PythonスクリプトでSharePointデータを取得する - Connect Bridgeを使ったチュートリアル

アナ・ネト コネクタ, 一般的な, 技術的なこと 1のコメント

"Have you ever wondered how to access Microsoft SharePoint in your Python scripts?

このチュートリアルでは、それだけを扱っています。
you will be able to do it in an easy way by using a tool called Connect Bridge."

Last updated: January, 10, 2022

序章

この記事では SharePointにPython接続つまり、Python言語スクリプト(バージョン3.7を使用)からMicrosoft SharePointシステム(2010年、2013年、2019年)のデータにアクセスする方法です。データ転送はODBCレイヤーを介して行われます。を使用してPythonでこれを実現しています。 パイodbcモジュール ver.4.0.26.

ここで注意したいのは、この記事ではConnect Bridgeという市販品を使用していることです。これは実は、SharePoint側をいじっていないことを確信した上でデータ通信を可能にすることで、Python / SharePointの連携を可能にしているのです(そして、信じてください、これは非常に重要です)。あなたは以下のことができます。 無料体験を受ける Connect Bridge用なので、全部自分で試してみてください。

What is this "Connect Bridge"?

I'm glad you asked! Connect Bridge is a is an integration platform developed by Connecting Software that allows you to connect any software through ODBC drivers, JDBC drivers or Web Services. The general overview of the architecture of the tool is on this client-server scenario diagram.

Connect Bridge プラフォーム図
Connect Bridge 統合プラットフォームアーキテクチャ

アーキテクチャ図にあるように、このツールはPythonスクリプト内からMicrosoft SharePointのデータにアクセスできるだけでなく、Microsoft ExchangeやMicrosoft Dynamics CRMとの間でデータを取得/出力することもできます。

The aim - getting SharePoint data using Python

The aim of our work was to create a Python script that would allow us to talk to SharePoint via Connect Bridge.

We use SharePoint, but it is possible to use similar logic to connect to マイクロソフト Exchange or to a CRM like Salesforce or Dynamics.

Getting started...

Now let's start this tutorial! Our goal is to create a simple Python script that accesses a SharePoint instance. We assume the SharePoint instance already exists (make sure you have your login credentials at hand). These are simple steps you need to follow:

1.リクエスト フリートライアル とConnect Bridgeをインストールします。
2. インストール Windows用のPython ver. 3.7+. Please note that to make writing, running & debugging my script easier we have used リクリップス 5.2.4ではpydevプラグインを使用していますが、これはもちろん任意です。お好みのエディタを使ってください。
3. インストール パイodbcモジュール 4.0.26+
4. Connect Bridge Management Studioを実行し
4.1. Add an account for SharePoint (Accounts - Add account). This is where you will need those credentials we mentioned earlier.
4.2. Open the New Query option and then the Connection Browser. Find the SharePoint Connector and open it until you see the DefaultConnection. Right-click on it and choose Get Connection string. Then copy the ODBC connection string. You will need it to pass it on to the script.
4.3. Use the New Query option to test out a query that will access what you need in SharePoint. We will do an example query here, but this is where you should put in what it is that you are looking for in SharePoint. Once you have clicked New Query, open the Connection Browser. Find the SharePoint Connector and open it until you see the Tables option. You'll see that the schema contains a “table” called Site_Pages so we can construct our query as

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

to select the first 10 entries from SharePoint's Site Pages list. It is important to note that although it looks as if we are using a database directly, that is not the case.

Connect Bridge is accessing the API and then presenting it as if it was a database. Once you have your query, copy it, as you will also need it to pass it on to the script.

ハンズオンスクリプト!

The core and, at the same time, the only file in our solution is CBQuery.py. The full source code is below. Please focus on lines 70-92 which depict the core solution. A complete description of how this script works is below.

#!/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とqueryを取得することに焦点を当てています。このためにpydevのargparseスクリプトテンプレートを使いました。
- connstr変数は、ODBC接続を作成するためにpyodbcモジュールに渡すODBC接続文字列を保持します(conn変数に格納されます)。
- 次のステップでは、connに格納されている接続を使用してデータベースカーソルを開きます。
- 接続がconnに保存されているので、connを使ってデータベースカーソルを開きます。
- SQL クエリを実行します(これは query という名前のコマンドラインパラメータで渡されたクエリです)。
- 最後に、カーソルの結果を行ごとに読み込むためにwhileループを使用します。cursor.fetchoneがNoneを返すと、ループを中断します。
- ODBC フェッチ中に例外が発生した場合は、ループを解除して問題を出力します。
- fetchoneメソッドが成功してデータ行を返すと、生のデータ行をそのまま出力に出力します。このデモではこれを選択しましたが、これはどのような種類の出力でもよいことに注意してください。また、カスタムタスクを実行するためのコードに生データの行オブジェクトを使用することもできます。

CBQuery.pyスクリプトの実行

CBQuery.pyは2つの位置のコマンドライン引数、connstrとqueryを受け付けることがわかっています。

上記で説明したように、Connect Bridge Management Studioからコピーする必要があります(ポイント4)。

SharePointの連絡先リストを作成して、エントリーを書くことはできますか?

Let’s now suppose we want to create a contact list in SharePoint and create a contact on that list. We basically need to follow the same process but change the query to use a "Stored Procedure". Again this "Stored Procedure" will, in fact, be accessing SharePoint via the API, but it is getting the data into the SharePoint you specified. Here is the query that we need to run:

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

The query creates a new SharePoint list (MyContacts), with a description that will show in the quick launch bar of the SharePoint page.

ここで、SharePointスキーマのConnect Bridge ODBCスキーマ反映を更新するために、以下のクエリを呼び出す必要があります。これで、新しい "テーブル "がODBCクライアントに表示されます。

EXEC SP_UPDATE_SCHEMA;

We can insert a contact entry into our contact list at this point.

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

これで、SharePoint UIに当社のエントリと新しいSharePointリストが表示されるようになるはずです。

We can select the entry we just created by running the following query.

SELECT FirstName,LastName FROM MyContacts

Uploading & downloading of shared documents

For uploading a shared document, we will use the existing SharePoint list “Documents” and the "Stored Procedure" SP_INSERT_SHAREDDOCUMENT. The parameters it takes are:

• Shared documents table name

• Filename

• Folder (relative path, on the server)

• MIME type

• Data for the file

以下のステートメントを実行することで、ドキュメントを挿入することができます。

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

If you want to check the presence of the folder beforehand, you can run the statement:

EXEC SP_ENSURE_FOLDER_PATH
    'Documents', 
    '/NewFolder';

After running the SP_INSERT_SHAREDDOCUMENT we can check the presence of the document in the “Documents” table by running the statement:

SELECT Id,Name FROM Documents;

また、ステートメントを実行することで、特定のドキュメントライブラリから特定のドキュメントのバイナリコンタントをダウンロードすることもできます。

EXEC SP_SAVE_SHAREDDOCUMENT_BY_ID 'Documents', 2; 

この時点で、SharePoint UIで共有ドキュメントの存在を確認することができます。

制約

これまでのところ、ODBC Linuxクライアントライブラリがないため、Windows OSからしかConnect Bridgeツールを使うことができませんでした(それが可能かどうかもわかりません)。ですから、Windowsマシン上でPythonスクリプトを使って遊んでみてください。

結論

PythonでSharePointのデータにアクセスするには、Connect Bridgeの統合プラットフォームを使うと簡単にできることを見てきました。この記事で見てきたことが、Microsoft Dynamics CRM と Microsoft Exchange でも可能だと想像してみてください。はい、Connect Bridgeでも可能ですし、やり方も似ています。

質問がある場合は誰に連絡すればいいですか?

アナ・ネト

「私の名前はAna Netoで、Connecting Softwareのテクニカルアドバイザーをしています。私は 1997 年からソフトウェアエンジニアをしていますが、Bridge が開く可能性の世界が大好きです。

気になることがあれば、以下に返信を残してください!"

コメント 1

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です