InfoPath 2010调用REST的一个小应用

在做InfoPath 2007相关的项目中,我们经常使用InfoPath来调用SharePoint 2007的Web Service. 那么如今SharePoint 2010支持了REST,我们可以尝试调用REST。

需求:自定义一个SharePoint 2010 列表的表单。要求在用户输入“Title”时,检查一下当前列表中是否有相同Title的Item存在,如果存在的话,禁止表单的提交。

思路:使用InfoPath 2010调用REST实现。首先通过REST去列表中查询是否有title等于当前表单填写的Item,如果有的话,返回结果,并且禁止提交。如果查询不到,则允许提交。

第一步,自定义表单。点击列表项目的”自定义表单”,然后对表单做一些简单的处理,如下图。(列表的列有:Title, MyDate以及Query Result,这个是记录title的REST查询的返回结果的)

image

image

第二步,添加数据源. 我们需要添加一个“接收数据(Receive Data)”的数据源。我现在需要查询的是列表TestList,所用REST的URL如下:                         “http://servername/_vti_bin/listdata.svc/TestList

image

第三步,对InfoPath的Rule添加逻辑。

选中表单中的Title文本框,添加一个“当字段的值发生变化时(This Field Changed)”使用“查询数据(Query for Data)”.Rules的逻辑和调用Web Service(http://www.cnblogs.com/fanwenxuan/archive/2011/03/14/1984159.html)时的逻辑基本类似:拼接REST, 执行查询并且返回结果。

拼接REST:

concat("http://<ServerName>/_vti_bin/listdata.svc/TestList", "?$filter=Title eq ", "'", Title, "'")

image

执行查询:这里只需要做一个指向于Data Connection的“Query for data”的活动即可。

image

返回查询结果:(我这里对返回的结果的几个属性做了拼接,并且把结果的值返回到Query Result这个文本中)

image

第四步,增加验证。

我的验证逻辑是:如果查询没有返回结果,表示相同Title的Item不存在;如果有返回结果,表示存在相同Title的Item。对Title的文本控件在增加一个验证(validating)的逻辑:

Condition: Qurey Result is not blank.

ScreenTip: The item has existed.

第五步,发布表单。

接下来,就去验证你的逻辑吧!

image

 

注意:

1.在使用SharePoint 2010的REST的时候,首先要安装ADO.Net 3.5SP1:http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=3e102d74-37bf-4c1e-9da6-5175644fe22d

2.在你拼接REST时,你最好先在URL测试一下,检查是否能用。

 

参考:

http://blogs.msdn.com/b/infopath/archive/2010/02/11/add-a-dynamic-map-to-a-contact-form-using-rest-web-services.aspx

posted @ 2011-05-17 09:45  范文轩  阅读(864)  评论(0编辑  收藏  举报