Prefilling data

In Valtimo, forms can be prefilled with data from a case or from other external sources. This page describes how

Value resolvers

Value resolvers provide a framework to retrieve and/or store data in several sources like process variables (pv:), documents (doc:), and more.

Custom value resolvers can be created for external sources.

Supported value resolvers

Data
Description
Prefix
Postfix
Example

Case JSON data

Resolves values from the JSON content of the JsonSchemaDocument

doc:

Json path to a field

doc:person.firstName

Case columns

Resolves values from the database columns of the JsonSchemaDocument

case:

database column name in camel case

case:assigneeFullName

Process variables

Resolves values form the Camunda BPMN process variables

pv:

Process variable name

pv:lastName

ZGW value resolvers

Valtimo contains additional value resolvers for ZGW services:

  • zaak (Zaken API)

  • zaakstatus (Zaken API & Catalogi API)

  • zaakobject (Zaken API)

Data
Description
Prefix
Postfix
Example

Zaken API zaak

Resolves values from the Zaken API zaak response

zaak:

Name of the field from the zaak response

zaak:identificatie

Zaken API zaakstatus

Resolves values from the Zaken API zaakstatus response

zaakstatus:

Name of the field from the zaak statustypen response

zaakstatus:omschrijvingGeneriek

Zaken API zaakobject

Resolves values form the Zaken API zaakobject

zaakobject:

The object type and a reference to a property

zaakobject:profile:/person/firstName

More information can be found here

Custom properties

sourceKey

Value resolvers can be used to prefill a form with external data by adding the custom property sourceKey:

Configuring the sourceKey property in a form

The following prefixes are supported by default:

  • doc (Document)

  • pv (Process variable)

targetKey

Value resolvers can also be used to handle submitted form values using the custom property targetKey. If the custom property targetKey is added, it will store submitted values to the reference provided in the targetKey:

Configuring the targetKey property in a form

If a sourceKey is provided, it will store submitted values using the reference provided in the sourceKey. Unless there is a targetKey provided. Then the targetKey takes priority.

External data types

This table lists which types of data can be referred to from a form field, and which prefix to use.

Prefix
Type of data

The data in the document of a case.

The 'zaakeigenschappen' stored for the zaak in the Zaken API. Not to be confused with the properties of a zaak.

Process variables stored for any process instance that is linked to the case

The properties of a zaak in the Zaken API

The properties of 'zaakstatus' linked to a zaak in the Zaken API

The properties of 'zaakobjecten'. Objects linked to a zaak in the Zaken API

Case data

Prefix: No prefix

Uses a reference to data from the json document that stores case data in Valtimo. The dot (.) can be used to access data in nested objects.

Example: person.firstName

Zaakeigenschappen

Prefix: openzaak

Gets the zaakeigenschap that is indicated in the field expression. The available items are defined for a 'zaaktype' in de Catalogi API.

Example: openzaak:firstName

Process variables

Prefix: pv

Accesses process variables for the case for which the form is loaded. It can access all variables of all process instances for the case.

Example: pv:firstName

Zaak

Prefix: zaak

With the zaak prefix, all data inside a zaak response can be used to prefill the form. Some examples:

Source key
Type of data
Example

zaak:url

A URL reference to the zaak

https://example.com/zaken/api/v1/zaken/f4086828-b0b7-4e6c-a0ac-5ca1e44c5b06

zaak:uuid

Zaak UUID

f4086828-b0b7-4e6c-a0ac-5ca1e44c5b06

zaak:identificatie

The zaak identifier

ZK2023-00001

zaak:startdatum

The date at which the execution of the zaak was started

2023-12-12

zaak:status

A URL reference to the zaak status

https://example.com/zaken/api/v1/statussen/8265450b-9a96-4948-8a0f-eb40a26f7aea

Zaakstatus

Prefix: zaakstatus

With the zaakstatus prefix, all data inside a zaak statustypen response can be used to prefill the form. Some examples:

Source key
Type of data
Example

zaakstatus:url

A URL reference to the zaakstatus

https://example.com/zaken/api/v1/statussen/8265450b-9a96-4948-8a0f-eb40a26f7aea

zaakstatus:omschrijvingGeneriek

Zaak status description

Intake finished

zaakstatus:volgnummer

The status trace number

2

Zaakobjecten

Prefix: zaakobject

In order to use this type the following plugins have to be configured:

  • Zaken API

  • Objecten API

  • Objecttypen API

References a property in a Objecten API object referenced as 'zaakobject'. The field expression contains both the name of the 'objecttype' and a JSON Pointer to the property within the JSON store in the zaakobject. There can only be one object of the requested type linked to the zaak as zaakobject. If no or multiple objects are found, an exception will be thrown when loading the form. When the object is found, the JSON Pointer is used to find the property in the JSON stored in the data field of the object.

In order for Valtimo to find the correct object, the following needs to be configured correctly:

  • A zaak is linked to the current case by using a zaak instance link

  • A Zaken API configuration exists that has a base URL matching the zaak instance link URL

  • A zaakobject exists in the Zaken API that links the zaak to an object in the Objects API

  • An Objecten API configuration exists that has a base URL matching the object URL in the zaakobject

  • An Objecttypen API configuration exists that has a base URL matching the type from the object found

Example: zaakobject:profile:/person/firstName

Case data

By default, when creating fields in a form the data will be retrieved from and stored in the case. The property of the case that is used depends on the 'Property Name' field on the 'API' tab of the field settings.

In the example below a document definition is defined with the firstName property. A form field is created that corresponds to this property to allow data to be loaded and saved.

Document definition:

{
  "$id": "example.schema",
  "type": "object",
  "title": "Example",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "firstName": {
      "type": "string",
      "description": "First name"
    }
  }
}

Field configuration:

Configuring the property in a form

It is also possible to load properties from an object within the document. In the example below the document definition contains an object 'person', that has a 'firstName' property. This property can be accessed by using person.firstName as the field property name.

Document definition:

{
  "$id": "example.schema",
  "type": "object",
  "title": "Example",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "person": {
      "type": "object",
      "properties": {
        "firstName": {
          "type": "string",
          "description": "First name"
        }
      }
    }
  }
}

Field configuration:

Configuring the property in a form

External data

In some cases there is other data related to the case, but not part of the document that needs to be displayed in a form. The form module allows for FormFieldDataResolver to fetch data by using expressions as property name in forms. On loading the form the data is automatically preloaded. The expression generally looks like <prefix>:<field-expression> where the prefix indicates which FormFieldDataResolver is used. The <field-expression> in this expression gives the resolver information on what data to load. For example, when using the expression openzaak:firstName for a field, the OpenZaakFormFieldDataResolver is used to access the zaakeigenschappen in the Zaken API and get the firstName property.

Even though technically a FormFieldDataResolver is not used, the prefix pv is available to access the process variables in functionally the same way. For example, the expression pv:age would try to get the 'age' variable from the process variables.

A list of FormFieldDataResolvers that are available on the forms reference page.

A description on how to create a new FormFieldDataResolver is available on the creating form data resolver page

Disabling prefill

In some cases it is desirable to be able to disable a form input prefill. For example, an upload input might result in duplicate files when prefilled.

Prefilling can be disabled for specific input fields by configuring a prefill property in the JSON of the form definition as follows:

{
  "display": "form",
  "components": [
    {
      "key": "firstName",
      "type": "textfield",
      "input": true,
      "prefill": false
    }
  ]
}

In contrast to Disabled fields, setting this property to false will still save the result in the document.

Disabled fields

Disabled form fields are prefilled and saved by default. This behaviour deviates from the web-standard where disabled elements are not included in the submit body.

This behaviour can be changed by setting a toggle in application.yml:

valtimo:
    form:
      ignoreDisabledFields: true

When set to true, disabled fields will no longer be prefilled or saved. The default value is false.

Last updated