Skip to main content

Type Reference

Operation Types

TypeDescriptionExamples
Create,
Update,
Delete
Create, Update or Delete a single instance of a DataElement. Any parameters with an underlying field are are automatically mapped.#1,#2,#3
BatchCreate,
BatchUpdate,
BatchDelete
Create, Update or Delete multiple instances of a DataElement in a single call. Any parameters with an underlying field are automatically mapped.#4,#5,#6,#7
CustomOperation without predefined implementation. Can be used as a placeholder for custom business logic.#8
QueryOperation which executes a (possibly native) INSERT/UPDATE query on the dataElement.#9
Workflow.Trigger
(requires workflows)
Operation which can be used as a Workflow trigger in combination with ByDataOperation.#10

Parameter Types

TypeDescriptionExamples
TargetParameterTargets the current DataElement. Can receive more than one target by setting the multiple flag.#1, #3, #5, #6, #7, #8, #9, #10
TypedParameterAdds a parameter with a give valueType.#8, #9
FieldParameterLinks a parameter to a Field and inherits its type#1, #2, #4, #5, #7
AssociationParameterLinks parameter to any DataElement as a reference#8
FileUploadParameterLinks a parameter to a Field which is marked for FileUploads#1
GroupParameterAdds a list of another ParameterGroup specified on this DataOperation.#4, #5

Options

Some operations can be further tweaked using options:

Option
jpa.query.native QueryOperation

When defined and used in a JPA application, the underlying query will be a native query instead of a JPQL query.

<options>
<jpa.query.native/>
</options>
Option
persistence.update.sparse UpdateOperation

Changes the update implementation to use a sparse query instead of the default entity based update. This prevents accidentally updating fields that were not actually changed by the operation. Primarily useful if there is a need for concurrent updates on a DataElement.

<options>
<persistence.update.sparse/>
</options>

Examples

Ex1. Create Operation

Operation which creates an Address with a street (String) and country (Ln02).

<dataOperation>
<type>Create</type>
<name>register</name>
<parameterGroups>
<parameterGroup>
<parameters>
<parameter type="operations::FieldParameter">
<name>street</name>
<field>contacts::Address::street</field>
</parameter>
<parameter type="operations::FieldParameter">
<name>country</name>
<field>contacts::Address::country</field>
</parameter>
<parameter type="operations::FileUploadParameter">
<name>attachment</name>
<field>contacts::Address::attachment</field>
</parameter>
</parameters>
</parameterGroup>
</parameterGroups>
</dataOperation>

Ex2. Update Operation

Operation which updates an Address with a street (String) and country (Ln02).

<dataOperation>
<type>Update</type>
<name>update</name>
<parameterGroups>
<parameterGroup>
<parameters>
<parameter type="operations::TargetParameter">
<name>target</name>
</parameter>
<parameter type="operations::FieldParameter">
<name>street</name>
<field>contacts::Address::street</field>
</parameter>
<parameter type="operations::FieldParameter">
<name>country</name>
<field>contacts::Address::country</field>
</parameter>
</parameters>
</parameterGroup>
</parameterGroups>
</dataOperation>

Ex3. Delete Operation

Operation which deletes an Address by reference.

<dataOperation>
<type>Delete</type>
<name>remove</name>
<parameterGroups>
<parameterGroup>
<parameters>
<parameter type="operations::TargetParameter">
<name>target</name>
</parameter>
</parameters>
</parameterGroup>
</parameterGroups>
</dataOperation>

Ex4. BatchCreate Operation

Operation which creates multiple Addresses.

<dataOperation>
<type>BatchCreate</type>
<name>batchCreate</name>
<parameterGroups>
<parameterGroup>
<parameters>
<parameter type="operations::GroupParameter">
<name>addresses</name>
<targetGroup>contacts::Address::batchCreate::item</targetGroup>
</parameter>
</parameters>
</parameterGroup>
<parameterGroup>
<name>item</name>
<parameters>
<parameter type="operations::FieldParameter">
<name>street</name>
<field>contacts::Address::street</field>
</parameter>
<parameter type="operations::FieldParameter">
<name>country</name>
<field>contacts::Address::country</field>
</parameter>
</parameters>
</parameterGroup>
</parameterGroups>
</dataOperation>

Ex5. BatchUpdate Operation (items)

Operation which updates multiple Addresses.

<dataOperation>
<type>BatchUpdate</type>
<name>batchUpdate</name>
<parameterGroups>
<parameterGroup>
<parameters>
<parameter type="operations::GroupParameter">
<name>addresses</name>
<targetGroup>contacts::Address::batchCreate::item</targetGroup>
</parameter>
</parameters>
</parameterGroup>
<parameterGroup>
<name>item</name>
<parameters>
<parameter type="operations::TargetParameter">
<name>address</name>
</parameter>
<parameter type="operations::FieldParameter">
<name>street</name>
<field>contacts::Address::street</field>
</parameter>
<parameter type="operations::FieldParameter">
<name>country</name>
<field>contacts::Address::country</field>
</parameter>
</parameters>
</parameterGroup>
</parameterGroups>
</dataOperation>

Ex6. BatchDelete Operation

Operation which deletes multiple Addresses.

<dataOperation>
<type>BatchDelete</type>
<name>batchDelete</name>
<parameterGroups>
<parameterGroup>
<parameters>
<parameter type="operations::TargetParameter">
<name>addresses</name>
<multiple>true</multiple>
</parameter>
</parameters>
</parameterGroup>
</parameterGroups>
</dataOperation>

Ex7. BatchUpdate Operation (targets)

Operation which updates multiple Addresses with fixed values.

<dataOperation>
<type>BatchUpdate</type>
<name>batchDelete</name>
<parameterGroups>
<parameterGroup>
<parameters>
<parameter type="operations::TargetParameter">
<name>addresses</name>
<multiple>true</multiple>
</parameter>
<parameter type="operations::FieldParameter">
<name>street</name>
<field>contacts::Address::street</field>
</parameter>
<parameter type="operations::FieldParameter">
<name>country</name>
<field>contacts::Address::country</field>
</parameter>
</parameters>
</parameterGroup>
</parameterGroups>
</dataOperation>

Ex8. Custom Operation

Operation with an empty performer, provide a custom implementation.

<dataOperation>
<type>Custom</type>
<name>sendMail</name>
<parameterGroups>
<parameterGroup>
<parameters>
<parameter type="operations::TargetParameter">
<name>target</name>
</parameter>
<parameter type="operations::TypedParameter">
<name>emailAddress</name>
<type>String</type>
</parameter>
<parameter type="operations::TypedParameter">
<name>title</name>
<type>String</type>
</parameter>
<parameter type="operations::TypedParameter">
<name>contents</name>
<type>String</type>
</parameter>
<parameter type="operations::AssociationParameter">
<name>sender</name>
<dataElement>account::User</dataElement>
</parameter>
</parameters>
</parameterGroup>
</parameterGroups>
</dataOperation>

Ex9. Query Operation

Operation which executes an JPQL query.

UPDATE com.contacts.Address SET status = :newStatus WHERE status = :expectedStatus AND id = :id;
<dataOperation>
<type>Query</type>
<name>compareAndSetStatus</name>
<parameterGroups>
<parameterGroup>
<parameters>
<parameter type="operations::TargetParameter">
<name>id</name>
</parameter>
<parameter type="operations::TypedParameter">
<name>expectedStatus</name>
<type>String</type>
</parameter>
<parameter type="operations::TypedParameter">
<name>newStatus</name>
<type>String</type>
</parameter>
</parameters>
</parameterGroup>
</parameterGroups>
</dataOperation>

Ex10. Trigger Operation

Operation which triggers a workflow transition.

<dataOperation>
<type>Workflow.Trigger</type>
<name>myTrigger</name>
<parameterGroups>
<parameterGroup>
<parameters>
<parameter type="operations::TargetParameter">
<name>target</name>
</parameter>
</parameters>
</parameterGroup>
</parameterGroups>
</dataOperation>
<!-- ... workflow ... -->
<transition>
<triggers>
<trigger type="operations::ByDataOperation">
<name>by:myTrigger</name>
<dataOperation>contacts::Address::myTrigger</dataOperation>
</trigger>
</triggers>
</transition>