By adding form-based input to freeform content, you can structure topics with unlimited, easily searchable categories. A form is enabled for a web and can be added to a topic. The form data is shown in tabular format when the topic is viewed, and can be changed in edit mode using edit fields, radio buttons, check boxes and list boxes. Many different form types can be defined in a web, though a topic can only have one form attached to it at a time.
Typical steps to build an application based on Foswiki forms:
For a step by step tutorial, see AnApplicationWithWikiForm.
YourForm, ExpenseReportForm, InfoCategoryForm, RecordReviewForm, whatever you need.
Name, Type, Size, Values, Tooltip message, and Attributes (see sample below).
Example:
| *Name* | *Type* | *Size* | *Values* | *Tooltip message* | *Attributes* |
| TopicClassification | select | 1 | NoDisclosure, PublicSupported, PublicFAQ | blah blah... | |
| OperatingSystem | checkbox | 3 | OsHPUX, OsLinux, OsSolaris, OsWin | blah blah... | |
| OsVersion | text | 16 | | blah blah... | |
Name Type Size Values Tooltip message Attributes TopicClassification select 1 NoDisclosure, PublicSupported, PublicFAQ blah blah... OperatingSystem checkbox 3 OsHPUX, OsLinux, OsSolaris, OsWin blah blah... OsVersion text 16 blah blah...
See structure of a form for full details of what types are available and what all the columns mean.
You can also retrieve possible values for select, checkbox or radio types from other topics:
Example:
- In the WebForm topic, define the form:
Name ![]()
Type Size Values Tooltip message Attributes TopicClassification select 1 blah blah... OsVersion text 16 blah blah... OperatingSystem checkbox 3 blah blah...
Leave the
Valuesfield blank.
- Then in the TopicClassification topic, define the possible values:
| *Name* |
| NoDisclosure |
| Public Supported |
| Public FAQ |
Name NoDisclosure Public Supported Public FAQ
Field values can also be set using the result of expanding other macros. For example,
%SEARCH{"Office$" scope="topic" web="%USERSWEB%" nonoise="on" type="regex" format="$web.$topic" separator=", " }%
When used in the value field of the form definition, this will find all topic names in the Main web which end in "Office" and use them as the legal field values.
Forms have to be enabled for each individual web. The WEBFORMS setting in WebPreferences is optional and defines a list of possible form definitions.
Example:
- Set WEBFORMS = BugForm, FeatureForm, Books.BookLoanForm
WEBFORMS enabled, an extra button is added to the edit view. If the topic doesn't have a Form, an Add Form button appears at the end of the topic. If a Form is present, a Change button appears in the top row of the Form. The buttons open a screen that enables selection of a form specified in WEBFORMS, or the No form option.
SEARCH to define WEBFORMS.
WebTopicEditTemplate topic in a web, or a new topic that serves as an application specific template topic. Initial Form values can be set there.
formtemplate parameter in the (edit or save) URL. Initial values can then be provided in the URLs or as form values: name, ex: ?BugPriority=1
namevalue=1, ex: ?ColorRed=1. <form name="newtopic" action="%SCRIPTURLPATH{"edit"}%/%WEB%/">
<input type="hidden" name="formtemplate" value="MyForm" />
New topic name <input type="text" name="topic" size="40" />
<input type="submit" class="foswikiSubmit" value="Create" />
</form>
save script instead of the edit script in the form action. When you specify the save script you must to use the "post" method. Example: <form name="newtopic" action="%SCRIPTURLPATH{"save"}%/%WEB%/" method="post">
.....
</form>
edit and save scripts understand many more parameters, see CommandAndCGIScripts#edit and CommandAndCGIScripts#save for details.
A form definition specifies the fields in a form. A form definition is simply a TML table contained in a topic, where each row of the table specifies one form field.
Each column of the table is one element of an entry field: Name, Type, Size, Values, Tooltip message, and Attributes.
The Name, Type and Size columns are required. Other columns are optional. The form must have a header row (e.g. | *Name* | *Type* | *Size* |).
Name is the name of the form field.
The Type, Size and Value fields describe the legal values for this field, and how to display them.
Type checkbox specifies one or more checkboxes. The Size field specifies how many checkboxes will be displayed on each line. The Value field should be a comma-separated list of item labels. Type checkbox+buttons will add Set and Clear buttons to the basic checkbox type.
Type radio is like checkbox except that radio buttons are mutually exclusive; only one can be selected.
Type label specifies read-only label text. The Value field should contain the text of the label.
Type select specifies a select box. The Value field should contain a comma-separated list of options for the box. The Size field can specify a fixed size for the box (e.g. 1, or a range e.g. 3..10. If you specify a range, then the box will never be smaller than 3 items, never larger than 10, and will be 5 high if there are only 5 options. select type: select+multi turns multiselect on for the select, to allow Shift+Click and Ctrl+Click to select (or deselect) multiple items.
select+values allows the definition of values that are different to the displayed text. For example: | Field 9 | select+values | 5 | One, Two=2, Three=III, Four | Various values formats |shows but the values or options
Two and Three are 2 and III respectively.select+multi+values
Type text specifies a one-line text field. Size specifies the text box width in number of characters. Value is the initial (default) content when a new topic is created with this form definition.
Type textarea specifies a multi-line text box. The Size field should specify columns x rows, e.g. 80x6; default size is 40x5. As for text, the Value field specifies the initial text
Type date specifies a single-line text box and a button next to it; clicking on the button will bring up a calendar from which the user can select a date. The date can also be typed into the text box. Size specifies the text box width in characters. As for text, the Value field specifies the initial text
Tooltip message is a message that will be displayed when the cursor is hovered over the field in edit view.
Attributes specifies special attributes for the field. Multiple attributes can be entered, separated by spaces.
H indicates that this field should not be shown in view mode. However, the field is available for editing and storing information.
M indicates that this field is mandatory. The topic cannot be saved unless a value is provided for this field. If the field is found empty during topic save, an error is raised and the user is redirected to an oops page. Mandatory fields are indicated by an asterisks next to the field name.
For example, a simple form just supporting entry of a name and a date would look as follows:
| *Name* | *Type* | *Size* | | Name | text | 80 | | Date | date | 30 |Field Name Notes:
Aeroplane Manufacturers is equivalent to AeroplaneManufacturers.
label field has no name, it will not be shown when the form is viewed, only when it is edited.
select, checkbox or radio field, and want to get the values from another topic, you can use [[...]] links. This notation can also be used when referencing another topic to obtain field values, but a name other than the topic name is required as the name of the field.
label, text, and textarea fields the value may also contain commas. checkbox fields cannot be initialized through the form definition.
| character in the initial values field, you have to precede it with a backslash, thus: \|.
<nop> to prevent macros from being expanded.
| *Name* | *Type* | *Size* | | AeroplaneManufacturers | select | |the Foswiki will look for the topic AeroplaneManufacturers to get the possible values for the
select.
The AeroplaneManufacturers topic must contain a table, where each row of the table describes a possible value. The table only requires one column, Name. Other columns may be present, but are ignored.
For example:
| *Name* | | Routan | | Focke-Wulf | | De Havilland |
Notes:
Values column must be empty in the referring form definition.
checkbox
+multi anywhere in the name
SubmitExpenseReport topic where you can create new expense reports, a SubmitVacationRequest topic, and so on. These can specify the required template topic with its associated form. Template topics has more.
text fields when a topic is saved. If you need linefeeds in a field, make sure it is a textarea.
Copyright © by the contributing authors. All material on this site is the property of the contributing authors.