Microsoft InfoPath 2010
The official blog of the Microsoft InfoPath team

Submitting to a SharePoint List

Submitting to a SharePoint List

Rate This

As you know, submitting to a Microsoft Windows SharePoint form library from an InfoPath form is quite simple: just add a “submit” type of data connection to InfoPath and away you go. However, submitting to a SharePoint List is another matter. In this post, we will take a look at the steps necessary to enable this functionality.

Step 1: Create the list

1. Create a new custom list named: MyContacts
2. From the Settings button choose List Settings
3. Click Create Column
4. Add the following columns/data types:

  • FirstName, Single line of text
  • LastName, Single line of text
  • Email, Single line of text
  • Phone, Single line of text

The next step is to create a Collaborative Application Markup Language (CAML) template that contains the same XML nodes as the columns we added to our list – this will be used as a secondary data connection in the InfoPath Form Template.

Step 2: Create the CAML template

1. Launch Notepad (or any text editor)
2. Copy and paste the following code to the Notepad document:

<?xml version="1.0" encoding="UTF-8"?>
<Batch OnError="Continue">
    <Method ID="1" Cmd="New">
        <Field Name='Title'></Field>
        <Field Name="FirstName"></Field>
        <Field Name="LastName"></Field>
        <Field Name="Email"></Field>
        <Field Name="Phone"></Field>
    </Method>
</Batch>

3. Save this as: Add List Item Template.xml

 

Step 3: Create the InfoPath Form Template

1. Create a new, blank, browser-compatible form template
2. Add a “Receive” type secondary data connection to the Add List Item Template.xml file created in Step #2. (Make sure the options “Include the data as a resource file in the form template” and “Automatically retrieve data when the form is opened” are enabled.)
3. Add a “Receive” type secondary data connection to the “MyContacts” SharePoint List created in Step #1 and make sure the option “Automatically retrieve data when the form is opened” is enabled.
NOTE: Be sure to include the “Title” field along with the custom fields we created.

Each SharePoint list is created with a unique identifier called a GUID. In order to submit items to a SharePoint list, you must know the unique GUID for that list. These next steps will enable you to identify the GUID for your “MyContacts” list.

Step 4: Identify the list GUID

1. Open a browser and navigate to the MyContacts list
2. From the Settings menu choose List Settings
3. In the browser’s address bar you will see the URL appended with “List=”

 

4. Copy everything after the equals sign and paste this into a text editor as we will need this value later on.

NOTE: We will need the list GUID to be formatted as “{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}”. If your GUID appears as above with the hyphens and braces “escaped” (i.e. %7B for the braces and %2D for the hyphens) then you will need to replace the escaped characters with the braces and hyphens so when we use this GUID later, it will appear as: {1E76517B-2C36-4473-A420-A737D98589BC}

Step 5: Add controls to the InfoPath Form Template

1. Open the Data Source Task Pane
2. From the Data Source dropdown box choose the “MyContacts” connection

3. Right-click on “MyContacts” and choose Repeating Table – this will add a repeating table bound to that connection to your View
4. From the Data Source dropdown box choose Main
5. Add a text box to the “myFields” node named: ListName and set the Default Value property to the GUID value of your list – we will use this node to specify the list when we perform the Submit operation

 

To update the SharePoint list we will be using the “UpdateListItems” method of the SharePoint “lists.asmx” web service. This web method requires a couple of parameters (the list name and what gets updated) – now that we have added the “ListName” node which contains the GUID and we have the Add List Item Template XML data connection which describes our data structure we have all the necessary information to add the “UpdateListItems” web method!

Step 6: Add the “lists.asmx” web service

1. Add a new “Submit” type of web service data connection to the “lists.asmx” web service – this is typically located at: http://servername/_vti_bin/lists.asmx
2. Select the “UpdateListItems” operation
3. Double-click the “listname” parameter and assign the “my:ListName” node as the value

4. Double-click the “updates” parameter, select the “Add list Item Parameter” data source, select “Batch” and click OK
5. For the “Include” option select “XML subtree, including selected element”

6. Complete the Data Connection Wizard

Now that we have all the connections that are required, we now need to add the “submit” functionality to the form template.

Step 7: Add Submit functionality

1. Display the Data Source Task Pane
2. From the Data Source dropdown box choose the Add List Item Template data connection
3. Drill down through the data source, right-click on the Field node and choose Repeating Table

 

We need to change the text box control in the “Name” column to Read-only – if these values were to be changed it would affect the CAML and the submit would fail.
• Double-click on the text box in the Name column of the Repeating Table
• Select the Display tab
• Enable the Read-only property and click OK
• Add a new Button control to the View
• Double-click the button to display the Properties
• Click the Submit Options button
• Enable the option “Allow users to submit this form”
• Enable the option “Perform custom action using Rules” and click the Rules button
• Click the Add button
• Click the Add Action button
• From the Action dropdown box choose “Submit using a data connection”, select the “Web Service Submit” data connection and click OK
• Click the Add Action button
• From the Action dropdown box choose “Query using a data connection”, select the “MyContacts” data connection and click OK (this will automatically refresh the list in InfoPath so you can see the newly added record)

• Click OK until you are back to your form

NOTE: If you want to automatically clear out the submitted values, add another action to this Rule to “Set a field’s value” and the only option you need to specify is the “Field” option – select the “Field” node from the “Add List Item Template” data connection and then simply leave the Value option blank.

Step 8: Test!

1. Click the Preview button to preview the form
2. Fill in values for each of the fields: Title, First Name, Last Name, E-mail and Phone

3. Click the Submit button – the contact information should be submitted successfully and the “MyContacts” list automatically updated!

A special thanks to Matt Faus of InfoPathDev for for initially posting this solution!

Scott Heim
Support Engineer

Leave a Comment
  • Please add 4 and 4 and type the answer here:
  • Post
  • Hi,

    Well - as you have seen, if anonymous access is enabled that anonymous user cannot submit directly to SharePoint. As such, you will need to create a custom web service to handle the submit and create the form - so no - there is no way (that I know of <G>) to do this without writing custom web service code.

    Scott

  • Hi,

    Yes, I understand that, I just figured that the lists.asmx web service could be used.

    :) Actually, I think the major problem isn't that anonymous users can't submit to a library. I think the major issue is that for anonymous users to submit to a list you have to give them view priviliges as well.

    Cheers

    apersson

  • Hi Scott,

    I tried to follow all the steps you mentioned and encountered no error but when i started to submit the form, i am recieving the following error:

    InfoPath cannot submit the form.

    An error occurred while the form was being submitted.

    The SOAP response indicates that an error occurred on the server:

    Exception of type 'Microsoft.SharePoint.SoapServer.SoapServerException' was thrown.

    <detail><errorstring xmlns="http://schemas.microsoft.com/sharepoint/soap/">The system cannot find the file specified. (Exception from HRESULT: 0x80070002)</errorstring></detail>

    How am i gonna solve this? Please advise.

    Thanks,

    icee

  • Hi icee,

    Did you try the *exact* steps I documented? I have not seen this specific error before regarding this process so the first thing to make sure of is that you are following the exact steps - no changes. Then once this sample is working, move forward with your actual scenario.

    Scott

  • This tutorial worked for me.  The one thing I ran into and corrected is when setting up the webservice on a teamsite the servername in the following example must contain the full path to the team site you want to create this webservice for.

    http://servername/_vti_bin/lists.asmx

  • I do have a question though.  In this tutorial you're only using a CAML template, which is only allowing me to use a repeating table.  The repeating table is the exact format as the list form on sharepoint which I'm trying to break away from.  

    Is there any way to design a form the way you want and have the fields send to a sharepoint list.  and if not is there any way to have a form update the fields in the CAML list so I don't have to comprimise the look of my form?

  • Thanks scott and hunter,i think i made a mistake in the url of the web service, now it submits successfully, thanks

  • Hi Scott,

    When I hit the Submit button I get the following error. I have followed the exact steps as what is in the blog. Can you please urgently help me with this matter.

    The error is:

    The data connection MyContacts is using a URL: http://auperadev03:82/sites/ChangeControlPortal/ChangeControlDev03Site/Lists/MyContacts/AllItems.aspx

    The error I am getting is as follows:

    InfoPath cannot submit the form.

    An error occurred while the form was being submitted.

    The SOAP response indicates that an error occurred on the server:

    Exception of type 'Microsoft.SharePoint.SoapServer.SoapServerException' was thrown.

    <detail><errorstring xmlns="http://schemas.microsoft.com/sharepoint/soap/">There is no Web named "/sites/ChangeControlPortal/ChangeControlDev03Site".</errorstring></detail>

    Kind Regards

    darryl2912

  • Hi Scott,

    I figured this one out.

    ...Sorted this now....I was selecting the list service of the root site instead of the sub site......

    darryl2912

  • Hi Scott

    In submitting the InfoPath form according to your blog, which I now have got it to work I want to be able to also submit with that form an attachment. Do you know how to do this using the CAML approach that you had used in your blog. It must be possible but I do not know how to. Any other blogs or have you got a solution for this as well. What can I place in the xml to get it to work. This would be very handy for us.

    Kind Regards

    darryl2912

  • Hi Scott Heim,

    I have a problem when submitting a infopath form to a doc library. I am a newbie, tried to follow the steps defined in thw url:

    http://articles.icscentral.com/Kb%20Articles/274/826993.aspx

    But when I test my form, I get an error:

    "InfoPath cannot submit the form.

    The OnSubmitRequest event handler returned a value indicating that the submit failed"

    When I tried debugging the code, I found error is generated on line: [oXmlHttp.Open("HEAD", strUrl, false;]

    and by placing the code below in the Catch(ex) section

    XDocument.UI.Alert(ex.message);

    XDocument.UI.Alert(ex.number);

    I get the message as "Permission denied". The error number returned is "-2146828218".

    Any clue as to why is this happening.

    I have even given full control acess to the site and have created a "Test" Doc Lib so my strUrl is "http://oss1/sites/PnP/Test/testform.xml"

    Thanks for any help.

    zullu

  • Hi darryl2912,

    I am been testing functionality to include an attachment but have not been 100% successful. When I have some time to work on this, I will look at it again and if successful, will modify this post.

    Zullu,

    Based on the error, it seems you still have a Permissions problem. Try creating a submit connection in the InfoPath UI to the same library...can you submit without any error?

    Scott

  • I can view the List Item Data in Infopath form as well I can Add the New List Itsm in Sharepoint List through this code. Its working fine.

    I am looking for the updating existing list Itmes data through this UpdateListItem web service but not able to get through...

    plz look in to it..thanks

  • Thanks for the article. I followed the steps described in this article. When I click submit I get the message saying "This form was submitted succesfully". But there is no new item in my contacts list. Do you know what I might be missing here?

    Thanks for any help?

  • Hi gorpade,

    Have you reviewed the comments in this post to see if any of them help? A number of folks have received this same behavior and were able to resolve the problem. Make sure the list service you are calling is for the appropriate site.

    Scott

Page 3 of 37 (542 items) 12345»