Run form in the background API
Since Orbeon Forms 2017.2.
This is an Orbeon Forms PE feature.
The purpose of this service is to run a form definition, either in "new" mode or in "edit" mode, but in the background, optionally running one or more processes in addition to the regular execution of the form.
This allows scenarios such as:
- create new form data in the database
- read, modify and update existing form data
- URLs:
/fr/service/$app/$form/new
/fr/service/$app/$form/edit/$document
- Method:
POST
Where:
$app
is the form definition's application name$form
is the form definition's form name$document
is the form data's document id
Optional request body when using
/new
:Content-Type: application/xml
When not
POST
ing any XML data, just POST
an empty request body to the service.By default, the latest published and available form definition version is used. You can request a specific form definition version using the
form-version
parameter. For example:/fr/service/acme/order/new?form-version=2
/fr/service/acme/order/edit/fc4c32532e8d35a2d0b84e2cf076bb070e9c1e8e?form-version=3
Response body:
Content-Type: application/xml
- contains
- the newly created or existing document id
- whether all processes were successful
Example response body:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<document-id>9eff349bfd95aab8d4d5e048bd25a815</document-id>
<process-success>true</process-success>
</response>
The following property controls what process(es) to run:
oxf.fr.detail.process.
after-controls|after-data|before-data.
background.
new|edit.
$app.
$form
where
$app
and $form
represent a Form Runner application name and/or form name or *
wildcards, as is usual with Form Runner configuration properties.[SINCE Orbeon Forms 2021.1]
This must first be enabled with the following property:
<property
as="xs:boolean"
name="oxf.fr.detail.service.background.enable-return-data.*.*"
value="true"/>
Then, if you pass the URL parameter
return-data=true
to the service, form data is returned:<response>
<document-id>9eff349bfd95aab8d4d5e048bd25a815</document-id>
<data>
<form>
<my-section>
<my-control>Cat</my-control>
</my-section>
</form>
</data>
<process-success>true</process-success>
</response>
By default, the data is returned in the 4.0.0 data format. You can override this by passing the
data-format-version
parameter:data-format-version
edge
: send the data in the latest internal format2019.1.0
: send the data in the Orbeon Forms 2019.1-compatible format4.8.0
: send the data in the Orbeon Forms 4.8-compatible format4.0.0
: send the data in the Orbeon Forms 4.0-compatible format (the default)
The
prune-metadata
parameter can be used to control production of metadata:true
to remove all occurrences offr:
-prefixed elements and attributesfalse
to leave such occurrences- default
false
whendata-format-version
is set toedge
true
otherwise
[SINCE Orbeon Forms 2021.1]
[SINCE Orbeon Forms 2021.1]
The following URL parameters, passed to the service, allow disabling the evaluation of some categories of formulas when the form runs:
disable-default=true
: disable the evaluation of initial valuesdisable-calculate=true
: disable the evaluation of calculated valuesdisable-relevant=true
: disable the evaluation of visibility values
The following example saves new instance data to the database for the form
acme/sales
when the service is called with /fr/service/acme/sales/new
:<property
as="xs:string"
name="oxf.fr.detail.process.after-controls.background.new.acme.sales">
save
</property>
The following example updates existing instance data with the current time for the form
acme/sales
and saves it to the database when the service is called with /fr/service/acme/sales/edit/$document
, where $document
represents an existing form data document id:<property
as="xs:string"
name="oxf.fr.detail.process.after-controls.background.edit.acme.sales">
xf:setvalue(ref ="//current-time", value = "current-dateTime()") then save
</property>
The following process allows you to
POST
XML data to the page:<property as="xs:string" name="oxf.fr.detail.process.after-controls.background.new.*.*">
validate("error")
</property>
NOTE: Make sure you use
validate("error")
instead of require-valid
, as the latter always returns a success value.The following examples use the curl command-line utility, on a form
a/a
(i.e. with app name = a
and form name = a
), and where relevant document id 123
. Along with using the appropriate server name, you'll want to replace those by your actual form name, app name, and document id.- The
new
background service:curl -X POST http://localhost:8080/orbeon/fr/service/a/a/new
- The
edit
background service:curl -X POST http://localhost:8080/orbeon/fr/service/a/a/edit/123
- Appropriate container or permission headers must also be set to allow accessing the form definition and data.
Last modified 1yr ago