Click here to Skip to main content
Click here to Skip to main content

Programmatically create a browser enabled InfoPath form

, 12 Feb 2009
Rate this:
Please Sign up or sign in to vote.
How to programmatically create a browser enabled InfoPath form.

Introduction

The article gives an overview of the steps and code required to create, fill, and upload an InfoPath form using code.

Design Infopath Form

Create an InfoPath form using the Microsoft InfoPath designer. This sample form will store the name and surname of the client and a table of products and amounts.

Image1.jpg

Create Class Representation of the Infopath Form

  1. Save the InfoPath form:
  2. Image2.jpg

    Figure 2 - Save as Source File
  3. Load the Visual Studio Command Prompt:
  4. Image3.jpg

  5. Locate form the source files:
  6. Image4.jpg

  7. Execute the command xsd.exe /c /l:CS myschema.xsd.
  8. The XSD tool forms part of the .NET framework tools. We will use it to generate a common language class from the XSD file representation of the InfoPath form.

    Image5.jpg

    Figure 5 – Generated myschema class
// 
// This source code was auto-generated by xsd, Version=2.0.50727.1432.
// 
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.1432")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true,
 Namespace="http://schemas.microsoft.com/office/infopath/2003/myXSD/2009-02-04T09:20:42")]
[System.Xml.Serialization.XmlRootAttribute(
  Namespace="http://schemas.microsoft.com/office/infopath/2003/myXSD/2009-02-04T09:20:42",
  IsNullable=false)]
public partial class myFields {
private string nameField;
private string surnameField;
private ProductRow[] productTableField;
private System.Xml.XmlAttribute[] anyAttrField;.....
.....
.....

Once the file is available in the project, you have the capability to bind the data source to the .NET class and access the data in a standardized format. If you ever make changes to your InfoPath data source, you’ll need to rerun the xsd.exe command against the new “schema.xsd” file.

Upload Form Template to a SharePoint Form Site

Image6.jpg

Figure 6 – Publish

Image7.jpg

Figure 7

Image8.jpg

Figure 8 – Select SharePoint Server

Image9.jpg

Figure 9

Image10.jpg

Figure 10

Image11.jpg

Figure 11

Image12.jpg

Figure 12

Image13.jpg

Figure 13

Populate and Upload Form Data

Populate the myFields class with dummy data. The class was created using the XSD application.

// Populate myfields class with dummy data. The class was created using the xsd
// application.
myFields fields = new myFields();
fields.Name = "Joe";
fields.Surname = "Blogs";
ProductRow[] rows = new ProductRow[2];
rows[0] = new ProductRow();
rows[0].ProductAmount = "1";
rows[0].ProductName = "Peach Jam";
rows[1] = new ProductRow();
rows[1].ProductAmount = "2";
rows[1].ProductName = "Strawberry Jam";
fields.ProductTable = rows;
// Create infopath form
MemoryStream myInStream = new MemoryStream();
// Form site used to store the generated forms
string rFormSite = @"http://sp/Sample Form";
// Location where form template is stored.
string rTemplateLocation = @"http://sp/Sample Form/Forms/template.xsn"; 
using (myInStream)
{
    // InfoPath forms are XML files. We have to write code to programmatically
    // generate the XML of the InfoPath form
    //Create XmlSerializer using myfields type
    XmlSerializer serializer = new XmlSerializer(typeof(myFields));
    XmlTextWriter writer = new XmlTextWriter(myInStream, Encoding.UTF8);
    // Insert infopath processing instructions
    string rInstruction = 
      "name=\"urn:schemas-microsoft-com:office:infopath:" + 
      "UploadSample:-myXSD-2009-02-04T09-20-42\"";
    rInstruction += 
        "solutionVersion=\"1.0.0.2\" productVersion=\"12.0.0.0\"
        PIVersion=\"1.0.0.0\" href=\"" + rTemplateLocation + "\"";
    // An important thing you need to make sure of is that the href attribute
    // in the mso-infoPathSolution processing instruction points to the correct
    // form template you published. 
    writer.WriteProcessingInstruction("mso-infoPathSolution", rInstruction);
    // Mark the xml as an infopath document. 
    writer.WriteProcessingInstruction("mso-application",
        "progid=\"InfoPath.Document\" versionProgid=\"InfoPath.Document.2\"");
    // Serialize infopath data
    serializer.Serialize(writer, fields);
    // Upload form to form site.
    using (SPSite site = new SPSite(rFormSite))
    {
        // Create web instance.
        using (SPWeb spweb = site.OpenWeb())
        {
            // Add the file to the web file list.
            spweb.Files.Add(rFormSite + "\\" + Path.GetRandomFileName() + ".xml",
                myInStream.GetBuffer());
        }
    }                             
}

Result

Image14.jpg

Figure 14 – New Item in Form Library

Image15.jpg

Figure 15 – Form Loaded with Data

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Simon Bonello
Architect
Malta Malta
No Biography provided

Comments and Discussions

 
QuestionRepecting table PinmemberVikram Stephen8-Apr-13 17:14 
GeneralMy vote of 5 Pinmemberamirhosseinhashemzadeh11-Sep-11 23:31 
QuestionSSIS data flow compoenent Pinmemberkuthuparakkal2-Aug-11 15:29 
AnswerRe: SSIS data flow compoenent PinmemberDeadLock062-Nov-11 5:11 
GeneralMy vote of 4 PinmemberMember 43146617-Jul-10 4:17 
GeneralCheckboxes and Date Fields PinmemberJennifer Berg11-Mar-10 4:35 
AnswerRe: Checkboxes and Date Fields PinmemberJennifer Berg11-Mar-10 7:08 
GeneralRe: Checkboxes and Date Fields PinmemberScott T.31-Aug-12 6:12 
QuestionGreate tips! PinmemberErwinGan17-Jan-10 6:28 
Generalfieldxxxspecified in browser form template prevents fieldxxx from submitting to form library Pinmembermarkah_199918-Dec-09 4:38 
QuestionRe: fieldxxxspecified in browser form template prevents fieldxxx from submitting to form library PinmemberMember 43146617-Jul-10 4:16 
QuestionQuestion regarding the generated Xml file PinmemberZaid A.26-Mar-09 7:28 
QuestionRe: Question regarding the generated Xml file PinmemberHamez16-Jun-09 21:31 
AnswerRe: Question regarding the generated Xml file PinmemberHepple16-Jul-09 1:48 
GeneralRe: Question regarding the generated Xml file PinmemberKalyan_Vizag21-Jul-09 2:12 
QuestionRe: Question regarding the generated Xml file PinmemberSharePointLearner8-Apr-13 9:58 
QuestionRe: Question regarding the generated Xml file PinmemberSharePointLearner8-Apr-13 8:17 
QuestionNice work a few corrections I made... [modified] PinmemberPeter Weissbrod17-Mar-09 11:08 
AnswerRe: Nice work a few corrections I made... PinmemberSimon Bonello20-Mar-09 3:06 
AnswerRe: Nice work a few corrections I made... Pinmembermarkah_199918-Dec-09 4:37 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web04 | 2.8.140902.1 | Last Updated 12 Feb 2009
Article Copyright 2009 by Simon Bonello
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid