InfoPath表单与C#对象序列化和反序列化助手

在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;
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485