做SharePoint开发这两年来,InfoPath使用的频率颇高,用InfoPath来填写数据,查询数据等非常方便,并且InfoPath还可以承载代码,使得它在SharePoint的开发中大有作为,但是代码只有开发人员才懂写,对于一般的管理人员来说实在有点难,前不久,学到了一招,今天特来做个笔记,可以不使用代码将InfoPath中的数据提交到列表,具体方法如下:
首先,需要建立一个待提交数据的列表,我建了一个名为“Reporting Data”的列表,然后给其新建了3栏,具体结构如下:
然后我用记事本新建了一个名为“添加新项目”的XML文档,当中的字段名和列表中字段名的Internal Name一一对应,文档内容如下:
1 <?xml version="1.0" encoding="UTF-8"?>
2 <Batch OnError="Continue">
3 <Method ID="1" Cmd="New">
4 <Field Name='Title'></Field>
5 <Field Name="Money"></Field>
6 <Field Name="Month"></Field>
7 <Field Name="Year"></Field>
8 </Method>
9 </Batch>
接下来,我打开InfoPath新建了一个空白表单,对其添加了一个从“XML文档”接收数据的数据连接:
选择了我刚刚新建的XML文档作为数据源:
然后再添加一个从“SharePoint库或列表”接收数据的数据连接,选择最开始建立的那个名为“Reporting Data”的列表,这个数据源主要用来展示数据,方便用户直观的看到是否将新的数据成功添加了。不过在添加的时候选择域的那一步需要将我之前添加的字段全部勾上,如下:
OK,现在已经对该表单添加了两个数据连接,这两个数据连接均需勾上“在表单打开时自动检索数据”这个选项。
好了,接收数据的工作到这里就已经做完了,接下来需要做的是提交数据了,先将InfoPath表单做好,首先将查看数据的部分先做好,在域中选择辅助数据源“Reporting Data”,建立一个重复表用来展示列表的数据:
建完后然后建立一个提交数据的表,在域中选择辅助数据源“添加新项目”,选择Field组,建立一个重复表:
建完后再在表单中添加一个按钮,用来做提交,然后给之前建立的两个重复表添加列名,做完后整个表如下:
现在整个表单的结构设计基本就完成了,但是还差一步,也是最重要的一步,就是数据提交,这里我才用的Web Service提交,新建一个提交数据的数据连接,选择“提交到Web服务”,如下:
然后在Web服务中输入:http://YourServerName/_vti_bin/Lists.asmx,下一步,选择UpdateListItems方法:
然后下一步,将参数listName设置为主数据源的listName域:
将updates参数设置为辅助数据源“添加新项目”的Batch组,特别要注意的一点就是包括那里必须选择为“XML 子树(包括选定元素)”:
好了,这下提交数据的连接也有了,下面就对表单中的按钮做提交设置,选中按钮,右键选择其“属性”,在常规一栏中将操作设置为“提交”,然后单击“提交选项”,选择“使用规则执行自定义操作”,然后将提交后的选项选择“保持表单打开”,这个的目的是为了能立即看到是否添加数据成功了,具体操作界面如下:
由于我所选择的是“使用规则执行自定义操作”提交数据,所以还需要设置下规则,为了提交完能立即看到新的数据,所以提交完数据后需要做一次查询操作:
现在几乎所有的工作都做完了,但是我们提交到哪个列表呢,好像还没指定吧,所以还需要最后一步,给主数据源的listName设置域值,这里可以设置为目标列表的名称,如我最开始建立的列表“Reporting Data”,或者填写该列表的Guid值,列表的Guid值如何取得呢?有个很简单的方法,打开我最开始建立的列表,在Ribbon上选择“列表设置”,然后去看URL地址栏,发现URL为http://ServerName/_layouts/listedit.aspx?List=%7B3D955683%2D4AB0%2D470C%2DB309%2D315BD9755850%7D
URL中的QueryString “List”的值即为该列表的Guid,但是还不是Guid的格式,这里需要更改一下,将“%7B”替换为“{”,“%2D”替换为“-”,“%7D”替换为“}”,所以上面的一串字符串替换成Guid就变成了{3D955683-4AB0-470C-B309-315BD9755850},将此Guid值或列表名填写在listName域的默认值中:
然后点击确定,OK,所有的设置就全部结束了,现在选择“预览表单”,就看到了如下的界面,上面显示了“Reporting Data”列表中现在已经存在的值,下面就是用来填写新数据的表:
下面填写一组数据提交测试一下吧,新的数据提交完立马就能在上面看到了。