Validate

Content Type: Module
Categories: Data

Overview

New validation approach by creating and reusing Attribute Validations per Entity. By combining individual Attribute Validations into ValidationProcesses you create all your application validations in a structured, flexible and reusable way.

Documentation

Validate: a structured, reusable approach to validations in Mendix

The Validate module provides a non-persistent Validation entity that is to be associated with each entity that is to be validated.Storing validations on an object into associated non-persistent Validation objects gives you flexibility to handle and show validations in the way you choose.

The approach is to break validations down to Attribute level per Entity. By creating Attribute Validation microflows for each Entity, you’ll get a clear overview of all validations in your application.By combining individual Attribute Validations into static or dynamic ValidationProcesses you create all your application validations in a structured, flexible and reusable way.ValidationProcesses are used in pages (eg. Save), in create/update microflows (eg. imports) or just in jobs to check the data quality of your application regularly.It is recommended to store all Entity_Attribute validations and static ValidationProcesses of a module in a Validations folder with subfolders per Entity. Like this maintaining and reusing validations of a module will be clear and easy.

 

Dependencies:

Created with Mendix 9.6.4 (now maintained in Mendix 9.18.4 for convenience)

Depends on CommunityCommons module for dynamically starting microflows for dynamic ValidationProcesses

Depends on TaskQueueScheduler to schedule validations in batch (on taskqueue)So please install that first when you do not have it installed already.

 

How to configure:

Simply download Validate module package into your application

 

*** Upgrading to version 1.1.0 means YOU LOOSE YOUR ASSOCIATIONS WITH VA.Validate!! ***

 

How to upgrade from previous version (version 1.0.x):

In each module where you use Validate module create a Validation entity with supertype Validate.Validation.

UnAssociate the entity you validate from the general VA.Validation entity.Associate the entity you want to validate with the module specific Validation entity

ONLY when this is done it is safe to upgrade to version 1.1.0!!

 

How to use:

In each module where you want to use Validate create a Validation entity with supertype Validate.ValidationAssociate the entity you want to validate with the module specific Validation entity Then start creating your attibute  and process validation microflows per entity following the microflow templates documented below.Please be aware that following the microflow templates is essential for the approach to work!Per entity create SAVE microflow that validates the entity object and gives feedback before actual commit. On Save: call this SAVE microflow!

 

It is recommended to store all validations of a module in a Validations folder with subfolder per entity.Like this maintaining and reusing validations will be clear and easy.Each Validations\ subfolder holds:- Attribute validation microflow(s) per validated attribute- Entity ValidationProcess microflow(s) per entity process

 

How to use dynamic ValidationProcesses:

Having created all entity attribute validations you will have a pool of validations that you can use to check the quality of the data in your application (per entity).To check data quality of an entity simply create a microflow Sub_RUNAttributeValidation_EntityName (in the involved module)  that loops over all objects of the entity that you want to validate. Hint: For performance it's best to only consider all objects changed since last validation rundate.Once you have created the Sub_RUNAttributeValidation_EntityName microflow you can hit link on the ValidationProcess page to have all entity validations available on the page. There you can run them manually when needed.To monitor data quality you can set the ScheduleInterval of each entity validation process to schedule it regularly.Note: the scheduling itself is not part of this Validate module.

Read Samples to try and get a better understanding of ValidationProcesses

 

Validation Microflow Templates

Attribute Validations

An attribute validation microflow must be named asVal_EntityName_AttibuteName_Description (short free text)Or for associationVal_EntityName_Associated EntityName (or part)_Description (short free text)

An attribute validation microflow ideally starts with the same 3 activities always before doing the actual checking. AttributeName should be set to the name of the attribute. Message should be set to the default message.Java module deleteValidationAttribute must be called to clear any existing validation for the attribute, so repeating validation will only give one (last, current) validation result. It needs  entityObject and AttributeName as parameters and returns EntityName.When checking finds irregularities the validation microflow must create a Validation associated to the entityObject and containing ValidationMessage, AttributeName and EntityName.

A validation microflow returns the ValidationMessage or empty string in case all is fineSo an attribute validation microflow should look like the sample attribute validation screenshot.

Validation Processes

An validation process microflow must be named asVal_Process_EntityName_Description (short free text)

A validation process microflow clears all existing validations associated with the entity object, calls all relevant attribute validation microflows and returns a string with all resulting ValidationMessages (concatenated with ‘|’) associated with the entity object.So an entity validation process microflow should look like the sample validation process screenshot.

Many entity types have only 1 validation process, but please be aware there can be more than 1 validation process microflow per entity type as actions (like New, Edit or Delete) can require different validations.  Java modules deleteValidations and getValidation need entityObject as parameter.

SAVE microflows

On custom Save (also eg. Add or Delete) entity action of the entity object the relevant entity process validation microflow is called and the resulting validations are checked. On validations raised the validation messages are shown on page via generic giveFeedback Java module. Only when no validation is raised the changes are committed to the entity object. 

So an entity action with validations should look like the sample save microflow screenshot.

Java module giveFeedback needs entityObject as parameter. This Java module provides the  ValidationFeedback for all validations associated with the entityObject.

 

Releases

Version: 1.1.0
Framework Version: 9.18.4
Release Notes: Switching to validations per module. No longer store all validations in single Validate module, but from now on store all validations in the module they are applicable for. Like this modules (with all validations included) can be extracted and reused. Validate module becomes a utility module providing the needed functionality. NO straight upgrade from previous versions v1.0.x REWORK IS NEEDED FIRST (see ReadMe documentation)
Version: 1.0.1
Framework Version: 9.6.4
Release Notes: 1.0.1 Added ValidationProcess.ScheduleInterval
Version: 1.0.0
Framework Version: 9.6.4
Release Notes: First Release