A Handy Client-Side ServerDocument Utility





A Handy Client-Side ServerDocument Utility

The ServerDocument object was aptly named. It was primarily designed for exactly the scenario we have just explored: writing information into a document on a server. However, it can do a lot more, from reading the data back out of a document to updating the deployment information inside a document, to adding customizations to documents. We discuss the portions of the ServerDocument object model used in deployment scenarios in Chapter 20, and spend the rest of this chapter describing the data-manipulating tools in the ServerDocument in more detail.

Let's take a look at another illustrative use of the ServerDocument object, and then we give a more complete explanation of all its data properties and methods. Here is a handy C# console application that dumps out the "cached data manifest" and serialized cached data in a document.

-4. Creating a Cache Viewer with ServerDocument
using Microsoft.VisualStudio.Tools.Applications.Runtime;
using System;
using System.IO;
using System.Text;

namespace VSTOViewer {
  public class MainClass {
    public static void Main(string[] args) {
      if (args.Length != 1) {
        Console.WriteLine("Usage:");
        Console.WriteLine("   CacheViewer.exe myfile.doc");
        return;
      }

      string filename = args[0];
      ServerDocument doc = null;

      try {
        doc = new ServerDocument(filename, false, FileAccess.Read);
        Console.WriteLine("\nCached Data Manifest");
        Console.WriteLine(doc.CachedData.ToXml());

        foreach(CachedDataHostItem view in doc.CachedData.HostItems) {
          foreach(CachedDataItem item in view.CachedData) {
            if (item.Xml != null && item.Xml.Length != 0) {
              Console.WriteLine("\nCached Data: " + view.Id + "." +
                item.Id + " xml\n");
              Console.WriteLine(item.Xml);
            }
            if (item.Schema != null && item.Schema.Length != 0) {
              Console.WriteLine("\nCached Data: " + view.Id + "." +
                item.Id + " xsd\n");
              Console.WriteLine(item.Schema);
            }
          }
        }
      }
      catch (CannotLoadManifestException ex)
      {
        Console.WriteLine("Not a customized document:" + filename);
        Console.WriteLine(ex.Message);
      }
      catch (FileNotFoundException)
      {
        Console.WriteLine("File not found:" + filename);
      }
      catch (Exception ex)
      {
        Console.WriteLine("Unexpected Exception:" + filename);
        Console.WriteLine(ex.ToString());
      }
      finally
      {
        if (doc != null)
          doc.Close();
      }
    }
  }
}

After you compile this into a console application, you can run the console application on the command line and pass the name of the document you want to view. The document must have a saved VSTO data island in it for anything interesting to happen.

Now that you have an idea of how the ServerDocument object model is used, we can talk about it in more detail.



 Python   SQL   Java   php   Perl 
 game development   web development   internet   *nix   graphics   hardware 
 telecommunications   C++ 
 Flash   Active Directory   Windows