キャッシュ オブジェクト モデル

最終更新日: 2010年9月30日

適用対象: SharePoint Server 2010

Microsoft Business Connectivity Services (BCS) には、パブリック オブジェクト モデル (OM) として Microsoft.SharePoint.dll に Microsoft.BusinessData.Offlining 名前空間が用意されています。この名前空間を使用して、キャッシュを操作し、エラーを検出、解決します。

次のコード スニペットでは、クライアント キャッシュにある外部コンテンツ タイプの項目を列挙する方法を示します。

RemoteSharedFileBackedMetadataCatalog catalog = new RemoteSharedFileBackedMetadataCatalog();
            INamespacedEntityDictionaryDictionary entDictDict = catalog.GetEntities("*");

            foreach (INamedEntityDictionary entDict in entDictDict.Values)
            {
                foreach (IEntity entity in entDict.Values)
                {
                    entityDictonary.Add(entity.Name, entity);
                }
            }


            IEntity entity = entityDictonary[0];
            IEntityInstanceEnumerator instanceEnumerator = entity.FindFiltered(
                                        entity.GetDefaultFinderFilters(),
                                        entity.GetMethodInstances(MethodInstanceType.Finder)[0].Value.Name,
                                        entity.GetLobSystem().GetLobSystemInstances()[0].Value,
                                        OperationMode.CachedWithoutRefresh);


            DataTable dt = new DataTable();

            string finderName = entity.GetMethodInstances(MethodInstanceType.Finder)[0].Value.Name;
            IView v = entity.GetFinderView(finderName);

            foreach (IField f in v.Fields)
            {
                
                dt.Columns.Add(new DataColumn(f.Name, Type.GetType(f.TypeDescriptor.TypeName)));
            }

            while (instanceEnumerator.MoveNext())
            {
                IEntityInstance iei = instanceEnumerator.Current;
                DataRow dr = dt.NewRow();
                foreach (IField f in v.Fields)
                {
                    dr[f.Name] = iei[f.Name];
                }
                dt.Rows.Add(dr);
            }

            return dt;

次のコード スニペットでは、クライアント アプリケーションからキャッシュの更新をプログラムによって実行する方法を示します。このコードは、まだ実行されていない場合は BCSSync サービスの開始時に実行され、BCS クライアント キャッシュの更新を要求します。このコード スニペットでは、参照している外部コンテンツ タイプについてキャッシュ サブスクリプションのセットアップを既に行っていることを前提としています。<EntityNamespace>、<EntityName>、<ViewName>、および <SubscriptionName> をモデルとサブスクリプション ファイルの有効な名前に置き換えます。

RemoteOfflineRuntime offlineRuntime = new RemoteOfflineRuntime();
ISubscriptionManager subManager = offlineRuntime.GetSubscriptionManager();
ISubscription sub = subManager.GetSubscription("<EntityNameSpace>", "<EntityName>", "<ViewName>", "<SubscriptionName>");
sub.RequestRefresh(true);

キャッシュとオブジェクト モデルを操作するときの注意点を以下に記載します。

ランタイム OM では、メソッド インスタンス レベルで、Business Connectivity Services によって、キャッシュを使用するかどうかとキャッシュの使用方法をランタイムに伝える処理モードを渡すことができます。Business Connectivity Services では、次の 2 種類のキャッシュ使用モードをサポートしています。

  • オンライン: アプリケーションがオンライン モードに設定されている場合、キャッシュは使用されません。読み取り、更新など、外部データ ソースへのすべての呼び出しは、Business Data Connectivity (BDC) ランタイムを経由して直接外部データ ソースにルーティングされます。

  • キャッシュ: アプリケーションがキャッシュ モードに設定されている場合、キャッシュは使用されます。キャッシュには、展開時に外部データ ソースからのエンティティ インスタンスが格納され、データは指定の間隔で外部データ ソースから更新されます。処理は、外部データ ソースにすぐにルーティングされず、キャッシュにルーティングされます。キャッシュは、この処理を処理キューに配置し、1 つずつ実行します。