這篇主要介紹的是sharepoint 2010中使用Visual Studio 開發 BCS的BDC Model 時,假設我們想要自訂的BDC Model擁有Update的功能開怎麼做?
假設我們已經使用Visual Studio 2010開發好一個BDC Model,叫做:TrainingEntity,此TrainingEntity使用SupplierID當作Identifier,並且已經事先定義好ReadList以及ReadItem,如下圖所示:
因此,我們可以透過BDC Mothod Details視窗來設定Update方法中的相關物件,當新增Update方法後,會自動帶入TrainingEntity當作參數來更新後端的資料來源,且此參數為In,如下圖所示:
選取TrainingEntity且按下編輯之後,可以帶出此TrainingEntity已經設定好的Type Descriptor,目前可透過下圖得知我們所定義的Type Descriptor以SupplierID當作Identifier,其餘的Type Descriptor都是在Update方法中要可以透過SharePoint 的UI操作異動更新的:
因此,我們主要針對SupplierID做設定,這邊要特別注意一點,因為TrainingEntity是參數,帶入方法中要可以更新,因此TrainingEntity中的Type Descriptor必須是readonly為false。不過Visual Studio是很貼心的,當你使用工具產生Update方法時,所有的Type Descriptor預設readonly為false,因此不用特別設定! 但因為SupplierID是Identifier,在更新的畫面中我們希望此Type Descriptor不能被異動,因此必須要設定:Pre-Updater Field 為True。
假設Pre-Updater Field 沒有設定,則會出現以下的錯誤訊息:
Error : Failed to update a list item for this external list based on the Entity (External Content Type) 'TrainingEntity' in EntityNamespace 'Lab06.TrainingBdcModel'. Details: The Field named 'SupplierID' contains an Identifier which is not read only. The Update operation requires a corresponding PreUpdaterField for this Field on Method with Name 'Update' on Entity (External Content Type) with Name 'TrainingEntity' in Namespace 'Lab06.TrainingBdcModel'.
當設定好Update相關的Type Descriptor後,接著我們就可以實作實際要更新回後端資料來源的程式碼了,這邊我使用ADO.NET物件來更新回SQL資料庫,語法如下:
開發完畢,直接部署至SharePoint 2010 Server上,搞定!
接著我們來測試一下External List 上更新資料,首先瀏覽已經設定好的External List ,可以從資料庫正常抓取資料呈現:
接著選取其中一筆項目,進入編輯頁面,並且按下Save更新完成!