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 3 and 3 and type the answer here:
  • Post
  • Hi Troels,

    Sounds like you may have missed something? The code still populates the "Add list item template" XML file and executes the "Web Service Submit" data connection. It is this connection that is tied to your list. Assuming you have this setup, make sure of the following:

    - The "lists" web service that is used to submit the data *must* be referenced for the same level as the list you are trying to populate. For instance, if your list is here:

    http://server/subsite/Lists/ListName

    Then the web service URL would be like this:

    http://server/subsite/_vti_bin/lists.asmx

    However, if your list is at the root level like this:

    http://server/Lists/ListName

    Then the web service URL would look like this:

    http://server/_vti_bin/lists.asmx

    There are a number of other issues that can cause data to not be sent to the list. Browse through all the comments and you will see a number of troubleshooting steps for these issues.

    Scott

  • <a href="http://www.aengiascacascscaerinccascasgcaguideksdfjls.tv">age of empires guide</a>

  • I got all the way to step 5 with InfoPath 2010 (somehow this 2007 link showed up for me at

    blogs.msdn.com/.../default.aspx) and was thrown for a loop, because I couldn't figure out how to "Open the Data Source Task Pane". Rather frustrating.

  • I am very new to Sharepoint/Infopath. I have followed this post step by step. I have published the form to a Form Library. On click of new I can see the existing items. But on click of "Submit" I get an error message saying "An error occurred while form was being submitted". Please help me with this.

  • I made a mistake in the Webservice selection for lists. Now I am able to submit and I also See the success message - but item is not being inserted in the List. Please help.

  • nice article!!!!

    http://www.oxwebs.com

  • Does this work with browser-compatible forms? I performed the steps documented and verified them several times.  When I click the Submit button, I receive no error message, yet the new item is not added to the SharePoint list.

  • Hi Dave,

    Yes - this works with browser forms. If you are using InfoPath and SharePoint 2007, go through the comments in this blog. I know there are a lot of them but many folks had the same experience and there are a number of reasons this can happen.

    If you have migrated to InfoPath 2010 and SharePoint 2010, then you no longer need to use this method. You can simply "customize" your list with InfoPath (this is an option on the Ribbon in the list), modify the form as you need and publish it back. Now, all the forms for the list will be your InfoPath form.

    Scott

  • Hi Chulbul,

    Browse through the comments in this blog - there are a number of reasons why the items would not be added to the list and all of these are covered at various points in the comments.

    Scott

  • Sorry, I have a silly question here... the screenshots in Step 6, is that done in SharePoint Designer or Infopath 2010?

    Thanks

  • Hi BOM,

    InfoPath - and I believe, the 2007 version.

    Scott

  • Hi Scott,

    Thanks for answering my question.

    I did all the steps in here and it worked well. Now I need to tweek some of the steps here for my own objective.

    1. Lets say i have more than 4 fields in the info form of different kinds - dropdown menus and check boxes. How do I edit the CAML code in Step 2?  

    2. How can I put controls on the repeating table that's submitting data to the SharePoint list? In this example, all fields in the table are text fields. Can I make some of them drop down menus and checkboxes?

    3. Lastly, I only need to submit data to a sharepoint list. I dont want the data in my Shapoint list to get populated in the infopath. Can this be done?

    Any advise will be appreciated.

    Thanks again.

  • Hi BOM,

    I know there are a lot of comments to this post but if you look through them, I provide complete steps for how to use other types of controls. I would encourage you to read through as much as possible on the other design options because depending on the design you choose, it may only work in the InfoPath application (versus a browser form.)

    Scott

  • Hello, Scott,

    tried thrice from scratch, read all comments.

    But on clicking Submit button I am getting:

      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="schemas.microsoft.com/.../">Element <Batch> of parameter updates is missing or invalid.

           </errorstring>

    </detail>

    I use Sharepoint Online, Plan E3

  • I resolved the problem of my previous comment "Element <Batch> of parameter updates is missing or invalid"  

    In Step 6.7, in Data Connaction Wizard  for "tns:updates" I should have chosen in "Include:" drop-down list the value: "XML, subtree, including selected element"  

Page 28 of 36 (537 items) «2627282930»