使用.NET程式集作為Business Data Connectivity資料來源(一)

來源:互聯網
上載者:User

SharePoint 2010中BCS最強的的地方無疑就是能使用.NET程式集作資料來源了。這種DLL類庫名為程式集系統。 業務資料目錄(BDC)可以直接連接SQL Server資料來源,但當我們要做的事更複雜(如需要從兩個不同的資料來源擷取資料並混合使用)時,之前的做法是不得不構建一個Web Service層來實現。現在,直接用.NET程式集就可以了,再也不必構建輔助的Web服務。當然,如果你更傾向於WCF服務,也是不錯的解決方案。

Visual Studio 2010內建了一整套BCS建模的工具,包括設計器,代碼編寫與調試工具。

接下來,我們就看看如何用Visual Studio 2010構建用於BCS的.NET 程式集。

1、開啟Visual Studio 2010並建立一個項目。選擇SharePoint 2010項目類型下的Business Data Connectivity Model模板。

2、當項目建立出來後,你可以看到在模型設計介面上有一個實體。 

 同時,還可以看到在BdcModel1檔案夾下有兩個類:Entity1.cs和Entity1Service.cs。我們將不會動這些預設的東西,以便在構建我們自己的自訂BCS實體時作為一個參照。

 

3、 這次演練我們還是用到AdventureWorks2000範例資料庫。

4、 我們將建立一個實體映射到資料庫裡的部門表。從Visual Studio 2010工具箱中拖放一個Entity形狀到bcs模型設計介面上。

5、你會注意到當你建立一個空白的BCS實體時也會同時為你建立一個EntityService.cs檔案。 BCS會將所有與該實體相關的C#方法都放在這裡。
重新命名我們的實體為——Department

然後,右鍵點擊該實體的Methods一節 ,添加一個新方法,名為GetDepartments。

注意到當我們改變實體的名稱為Department後,EntityService.cs也自動重新命名成DepartmentService.cs。如果你開啟DepartmentService.cs就會看到剛過建立的方法也在其中。

 

6、現在,我們開始寫一點代碼,將所需資料取回來。 右擊項目,添加一個LINQ 2 SQL類。在開啟的LINQ 2 SQL視圖裡通過伺服器總管串連到AdventureWorks2000資料庫,並拖放Departments表到設計介面中。

7、這樣,我們就可以用自動產生的LINQ 2 SQL Department類返回我們所需的資料了。 這裡,我發現最好還是再在我們的BCS model檔案夾下定義一個我們自己的Department類。主要基於以下考慮:

——你需要定義所有由BCS返回的欄 。LINQ 2 SQL的類可能會返回一些我們不需要用在BCS模型中的屬性。如果你直接使用LINQ 2 SQL的類,其中包含一些沒有在BCS模型中定義的類屬性,則會引發錯誤。

——這樣做還可以實現從兩個不同的源擷取資料,單表現出來的是一個實體。

——況且我感覺使用自己的類型更容易更舒服些:) 這也有助於你將來做單元測試並保持代碼的清晰性。

因此,添加一個新的C#類到BDCModel1檔案夾下,命名為Department.cs,並為資料中想要以後用在BCS中的每一個欄添加屬性。

public class Department
{
    public Int16 DepartmentId { get; set; }
    public string Name { get; set; }
    public string GroupName { get; set; }
}

 8、接下來,開啟DepartmentService.cs檔案,將GetDepartments方法聲明改為:

public static IEnumerable<Department> GetDepartments()

 

9、編寫LINQ 2 SQL代碼擷取資料,替換

throw new System.NotImplementedException();

DepartmentDataContext db = new DepartmentDataContext("server=localhost;database=adventureworks2000;uid=***;pwd=***");
return from d in db.Departments
       select new Department
       {
           DepartmentId = d.DepartmentID,
           Name = d.Name,
           GroupName = d.GroupName
       };

 

10、接下來,我們需要使我們的BCS模型能夠識別由我們的方法返回的資料。返回到BCS模型視圖,右擊Department實體的Identifiers一節。添加一個新的標識符並命名為DepartmentId。在你的實體中選中該標識符時,可以從屬性面板看到更多資訊。將其類型改為System.Int16。

11、在為BCS模型描述我們的資料前,我們需要先建立一個返回參數。在BDC方法詳細資料面板中,通過parameters下拉框中點擊<add a parameter>建立一個。 

設定該參數的Direction為Return。 

接下來有一些工作需要在不同的面板間來回移動才能完成。但是,個人認為這是我找到的最符合BCS模型構建思路的方法了。

 

12、 下面我們回到BDC Explorer視圖。展開樹,找到我們的實體和方法。選中我們剛剛添加參數時建立的TypeDescriptor。當選中後,你會發現我們可以在屬性面板編輯其屬性值。將其屬性設定為:

Name : DepartmentList
Type Name :
System.Collections.Generic.IEnumerable`1[[BdcModelProject1.BdcModel1.Department, BdcModel1]]

IsCollection : True

 

13、右擊DepartmentList結點,選擇Add Type Descriptor

14、選中新加的類型描述器,設定其屬性值為:

Name : Department
Type Name : BdcModelProject1.BdcModel1.Department, BdcModel1

IsCollection : False 

 

15、接下來我們要為需要從Department表中返回的每一欄建一個類型描述器 。右擊Department類型描述器並添加以下3個TypeDescriptor:

 

Name : DepartmentId
Type Name : System.Int16
Identifier : DepartmentId

Name : Name

Type Name : System.String

Name : GroupName

Type Name : System.String

 

這時的BDC Explorer樹應該是這個樣子: 

16、然後,我們需要建立一個MethodInstance元素——它為BCS描述了我們的方法是一個什麼類型的方法(如(Finder,SpecificFinder等)。

點擊Department實體,查看其BDC Details面板。通過Instance一節中的MethodInstance下拉框選擇"Create Finder Instance"。 

選中剛建立的執行個體(instance),在屬性面板中設定其屬性值為:

Default : True
Default Display Name : Department List
Return Parameter Name : parameter

Return Type Descriptor Name : DepartmentList

 

17、在開始部署我們的模型前,先開啟DepartmentService.cs 。在進行完前面幾個建立BCS模型的步驟後,可能會產生第二個GetDepartments()方法。如果有,只需要把它刪了就行了。(具體這個重複的方法是哪一步產生的我也不清楚,等找到後再更新這一塊內容吧)

 

18、終於我們可以編譯我們的項目了。如果沒問題,就直接F5運行,過程中會自動將其打成WSP包並部署到SharePoint。

 

是在我的SharePoint網站裡通過業務資料列表Web組件顯示出來的我們的BCS外部資料。

注意:出現“訪問已被業務資料連線拒絕”的錯誤時,請參考微軟知識庫文章982271。 

 

在接下來的一系列文章中,我們將瞭解到:

-建立一個SpecificFinder和IdEnumerator方法

-建立寫回和更新資料的方法

-建立彼此關聯的方法 

等等更多的內容。 

 

參考資料

 Business Data Connectivity Model – Finder Method

 BCS Shims – .NET assembly as a data source for Business Connectivity Services

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.