歡迎回來!希望你已經通過跟隨上一次我們介紹的如何在Visual Studio 2010中構建業務資料連線服務模型中的步驟成功建立了你自己的Entity,並已經部署到SharePoint上。
本次我們將繼續擴充我們的BCS模型。我們將在 department實體上建立SpecificFinder和IdEnumerator方法。首先我們來設定SpecificFinder...
1、右擊我們的department實體的Methods一節 ,選擇Add new Method。將方法名命名為GetDepartmentById。
2、開啟我們的DepartmentService.cs,你會看到一個新的方法已經為我們建立出來。修改該方法的聲明以便其可以接收一個參數,並返回一個Department對象。
public static Department GetDepartmentById(Int16 departmentId)
3、在你的方法裡添加如下代碼,來替換預設的Not Implemented Exception:
代碼
DepartmentDataContext db = new DepartmentDataContext
("server=localhost;database=adventureworks2000;uid=***;pwd=***");
var dbDepartment = db.Departments.SingleOrDefault(d => d.DepartmentID == departmentId);
return new Department
{
DepartmentId = dbDepartment.DepartmentID,
Name = dbDepartment.Name,
GroupName = dbDepartment.GroupName
};
我們需要再多做一點工作,因為我們希望返回我們自己的Department類,而不是由LINQ 2 SQL產生的那個。原因在第一篇中已經說明,個人認為這是一條正確的路。
4、接下來我們需要修改一下我們的BCS模型。返回到我們的BCS模型頁面,並點擊GetDepartmentById方法。在BCS方法詳細資料面板中選擇add a parameter。選中你的新參數,通過屬性面板修改其名稱為departmentId。然後點擊它下面的Type Descriptor,設定如下的值:
Name : departmentId
Type Name : System.Int16
Identifier : DepartmentId
5、然後我們來建立返回參數。回到BDC方法詳細資料面板,在GetDepartmentById方法下選擇建立另一個新的參數。
6、在BDC Explorer中選中新參數 ,修改名稱為Department,參數方向為Return。
7、現在是體現BDC Explorer優越性的時候了。展開我們的Department實體的GetDepartments方法。右擊Department類型描述器並選擇Copy。接著,右擊GetDepartmentById方法的Department參數選Paste。
這時會彈出對話方塊詢問是否覆蓋已有的Type Descriptor——點"yes"。這時你會發現Department類型描述器和所有欄位的類型描述器都複製過來了。這樣就減少了一些我們的手動建立工作。
結果:
需要注意的是,如果所複製的Type Descriptor帶有一些錯誤,則這些錯誤也會複製到其他方法。這也就是為什麼最好先構建
Finder方法進行測試無誤後,再進行Type Descirptor的複製和粘貼。
8、現在我們只需要建立一個方法執行個體就可以了。返回BDC方法詳細資料面板,在GetDepartmentById方法下選擇Add a Method Instance。設定其屬性值為:
Type : SpecificFinder
Default : True
Default Display Name : Single Department
Return Parameter Name : Department
Return Type Descriptor : Department
9、在測試和部署前,我們需要清除我們的DepartmentService.cs類中的多餘代碼。
BCS設計器希望你在開始寫代碼前,先定義你的方法,參數和類型描述器。這也正是為什麼在我們編輯完方法的返回對象和輸
入參數後會重建一段新的方法聲明。我更傾向於先寫代碼然後構建BCS模型。如果你和我的步驟一樣,一定要記住要檢查
Service類,清除沒用的方法代碼。
10、清除完後,直接F5編譯部署該WSP到SharePoint.
你可以通過添加並配置一個業務資料項目WebPart來測試Specific Finder方法。或者也可以建立一個外表列表並點擊某一行彈出查看錶單來驗證。
11、我們的Specific Finder BCS方法工作正常!現在讓我們返回Visual Studio,來配置我們的IdEnumerator方法。右擊我們的Department實體的Methods一節,添加一個名為GetDepartmentIds的方法。
12、進入DepartmentService.cs類,修改GetDepartmentIds方法的聲明為:
public static IEnumerable<short> GetDepartmentIds()
13、記住,我們的IdEnumerator方法只支援返回欄位中的主鍵的值。SharePoint會以此來建立索引並進行耙梳。該方法的代碼很簡單:
DepartmentDataContext db = new DepartmentDataContext
("server=localhost;database=adventureworks2000;uid=***;pwd=***");
return from d in db.Departments
select d.DepartmentID;
14、現在開始BCS模型的構建,以便反映出所返回的資料。切回到BCS模型視圖。選擇GetDepartmentIds方法,在BDC詳細資料面板裡建立一個參數。
15、在BDC Explorer裡展開樹,選中剛剛建立的參數。在屬性面板裡修改其方向為Return。
16、選擇我們的參數下的parameterTypeDescriptor,設定其值:
Name : DepartmentIds
Type Name : System.Collections.Generic.IEnumerable`1[[System.Int16]]
IsCollection : True
17、右擊樹中的DepartmentIds類型描述器結點,選擇Add Type Descriptor。設定該類型描述器的屬性為:
Name : DepartmentId
Type Name : System.Int16
Identifier : DepartmentId
18、最後,為我們的方法添加一個MethodInstance。在BDC方法詳細資料面板中點擊Add a Method Instance。選中該方法執行個體並設定其屬性值:
Type : IdEnumerator
Default : True
Return Parameter Name : parameter
Return Type Descriptor : DepartmentIds
記得要清除DepartmentService.cs中我們建模過程中建立的GetDepartmentIds方法。
19、要將我們的LobSystemInstance做成一個可供SharePoint 2010索引器耙梳的應用程式,還需要為其設定一個新屬性。這個屬性名稱為ShowInSearchUI。
在BDC Explorer中展開BCS模型,找到LobSystemInstance結點。
20、在屬性面板裡,設定一個custom property,名為ShowInSearchUI,類型為System.String。該屬性實際上不需要值,只需要存在就可以了。
21、就這麼多,現在我們可以按F5把我們的模型打包成WSP並部署到SharePoint了。這裡我們還有些SharePoint UI裡特殊步驟,用於在搜尋結果中展現我們的Departments類型的資料。
22、在原先的BDC(Business Data Catalog)裡,你的實體的設定檔頁面面是自動建立的。而使用上面步驟在BCS中卻不會自動建立設定檔頁面。因此我們需要一步手工操作來進行建立。開啟SharePoint 2010管理中心,點擊管理服務應用程式。在服務應用程式頁中點擊Business Data Connectivity Service連結到其管理頁面。
23、在功能區上,點擊編輯標籤,點擊配置按鈕。彈出的表單,需要我們輸入一個設定檔頁面宿主URL。正如頁面中解釋的那樣,最好單獨建立一個網站來宿主這些設定檔頁面,但此處我們就直接輸入相同的Url,指向我們的SharePoint網站,對於我來說是http://sp2010u。
點擊確定關閉該表單。
24、現在,我們可以在我們的外部內容類型上建立設定檔頁面了。滑鼠移至上方在我們的Department ECT上,在下拉式功能表中選擇“建立/升級設定檔頁面”。
在彈出的對話方塊中一路點確定。現在我們的設定檔頁面就建立到23步中指定的宿主網站中了。
25、接下來我們要檢查一下我們的實體是不是可以被耙梳。點擊Department ECT,檢查其中的“可耙梳”屬性值為“是”。
26、現在,我們需要將我們的BCS應用程式設定為一個搜尋內容來源。回到管理服務應用程式頁面,點擊Search Service Application連結。
27、在左手的導覽功能表中點擊“內容來源”連結,然後再接下來的頁面上點擊建立內容來源連結。
28、為新內容來源起一個名字,並選擇其類型為業務部門資料(Line of Business Data)。點選後介面會重新整理,然後顯示下面一節來展現外部資料源。選擇你要進行耙梳的BCS應用系統,這裡是BdcModel1
注意:如果你的應用系統沒有出現在這裡,那麼你需要檢查一下ShowInSearchUI有沒有被添加到屬性集中。(可以使用原始碼編輯器開啟模型檔案,而不是在預設的模型編輯介面。然後找找看LobSystemInstance結點下的屬性集裡有沒有ShowInSearchUI)。
29、如果你願意可以設定一下耙梳計劃。 最後選中“對該內容來源啟動完全耙梳”,並點擊確定。
30、當耙梳完成後,我們來檢查一下我們的BCS內容來源的編目記錄。
你應該可以看到有18個成功的條目——每個部門對應一條。
31、如果你已經有一個工作群組網站作為網站集合根網站的話 ,你需要建立一個搜尋中心網站。建立好後,進入搜尋中心網站,搜尋一個關鍵詞“engineering",這時你會看到藉助Department ECT我們得到Engineering部門的返回結果。
32、你可以將該搜尋中心掛接到你的小組網站上。返回工作群組網站,然後點擊
網站操作->網站設定-> 搜尋設定
你可以把搜尋中心的URL貼到這裡,以便使用其結果頁。
Wow——為自己喝彩吧! 作為一個系列,接下來,我們還將介紹建立關聯的步驟。
參考資料
BCS Model in Visual Studio 2010 – SpecificFinder and IdEnumerator
Searching External Data in SharePoint 2010 Using Business Connectivity Services
BDC .NET Assembly Connector: Tame SharePoint Search to search your .NET BDC Entity
Search-Specific Properties in BDC Model Files