Compartir a través de


Acceso a datos en documentos en el servidor

Puede programar con los datos de una personalización de nivel de documento sin tener que usar el modelo de objetos de Microsoft Office Word o Microsoft Office Excel. Esto significa que puede acceder a los datos contenidos en un documento de un servidor que no tenga Instalado Word o Excel. Por ejemplo, el código de un servidor (por ejemplo, en una página de ASP.NET) puede personalizar los datos de un documento y enviar el documento personalizado a un usuario final. Cuando el usuario final abre el documento, el código de enlace de datos del ensamblado de la solución enlaza los datos personalizados en el documento. Esto es posible porque los datos del documento están separados de la interfaz de usuario. Para obtener más información, consulte Datos almacenados en caché en personalizaciones de nivel de documento.

Se aplica a: la información de este tema se aplica a proyectos de nivel de documento para Excel y Word. Para obtener más información, consulte Características disponibles por aplicación de Office lication y tipo de proyecto.

Almacenamiento en caché de datos para su uso en un servidor

Para almacenar en caché un objeto de datos en un documento, marcarlo con el CachedAttribute atributo en tiempo de diseño o usar el StartCaching método de un elemento host en tiempo de ejecución. Al almacenar en caché un objeto de datos en un documento, el Visual Studio Tools para Office tiempo de ejecución serializa el objeto en una cadena XML almacenada en el documento. Los objetos deben cumplir ciertos requisitos para ser aptos para el almacenamiento en caché. Para obtener más información, consulta Almacenamiento en caché de datos.

El código del lado servidor puede manipular cualquier objeto de datos de la caché de datos. Los controles enlazados a las instancias de datos almacenadas en caché se sincronizan con la interfaz de usuario, de modo que los cambios del lado servidor que se realicen en los datos se muestren automáticamente cuando se abre el documento en el cliente.

Acceso a datos en la memoria caché

Puede acceder a los datos de la memoria caché desde aplicaciones fuera de Office, por ejemplo, desde una aplicación de consola, una aplicación de Windows Forms o una página web. La aplicación que accede a los datos almacenados en caché debe tener plena confianza; Una aplicación web que tenga confianza parcial no puede insertar, recuperar ni cambiar datos almacenados en caché en un documento de Office.

La caché de datos es accesible a través de una jerarquía de colecciones expuestas por la CachedData propiedad de la ServerDocument clase :

  • La CachedData propiedad devuelve un objeto CachedData, que contiene todos los datos almacenados en caché en una personalización de nivel de documento.

  • Cada CachedData contiene uno o varios CachedDataHostItem objetos. Un CachedDataHostItem contiene todos los objetos de datos almacenados en caché que se definen dentro de una sola clase.

  • Cada CachedDataHostItem contiene uno o varios CachedDataItem objetos. CachedDataItem un objeto representa un único objeto de datos almacenado en caché.

    En el ejemplo de código siguiente se muestra cómo acceder a una cadena almacenada en caché en la Sheet1 clase de un proyecto de libro de Excel. Este ejemplo forma parte de un ejemplo más grande que se proporciona para el Save método .

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

Modificación de datos en la memoria caché

Para modificar un objeto de datos almacenado en caché, normalmente se realizan los pasos siguientes:

  1. Deserialice la representación XML del objeto almacenado en caché en una nueva instancia del objeto . Puede acceder al XML mediante la Xml propiedad de que CachedDataItem representa el objeto de datos almacenado en caché.

  2. Realice los cambios en esta copia.

  3. Serialice el objeto cambiado en la memoria caché de datos mediante una de las siguientes opciones:

    • Si desea serializar automáticamente los cambios, use el SerializeDataInstance método . Este método usa el formato DiffGram para serializar DataSetobjetos de conjunto de datos con tipo , DataTabley en la memoria caché de datos. El formato DiffGram garantiza que los cambios realizados en la caché de datos de un documento sin conexión se envíen al servidor correctamente.

    • Si desea realizar su propia serialización para los cambios en los datos almacenados en caché, puede escribir directamente en la Xml propiedad . Especifique el formato DiffGram si usa para DataAdapter actualizar una base de datos con cambios realizados en los datos de un DataSetconjunto de datos con tipo , DataTableo . De lo contrario, DataAdapter actualizará la base de datos agregando nuevas filas en lugar de modificar las filas existentes.

Modificar datos sin deserializar el valor actual

En algunos casos, es posible que desee modificar el valor del objeto almacenado en caché sin deserializar primero el valor actual. Por ejemplo, puede hacerlo si va a cambiar el valor de un objeto que tiene un tipo simple, como una cadena o un entero, o si va a inicializar una memoria caché DataSet en un documento de un servidor. En estos casos, puede usar el SerializeDataInstance método sin deserializar primero el valor actual del objeto almacenado en caché.

En el ejemplo de código siguiente se muestra cómo cambiar el valor de una cadena almacenada en caché en la Sheet1 clase de un proyecto de libro de Excel. Este ejemplo forma parte de un ejemplo más grande que se proporciona para el Save método .

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

Modificación de valores NULL en la caché de datos

La caché de datos no almacena objetos que tienen el valor NULL cuando se guarda y cierra el documento. Esta limitación tiene varias consecuencias al modificar los datos almacenados en caché:

  • Si establece cualquier objeto de la caché de datos en el valor NULL, todos los objetos de la caché de datos se establecerán automáticamente en NULL cuando se abra el documento y se borrará toda la memoria caché de datos cuando se guarde y cierre el documento. Es decir, todos los objetos almacenados en caché se quitarán de la caché de datos y la CachedData colección estará vacía.

  • Si compila una solución con objetos NULL en la memoria caché de datos y desea inicializar estos objetos mediante la ServerDocument clase antes de que el documento se abra por primera vez, debe asegurarse de inicializar todos los objetos de la memoria caché de datos. Si inicializa solo algunos de los objetos, todos los objetos se establecerán en NULL cuando se abra el documento y se borrará toda la memoria caché de datos cuando se guarde y cierre el documento.

Acceso a conjuntos de datos con tipo en la memoria caché

Si desea acceder a los datos de un conjunto de datos con tipo tanto desde una solución de Office como desde una aplicación fuera de Office, como una aplicación de Windows Forms o un proyecto de ASP.NET, debe definir el conjunto de datos con tipo en un ensamblado independiente al que se hace referencia en ambos proyectos. Si agrega el conjunto de datos con tipo a cada proyecto mediante el Asistente para configuración del origen de datos o el Diseñador de conjuntos de datos, .NET Framework tratará los conjuntos de datos con tipo en los dos proyectos como tipos diferentes. Para obtener más información sobre cómo crear conjuntos de datos con tipo, consulte Creación y configuración de conjuntos de datos en Visual Studio.