Accéder aux données dans des documents sur le serveur

Vous pouvez programmer les données dans une personnalisation au niveau du document sans avoir à utiliser le modèle objet de Microsoft Bureau Word ou Microsoft Bureau Excel. Cela signifie que vous pouvez accéder aux données contenues dans un document sur un serveur qui n’a pas installé Word ou Excel. Par exemple, le code sur un serveur (par exemple, dans une page ASP.NET) peut personnaliser les données d’un document et envoyer le document personnalisé à un utilisateur final. Lorsque l’utilisateur final ouvre le document, le code de liaison de données dans l’assembly de solution lie les données personnalisées dans le document. Cela est possible, car les données du document sont séparées de l’interface utilisateur. Pour plus d’informations, consultez Les données mises en cache dans les personnalisations au niveau du document.

S’applique à : les informations contenues dans cette rubrique s’appliquent aux projets au niveau du document pour Excel et Word. Pour plus d’informations, consultez Fonctionnalités disponibles par application Office lication et le type de projet.

Mettre en cache les données à utiliser sur un serveur

Pour mettre en cache un objet de données dans un document, marquez-le avec l’attribut au moment du CachedAttribute design ou utilisez la méthode d’un élément hôte au moment de l’exécution StartCaching . Lorsque vous cachez un objet de données dans un document, le runtime Visual Studio Tools pour Office sérialise l’objet dans une chaîne XML stockée dans le document. Les objets doivent répondre à certaines exigences pour être éligibles à la mise en cache. Pour plus d’informations, consultez Les données du cache.

Le code côté serveur peut manipuler tous les objets de données dans le cache de données. Les contrôles liés aux instances de données mises en cache sont synchronisés avec l’interface utilisateur, de sorte que les modifications côté serveur apportées aux données s’affichent automatiquement lorsque le document est ouvert sur le client.

Accéder aux données dans le cache

Vous pouvez accéder aux données dans le cache à partir d’applications en dehors de Bureau, par exemple à partir d’une application console, d’une application Windows Forms ou d’une page Web. L’application qui accède aux données mises en cache doit avoir une confiance totale ; Une application web qui a une approbation partielle ne peut pas insérer, récupérer ou modifier des données mises en cache dans un document Bureau.

Le cache de données est accessible via une hiérarchie de collections exposées par la CachedData propriété de la ServerDocument classe :

  • La CachedData propriété retourne un CachedData, qui contient toutes les données mises en cache dans une personnalisation au niveau du document.

  • Chacun CachedData contient un ou plusieurs CachedDataHostItem objets. Un CachedDataHostItem contient tous les objets de données mis en cache définis dans une classe unique.

  • Chacun CachedDataHostItem contient un ou plusieurs CachedDataItem objets. Représente CachedDataItem un objet de données mis en cache unique.

    L’exemple de code suivant montre comment accéder à une chaîne mise en cache dans la Sheet1 classe d’un projet de classeur Excel. Cet exemple fait partie d’un exemple plus large fourni pour la Save méthode.

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

Modifier des données dans le cache

Pour modifier un objet de données mis en cache, vous effectuez généralement les étapes suivantes :

  1. Désérialisez la représentation XML de l’objet mis en cache dans une nouvelle instance de l’objet. Vous pouvez accéder au code XML à l’aide de la Xml propriété de l’objet CachedDataItem de données mis en cache.

  2. Apportez les modifications à cette copie.

  3. Sérialisez l’objet modifié dans le cache de données à l’aide de l’une des options suivantes :

    • Si vous souhaitez sérialiser automatiquement les modifications, utilisez la SerializeDataInstance méthode. Cette méthode utilise le format DiffGram pour sérialiser DataSet, DataTableet taper des objets de jeu de données dans le cache de données. Le format DiffGram garantit que les modifications apportées au cache de données dans un document hors connexion sont envoyées correctement au serveur.

    • Si vous souhaitez effectuer votre propre sérialisation pour les modifications apportées aux données mises en cache, vous pouvez écrire directement dans la Xml propriété. Spécifiez le format DiffGram si vous utilisez une DataAdapter base de données avec des modifications apportées aux données dans un DataSetjeu de données , DataTableou typé. Sinon, la DataAdapter base de données est mise à jour en ajoutant de nouvelles lignes au lieu de modifier les lignes existantes.

Modifier des données sans désérialiser la valeur actuelle

Dans certains cas, vous pouvez modifier la valeur de l’objet mis en cache sans désérialiser la valeur actuelle. Par exemple, vous pouvez le faire si vous modifiez la valeur d’un objet qui a un type simple, tel qu’une chaîne ou un entier, ou si vous initialisez un cache DataSet dans un document sur un serveur. Dans ces cas, vous pouvez utiliser la SerializeDataInstance méthode sans désérialiser la valeur actuelle de l’objet mis en cache.

L’exemple de code suivant montre comment modifier la valeur d’une chaîne mise en cache dans la Sheet1 classe d’un projet de classeur Excel. Cet exemple fait partie d’un exemple plus large fourni pour la Save méthode.

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();
}

Modifier des valeurs Null dans le cache de données

Le cache de données ne stocke pas les objets qui ont la valeur Null lorsque le document est enregistré et fermé. Cette limitation a plusieurs conséquences lorsque vous modifiez des données mises en cache :

  • Si vous définissez un objet dans le cache de données sur la valeur Null, tous les objets du cache de données sont automatiquement définis sur Null lorsque le document est ouvert et le cache de données entier est effacé lorsque le document est enregistré et fermé. Autrement dit, tous les objets mis en cache seront supprimés du cache de données et la CachedData collection sera vide.

  • Si vous générez une solution avec des objets Null dans le cache de données et que vous souhaitez initialiser ces objets à l’aide de la ServerDocument classe avant l’ouverture du document pour la première fois, vous devez vous assurer que vous initialisez tous les objets dans le cache de données. Si vous initialisez uniquement certains des objets, tous les objets sont définis sur Null lorsque le document est ouvert et le cache de données entier est effacé lorsque le document est enregistré et fermé.

Accès aux jeux de données typés dans le cache

Si vous souhaitez accéder aux données d’un jeu de données typé à partir d’une solution Bureau et d’une application en dehors de Bureau, comme une application Windows Forms ou un projet ASP.NET, vous devez définir le jeu de données typé dans un assembly distinct référencé dans les deux projets. Si vous ajoutez le jeu de données typé à chaque projet à l’aide de l’Assistant Configuration de source de données ou du Concepteur de jeux de données, le .NET Framework traite les jeux de données typés dans les deux projets comme des types différents. Pour plus d’informations sur la création de jeux de données typés, consultez Créer et configurer des jeux de données dans Visual Studio.