Поделиться через


Доступ к данным в документах на сервере

Обновлен: Ноябрь 2007

Применение

Сведения в данном разделе относятся только к указанным проектам Visual Studio Tools for Office и версиям приложений Microsoft Office.

Тип проекта

  • Проекты уровня документа

Версия Microsoft Office

  • Выпуск 2007 системы Microsoft Office

  • Microsoft Office 2003

Дополнительные сведения см. в разделе Доступность функций по типам приложений и проектов.

Visual Studio Tools for Office позволяет программировать относительно данных в настройке на уровне документа без необходимости использования объектной модели Microsoft Office Word или Microsoft Office Excel. Это означает, что можно получить доступ к данным, содержащимся в документе на сервере, на котором не установлены Word или Excel. Например, код на сервере (например, на странице ASP.NET) может выполнять настройку данных в документе и пересылать настроенный документ конечному пользователю. Когда конечный пользователь открывает документ, код привязки данных в сборке решения привязывает настроенные данные к документу. Это возможно, поскольку данные в документе отделены от пользовательского интерфейса. Дополнительные сведения см. в разделе Модель данных в настройках уровня документа.

Кэширование данных для использования на сервере

Для кэширования объекта данных в документе следует пометить его во время разработки атрибутом CachedAttribute, либо использовать метод StartCaching ведущего элемента во время выполнения. При кэшировании объекта данных в документ, среда выполнения Visual Studio Tools for Office сериализует объект в XML-строку, которая сохраняется в документе. Чтобы объекты были пригодны для кэширования, они должны соответствовать определенным требованиям. Дополнительные сведения см. в разделе Кэширование данных.

Код на стороне сервера может обрабатывать любые объекты данных в кэше данных. Элементы управления, связанные с экземплярами кэшированных данных, синхронизированы с пользовательским интерфейсом, так что любые изменения данных на стороне сервера автоматически отображаются, когда документ открывается на клиентской стороне.

Доступ к данным в кэше

Доступ к данным в кэше может выполняться из приложений вне Office, например из консольного приложения, из приложения Windows Forms или из веб-страницы. Приложение, которое обращается к кэшированным данным, должно иметь полное доверие; веб-приложение с частичным доверием не может вставлять, извлекать или изменять данные, кэшированные в документе Office.

К кэшу данных имеется доступ через иерархию коллекций, представленных свойством CachedData класса ServerDocument.

Следующий пример кода демонстрирует доступ к кэшированной строке в классе Sheet1 проекта рабочей книги Excel. Этот пример кода является частью более масштабного примера для методаServerDocument.Save.

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

Пример кода, демонстрирующий доступ к данным в кэшированном DataSet, см. раздел Практическое руководство. Извлечение кэшированных данных из рабочей книги на сервере.

427e3fw2.alert_note(ru-ru,VS.90).gifПримечание.

Класс ServerDocument и классы кэшированных данных в пространстве имен Microsoft.VisualStudio.Tools.Applications могут использоваться только при помощи решений для системы 2007 Microsoft Office. При работе с решениями для Microsoft Office 2003 используйте класс ServerDocument и классы кэшированных данных в пространстве имен Microsoft.VisualStudio.Tools.Applications.Runtime. Дополнительные сведения см. в разделе Управление документами на сервере с помощью класса ServerDocument.

Изменение данных в кэше

Чтобы изменить объект кэшированных данных, необходимо выполнить следующие действия:

  1. Выполнить десериализацию XML-представления кэшированного объекта в новый экземпляр объекта. Доступ к XML можно получить с помощью свойства Xml элемента CachedDataItem, представляющего объект кэшированных данных.

  2. Внесите изменения в данную копию.

  3. Выполните сериализацию измененного объекта обратно в кэш данных, используя одну из следующих функций:

    • Если необходимо выполнить автоматическую сериализацию изменений, следует использовать метод SerializeDataInstance. Этот метод использует формат DiffGram для сериализации DataSet, DataTable и объектов типизированного набора данных в кэше данных. Формат DiffGram гарантирует, что изменения в кэше данных автономного документа передаются серверу правильно. Дополнительные сведения см. в разделе Объекты DiffGram (ADO.NET).

    • Если необходимо выполнить собственную сериализацию изменений в кэшированные данные, можно написать код непосредственно в свойстве Xml. Задайте формат DiffGram, если DataAdapter используется для обновления базы данных изменениями, выполненными в данных в DataSet, DataTable или в типизированном наборе данных. В противном случае DataAdapter будет обновлять базу данных, добавляя новые строки вместо изменения существующих строк.

Пример кода, демонстрирующий, как сериализовать изменения объекта кэшированных данных при помощи непосредственной записи кода для свойства Xml, см. в разделе Практическое руководство. Изменение кэшированных данных в книге на сервере.

Изменение данных без сериализации текущего значения

В отдельных случаях необходимо изменить значение кэшированного объекта без предварительной десериализации текущего значения. Например, это может понадобиться в случае изменения значения объекта, имеющего простой тип, к примеру, строки или целого числа; либо в случае инициализации кэшированного объекта DataSet в документе на сервере. В таком случае можно использовать метод SerializeDataInstance без предварительной десериализации текущего значения кэшированного объекта.

Следующий пример кода демонстрирует изменение значения кэшированной строки в классе Sheet1 проекта рабочей книги Excel. Этот пример кода является частью более масштабного примера для методаServerDocument.Save.

serverDocument1 = New ServerDocument(documentPath)
Dim hostItem1 As CachedDataHostItem = _
    serverDocument1.CachedData.HostItems("ExcelWorkbook1.Sheet1")
Dim dataItem1 As CachedDataItem = hostItem1.CachedData("CachedString")

If dataItem1 IsNot Nothing AndAlso _
    Type.GetType(dataItem1.DataType).Equals(GetType(String)) Then

    dataItem1.SerializeDataInstance("This is the new cached string value.")
    serverDocument1.Save()
End If
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();
}

Пример кода, демонстрирующий инициализацию кэшированного объекта DataSet на сервере, см. в разделе Практическое руководство. Вставка данных в книгу на сервере.

Изменение нулевого значения в кэше данных

Кэш данных не хранит объекты, имеющие значение null, при сохранении или закрытии документа. Вследствие данного ограничения при изменении кэшированных данных происходит следующее:

  • Если какому-либо объекту в кэше данных присвоено значение null, всем объектам в кэше данных автоматически присваивается значение null при открытии документа; при сохранении и закрытии документа будет выполнена полная очистка кэша данных. То есть, все кэшированные объекты будут удалены из кэша данных и коллекция CachedData будет пуста.

  • При построении решения с объектами null в кэше данных, если необходимо инициализировать данные объекты с помощью класса ServerDocument до первого открытия документа, следует проверить, чтобы все объекты в кэше данных были инициализированы. Если будут инициализированы только некоторые объекты, всем объектам при открытии документа будет присвоено значение null, и при сохранении и закрытии документа будет выполнена полная очистка кэша данных.

Доступ к типизированным наборам данных в кэше

Если необходимо получить доступ к данным в типизированном наборе данных как из решения Visual Studio Tools for Office, так и из приложения вне Office, например из приложения Windows Forms или из проекта ASP.NET, необходимо учитывать следующее:

  • Необходимо определить типизированный набор данных в отдельной сборке, на которую имеются ссылки в обоих проектах. Если типизированный набор данных добавляется к каждому проекту при помощи мастера настройки источника данных или конструктора наборов данных, .NET Framework будет рассматривать типизированные наборы данных в двух проектах как имеющие разные типы. Сведения о создании типизированных наборов данных см. в разделе Практическое руководство. Создание типизированного набора данных.

  • Необходимо предоставить в политике безопасности каждого конечного пользователя соответствующее доверие сборке, содержащей типизированный набор данных. Дополнительные сведения см. в разделе Требования безопасности при выполнении решений Office (для системы 2003).

См. также

Задачи

Практическое руководство. Извлечение кэшированных данных из рабочей книги на сервере

Практическое руководство. Изменение кэшированных данных в книге на сервере

Практическое руководство. Вставка данных в книгу на сервере

Основные понятия

Доступ к данным в документах на сервере

Модель данных в настройках уровня документа

Объекты DiffGram (ADO.NET)