Toegang tot gegevens in documenten op de server

U kunt programmeren op basis van de gegevens in een aanpassing op documentniveau zonder dat u het objectmodel van Microsoft Office Word of Microsoft Office Excel hoeft te gebruiken. Dit betekent dat u toegang hebt tot gegevens die zijn opgenomen in een document op een server waarop Word of Excel niet is geïnstalleerd. Code op een server (bijvoorbeeld op een ASP.NET pagina) kan bijvoorbeeld de gegevens in een document aanpassen en het aangepaste document naar een eindgebruiker verzenden. Wanneer de eindgebruiker het document opent, verbindt gegevensbindingscode in de oplossingsassembly de aangepaste gegevens in het document. Dit is mogelijk omdat de gegevens in het document zijn gescheiden van de gebruikersinterface. Zie Gegevens in cache opslaan in aanpassingen op documentniveau voor meer informatie.

Van toepassing op: De informatie in dit onderwerp is van toepassing op projecten op documentniveau voor Excel en Word. Zie Functies die beschikbaar zijn voor de Office-toepassing en het projecttype voor meer informatie.

Cachegegevens voor gebruik op een server

Om een gegevensobject in een document te cachen, markeert u het met het CachedAttribute attribuut tijdens ontwerptijd of gebruikt u de StartCaching-methode van een hostitem tijdens uitvoering. Wanneer u een gegevensobject in een document in de cache opslaat, serialiseert visual Studio Tools voor Office Runtime het object in een XML-tekenreeks die is opgeslagen in het document. Objecten moeten voldoen aan bepaalde vereisten om in aanmerking te komen voor caching. Zie Cachegegevens voor meer informatie.

Code aan de serverzijde kan alle gegevensobjecten in de gegevenscache bewerken. Besturingselementen die zijn gebonden aan gegevensexemplaren in de cache, worden gesynchroniseerd met de gebruikersinterface, zodat wijzigingen aan de serverzijde die in de gegevens worden aangebracht, automatisch worden weergegeven wanneer het document op de client wordt geopend.

Toegang tot gegevens in de cache

U hebt toegang tot gegevens in de cache vanuit toepassingen buiten Office, bijvoorbeeld vanuit een consoletoepassing, een Windows Forms-toepassing of een webpagina. De toepassing die toegang heeft tot de gegevens in de cache, moet volledig vertrouwen hebben; een webtoepassing met gedeeltelijke vertrouwensrelatie kan geen gegevens invoegen, ophalen of wijzigen die in een Office-document in de cache zijn opgeslagen.

De gegevenscache is toegankelijk via een hiërarchie van verzamelingen die worden weergegeven door de CachedData eigenschap van de ServerDocument klasse:

  • De CachedData eigenschap retourneert een CachedData, die alle gegevens in de cache bevat in een aanpassing op documentniveau.

  • Elk CachedData object bevat een of meer CachedDataHostItem objecten. Een CachedDataHostItem bevat alle gegevensobjecten in de cache die binnen één klasse zijn gedefinieerd.

  • Elk CachedDataHostItem object bevat een of meer CachedDataItem objecten. A CachedDataItem vertegenwoordigt één gegevensobject in de cache.

    In het volgende codevoorbeeld ziet u hoe u toegang krijgt tot een tekenreeks in de cache in de Sheet1 klasse van een Excel-werkmapproject. Dit voorbeeld maakt deel uit van een groter voorbeeld dat is opgegeven voor de Save methode.

    serverDocument1 = new ServerDocument(documentPath);
    CachedDataHostItem hostItem1 = 
        serverDocument1.CachedData.HostItems["ExcelWorkbook1.Sheet1"];
    CachedDataItem dataItem1 = hostItem1.CachedData["CachedString"];
    

Gegevens in de cache wijzigen

Als u een gegevensobject in de cache wilt wijzigen, voert u doorgaans de volgende stappen uit:

  1. Deserialiseer de XML-weergave van het object in de cache in een nieuw exemplaar van het object. U kunt toegang krijgen tot de XML met behulp van de Xml eigenschap van het gegevensobject in de CachedDataItem cache.

  2. Breng de wijzigingen aan in deze kopie.

  3. Serialiseer het gewijzigde object weer in de gegevenscache met behulp van een van de volgende opties:

    • Als u de wijzigingen automatisch wilt serialiseren, gebruikt u de SerializeDataInstance methode. Deze methode maakt gebruik van het DiffGram-indeling voor het serialiseren van DataSet, DataTable, en getype gegevenssetobjecten in de gegevenscache. De DiffGram-indeling zorgt ervoor dat wijzigingen in de gegevenscache in een offlinedocument correct naar de server worden verzonden.

    • Als u uw eigen serialisatie wilt uitvoeren voor wijzigingen in gegevens in de cache, kunt u rechtstreeks naar de Xml eigenschap schrijven. Geef de DiffGram-indeling op als u een DataAdapter gebruikt om een database bij te werken met wijzigingen in gegevens in een DataSet, DataTable, of getypeerde dataverzameling. DataAdapter Anders wordt de database bijgewerkt door nieuwe rijen toe te voegen in plaats van bestaande rijen te wijzigen.

Gegevens wijzigen zonder deserialisatie van de huidige waarde

In sommige gevallen wilt u mogelijk de waarde van het object in de cache wijzigen zonder eerst deserialiseren van de huidige waarde. U kunt dit bijvoorbeeld doen als u de waarde wijzigt van een object met een eenvoudig type, zoals een tekenreeks of geheel getal, of als u een cache DataSet initialiseert in een document op een server. In deze gevallen kunt u de SerializeDataInstance methode gebruiken zonder eerst deserialiseren van de huidige waarde van het object in de cache.

In het volgende codevoorbeeld ziet u hoe u de waarde van een tekenreeks in de cache wijzigt in de Sheet1 klasse van een Excel-werkmapproject. Dit voorbeeld maakt deel uit van een groter voorbeeld dat is opgegeven voor de Save methode.

serverDocument1 = new ServerDocument(documentPath);
CachedDataHostItem hostItem1 = 
    serverDocument1.CachedData.HostItems["ExcelWorkbook1.Sheet1"];
CachedDataItem dataItem1 = hostItem1.CachedData["CachedString"];

if (dataItem1 != null &&
    Type.GetType(dataItem1.DataType) == typeof(string))
{
    dataItem1.SerializeDataInstance("This is the new cached string value.");
    serverDocument1.Save();
}

Null-waarden wijzigen in de gegevenscache

In de gegevenscache worden geen objecten opgeslagen met de waarde null wanneer het document wordt opgeslagen en gesloten. Deze beperking heeft verschillende gevolgen wanneer u gegevens in de cache wijzigt:

  • Als u een object in de gegevenscache instelt op de waarde null, worden alle objecten in de gegevenscache automatisch ingesteld op null wanneer het document wordt geopend en wordt de volledige gegevenscache gewist wanneer het document wordt opgeslagen en gesloten. Dat wil gezegd: alle objecten in de cache worden verwijderd uit de gegevenscache en de CachedData verzameling is leeg.

  • Als u een oplossing bouwt met null-objecten in de gegevenscache en u deze objecten wilt initialiseren met behulp van de ServerDocument klasse voordat het document voor het eerst wordt geopend, moet u ervoor zorgen dat u alle objecten in de gegevenscache initialiseert. Als u slechts enkele objecten initialiseert, worden alle objecten ingesteld op null wanneer het document wordt geopend en wordt de volledige gegevenscache gewist wanneer het document wordt opgeslagen en gesloten.

Getypte gegevenssets in de cache openen

Als u toegang wilt krijgen tot de gegevens in een getypte gegevensset, zowel vanuit een Office-oplossing als vanuit een toepassing buiten Office, zoals een Windows Forms-toepassing of een ASP.NET-project, moet u de getypte gegevensset definiëren in een afzonderlijke assembly waarnaar in beide projecten wordt verwezen. Als u de getypte gegevensset aan elk project toevoegt met behulp van de wizard Gegevensbronconfiguratie of de ontwerpfunctie voor gegevenssets, behandelt .NET Framework de getypte gegevenssets in de twee projecten als verschillende typen. Zie Gegevenssets maken en configureren in Visual Studio voor meer informatie over het maken van getypte gegevenssets.