In this tutorial you will learn how to use advanced techniques when defining validation rules.

The approach and techniques shown are valid for all type of fields, not only dates as in the tutorial.

Quite often, when having fields to keep 2 dates, you need to have some kind of a relationship between these fields.

Like, ensuring that "End Date" field is after the "Start Date" field, for example.

This validation is possible to automate in ConfiForms by using the "ConfiForms Field Definition Rules" macro and using it's "Action" selected to "Validation Rule"


If you need to have 2 dates together consider using "Date Interval" field type in ConfiForms. Very useful when used in ConfiForms CalendarView


Let's start with a simple form.

Just 2 fields, both of time date

The configuration for fields is straightforward:

Same for "endDate"


So the form looks like this on the page:

It has no validations so far... and we gonna add one:

The important bits are in the screenshot below:

Explanations:


That's it. It is true that it has a small trick, but here is the hint:

Define a condition that when met will mean the data is not correct and add a validation rule to match everything (using dot ("."), without brackets and quotes) to fire the match and show the message to user


Storage format (configuration) for the whole solution:

<ac:structured-macro ac:macro-id="cd6b5bbb-c91c-4cab-aa6a-b7c903e1246e" ac:name="confiform" ac:schema-version="1">
  <ac:parameter ac:name="formName">formWithDates</ac:parameter>
  <ac:rich-text-body>
    <p>
      <ac:structured-macro ac:macro-id="2cd071cd-0ac7-4152-854b-f3b6610cbc31" ac:name="confiform-field-definition" ac:schema-version="1">
        <ac:parameter ac:name="fieldName">startDate</ac:parameter>
        <ac:parameter ac:name="fieldLabel">Start Date</ac:parameter>
        <ac:parameter ac:name="type">date</ac:parameter>
      </ac:structured-macro>
    </p>
    <p>
      <ac:structured-macro ac:macro-id="03a9a452-574f-4e67-9f98-7e71dc5bcddb" ac:name="confiform-field-definition" ac:schema-version="1">
        <ac:parameter ac:name="fieldName">endDate</ac:parameter>
        <ac:parameter ac:name="fieldLabel">End Date</ac:parameter>
        <ac:parameter ac:name="type">date</ac:parameter>
      </ac:structured-macro>
      <ac:structured-macro ac:macro-id="004f84b4-a0af-44c6-8793-c7bb06bdd492" ac:name="confiform-entry-register" ac:schema-version="1">
        <ac:parameter ac:name="atlassian-macro-output-type">INLINE</ac:parameter>
        <ac:rich-text-body>
          <p> </p>
        </ac:rich-text-body>
      </ac:structured-macro>
      <ac:structured-macro ac:macro-id="d506bcd8-ab88-4845-81b9-7dda48fd7247" ac:name="confiform-field-definition-rules" ac:schema-version="1">
        <ac:parameter ac:name="condition">endDate:&lt;[entry.startDate]</ac:parameter>
        <ac:parameter ac:name="fieldName">Hold on! End date is expected to be AFTER the start date</ac:parameter>
        <ac:parameter ac:name="values">.</ac:parameter>
        <ac:parameter ac:name="action">Validation rule</ac:parameter>
        <ac:parameter ac:name="actionFieldName">endDate</ac:parameter>
      </ac:structured-macro>
    </p>
  </ac:rich-text-body>
</ac:structured-macro>