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


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

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

Применение. Сведения этого раздела применяются к проектам уровня документа для следующих приложений: Excel 2013 и Excel 2010; Word 2013 и Word 2010. Дополнительные сведения см. в разделе Доступность функций по типам приложений Office и проектов.

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

Для кэширования объекта данных в документе следует пометить его во время разработки атрибутом CachedAttribute, либо использовать метод StartCaching ведущего элемента во время выполнения.При кэшировании объекта данных в документ, среда Visual Studio Tools for Office (cреда выполнения) сериализует объект в 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"];

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

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

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

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

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

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

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

427e3fw2.collapse_all(ru-ru,VS.110).gifИзменение данных без сериализации текущего значения

В отдельных случаях необходимо изменить значение кэшированного объекта без предварительной десериализации текущего значения.Например, это может понадобиться в случае изменения значения объекта, имеющего простой тип, к примеру, строки или целого числа; либо в случае инициализации кэшированного объекта 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();
}

427e3fw2.collapse_all(ru-ru,VS.110).gifИзменение нулевого значения в кэше данных

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

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

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

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

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

См. также

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

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

Кэшированные данные в настройках уровня документа