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
Values
field 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
.