This short tutorial shows you how to setup a form with conditional validation, which allows only one record per user per month

Consider a very simple form with just one field of type "Date", we name it "mydate"

Just one field and one rule. Everything is in default state, the important bit here is the ConfiForms Rules for Field Definition macro and how it is set up

So, we have a rule to run a validation action across the dataset and this will be executed when the condition is met.

The condition is set as follows:

mydate.formatDate(MM):[entry.mydate.formatDate(MM)] AND createdBy:[user.name] AND _count:>1

We useĀ Virtual functions here to transforma date field into a month, we use context variable _count and we use context variable calledĀ [user.name] to access the current user login

Alternative way of writing the condition (and more modern), using the context variable _user

mydate.formatDate(MM):[entry.mydate.formatDate(MM)] AND createdBy:[entry._user] AND _count:>1



Complete configuration in storage format is available here

<ac:structured-macro ac:macro-id="e3152962-e681-4234-bed7-44d892da4907" ac:name="confiform" ac:schema-version="1">
  <ac:parameter ac:name="formName">f</ac:parameter>
  <ac:rich-text-body>
    <ac:structured-macro ac:macro-id="8dcdefd1-41ab-4847-83b1-77ca5f8b2b8e" ac:name="confiform-entry-register" ac:schema-version="1">
      <ac:rich-text-body>
        <p> </p>
      </ac:rich-text-body>
    </ac:structured-macro>
    <p>
      <ac:structured-macro ac:macro-id="82642dea-938e-45c7-a735-d2f6cf7bd96f" ac:name="confiform-field-definition" ac:schema-version="1">
        <ac:parameter ac:name="fieldName">mydate</ac:parameter>
        <ac:parameter ac:name="fieldLabel">My date</ac:parameter>
        <ac:parameter ac:name="type">date</ac:parameter>
      </ac:structured-macro>
    </p>
    <p>
      <ac:structured-macro ac:macro-id="71d71948-d0ae-42d2-a66c-e452e8f85bd2" ac:name="confiform-field-definition-rules" ac:schema-version="1">
        <ac:parameter ac:name="condition">mydate.formatDate(MM):[entry.mydate.formatDate(MM)] AND createdBy:[user.name] AND _count:>1</ac:parameter>
        <ac:parameter ac:name="fieldName">Already exists for this month</ac:parameter>
        <ac:parameter ac:name="action">Validation rule dataset</ac:parameter>
      </ac:structured-macro>
    </p>
  </ac:rich-text-body>
</ac:structured-macro>