程式 1 using System.Data; using System.Data.SqlClient; using Microsoft.Office; using Word = Microsoft.Office.Interop.Word; using Microsoft.Office.Interop.SmartTag; ... public class CustomerOrder : ISmartDocument { public CustomerOrder() { } ... } 程式 2 程式 3 程式 4 doc = new XmlDocument(); doc.Load(this.strSmartDocControlPlacePath); xnm = new XmlNamespaceManager(doc.NameTable); xnm.AddNamespace("sdc", "urn:JciStudio.Samples.Office2003.SmartDocument.SmartDocumentControlPlacement"); 程式 5 // get XML namespace from definition file. this.strNamespace = doc.SelectSingleNode("//sdc:SmartDocument", xnm) .Attributes.GetNamedItem("namespace").InnerText; // gererate Order Number. // TODO: query database or enterprise application for order number rules. iOrderID = Convert.ToInt32(rnd.Next() * 100000000); if (iOrderID < 0) iOrderID *= -1; wdoc.SelectSingleNode("//ns:CustomerOrder/ns:OrderID", "xmlns:ns='" + this.strNamespace + "'", false).Text = iOrderID.ToString(); // insert Order Date(default: date of generate this order). wdoc.SelectSingleNode("//ns:CustomerOrder/ns:OrderDate", "xmlns:ns='" + this.strNamespace + "'", false).Text = DateTime.Now.ToShortDateString(); 程式 6 程式 7 switch (XMLTypeID) { case 1: return this.strNamespace + "#CustomerOrder"; case 2: return this.strNamespace + "#OrderID"; case 3: return this.strNamespace + "#Customer"; case 4: return this.strNamespace + "#Product"; default: return null; } 程式 9 switch (XMLTypeName) { case "urn:Samples.Office2003.SmartDocument.CustomerOrder#CustomerOrder": return doc.SelectNodes("//sdc:ControlSection[@XmlMapping='']/sdc:Control", xnm).Count; case "urn:Samples.Office2003.SmartDocument.CustomerOrder#OrderID": return doc.SelectNodes("//sdc:ControlSection[@XmlMapping='OrderID']/sdc:Control", xnm).Count; case "urn:Samples.Office2003.SmartDocument.CustomerOrder#Customer": return doc.SelectNodes("//sdc:ControlSection[@XmlMapping='Customer']/sdc:Control", xnm).Count; case "urn:Samples.Office2003.SmartDocument.CustomerOrder#Product": return doc.SelectNodes("//sdc:ControlSection[@XmlMapping='Product']/sdc:Control", xnm).Count; default: return 0; } 程式 10 // get control type from control ID. strControlType = doc.SelectSingleNode("//sdc:Control[@ControlID='" + ControlID.ToString() + "']", xnm).Attributes.GetNamedItem("Type").InnerText; // mapping control type. switch (strControlType) { case "C_TYPE_ACTIVEX": return C_TYPE.C_TYPE_ACTIVEX; case "C_TYPE_BUTTON": return C_TYPE.C_TYPE_BUTTON; case "C_TYPE_CHECKBOX": return C_TYPE.C_TYPE_CHECKBOX; case "C_TYPE_COMBO": return C_TYPE.C_TYPE_COMBO; case "C_TYPE_LISTBOX": return C_TYPE.C_TYPE_LISTBOX; case "C_TYPE_RADIOGROUP": return C_TYPE.C_TYPE_RADIOGROUP; case "C_TYPE_TEXTBOX": return C_TYPE.C_TYPE_TEXTBOX; case "C_TYPE_DOCUMENTFRAGMENT": return C_TYPE.C_TYPE_DOCUMENTFRAGMENT; case "C_TYPE_DOCUMENTFRAGMENTURL": return C_TYPE.C_TYPE_DOCUMENTFRAGMENTURL; case "C_TYPE_HELP": return C_TYPE.C_TYPE_HELP; case "C_TYPE_HELPURL": return C_TYPE.C_TYPE_HELPURL; case "C_TYPE_LINK": return C_TYPE.C_TYPE_LINK; case "C_TYPE_IMAGE": return C_TYPE.C_TYPE_IMAGE; case "C_TYPE_SEPARATOR": return C_TYPE.C_TYPE_SEPARATOR; case "C_TYPE_LABEL": return C_TYPE.C_TYPE_LABEL; default: return C_TYPE.C_TYPE_SEPARATOR; }