Kaneboy's SharePoint Blog

SharePoint & Office Zealot
随笔 - 389, 评论 - 8092, 引用 - 201

导航

关于


About me :
SharePoint Architect, MCPD, MCTS, MCT, ex-MVP

Contact me :
kaneboy@gmail.com | follow @kaneboy on twitter



标签

每月存档

最新留言

广告

 

如果使用InfoPath作为企业流程数据输入客户端,那么如何使用代码访问保存于SharePoint表单库中的InfoPath表单的内容,是必需知道的。

总结来说,要点如下:

1、获取InfoPath表单所对应的SPFile对象。这个不再详述,不管是表单库的事件处理代码,抑或外部的应用程序,都需要首先得到代表InfoPath表单的SPFile对象。

2、将InfoPath表单的所有内容读入一个Stream中:
Stream stream= new MemoryStream(file.OpenBinary());

3、通过XML接口访问表单数据。通过一个Reader把Stream里面的内容以文本的形式读出来,就得到了包含了表单所有数据的XML文档的字符串表示形式。通过XmlDocument、XPath等接口,都能一步步的检索到自己需要的信息。

4、如果你实在讨厌通过XML接口去和一堆XML数据打交道,那么就用下面这个更加OO的办法。
首先,把InfoPath的原始.xsn文件解压开,把里面描述表单数据架构的.xsd文件找到,然后通过.Net Framework带的xsd.exe命令行工具,通过这个.xsd文件得到一个proxy类,然后在项目中使用这个类。比如一个工作单表单,我们得到了一个WorkItem类:
WorkItem workItem = new XmlSerializer(typeof(WorkItem)).Deserialize(stream) as WorkItem;
就把InfoPath表单的内容反序列化成了一个对象,然后直接访问这个对象的属性就行了。

打印 | 张贴于 2005-03-03 01:35:00 | Tag:SharePoint

留言反馈

#回复: 用代码获取SharePoint站点中InfoPath表单的数据 编辑
Stream stream= new MemoryStream(file.OpenBinary());

这句代码在运行时出错阿,有人知道事什么原因吗?
已经读到spfile对象了。
2007-05-21 15:22:00 | [匿名:ken]
#re: 用代码获取SharePoint站点中InfoPath表单的数据 编辑
kaneboy, 有一个关于session的问题想请教你。
我的web part 里面使用了一个user control ,但是我在这个user control里面使用session就会出错,怎么回事啊。我已经把sharepoint的web.config里面设置了<pages enableSessionState="true" enableViewState="true" enableViewStateMac="true" validateRequest="false" />,还是不行,哪位大虾知道的,不胜感激!!!!!
2005-03-29 18:24:00 | [匿名:huajiao]
#re: 用代码获取SharePoint站点中InfoPath表单的数据 编辑
例如 在infopath
在表单中有"state"的一个文本框
在webpart中可用
File.Properties("xd_{9E6B69ED-04E9-4ADB-A351-1DDECB1A99DD}")
来获取
2005-03-23 14:39:00 | [匿名:白晓哲]
#re: 用代码获取SharePoint站点中InfoPath表单的数据 编辑
ted同志 俺们是自己攒的引擎。
2005-03-10 09:17:00 | [匿名:LEO]
#re: 用代码获取SharePoint站点中InfoPath表单的数据 编辑
我们最近实现了一个基于SPS和InfoPath的工作流引擎。可以用一个典型的应用场景来解释这个引擎:

1:首先员工打开SPS上的指定表单库,例如采购单。新建一个表单。
2:填写完毕后,员工点击保存将采购单保存到SPS的指定表单库。
3:绑定到这个表单库上的Sink感知到有新表单事件,将该事件包装为一个XML,发送到Message Queue中等待处理。
4:后台的工作流引擎轮询Message Queue,发现有新表单事件,将事件取出来,生成一个新的工作流实例。更据工作流实例中的逻辑,将该采购单发送至项目主管和部门主管所对应的文档库中。
5:项目主管和部门主管分别审核该采购单,并填写是否通过审核。
6:绑定到项目主管和部门主管表单库上的Sink会感知到这个采购单是否被审核。如果已经审核,则再次将审核事件包装为XML发送至Message Queue。
7:后台工作流引擎解析Message Queue中的XML,得到项目主管和部门主管的审核意见。
8:根据工作流实例中的逻辑,若两位主管均审核通过,则将该采购单发送至CFO,进入财务流程,并发送通知表单至该员工的个人表单库告知审核通过。若有某一位主管审核未通过,则发送通知至员工。
9:流程结束,执行备份,日志及资源回收的操作。工作流引擎等待下次事件的到来。

最近工作较忙,这套系统也在不断完善增强之中,等正式发布后,我会专门写一个系列的文章详细描述工作流引擎的架构和算法。

这里有两份该引擎工作的视频Demo,一份是基于磁盘文件系统的,一份是基于SPS表单库的,个头很大,邮箱不好发。有兴趣的朋友可以留下MSN或者QQ:fudanwangyu#hotmail.com, 593423。或者我上传到博客堂的什么地方?欢迎讨论和分享在SPS,InfoPath和Workflow Engine领域的技术和心得。
2005-03-03 09:20:00 | [匿名:leo]
对不起,目前本随笔不允许发表新评论.

Powered by: Joycode.MVC引擎 0.5.2.0