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:
FormSuite for Invoices ships with a default FormDefinition. This default contains many common field and table definitions.
Default output fields:
Default output table columns:
You can create a custom FormDefinition in one of the following ways:
The simplest way to create a custom FormDefinition is to edit the provided default form definition.
To edit the provided default form definition:
| Getting default form definition |
Copy Code |
|---|---|
FormDefinition formDefinition = FormDefinition.CreateDefaultDefinition(); | |
| 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(); } } | |
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:
| Field definition for "LIT Transaction Date" |
Copy Code |
|---|---|
<FormDefinition>
...
<FieldDefinitions>
...
<KeyValuePair>
<Key>LIT Transaction Date</Key>
<Value>
<Aliases>
<FieldAlias>
<Alias>transaction date</Alias>
<Alias>sale date</Alias>
</FieldAlias>
</Aliases>
<Group>ItemsFormFieldGroup</Group>
<IsOutput>false</IsOutput>
<IsRequired>false</IsRequired>
<Name>LIT Transaction Date</Name>
<RuleDefinitions/>
<Type>Date</Type>
</Value>
</KeyValuePair>
...
</FieldDefinitions>
...
</FormDefinition> | |
| Column definition for "LIT Transaction Date" |
Copy Code |
|---|---|
<FormDefinition>
...
<TableDefinitions>
...
<KeyValuePair>
...
<Value>
...
<FormTableColumnHeaderDefinition>
<DataType>Date</DataType>
<Name>LIT Transaction Date</Name>
</FormTableColumnHeaderDefinition>
...
</Value>
...
<KeyValuePair>
...
<TableDefinitions>
...
<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); } } | |
A FormDefinition can be created programmatically, with the following steps:
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 ".
A 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); | |
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); | |