1、此文章已于 1:09:36 2011/1/4 重新发布到 致良知,知行如一SharePoint 2010 的那些事儿 InfoPath通过 REST Web Service 在表单中嵌入地图 2011 了,作为小弟今年的第一篇博客,我将向大家介绍一个 InfoPath 2010 中相当劲爆的功能,就是如何在我们的表单中动态的嵌入 Google 地图。好了,废话不多说,马上转入正题。如果大家已经使用过 InfoPath 2010 的话,那么你应该会发现在 InfoPath 2010 中的数据连接类型中多了一个“来自 REST Web 服务 ”,通过它我们就可以连接 Google Map 或 Bi
2、ng Map 的 REST Web Service,进而获得我们需要的地图信息。在下面这个例子中我将利用 InfoPath 重新设计 SharePoint 2010 站点中的一个联系人列表的编辑画面,最终要实现的效果是在填写完联系人地址后要自动附上一张标记了该地址的地图图片。在进行下面这个例子之前,我们还有两件事需要准备好:1. 在 SharePoint 站点中创建用于存储联系人信息的列表。2. 注册一个 Google Maps API Key,注册地址为:http:/ l首先进入我的 SharePoint 网站,打开联系人列表。这个列表是使用 SharePoint 自带的联系人列表模板创建的
3、,还没有进行过任何定制。进入这个列表后在“列表”标签下找到“自定义表单”按钮。点击该按钮打开 InfoPath Designer 2010 来设计该列表的编辑画面,如下图所示:再开始连接 Google Map 之前先让我们来重新设计一下这张表单。在这里需要新建一个图片类型的字段,以保存根据联系人地址生成的地图图片。下面创建一个连接到 Google Maps REST Web Service 的数据连接,该连接可以返回一个指定地址的GPS 坐标。该 REST Web 服务的地址如下,需要注意的是要将 API_KEY 换为你刚刚注册的 KEY。http:/ &key=因为我们在录入了联系人地址后才
4、需要获得该地址的 GPS 坐标,所以在这里要记得不要勾选“在打开表单时自动检索数据”。由于 Google Maps REST Web Service 并不在我们的 SharePoint 服务器上,所以必须将这个数据连接转换为一个连接(.udcx)文件。点击“数据”标签下的“数据连接”按钮,选择刚刚建立的数据连接然后点击“转换为连接文件”按钮。需要注意的是数据连接文件必须要保存到 SharePoint 网站中的一个数据连接库中且将其批准。下面要在表单中添加一些规则,用我们在联系人地址中输入的地址信息替代刚刚的 REST Web Service Url 地址参数的部分,然后 Web Service
5、 将用这些参数进行查询,并返回需要的坐标信息。点击“管理规则”按钮打开规则面板,并新建一个“操作”类型的规则。在 InfoPath 2010 中不仅在数据连接的类型中新加入了 REST Web 服务,在规则中也加入了一个“更改 REST Url”的操作,使用这个操作就可以根据地址字段的值获动态的获得该地址的坐标。在弹出的“规则详细信息”窗口中点击“fx”按钮,打开“插入公式”窗口。现在我们要用表单中的地址字段的值来合成该 REST Web 服务 URL,下面是这个例子中的公式:concat(“http:/ 国家/地区,“&sensor=false&key=ABQIAAAAz38Au3HCCLB
6、9gNsZwYDjFxRO31y3ZySLHpOwqxBF2wOXorf5YRQaP3xNJ7mZnb-2bqHHp6akIpIeEg“)在添加了这个“更改 REST Url”的操作后,还需添加一个“查询数据”操作,用于在更改了 REST Web 服务 URL 后根据该 URL 查询并返回坐标。最后我们要做的就是根据这个查询获得坐标值生成表单中“地图”这个图片类型字段的图片地址。继续在“地址”字段上添加规则,这次要添加一个“设置域值”的操作。仍然使用 concat 函数将通过 REST Web 服务 URL 获得的经纬度坐标与 Google Static Maps URL 组合起来动态的获得联系人地址所在坐标的 Google Map 图片。该公式为:concat(“http:/ lat, “,“, lng, “&zoom=16&size=455x455&maptype=roadmap&markers=color:blue|label:S|“, lat, “,“, lng, “&sensor=false“)OK,到了这里这张表单就基本设计完了,下面来看看最终效果如何。写了好几篇关于 InfoPath 2010 的文章了,越发感到 InfoPath 2010 的强大,相比于 2007 来说相信其会越来越多的被应用于各种项目中,各位看官觉得呢?