開篇介紹
由於項目需要我們會從SharePoint 上讀取一些配置數據,同時也有可能執行一些回寫操作去更新SharePoint 的數據。之前沒有做過這樣的操作,有的也應該是通過 C# 編程去獲取或者寫入一些數據。查閱了一些相關的文章,自己也動手測試了一下如何在 SSIS Package 中訪問SharePoint List 並將數據寫入 SharePoint List。
兩個操作
- 讀取SharePoint List 的數據到數據庫
- 從數據庫中篩選一些數據然后插入到一個新的 SharePoint List 中
這些操作不涉及到任何SharePoint 能夠實現的功能,僅僅只是演示如何通過 SSIS 來完成這些操作, 也無關這個讀寫邏輯是否合理了。
實現過程
步驟一 – 安裝 SharePoint List Source and Destination
由於SSIS 是沒有SharePoint 操作的控件的,但是目前已經有比較成型的第三方工具可以使用。
到 CodePlex 中去下載這個控件 http://sqlsrvintegrationsrv.codeplex.com/releases/view/17652
我目前的測試環境是 VS 2008,我下載的是第一個,應該也能兼容到 VS 2010。如果是 2012 版本,應該可以使用第二個 2012 的 Beta 版本,其安裝和操作的過程大同小異。
下載之后安裝,然后打開 VS 2008,在項目中 Data Flow Source 工具欄或者其他工具攔點擊右鍵選擇 Choose Items 后就會出現這個界面。
如果是VS 2010 或者 VS 2012 有可能不需要我們手動的添加這兩個控件,也有可能連 SSIS Data Flow Items 可能都找不到。那么很有可能就是在安裝的同時,這兩個控件就已經自動的添加到 Data Flow 的工具箱了。
VS 2008 還是這樣來選擇一下,然后就能在工具箱看到這兩個控件了,一個是Source,一個是Target。
默認情況下它們會出現在 General 下面。
你可以按照分類把 SharePoint List Source 拖放到 Data Flow Sources 和 Data Flow Destinations 中。
這樣第一步配置和安裝的過程就算是完成了。
步驟二 – 讀取 SharePoint List 的數據到數據庫表
這里有一個List – Area Code,現在我們要把這個List 中的 Area Code,Region,Timezone Offset 還有 Description的內容讀取到數據庫中。
在設計 SSIS 的階段也可以根據數據源的數據來創建表,但是最好根據實際需求先創建好表,結構如下-
USE BIWork GO IF OBJECT_ID('dbo.Area_Code','U') IS NOT NULL DROP TABLE dbo.Area_Code GO CREATE TABLE dbo.Area_Code ( ACID INT PRIMARY KEY IDENTITY(1,1), AreaCode NVARCHAR(10) NOT NULL, Region NVARCHAR(10), TimeOffset NVARCHAR(10), Descript NTEXT )
創建 SSIS 項目和Package 包,並在 Control Flow 中添加一個Data Flow,命名為 Extract SharePoint List。
在這個Data Flow 中,添加 SharePoint List Source。
在編輯SharePoint List Source 之前先要創建一個 SharePoint Connection Manager。注意 – 不同的版本可能有一些區別,有的版本不需要 Connection Manager 沒有這一項。
在 Connection Manager 中 New Connection 選擇 SPCRED就可以了。
順便把數據庫的 Connection Manager 都創建好,創建完的結果應該是。
一個是 BIWORK 數據庫的連接,另外兩個都是SharePoint 的連接,后面都會用到。
下面就要對 SharePoint List Source 進行編輯。
在 SharePoint List Source 的Connection Manager 中選擇好剛創建的連接。
Component Properties 中 有幾個地方要注意。
由於在 SharePoint 中訪問List 的URL 是http://biwork/Lists/Area%20Code/AllItems.aspx
因此在填寫 SiteURL 的時候就只應該填寫 Lists 之前的部分http://biwork
在 SiteListName 中填寫上需要訪問的List 名稱,在這里我們訪問的是 Area Code。
不需要的Column 直接刪除掉,只保留需要的Column,這樣可以提高效率。
就點擊保存,那么這樣 SharePoint List Source 配置就完成了。
添加一個 OLE DB Destination。
Mapping 的選擇。
保存后執行Package並查詢數據庫結果。
Description 中有其它的 HTML 標簽,應該是在設置 SharePoint List 的時候 Description Column 的類型是 Multiple line of Text 因此對應的數據庫 Descript 類型也是 NTEXT 的,其它單行的數據就沒有出現HTML 標簽。
步驟三 – 將數據庫中的數據導入到新的SharePoint List
創建一個新的List,並查詢數據庫中 Time Offset 為-5的數據插入到這個新的List 中 – New Area。
創建 Data Flow Task 並且在 OLE DB Source 中使用查詢語句篩選出 Time Offset 為 -5 的數據。
SELECT AreaCode, Region FROM dbo.Area_Code WHERE TimeOffset = -5
創建 SharePoint List Destination。
Component Properties 配置。
SiteListName – New Area
SiteURL – http://biwork
Input Column 中應該要刷新一下才能看到 Mapping 信息。
Insert Into SharePoint List Data Flow
執行Package 包
檢查 SharePoint List - New Area 添加成功
這樣就完成對 SharePoint List 的讀取和寫入操作了。
除此之外還可以做刪除 更新等操作,如有需要請參看其它文章。
- http://sqlsrvintegrationsrv.codeplex.com/releases/view/17652
- http://msdn.microsoft.com/en-us/library/hh368261.aspx
- http://dataqueen.unlimitedviz.com/2011/06/how-to-use-a-sharepoint-list-as-a-data-source-in-your-ssis-package/
PS:最后補充一下,關於在 Visual Studio 2010 和 Visual Studio 2012 版本中這個插件都是安裝完了重啟一下 VS 就可以了。並且 SharePointList 組件是屬於數據流的,在控制流中是看不到的。
以下我的 Visual Studio 2010 版本中的 SharePoint List Source 和 SharePoint List Destination。
以下我的 Visual Studio 2012 版本中的 SharePoint List Source 和 SharePoint List Destination。
更多 BI 文章請參看 BI 系列隨筆列表 (SSIS, SSRS, SSAS, MDX, SQL Server) 如果覺得這篇文章看了對您有幫助,請幫助推薦,以方便他人在 BIWORK 博客推薦欄中快速看到這些文章。