Add a Dynamic Map to a Contact Form using REST Web Services
Update: Due to a change in the Bing Maps REST Web Service, the steps outlined in this blog post no longer work. We are looking into the possibility of using a different API, and will update this post soon with details.
Hi, Phil Newman here from the InfoPath team. In this post, I’ll explain how to use the new REST Web service data connection in InfoPath 2010 to add a dynamic map to a contacts form. The form connects to two Web services. The first is a REST Web service that returns the coordinates of a given address from Bing Maps, the second returns an image of a map for a given coordinate set. When users enter address information in the form, the map will update to display the specified address.
The following steps assume that:
- You’ve already created your Contacts list in SharePoint and customized the form for the list in InfoPath.
- You have a Bing Maps key (see http://msdn.microsoft.com/en-us/library/ff428642.aspx)
Add the Data Connections
In InfoPath Designer, click “From REST Web Service” on the “Data” tab.
On the first page of the Data Connection wizard, enter the URL of the Bing Maps REST Web service that will return the GPS coordinates for the specified address. The URL must contain sample parameters that will return valid values at runtime. Otherwise the connection will not be configured. Here is my starting URL (you will need to replace YourBingMapsKey with your own Bing Maps key value) :
http://dev.virtualearth.net/Services/v1/GeocodeService/GeocodeService.asmx/Geocode?culture=en-us&count=10&query=1%20Microsoft%20Way%20Redmond%20wa%20&landmark=&addressLine=&locality=&postalTown=&adminDistrict=&district=&postalCode=&countryRegion=&mapBounds=¤tLocation=&curLocAccuracy=&entityTypes=&rankBy=&key=YourBingMapsKey
Note that I’ve included a default address of “1 Microsoft Way Redmond WA” so that the Web service will return valid XML.
On the next page of the Data Connection wizard, specify a name for the data connection. Since in this scenario we only want the map to be displayed when the user enters an address, clear the “Automatically retrieve data when the form is opened” check box, and click “Finish”.
Because the Bing Maps Web service is not on the SharePoint server, the data connection must be converted to a data connection (.udcx) file. Click “Data Connections” on the “Data” tab, select the data connection, and click “Convert to Connection File”. The connection file must be saved to a Data Connection Library on the SharePoint site and approved before it can be used. (For more about data connections and UDC files, go here)
Add a Rule to query the REST Web Service
The next step is to create a rule to change the parameters in the REST Web Service URL based on the address values entered in the form. The Web service will then be queried using these parameters.
Add a button to the form.
Select the button and click “Manage Rules” on the “Home” tab.
(NOTE – the button is being used as a temporary placeholder for creating the rules. In InfoPath 2010, you can copy and paste rules between controls. We’ve built in smarts so that when you copy a rule to a different control, field references are updated. In this case we do not want the references to be updated so we will create the rules on the button and then copy and paste it on to the Address fields.)
On the “Rules” task pane, click “New”, “Action” and add a “Change REST URL” rule action.
Build an expression that concatenates values in the form to create the URL
Click the “Insert Function” button and add the Concat function from the “Text” category.
Replace the default value for the address with parameters from the form. Since the Concat function concatenates strings, each hard coded string must be in quotes. Use the “Insert Field or Group…” button to add fields from the form to the expression.
Click OK in the “Insert Formula” and “Rules Details” dialogs. The underlined words in the image below are fields in the form being used as parameters in the URL.
Here is the Formula (you will need to replace YourBingMapsKey with your own Bing Maps key value) :
concat("http://dev.virtualearth.net/Services/v1/GeocodeService/GeocodeService.asmx/Geocode?culture=en-us&count=10&query=", Address, ", ", City, ", ", State/Province, "&landmark=&addressLine=&locality=&postalTown=&adminDistrict=&district=&postalCode=&countryRegion=&mapBounds=¤tLocation=&curLocAccuracy=&entityTypes=&rankBy=&key=YourBingMapsKey")
Add a “Query for Data” rule action to query the REST Web Service with the new URL parameters.
Add a Rule action to set the URL of the Map picture control
To display the map of the current location in the picture control, append the latitude and longitude values returned by the Bing Maps REST Web Service to the URL for that image.
Add a “Set a field’s value” rule action to set the URL of the picture control to the map of the current location.
Set the value of the field to the following expression in which “Latitude” and “Longitude” are fields from the REST Web service response. The expression used to build the map image URL is as follows (you will need to replace YourBingMapsKey with your own Bing Maps key value) :
concat("http://api.tiles.virtualearth.net/api/GetMap.ashx?ppl=24,,", Latitude, ",", Longitude, "&key= YourBingMapsKey")
Add a condition to the rule so that it only executes if the Address, City and State / Province fields are not blank.
Copy the rule from the button you created earlier and paste it onto the Address, City and State / Province controls.
Add a rule to the picture control to hide it if the URL is blank.
From the File tab, click “Quick Publish”.
Now, open the form in the browser and fill it out. As soon as you have entered an address, the map of that location will appear in the form.
3 important things to remember when using the REST Web Service data connection:
- Always start with a valid URL for your REST Web service.
- To change the parameters in the URL, add a “Change REST URL” rule action.
- To execute the connection, add a “Query for Data” rule action.
Please leave a comment if you have any questions or feedback about this feature!
Phil Newman
Program Manager
Comments
Anonymous
February 14, 2010
Hi Phil, Cool idea to make the forms richer! I decided to try it out, but my form didn't show any map pictures. Some troubleshooting pointed me to the two URL's you use in your blog: http://dev.virtualearth.net/Services/v1/GeocodeService/GeocodeService.asmx gives me a Runtime Error. http://api.tiles.virtualearth.net/api/GetMap.ashx gives me a HTTP 400 Bad Request. Could it be that I need to use different URL's? Thanks! MaartenAnonymous
February 16, 2010
The comment has been removedAnonymous
February 17, 2010
Hi Phil, Thanks for your reply! I didn't change anything in my form, but when I opened it just now, to do some more checking, it worked like a charm! Thanks again :-) MaartenAnonymous
February 18, 2010
Looks good. But is InfoPath now requiring the user to know if they are connecting to a soap or rest web service? How will a power user know what to select?Anonymous
February 19, 2010
We are expecting form designers to know which type of Web service they are using. For most of the web services I've seen, the technology they use is documented along with instructions on how to use them. SOAP and REST web services are very different in the way that you interact with them. In a nutshell, you pass parameters to REST Web services in InfoPath by changing parameters in the URL while for SOAP Web services, the URL doesn't change and parameters are set using query fields in the form. Please let me know if you have any other questions. PhilAnonymous
May 11, 2010
Hi Phil, I used the picture control but it doesn´t work fine. Any idea?Anonymous
May 11, 2010
Can you provide more details on the problem you're having. thanks.Anonymous
June 05, 2010
Hi Phil, Thank you for such a great post. Can you please upload the XSN file you have worked on the above feature. Not sure, why Picture control does not work out for me. Ref : When the Rule executes, it produces following error Message over the picture control, "Only base-64 encoded boinary data allowed". Plese help !Anonymous
June 07, 2010
I have a feeling you are using an embedded picture control instead of a linked picture control. Can you try re-adding the picture control and make sure that the "As a link" option is selected in the "Insert Picture Control" dialog. Let me know if that doesn't work.Anonymous
June 11, 2010
Hi Phil, Thanks for the response. Unfortunately, embedded picture control instead of a linked picture control did not work either. Can you please upload the xsn file instead. Kind Regards, Srikrushna Patro.Anonymous
June 14, 2010
Hi Srikrushna, Unfortunately, the .xsn won't be much help because it can only be published to the list from which it was created. From your last comment, it looks like you're still using the embedded picture control which includes the picture data in the form as 64-bit encoded binary. Can you try re-adding the picture control checking the "As a link" option? Make sure the control is also bound to a new field. The linked and embedded picture controls have different field types. You shouldn't have to worry about any of this if you insert the linked control. PhilAnonymous
July 20, 2010
Hi Phil, I'm trying to replicate what youre doing but I keep getting the following message when I try add the REST Web Service Data Connection: "Infopath cannot open the XML document... Not enough storage is available to process this command." Any ideas?Anonymous
July 21, 2010
Hi Phil, Please ignore my previous comment, it was a connectivity issu on my side. I was able to continue. I've followed your instructions through and successfully published my form, however when I click my geolocate button and it queries the data connection, it is giving the following error: "A query to retrieve form data cannot be completed because this action would violate cross-domain restrictions. " Any suggestions? Thank-you. RoganAnonymous
July 21, 2010
Rogan, For this to work, InfoPath Forms Services must be configured to allow cross-domain data connections. Ask your SharePoint Administrator to check the "Allow cross-domain data access for user form templates that use connection settings in a data connection file" checkbox on the "Configure InfoPath Forms Services" page in central admin. That should solve the problem. PhilAnonymous
July 21, 2010
Thanks Phil, I sorted that out now. Another problem though, I'm getting an error "Unable to connect to the remote server" Log ID:5566. The environment here gets interent access through a proxy, so I assume it has something todo with that but I don't know how to get around this or tell infopath about this proxy etc. Make sense? Any ideas? RoganAnonymous
October 02, 2010
Hi, I completed the steps. However, forms, 5566's "The remote server returned an error: (405) Method Not Allowed.)" Error.Anonymous
October 21, 2010
Hey, Phil, I've been using this every since you posted the article and have loved it, but now that Bing changed to this whole Bing Maps Key thing. No matter what I do, I always get the 405 error like Serkan. Does this actually work? I registered, have created keys, and can't get it to work unless doing it from the client. It always fails from the browser.Anonymous
October 25, 2010
Thanks for your continued interest in our REST Web services in InfoPath. I've followed up with people on the Bing REST services to find a workaround and we're still working out the solution to the problem. I'll keep you posted when we have news. PhilAnonymous
December 24, 2010
Hi Phil,I have completed all steps.When i am opening form in Browser and after filing address,city,state fields Map is not showing up .Its showing this error Error: XML data that is required for this form to function correctly cannot be found. An entry has been added to the Windows event log of the server. Log ID:5566 Correlation ID:49cf87fc-9d97-4e5d-9ff7-6d520c8861d7Anonymous
January 03, 2011
I get the error: Error: XML data that is required for this form to function correctly cannot be found. An entry has been added to the Windows event log of the server. Log ID:5566 I have re-created this many times following all the steps. I have allow cross-domain data access enabled. I have added the key where necessary... it still doesnt work. Any ideas?Anonymous
January 04, 2011
I have the map working but it only works locally, not when published to the server. I get XML data that is required for this form to function correctly cannot be found. Please, can you help me?Anonymous
September 26, 2011
Just wondering when you think the new solution might be available? Thanks!Anonymous
November 21, 2011
Hi, Is there anyway to change the SOAP Web Service URL? We have a ton of forms using a SOAP Web Service and the URL is going to change in the near future but the methods will stay the same. Any advice on this?Anonymous
June 07, 2012
Hi Phil - same question, different asker: Can we tie into other Geolocator Services, published through ESRI for example?Anonymous
July 26, 2012
Hi, I am getting below errors while executing REST data connection in actions on my form when login with Reader user. error msg: "A Microsoft SharePoint Server State Service error occurred while processing your request. For more information, contact your server farm administrator" when login with full control user i am geting below error msg: error msg:"XML data that is required for this form to function correctly cannot be found". can any one help me out. thanks BathulaAnonymous
November 03, 2014
Any solution for this situation ? thanks.