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


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

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

Область применения. Сведения в этом разделе относятся к проектам уровня документа для Excel и Word. Дополнительные сведения см. в разделе "Функции", доступные по Приложение Office ликации и типу проекта.

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

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

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

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

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

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

  • Свойство CachedData возвращает CachedDataзначение, содержащее все кэшированные данные в настройке уровня документа.

  • Каждый CachedData содержит один или несколько CachedDataHostItem объектов. A CachedDataHostItem содержит все кэшированные объекты данных, определенные в одном классе.

  • Каждый CachedDataHostItem содержит один или несколько CachedDataItem объектов. Представляет CachedDataItem один кэшированный объект данных.

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

    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 для сериализации DataSetDataTableи типизированного объекта набора данных в кэше данных. Формат DiffGram гарантирует правильность отправки изменений в кэш данных в автономном документе на сервер.

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

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

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

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

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

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

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

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

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

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

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