在Microsoft Office SharePoint Server (MOSS) 2007中,表单库(Forms Library)是一个常见的组件,用于存储和管理InfoPath表单。为了能够在C#中操作这些表单,开发了一个助手类,它可以将InfoPath表单的组件序列化成对象,也可以将对象反序列化回表单。这样,就可以利用工作流(Workflow)来捕获或设置表单的任何组件的值。
将使用两种方法来操作InfoPath的控件。第一种方法是使用传统的XML,通过XPathNavigator和XmlDocument对象模型来获取和设置值。第二种方法是使用从InfoPath表单代码中导出的类,这需要使用XSD.exe工具。第一种方法的灵感来自于以下网址:
第二种方法的灵感来自于以下网址:
即使没有MOSS 2007,也可以像处理简单表单一样使用这个助手类。以下是C#代码示例:
string sStatus = string.Empty;
string sFileSource = string.Empty;
sFileSource = "InfoPathForm.xml";
// 获取XML中代表InfoPath表单的字段Status的值
InfoPathHelper.FileName = sFileSource;
sStatus = InfoPathHelper.Value("Status");
// 设置字段Status的值
InfoPathHelper.SetValue("Status", "En Progreso ...");
// 也可以通过反序列化InfoPath表单来获取任何字段的值
misCampos InfoPathForm = (misCampos)InfoPathHelper.DeserializeFile(sFileSource, typeof(misCampos));
sStatus = InfoPathForm.Status;
// 转到MOSS中的特定项(InfoPath表单)
SPSite site = new SPSite("http://miportal.intranet");
SPWeb web = site.AllWebs["Sistemas/Incidentes"];
SPList list = web.Lists["FomulariosInfoPath"];
SPListItem item = list.Items[0];
// 设置代表InfoPath表单的文件名
InfoPathHelper.SPFileName = item;
// 从表单中获取字段Status的值
sStatus = InfoPathHelper.Value("Status");
// 为表单的字段设置值
InfoPathHelper.SetValue("Status", "En Progreso ...");
// 使用反序列化获取InfoPath表单中的字段值的另一种方式
// 这只能获取值,但不能设置任何值
// 对象InfoPathFromMoss将包含表单的所有字段
misCampos InfoPathFormMoss = (misCampos)InfoPathHelper.DeserializeFile(item.File, typeof(misCampos));
sStatus = InfoPathFormMoss.Status;