表单是MOSS的一个很重要的特性,特别是有了Form Services的支持后,我们在做表单解决方案的时候,经常会用到Infopath, 那么如何使用代码访问保存于SharePoint表单库中的InfoPath表单的内容,是必需知道的。
总结了下,有如下3种方式可实现代码对表单内容的访问:
1. 提升表单模板属性
2. 通过XmlDocument 对象对表单文件操作
3. 反序列化表单数据架构

接下来,分别简单谈谈这3种方法的简单实现步骤

第一种方式: 提升表单模板属性表单操作:
在设计完表单模板,执行发布向导的过程中,发布希望通过代码访问的表单字段,且勾允许用户编辑
用代码访问InfoPath表单内容
访问代码:
首先是获取当前List Item ,SPListItem item=infopath项,如
SPListItem item= workflowProperties.
Item;
 item ["WorkflowStatus"] = value; 
item.Update();

这种方式很简单,但是由于允许用户编辑,安全性不好。对一些敏感的数据,不建议用这方法。

第二种方式: 通过XmlDocument 对象对表单文件操作

Infopath 是以xml格式保存数据的,因此我们可以通过XML接口访问表单数据

SPFile myfile = item.File;
Stream stream = new MemoryStream(myfile.OpenBinary());
XmlTextReader reader = new XmlTextReader(stream);
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(reader);

接下来就可以对xml进行分析了。

第三种方式: 反序列化表单数据架构

Infopath 表单模板文件.xsn 是一个压缩包,文件解压开后,里面有个描述表单数据架构的.xsd文件,然后通过.Net Framework的xsd.exe命令行工具,通过这个.xsd文件得到一个proxy类,然后在项目中使用这个类

比如在一个工作流的初始化窗体Init.xsn

/反序列化workflowProperties.InitiationData以得到初始窗体的实例
XmlSerializer xs = new XmlSerializer(typeof(Init));

XmlTextReader xtr = new XmlTextReader(new System.IO.StringReader(workflowProperties.InitiationData));

Init init = (Init)xs.Deserialize(xtr);

//InfoPath表单的内容反序列化成了一个对象init,然后直接访问这个对象的属性就行了
String s=init.comments;

相关文章: