Часто бизнес-приложение под Office будет использовать сервер, который работает как центральное хранилище документов. Здесь возникает дилемма: офисные приложения (такие как Word и Excel) не предназначены для работы в серверной среде, когда много их экземпляров может понадобиться считывать из файла подкачки (для обработки множества запросов к расширению на уровне документа). До настоящего момента для расширения Office мы использовали объекты объектной модели Office. Это подразумевает, что на компьютере, выполняющем ваш исполняемый модуль, должен быть инсталлирован Office — а для типовых серверных инсталляций это совершенно не характерно. К счастью, одной из основных целей архитектуры уровня документов Office является четкое отделение данных от представления данных. Иначе говоря, архитектура VSTO определяет способ доступа к документу без фактического использования клиентского приложения Office. Вместо него используется сама исполняющая среда VSTO.
Ключом доступа к серверной стороне документа является класс ServerDocument. Этот класс (который является частью исполняющей среды VSTO и находится в пространстве имен Microsoft.VisualStudio.Tools.Applications) позволяет произвести программный доступ к кэшу данных документа на тех компьютерах, где нет инсталлированного Office. Работающий на сервере процесс передает путь к необходимому документу в конструктор ServerDocument, а затем использует классы CachedDataHostltem и CachedDataltem для получения либо схемы, либо XML (либо и того, и другого) из острова данных документа.
Если на целевом компьютере инсталлирована исполняющая среда VSTO, то для доступа к данным заказов на покупку (из электронной таблицы заказов на покупку на сервере) можно использовать следующий код:
string poFile = @"C:\ServerData\po39233202.xls";
ServerDocument poDoc = null;
poDoc = new ServerDocument(poFile);
CachedDataHostltem dataHostltem =
sdl.CachedData.HostItems["ExcelWorkbookl.DataSheetl"];
CachedDataltem dataCache = dataHostltem.CachedData["CachedPO"];
// Свойство dataCache.Xml будет содержать XML //из указанного острова данных
При помощи свойства dataCache .Xml вы можете теперь десериализоваться обратно в исходный тип данных, просмотреть данные и т. д.