Bài viết này mô tả cách làm cho Python kết nối với SharePoint, tức là cách truy cập dữ liệu của hệ thống Microsoft SharePoint [2010, 2013 hoặc 2019] từ bên trong tập lệnh ngôn ngữ Python [sử dụng phiên bản 3. 7]. Việc truyền dữ liệu được thực hiện thông qua lớp ODBC. Chúng tôi đã đạt được điều này trong Python bằng cách sử dụng phiên bản mô-đun pyodbc. 4. 0. 26
Điều quan trọng cần lưu ý là trong bài viết này, chúng tôi sử dụng một sản phẩm thương mại có tên là Connect Bridge. Trên thực tế, đây là điều làm cho việc tích hợp Python / SharePoint trở nên khả thi, bằng cách cho phép giao tiếp dữ liệu theo cách mà bạn chắc chắn rằng mình không làm rối tung phía SharePoint [và, hãy tin tôi, điều này RẤT quan trọng]. Bạn có thể dùng thử miễn phí Connect Bridge, vì vậy bạn có thể tự mình thử tất cả những thứ này
"Cây cầu kết nối" này là gì?
tôi rất vui vì bạn đã hỏi. Connect Bridge là một nền tảng tích hợp được phát triển bởi Connecting Software cho phép bạn kết nối bất kỳ phần mềm nào thông qua trình điều khiển ODBC, trình điều khiển JDBC hoặc Dịch vụ web. Tổng quan chung về kiến trúc của công cụ nằm trên sơ đồ kịch bản máy khách-máy chủ này
Kiến trúc nền tảng tích hợp Connect Bridge
Như bạn có thể thấy trên sơ đồ kiến trúc, công cụ này có thể được sử dụng để truy cập không chỉ dữ liệu Microsoft SharePoint từ bên trong tập lệnh Python của bạn mà bạn còn có thể lấy/đặt dữ liệu từ/đến Microsoft Exchange và Microsoft Dynamics CRM cùng nhiều công cụ khác
Mục đích - lấy dữ liệu SharePoint bằng Python
Mục đích công việc của chúng tôi là tạo một tập lệnh Python cho phép chúng tôi nói chuyện với SharePoint qua Connect Bridge
Chúng tôi sử dụng SharePoint, nhưng có thể sử dụng logic tương tự để kết nối với Microsoft Exchange hoặc CRM như Salesforce hoặc Dynamics
Bắt đầu
Bây giờ hãy bắt đầu hướng dẫn này. Mục tiêu của chúng tôi là tạo một tập lệnh Python đơn giản truy cập phiên bản SharePoint. Chúng tôi cho rằng phiên bản SharePoint đã tồn tại [đảm bảo bạn có sẵn thông tin đăng nhập của mình]. Đây là những bước đơn giản bạn cần làm theo
1. Yêu cầu dùng thử miễn phí và cài đặt Connect Bridge
2. Cài đặt phiên bản Python cho Windows. 3. 7+. Xin lưu ý rằng để viết, chạy và gỡ lỗi tập lệnh của tôi dễ dàng hơn, chúng tôi đã sử dụng Liclipse 5. 2. 4 với plugin pydev, nhưng tất nhiên đây là tùy chọn. Bạn có thể sử dụng trình chỉnh sửa bạn chọn.
3. Cài đặt mô-đun pyodbc 4. 0. 26+
4. Chạy Connect Bridge Management Studio và
4. 1. Thêm tài khoản cho SharePoint [Accounts - Thêm tài khoản]. Đây là nơi bạn sẽ cần những thông tin đăng nhập mà chúng tôi đã đề cập trước đó
4. 2. Mở tùy chọn Truy vấn mới và sau đó là Trình duyệt kết nối. Tìm SharePoint Connector và mở nó cho đến khi bạn thấy DefaultConnection. Nhấp chuột phải vào nó và chọn Nhận chuỗi kết nối. Sau đó sao chép chuỗi kết nối ODBC. Bạn sẽ cần nó để chuyển nó vào tập lệnh
4. 3. Sử dụng tùy chọn Truy vấn mới để kiểm tra một truy vấn sẽ truy cập những gì bạn cần trong SharePoint. Chúng tôi sẽ thực hiện một truy vấn ví dụ ở đây, nhưng đây là nơi bạn nên nhập nội dung mà bạn đang tìm kiếm trong SharePoint. Khi bạn đã nhấp vào Truy vấn mới, hãy mở Trình duyệt kết nối. Tìm SharePoint Connector và mở nó cho đến khi bạn thấy tùy chọn Tables. Bạn sẽ thấy rằng lược đồ chứa một “bảng” được gọi là Site_Pages để chúng tôi có thể xây dựng truy vấn của mình dưới dạng
CHỌN UniqueId, ContentType, Created, Modified, ContentVersion TỪ Site_Pages GIỚI HẠN 10;
để chọn 10 mục đầu tiên từ danh sách Trang web của SharePoint. Điều quan trọng cần lưu ý là mặc dù có vẻ như chúng ta đang sử dụng cơ sở dữ liệu trực tiếp, nhưng thực tế không phải vậy
Connect Bridge đang truy cập API và sau đó trình bày nó như thể nó là một cơ sở dữ liệu. Khi bạn có truy vấn của mình, hãy sao chép nó, vì bạn cũng sẽ cần nó để chuyển nó vào tập lệnh
Bắt tay vào viết kịch bản
Cốt lõi và đồng thời là tệp duy nhất trong giải pháp của chúng tôi là CBQuery. py. Mã nguồn đầy đủ ở bên dưới. Vui lòng tập trung vào các dòng 70-92 mô tả giải pháp cốt lõi. Dưới đây là mô tả đầy đủ về cách thức hoạt động của tập lệnh này
#!/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 //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[]]
Đây là những gì kịch bản của chúng tôi đang làm
• Các dòng 71-80 tập trung vào việc lấy các biến connstr và truy vấn từ các đối số dòng lệnh đầu vào. Đối với điều này, chúng tôi đã sử dụng mẫu tập lệnh argparse của pydev để giúp cuộc sống của tôi dễ dàng hơn
• Biến connstr giữ chuỗi kết nối ODBC mà chúng ta chuyển vào mô-đun pyodbc để tạo kết nối ODBC [được lưu trữ trong biến conn]
• ở bước tiếp theo, chúng ta mở một con trỏ cơ sở dữ liệu bằng cách sử dụng kết nối được lưu trữ trong conn
• Có kết nối được lưu trữ trong conn, chúng tôi mở con trỏ cơ sở dữ liệu bằng conn
• Chúng tôi thực hiện truy vấn SQL [đây là truy vấn được truyền qua tham số dòng lệnh có tên là truy vấn]
• Cuối cùng, chúng ta sử dụng vòng lặp while để đọc kết quả từ từng hàng con trỏ. Khi con trỏ. fetchone trả về Không, chúng tôi phá vỡ vòng lặp
• Nếu một ngoại lệ xảy ra trong quá trình tìm nạp ODBC, chúng tôi cũng ngắt vòng lặp và in vấn đề ra đầu ra
• Nếu phương thức tìm nạp thành công và trả về một hàng dữ liệu, chúng tôi sẽ in hàng dữ liệu thô ra đầu ra. Đây là lựa chọn của chúng tôi cho bản demo này, nhưng xin lưu ý rằng đây có thể là bất kỳ loại đầu ra nào…chúng tôi có thể định dạng dưới dạng xml hoặc json, csv… hoặc bất kỳ loại định dạng trao đổi dữ liệu nào khác. Chúng tôi cũng có thể chỉ cần sử dụng đối tượng hàng dữ liệu thô để có thêm mã để thực hiện các tác vụ tùy chỉnh
Chạy CBQuery. tập lệnh py
Chúng tôi biết rằng CBQuery của chúng tôi. py chấp nhận hai đối số dòng lệnh vị trí. connstr và truy vấn
Chúng tôi cần sao chép những thứ này từ Connect Bridge Management Studio như đã giải thích ở trên [điểm 4]
Chúng tôi có thể tạo danh sách liên hệ SharePoint và viết một mục không?
Bây giờ, giả sử chúng ta muốn tạo một danh sách liên hệ trong SharePoint và tạo một liên hệ trong danh sách đó. Về cơ bản, chúng tôi cần tuân theo quy trình tương tự nhưng thay đổi truy vấn để sử dụng "Quy trình được lưu trữ". Trên thực tế, "Quy trình được lưu trữ" này sẽ truy cập SharePoint thông qua API, nhưng nó đang nhận dữ liệu vào SharePoint mà bạn đã chỉ định. Đây là truy vấn mà chúng ta cần chạy
EXEC SP_CREATE_TABLE 'MyContacts', 'This table was created using Connect Bridge', true, 'Contacts';
Truy vấn tạo một danh sách SharePoint mới [Danh bạ của tôi], với một mô tả sẽ hiển thị trong thanh khởi động nhanh của trang SharePoint
Bây giờ chúng ta cần gọi truy vấn sau để cập nhật phản ánh lược đồ ODBC của Connect Bridge của lược đồ SharePoint. Vì vậy, “bảng” mới của chúng tôi hiển thị với ứng dụng khách ODBC
EXEC SP_UPDATE_SCHEMA;
Chúng tôi có thể chèn một mục liên hệ vào danh sách liên hệ của mình tại thời điểm này
INSERT INTO MyContacts [FirstName, LastName] VALUES ['Ana', 'Neto'];
Giờ đây, bạn có thể xem mục nhập và danh sách SharePoint mới của chúng tôi trong Giao diện người dùng SharePoint
Chúng tôi có thể chọn mục chúng tôi vừa tạo bằng cách chạy truy vấn sau
SELECT FirstName,LastName FROM MyContacts
Tải lên và tải xuống các tài liệu được chia sẻ
Để tải lên tài liệu được chia sẻ, chúng tôi sẽ sử dụng danh sách SharePoint hiện có “Tài liệu” và "Quy trình được lưu trữ" SP_INSERT_SHAREDDOCUMENT. Các tham số nó lấy là
• Tên bảng tài liệu được chia sẻ
• Tên tệp
• Thư mục [đường dẫn tương đối, trên máy chủ]
• Kiểu MIME
• Dữ liệu cho tập tin
Chúng ta có thể chèn tài liệu bằng cách chạy câu lệnh sau
EXEC SP_INSERT_SHAREDDOCUMENT
'Documents',
'hello2.txt',
'/Shared Documents/NewFolder',
'text/plain',
'SGVsbG8gV29ybGQ=';
Nếu bạn muốn kiểm tra trước sự hiện diện của thư mục, bạn có thể chạy câu lệnh
EXEC SP_ENSURE_FOLDER_PATH
'Documents',
'/NewFolder';
Sau khi chạy SP_INSERT_SHAREDDOCUMENT, chúng ta có thể kiểm tra sự hiện diện của tài liệu trong bảng “Documents” bằng cách chạy câu lệnh
SELECT Id,Name FROM Documents;
Chúng tôi cũng có thể tải xuống nội dung nhị phân của một tài liệu cụ thể từ một thư viện tài liệu cụ thể bằng cách chạy câu lệnh
________số 8_______
Tại thời điểm này, bạn có thể kiểm tra sự tồn tại của tài liệu được chia sẻ trong giao diện người dùng SharePoint
Hạn chế
Cho đến nay, chúng tôi chỉ có thể sử dụng công cụ Connect Bridge từ các hệ điều hành Windows, vì không có thư viện máy khách ODBC Linux nào [và chúng tôi không chắc liệu điều đó có khả thi hay không]. Vì vậy, hãy chắc chắn chơi với các tập lệnh Python của bạn trên máy Windows
Phần kết luận
Chúng ta đã thấy cách truy cập dữ liệu SharePoint trong Python có thể dễ dàng thực hiện bằng nền tảng tích hợp Connect Bridge. Bây giờ hãy tưởng tượng rằng những gì bạn đã thấy trong bài viết này cũng có thể thực hiện được với Microsoft Dynamics CRM và Microsoft Exchange. Vâng, với Connect Bridge thì điều này hoàn toàn có thể và cách thực hiện cũng tương tự
Tôi có thể liên hệ với ai để đặt câu hỏi?
“Tên tôi là Ana Neto, và tôi là cố vấn kỹ thuật cho Phần mềm kết nối. Tôi là kỹ sư phần mềm từ năm 1997 và tôi thích thế giới của những khả năng kết nối Bridge mở ra