FormSuite for Invoices v2.1 - Updated
Form Definition
User Guide > How To > Perform Advanced Operations > Form Definition

The FormDefinition defines the FormFields and FormTables that can be found on a typical invoice document. It also defines what fields and table columns will be output to the final form result.
 
The FormDefinition class comprises three members:

Default FormDefinition

FormSuite for Invoices ships with a default FormDefinition. This default contains many common field and table definitions.

Default output fields:

Default output table columns:

Creating a Custom FormDefinition

You can create a custom FormDefinition in one of the following ways:

Creating a Custom FormDefinition By Editing the Default Definition

The simplest way to create a custom FormDefinition is to edit the provided default form definition.

To edit the provided default form definition:

  1. Get the default form definition
  2. Serialize it to an XML file
  3. Make changes to the definition in an editor
  4. Deserialize the modified form definition

1. Get the Default Form Definition

Getting default form definition
Copy Code
FormDefinition formDefinition = FormDefinition.CreateDefaultDefinition();

2. Serialize the Default Form Definition to an XML File

Serializing a form definition to a XML file
Copy Code
DataContractSerializer serializer = new DataContractSerializer(typeof(FormDefinition));
 
 using (FileStream fileStream = new FileStream("MyFormDefinition.xml", FileMode.Create, FileAccess.Write))
 {
   using (XmlWriter xmlWriter = XmlWriter.Create(fileStream, new XmlWriterSettings() { Indent = true }))
   {
     serializer.WriteObject(xmlWriter, formDefinition);
     xmlWriter.Flush();
   }
 }

3. Modify the XML File

The previous step created an XML file with the current default form definition. It may now be modified in a text editor to meet your applications needs.

For example, let’s look at adding in a new "LIT Transaction Date" column to the existing Line Item Table:

4. Deserializing and Using the Updated FormDefinition

Deserializing and using the updated FormDefinition
Copy Code
DataContractSerializer serializer = new DataContractSerializer(typeof(FormDefinition));
FormDefinition formDefinition;
 
using (FileStream fileStream = new FileStream("MyFormDefinition.xml", FileMode.Open, FileAccess.Read))
{
   using (XmlReader xmlReader = XmlReader.Create(fileStream))
   {
      formDefinition = (FormDefinition)serializer.ReadObject(xmlReader);
   }
}

Creating a FormDefinition Programmatically

A FormDefinition can be created programmatically, with the following steps:

  1. Create an empty FormDefinition
  2. Create a FormFieldDefinition
  3. Create a FormTableColumnHeaderDefinition

1. Create an Empty FormDefinition

An empty FormDefinition can be created and populated programmatically. But, as stated above, FormSuite for Invoices does make some assumptions about how columns are defined. Specifically, column names start with the prefix "LIT ".

2. Create a FormFieldDefinition

FormFieldDefinition can be created programmatically and added to a FormDefinition

An example of creating a FormFieldDefiniton
Copy Code
// Create a field definition
 FormFieldDefinition fieldDefinition = new FormFieldDefinition();
 fieldDefinition.Group = FormFieldGroup.SummaryFormFieldGroup;
 fieldDefinition.IsOutput = true;
 fieldDefinition.IsRequired = true;
 fieldDefinition.Name = "My Field";
 fieldDefinition.RuleDefinitions = new List<RuleDefinition>();
 fieldDefinition.RuleDefinitions.Add(new RuleDefinition(RuleType.InsideTopRightZoneRule, 10, ""));
 fieldDefinition.Type = FormFieldDataType.Currency;
 fieldDefinition.Aliases.Add(new FieldAlias("My Field"));
 fieldDefinition.Aliases.Add(new FieldAlias("Other Field"));
 
 // Add the field definition to the form definition
 formDefinition.FieldDefinitions.Add(fieldDefinition.Name, fieldDefinition);

3. Create a FormTableColumnHeaderDefinition

Below shows adding a FormTableColumnHeaderDefinition to the form definition. Note that a FieldDefinition is created for each column definition. Also note that the name of the column and field must be the same and must start with the prefix "LIT "

Creating a table definition
Copy Code
 // Create a field definition for LIT Description
 FormFieldDefinition litDescriptionDefinition = new FormFieldDefinition();
 litDescriptionDefinition.Group = FormFieldGroup.ItemsFormFieldGroup;
 litDescriptionDefinition.IsOutput = false;
 litDescriptionDefinition.IsRequired = false;
 litDescriptionDefinition.Name = "LIT Description";
 litDescriptionDefinition.RuleDefinitions = new List<RuleDefinition>();
 litDescriptionDefinition.RuleDefinitions.Add(new RuleDefinition(RuleType.InsideTopRightZoneRule, 10, ""));
 litDescriptionDefinition.Type = FormFieldDataType.GeneralText;
 litDescriptionDefinition.Aliases.Add(new FieldAlias("Description"));
 litDescriptionDefinition.Aliases.Add(new FieldAlias("Desc"));
 // Add the field definition to the form definition
 formDefinition.FieldDefinitions.Add(litDescriptionDefinition.Name, litDescriptionDefinition);

 // Create a field definition for LIT Amount
 FormFieldDefinition litAmountDefinition = new FormFieldDefinition();
 litAmountDefinition.Group = FormFieldGroup.SummaryFormFieldGroup;
 litAmountDefinition.IsOutput = false;
 litAmountDefinition.IsRequired = false;
 litAmountDefinition.Name = "LIT Amount";
 litAmountDefinition.RuleDefinitions = new List<RuleDefinition>();
 litAmountDefinition.RuleDefinitions.Add(new RuleDefinition(RuleType.InsideTopRightZoneRule, 10, ""));
 litAmountDefinition.Type = FormFieldDataType.Currency;
 litAmountDefinition.Aliases.Add(new FieldAlias("Amount"));
 litAmountDefinition.Aliases.Add(new FieldAlias("Amt"));

 // Add the field definition to the form definition
 formDefinition.FieldDefinitions.Add(litAmountDefinition.Name, litAmountDefinition);

 // Create a table definition
 FormTableDefinition tableDefinition = new FormTableDefinition();
 tableDefinition.Name = "Line Item Table";

 // Setup the columns of the table
 FormTableColumnHeaderDefinition descriptionColumn = new FormTableColumnHeaderDefinition();
 descriptionColumn.DataType = FormFieldDataType.GeneralText;
 descriptionColumn.Name = "LIT Description";
 tableDefinition.ColumnHeaderDefinitions.Add(descriptionColumn);

 FormTableColumnHeaderDefinition amountColumn = new FormTableColumnHeaderDefinition();
 amountColumn.DataType = FormFieldDataType.Currency;
 amountColumn.Name = "LIT Amount";
 tableDefinition.ColumnHeaderDefinitions.Add(amountColumn);

 // Add the table definition to the form definition
 formDefinition.TableDefinitions.Add(tableDefinition.Name, tableDefinition);