Freigeben über


Cacheobjektmodell

Letzte Änderung: Donnerstag, 30. September 2010

Gilt für: SharePoint Server 2010

Mit dem Microsoft.BusinessData.Offlining-Namespace in Microsoft.SharePoint.dll wird in Microsoft Business Connectivity Services (BCS) ein öffentliches Objektmodell zum Arbeiten mit dem Cache und zum Suchen nach und Auflösen von Fehlern bereitgestellt.

Im folgenden Codeausschnitt wird dargestellt, wie die Elemente eines externen Inhaltstyps im Clientcache aufgezählt werden.

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;

Im folgenden Codeausschnitt wird gezeigt, wie Sie eine programmgesteuerte Cacheaktualisierung aus einer Clientanwendung heraus ausführen. Bei der Ausführung des Codes wird der Dienst BCSSync gestartet, sofern dieser noch nicht ausgeführt wird, und eine Aktualisierung im BCS-Clientcache angefordert. In diesem Codeausschnitt wird davon ausgegangen, dass Sie bereits ein Cacheabonnement für den externen Inhaltstyp, auf den verwiesen wird, eingerichtet haben. Ersetzen Sie <EntityNamespace>, <EntityName>, <ViewName> und <SubscriptionName> durch gültige Werte aus den Modell- und Abonnementdateien.

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

Es folgen einige wichtige Bemerkungen zum Arbeiten mit dem Cache und zur Verwendung des Objektmodells.

Im Laufzeitobjektmodell ermöglicht Business Connectivity Services es Ihnen auf Methodeninstanzebene, in einen Betriebsmodus zu wechseln, in dem der Laufzeit mitgeteilt wird, ob und wie Sie den Cache verwenden. Von Business Connectivity Services werden zwei Modi für die Cachenutzung unterstützt.

  • Online: Wenn der Onlinemodus für die Anwendung ausgewählt ist, wird der Cache nicht verwendet. Alle Aufrufe der externen Datenquelle zum Lesen oder Aktualisieren usw. werden direkt über die BDC-Laufzeit (Business Data Connectivity) an die externe Datenquelle geleitet.

  • Cache: Wenn der Cachemodus für die Anwendung ausgewählt ist, wird der Cache verwendet. Der Cache wird mit den Entitätsinstanzen der externen Datenquelle zur Bereitstellungszeit aufgefüllt, und die Daten werden in bestimmten Abständen über die externe Datenquelle aktualisiert. Vorgänge werden nicht unmittelbar an die externe Datenquelle, sondern an den Cache geleitet. Sie werden dann vom Cache in die Warteschlange eingereiht und nacheinander ausgeführt.