NguyenDang95
Senior Member
Xin chào mọi người. Chúc mọi người cuối tuần vui vẻ.
Tiếp nối tinh thần của bài viết này: [Office VBA] Tương tác với SharePoint và giải quyết một số yêu cầu thường thấy của người dùng
Hôm nay mình xin chia sẻ với mọi người thư viện hoàn chỉnh SharePoint API được viết hoàn toàn bằng VBA. Nhìn chung thư viện này tuy có chút hơi hướng cá nhân (mình có chọn lọc, không thêm vào những phương thức mà VBA khó có thể thực hiện được, vd: nhận thông báo đẩy theo thời gian thực, v.v.), tuy nhiên phần trình bày vẫn tuân thủ tài liệu hướng dẫn của Microsoft.
Working with SharePoint sites in Microsoft Graph - Microsoft Graph v1.0 | Microsoft Learn
Về phần xác thực, thư viện này tiến hành xác thực OAuth2 với Permission là dạng Delegated. Để tìm hiểu thêm về cách thức triển khai như tạo tài khoản Azure, chọn tenant (single tenant hay multi-tenant), người dùng có thể tham khảo hai bài viết này:
Get access on behalf of a user
Microsoft Graph permissions reference
Ví dụ: Tạo một List mới trên SharePoint site
Giả sử người dùng có một trang (site) với URL là danghome.sharepoint.com/sites/CompanyNews và người dùng muốn tạo một List tên là Books với hai cột lần lượt là Title (mặc định có sẵn khi tạo List mới) và Author.
Tiến hành đọc tài liệu.
Đầu tiên, lấy mã Id của site cần tạo List.
Tiếp theo, tạo định dạng JSON theo hướng dẫn của tài liệu. Trong thư viện hỗ trợ tạo định dạng JSON thông qua các class module được tạo sẵn và với sự trợ giúp của thư viện JsonConverter của tác giả timhall: VBA-JSON.
Kết quả sau khi chạy macro: Một List mới tên là Books được tạo trên site, với hai cột Title và Author.
Lưu ý:

Mọi người có bàn luận gì về SharePoint API nói chung và việc sử dụng macro VBA tương tác với SharePoint nói riêng, xin vui lòng để lại bình luận dưới bài viết này.
Xin cảm ơn.
Tiếp nối tinh thần của bài viết này: [Office VBA] Tương tác với SharePoint và giải quyết một số yêu cầu thường thấy của người dùng
Hôm nay mình xin chia sẻ với mọi người thư viện hoàn chỉnh SharePoint API được viết hoàn toàn bằng VBA. Nhìn chung thư viện này tuy có chút hơi hướng cá nhân (mình có chọn lọc, không thêm vào những phương thức mà VBA khó có thể thực hiện được, vd: nhận thông báo đẩy theo thời gian thực, v.v.), tuy nhiên phần trình bày vẫn tuân thủ tài liệu hướng dẫn của Microsoft.
Working with SharePoint sites in Microsoft Graph - Microsoft Graph v1.0 | Microsoft Learn
Về phần xác thực, thư viện này tiến hành xác thực OAuth2 với Permission là dạng Delegated. Để tìm hiểu thêm về cách thức triển khai như tạo tài khoản Azure, chọn tenant (single tenant hay multi-tenant), người dùng có thể tham khảo hai bài viết này:
Get access on behalf of a user
Microsoft Graph permissions reference
Ví dụ: Tạo một List mới trên SharePoint site
Giả sử người dùng có một trang (site) với URL là danghome.sharepoint.com/sites/CompanyNews và người dùng muốn tạo một List tên là Books với hai cột lần lượt là Title (mặc định có sẵn khi tạo List mới) và Author.
Tiến hành đọc tài liệu.
Đầu tiên, lấy mã Id của site cần tạo List.
Tiếp theo, tạo định dạng JSON theo hướng dẫn của tài liệu. Trong thư viện hỗ trợ tạo định dạng JSON thông qua các class module được tạo sẵn và với sự trợ giúp của thư viện JsonConverter của tác giả timhall: VBA-JSON.
Code:
Option Explicit
Private Function GetSession() As MicrosoftGraphOAuth2
Dim objMicrosoftGraphOAuth2 As MicrosoftGraphOAuth2
Set objMicrosoftGraphOAuth2 = New MicrosoftGraphOAuth2
With objMicrosoftGraphOAuth2
.ApplicationName = "SharePoint API"
.ClientId = "client-id"
.Scope = Array("files.readwrite.all", "sites.readwrite.all", "sites.fullControl.all")
.Tenant = Common
.AuthorizeOAuth2
End With
Set GetSession = objMicrosoftGraphOAuth2
End Function
Private Sub CreateList()
Dim objMicrosoftGraphOAuth2 As MicrosoftGraphOAuth2
Set objMicrosoftGraphOAuth2 = GetSession
Dim strSiteId As String
strSiteId = objMicrosoftGraphOAuth2.SiteResource.GetSiteByServerRelativePath("danghome.sharepoint.com", "sites/CompanyNews", "$select=id").Id
Dim objList As List
Set objList = New List
objList.DisplayName = "Books"
Dim objTitleCol As ColumnDefinition, objAuthorCol As ColumnDefinition
Dim objTextColumn As TextColumn
Set objTextColumn = New TextColumn
Set objTitleCol = New ColumnDefinition
With objTitleCol
.Name = "Title"
Set .Text = objTextColumn
End With
objList.Columns.Add objTitleCol.ToJson
Set objAuthorCol = New ColumnDefinition
With objAuthorCol
.Name = "Author"
Set .Text = objTextColumn
End With
objList.Columns.Add objAuthorCol.ToJson
Dim objNewList As List
Set objNewList = objMicrosoftGraphOAuth2.ListResource.CreateList(strSiteId, objList)
End Sub
Kết quả sau khi chạy macro: Một List mới tên là Books được tạo trên site, với hai cột Title và Author.
Lưu ý:
- Thư viện đính kèm theo bài viết này có thể chứa lỗi, mong mọi người xem qua và góp ý giúp mình.
- Mặc dù trọng tâm là SharePoint, tuy vậy mình có thêm vào thư viện một số phương thức giúp tương tác với OneDrive, cho nên mọi người cũng có thể viết macro tương tác với OneDrive bằng chính thư viện này cũng được.
- Mọi người nên tạo tài khoản Microsoft 365 E5 Developer để chạy thử code trước khi đưa vào sử dụng thực tế.

Mọi người có bàn luận gì về SharePoint API nói chung và việc sử dụng macro VBA tương tác với SharePoint nói riêng, xin vui lòng để lại bình luận dưới bài viết này.
Xin cảm ơn.
Attachments
Last edited: