Accedere ai dati nei documenti nel server

È possibile programmare i dati in una personalizzazione a livello di documento senza dover utilizzare il modello a oggetti di Microsoft Office Word o Microsoft Office Excel. Ciò significa che è possibile accedere ai dati contenuti in un documento in un server in cui non è installato Word o Excel. Ad esempio, il codice in un server (ad esempio, in una pagina ASP.NET) può personalizzare i dati in un documento e inviare il documento personalizzato a un utente finale. Quando l'utente finale apre il documento, il codice di associazione dati nell'assembly della soluzione associa i dati personalizzati nel documento. Ciò è possibile perché i dati nel documento sono separati dall'interfaccia utente. Per altre informazioni, vedere Dati memorizzati nella cache nelle personalizzazioni a livello di documento.

Si applica a: le informazioni contenute in questo argomento si applicano ai progetti a livello di documento per Excel e Word. Per altre informazioni, vedere Funzionalità disponibili per app Office lication e tipo di progetto.

Memorizzare nella cache i dati da usare in un server

Per memorizzare nella cache un oggetto dati in un documento, contrassegnarlo con l'attributo CachedAttribute in fase di progettazione o usare il StartCaching metodo di un elemento host in fase di esecuzione. Quando si memorizza nella cache un oggetto dati in un documento, il Strumenti di Visual Studio per il runtime di Office serializza l'oggetto in una stringa XML archiviata nel documento. Gli oggetti devono soddisfare determinati requisiti per essere idonei per la memorizzazione nella cache. Per altre informazioni, vedere Memorizzare nella cache i dati.

Il codice lato server può modificare qualsiasi oggetto dati nella cache dei dati. I controlli associati alle istanze di dati memorizzate nella cache vengono sincronizzati con l'interfaccia utente, in modo che tutte le modifiche sul lato server apportate ai dati vengano visualizzate automaticamente quando il documento viene aperto nel client.

Accedere ai dati nella cache

È possibile accedere ai dati nella cache dalle applicazioni esterne a Office, ad esempio da un'applicazione console, da un'applicazione Windows Form o da una pagina Web. L'applicazione che accede ai dati memorizzati nella cache deve avere attendibilità totale; Un'applicazione Web con attendibilità parziale non può inserire, recuperare o modificare i dati memorizzati nella cache in un documento di Office.

La cache dei dati è accessibile tramite una gerarchia di raccolte esposte dalla CachedData proprietà della ServerDocument classe :

  • La CachedData proprietà restituisce un oggetto CachedData, che contiene tutti i dati memorizzati nella cache in una personalizzazione a livello di documento.

  • Ognuno CachedData contiene uno o più CachedDataHostItem oggetti. Un CachedDataHostItem oggetto contiene tutti gli oggetti dati memorizzati nella cache definiti all'interno di una singola classe.

  • Ognuno CachedDataHostItem contiene uno o più CachedDataItem oggetti. Un CachedDataItem oggetto rappresenta un singolo oggetto dati memorizzato nella cache.

    Nell'esempio di codice seguente viene illustrato come accedere a una stringa memorizzata nella cache nella Sheet1 classe di un progetto di cartella di lavoro di Excel. Questo esempio fa parte di un esempio più ampio fornito per il Save metodo .

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

Modificare i dati nella cache

Per modificare un oggetto dati memorizzato nella cache, eseguire in genere i passaggi seguenti:

  1. Deserializzare la rappresentazione XML dell'oggetto memorizzato nella cache in una nuova istanza dell'oggetto . È possibile accedere al codice XML utilizzando la Xml proprietà dell'oggetto CachedDataItem che rappresenta l'oggetto dati memorizzato nella cache.

  2. Apportare le modifiche alla copia.

  3. Serializzare di nuovo l'oggetto modificato nella cache dei dati usando una delle opzioni seguenti:

    • Se si desidera serializzare automaticamente le modifiche, utilizzare il SerializeDataInstance metodo . Questo metodo usa il formato DiffGram per serializzare DataSetgli oggetti set di dati tipizzati DataTable, e nella cache dei dati. Il formato DiffGram garantisce che le modifiche apportate alla cache dei dati in un documento offline vengano inviate correttamente al server.

    • Se si desidera eseguire la propria serializzazione per le modifiche ai dati memorizzati nella cache, è possibile scrivere direttamente nella Xml proprietà . Specificare il formato DiffGram se si usa un DataAdapter oggetto per aggiornare un database con le modifiche apportate ai dati in un DataSetset di dati tipizzato , DataTableo . In caso contrario, verrà DataAdapter aggiornato il database aggiungendo nuove righe anziché modificando le righe esistenti.

Modificare i dati senza deserializzare il valore corrente

In alcuni casi, è possibile modificare il valore dell'oggetto memorizzato nella cache senza prima deserializzare il valore corrente. Ad esempio, è possibile eseguire questa operazione se si modifica il valore di un oggetto con un tipo semplice, ad esempio una stringa o un numero intero, o se si inizializza un documento memorizzato DataSet nella cache in un server. In questi casi, è possibile utilizzare il SerializeDataInstance metodo senza prima deserializzare il valore corrente dell'oggetto memorizzato nella cache.

Nell'esempio di codice seguente viene illustrato come modificare il valore di una stringa memorizzata nella cache nella Sheet1 classe di un progetto di cartella di lavoro di Excel. Questo esempio fa parte di un esempio più ampio fornito per il Save metodo .

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

Modificare i valori Null nella cache dei dati

La cache dei dati non archivia gli oggetti con valore Null quando il documento viene salvato e chiuso. Questa limitazione ha diverse conseguenze quando si modificano i dati memorizzati nella cache:

  • Se si imposta un oggetto nella cache dei dati sul valore Null, tutti gli oggetti nella cache dei dati verranno impostati automaticamente su Null all'apertura del documento e l'intera cache dei dati verrà cancellata quando il documento viene salvato e chiuso. Ovvero, tutti gli oggetti memorizzati nella cache verranno rimossi dalla cache dei dati e la CachedData raccolta sarà vuota.

  • Se si compila una soluzione con oggetti Null nella cache dei dati e si desidera inizializzare questi oggetti usando la ServerDocument classe prima dell'apertura del documento per la prima volta, è necessario assicurarsi di inizializzare tutti gli oggetti nella cache dei dati. Se si inizializzano solo alcuni oggetti, tutti gli oggetti verranno impostati su Null all'apertura del documento e l'intera cache dei dati verrà cancellata quando il documento viene salvato e chiuso.

Accedere ai set di dati tipizzato nella cache

Se si desidera accedere ai dati in un set di dati tipizzato sia da una soluzione Office che da un'applicazione esterna a Office, ad esempio un'applicazione Windows Form o un progetto di ASP.NET, è necessario definire il set di dati tipizzato in un assembly separato a cui si fa riferimento in entrambi i progetti. Se si aggiunge il set di dati tipizzato a ogni progetto tramite la Configurazione guidata origine dati o Progettazione set di dati, .NET Framework considererà i set di dati tipizzato nei due progetti come tipi diversi. Per altre informazioni sulla creazione di set di dati tipizzato, vedere Creare e configurare set di dati in Visual Studio.