BDC プログラミング モデル
最終更新日: 2010年4月15日
適用対象: SharePoint Server 2010
サンプル BDC モデル では、顧客外部コンテンツ タイプについて説明しました。顧客外部コンテンツ タイプは、Customer (Name, ID, Phone no., Address) のように表示されると仮定します。ここで、住所 (Address) はもう 1 つの複合型です。
特定の外部データ ソースの顧客外部コンテンツ タイプ用のモデルを定義し、BDC メタデータ ストアに保存すると、顧客外部コンテンツ タイプと対話するために使用される BDC コード (作成、読み込み、更新、削除) が、バックエンドの種類 (データベース、Web サービス、または .NET Connectivity Assembly) に関係なく、同様に表示されます。これは、このプログラミング パターンの主な利点です。アプリケーションが対話を試みる外部データ ソースの種類に関係なく、コードは完全に同じです。
例: 外部データ ソースの Customer インスタンスを作成する BDC コード
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint.BusinessData.SharedService;
using Microsoft.BusinessData.MetadataModel;
using Microsoft.BusinessData.Runtime;
using Microsoft.SharePoint.Administration;
using Microsoft.SharePoint;
using System.Web;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
using (SPSite site = new SPSite("http://ssdk-server/Pages/Default.aspx"))
{
using (new Microsoft.SharePoint.SPServiceContextScope(SPServiceContext.GetContext(site)))
{
BdcService service = SPFarm.Local.Services.GetValue<BdcService>(String.Empty);
IMetadataCatalog catalog = service.GetDatabaseBackedMetadataCatalog(SPServiceContext.Current);
IEntity entity = catalog.GetEntity("http://ssdk-server/sdksamples", "Customer");
ILobSystemInstance LobSysteminstance = entity.GetLobSystem().GetLobSystemInstances()[0].Value;
IView createView = entity.GetCreatorView("Create");
IFieldValueDictionary valueDictionary = createView.GetDefaultValues();
valueDictionary["Name"] = "some name";
Identity id = entity.Create(valueDictionary, LobSysteminstance);
}
}
}
}
}
例: クライアント上の BCS クライアント キャッシュ内の Customer インスタンスを列挙する BDC コード
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.BusinessData.MetadataModel;
using Microsoft.BusinessData.Runtime;
using Microsoft.Office.BusinessData.MetadataModel;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
RemoteSharedFileBackedMetadataCatalog RemoteCatalog = new RemoteSharedFileBackedMetadataCatalog();
IEntity remoteEntity = RemoteCatalog.GetEntity("http://ssdk-server/sdksamples", "Customer");
ILobSystemInstance LobSysteminstance = remoteEntity.GetLobSystem().GetLobSystemInstances()[0].Value;
IMethodInstance method = remoteEntity.GetMethodInstance("Read List", MethodInstanceType.Finder);
IEntityInstanceEnumerator ieie = remoteEntity.FindFiltered(method.GetFilters(), LobSysteminstance);
IView view = remoteEntity.GetFinderView(method.Name);
while (ieie.MoveNext())
{
foreach (IField field in view.Fields)
{
if (ieie.Current[field] != null)
{
Console.WriteLine(ieie.Current[field].ToString());
}
}
}
}
}
}