...
The output
defines the path in the property store where the form data must be stored as JSON property after the form has been submitted. Example:
Code Block |
---|
input"output": "$uri:property:global/app/tld.domain.myapp/objectdata/person/v1/instance/" |
Since path ends in a slash / the form framework identifies this as a new property creation and automatically appends the uuid of the new property as “filename” at the end of the path (since version 10). In versions < 10, you had to add the PE ${vars.property.uuid}
...
The PE variable at the end. This PE will be interpreted on the server side and replaced by the UUID of the property. This approach is deprecated and will be removed soon.
The form handling pipeline can listen to a property.created
event on this path then in order to get informed when a new property was created on this path:
Code Block |
---|
pipeline: - event.listen: eventKey: property.created filter: ${body.target.path.contains('/tld.domain.myapp/objectdata/person/v1/instance/')} |
The same way it works with property.updated
event.
...
Code Block |
---|
"input": "$uri:property:global/app/tld.domain.myapp/objectdata/person/v1/instance/fe97df" |
Which could return a form data (= model) as JSON to be edited similar to this:
...
Code Block | ||
---|---|---|
| ||
{ "title": "Person Form", "description": "A simple person form.", ... "layout": { "orientation": "horizontal", "items": [ "horizontal", "items": [ { "orientation": "vertical", "items": [ {"field": "firstName"}, {"field": "age"} ] }, { "orientation": "vertical", "items": [ {"field": "lastName"}, {"field": "gender"} ] } ] } } |
This example would produce a form with nested orientations like the one shown below:
...
field
Inside a layout element you can place field elements pointing to field ids (widgets). This element can contain additional attributes like these:
hidden
If set to true, the widget is not shown in the form, but the value from the input is sent to the backend on submit. Example:
Code Block | ||
---|---|---|
| ||
... { "orientation": "vertical", "items": [ {"field": "firstName"},age", "hidden": true} ] {"field": "age"} }, ]... |
readonly
If set to true, the widget value cannot be changed. Example:
Code Block | ||
---|---|---|
| ||
... }, { "orientation": "vertical", "items": [ {"field": "lastNameage"}, {"field"readonly": "gender"true} ] } ], } } |
This example would produce a form with nested orientations like the one shown below:
...
field
Inside a layout element you can place field elements pointing to field ids (widgets). This element can contain additional attributes like these:
hidden
...
... |
height
Sets the height
of this field, overwriting the default value in case the widget supports this attribute.
Example:
Code Block | ||
---|---|---|
| ||
... { "orientation": "vertical", "items": [ {"field": "agefirstName", "hiddenheight": true20} ] }, ... |
readonly
...
width
Sets the width
of this field, overwriting the default value in case the widget supports this attribute.
Example:
Code Block | ||
---|---|---|
| ||
... { "orientation": "vertical", "items": [ {"field": "agefirstName", "readonlywidth": true30} ] }, ... |
Grouping with title
and border
...
Internationalization (i18n)
TODOThe title and description of a form and also its validation messages can be internationalized (= translated to different languages). See here for more details, how this works: Internationalization (i18n).
Special Form Types
Document Understand Form (with AI support)
TODO
Variable substitution
...