Dynamic form instances (values) are saved in the individual tables according to the entity which they are linked to ⇒ which is their owner (e.g. the entity IdmIdentityFormValue
, IdmRoleFormValue
). Form values are not saved, if null
value (by persistent type) is given ⇒ filled values are saved only.
FormService
service for working with the extended attributes on the back-end. FormInstance
utility is useful on BE - contains value transformation to maps by attributes etc.. Use this service in your custom module, benefits:core:form-definition-cache
for loading form definitions (with attributes) is effective here.EavForm
.
FormService#saveAttribute
), then event EAV\_SAVE
is not published. Save all attributes (FormService#saveValues
), if publishing event EAV_SAVE
for owner is needed.
Dynamic form attribute supports data types (persistentType
):
CHAR
- one characterTEXT
- strings (long text). Searching by TEXT
is not supported, column is not indexed - SHORTTEXT
usage is preferred (+ indexed).SHORTTEXT
- strings (2000 chars). Indexed.INT
- integerLONG
- longDOUBLE
- saved as bigdecimalBOOLEAN
- true / false / nullDATE
- date (without time)DATETIME
- date with timeBYTEARRAY
- byte[]UUID
- uuid identifier. Indexed.ATTACHMENT
- attachment (~binary file). Read more about attachments.CODELIST
- referenced code list - persists items "code" into short text. Uses face type as code list code.ENUMERATION
referenced frontend enumeration - persists items "code" into short text. Uses face type as enumeration name.persistentType
and confidential
is possible only for attributes without persisted values ⇒ when attribute is not used for some values. Data migration, when attribute's persistentType
or confidential
is changed is not supported now.
with properties:
readonly
multi values
- Is represented on the front-end by a textarea, where a line is a value (a new line separates the values). This property is supported for persistent types CHAR
, TEXT
, INT
, LONG
, DOUBLE
and UUID
.confidential
- .The values are stored in an confidential storage). Stored values of these attributes - substitute characters only - are loaded on the front-end. The value can only be changed and determined whether it is filled in. This property is supported for persistent types CHAR
, TEXT
, INT
, LONG
, DOUBLE
, UUID
, BYTEARRAY
.required
- value validation, read more.unique
- value validation, read more.min
- value validation, read more.max
- value validation, read more.regex
- value validation, read more.validationMessage
- custom message, when some validation fails, read more.Dynamic form attributes can be rendered differently on frontend. Face type (faceType) property is used for choosing frontend renderer. The default renderer is chosen by persistent type (e.g. UUID → UUID).
Renderer is a frontend component, superclass component AbstractFormAttributeRenderer
is used for all renderer implementations. Renderer is responsible for IdmFormValue ⇔ input value
transformation.
Renderers are registered in module's component-descriptor.js
as single component with attributes:
id
- unique component identifiertype
= form-value
- static component type is used for all form-value
rendererpersistentType
- which persistent type renderer supports faceType
- renderer face type ⇒ key. Unique face type should be given (by persistent type). Its optional persistentType
is used as default, when no faceType
is given.component
- renderer implementation (AbstractFormAttributeRenderer
descendant).labelKey
- localization key ⇒ renderer name. Its optional, faceType
is used, when no labelKey
is given.All component descriptor features are supported. Read tutorial, how to create custom form attribute renderer.
Custom configuration can be added to registered renderers (@since CzechIdM 10.8.0) - use AbstractFormAttributeRenderer
on backend to define additional renderer properties.
FormableEntity
to the new entity,AbstractFormableService
for the new entity,AbstractFormValue
, which will represent the values of extended attributes for the new entity (owner),AbstractFormValueRepository
for the values of the extended attributes,AbstractFormValueService
for the values of the extended attributes.IdmIdentityController
- controller has to evaluate security to read / save form values by their owner (e.g. by identity),FormableEntityManager
- e.g. IdentityManager
,EavForm
for filling in and sending the values of the extended attributes from the FE to the BE - e.g. IdentityEav
content.On the FE, there is an agenda of forms - their definition and attributes. Each definition can contain zero or more attributes. To maintain the integrity, an interface UnmodifiableEntity has been created, which allows adding a flag that the entity has been created by the system and cannot be modified (or some of its attributes) and deleted (this logic now needs to be implemented manually into the relevant controllers), for example in IdmFormAttributeController.
persistentType
or confidential
is changed is not supported now.
spinal-case
or kebab-case
on frontend).
Example form code eu.bcvsolutions.idm.acc.entity.SysSystem will be transformed into eu-bcvsolutions-idm-acc-entity-syssystem
Read more in tutorial
For form attribute values is possible to configure prepared validations. Validation are evaluated (on the backend), when form with extended attributes is saved and sent to backend. Simple validations as required
, min
, max
are evaluated on frontend after value is changed.
Value is required.
Value has to be unique.
BYTEARRAY
and ATTACHMENT
persistent types.
Value has to be greater than (lesser than) or equal given min
(max
) values. Real number (38,4) can be configured.
DOUBLE
, INT
, LONG
persistent types.
Value has to match given regular expression (java pattern is used).
BYTEARRAY
and ATTACHMENT
persistent types.
^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$
^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])$
Custom validation message. If message is not defined, then default message by invalid validation type will be shown.
core:validationError.invalid.unique
). Parameters min
, max
, regex
, unique
, required
is available for localization message.
CodeListManager
for creating and providing code lists and items through application on backend (e.g. available for scripts, which could be used in provisioning).
CodeListSelect
and CodeListValue
for rendering code lists on frontend.
environment.development.title
will be localized.
Identity form values can be secured by authorization policies when some identity extended attributes have to be secured - see how in configure authorization policies.