Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

English

A sample use case presents such where we need to bypass form validation in the event of rejecting a request.

This is possible by adding an empty/dummy section in a form and changing the section's load data store to Bean Shell Form Data Store to store this script below.
This script will remove form validation if the user clicks on "Reject" form button provided by the Process Enhancement Plugin.

Note

This approach will require the may not be required if you are using the Process Enhancement Plugin to work.. There is a skip validation checkbox under Map Activities to Forms - More Settings


Code Block
languagejava
import org.joget.apps.app.service.AppUtil;
import org.joget.apps.form.service.FormUtil;
import org.joget.apps.form.model.Element;
import org.joget.apps.form.model.Form;
import org.joget.apps.form.model.FormData;
import org.joget.apps.form.model.FormRowSet;

public FormRowSet load(Element element, String primaryKey, FormData formData) {
	//Feel free to change this "if" statement to suit your needs
    if ("#requestParam.process_reject#".equalsIgnoreCase("Reject")) {
        Form form = FormUtil.findRootForm(element);
        removeValidator(form, formData);
    }

    return null;
}

public void removeValidator(Element e, FormData formData) {
    e.setValidator(null);

    Collection children = e.getChildren(formData);
    if (children != null) {
        for (Element child : children) {
            removeValidator(child, formData);
        }
    }
}

//call load method with injected variable
return load(element, primaryKey, formData);

...

Code Block
import org.joget.apps.app.service.AppUtil;
import org.joget.apps.form.service.FormUtil;
import org.joget.apps.form.model.Element;
import org.joget.apps.form.model.Form;
import org.joget.apps.form.model.FormData;
import org.joget.apps.form.model.FormRowSet;


public FormRowSet load(Element element, String primaryKey, FormData formData) {
    //get disable_validation value from form data object
    String disableValidatorID = "disable_validation";
    Form form = FormUtil.findRootForm(element);
    Element disableValidatorElement = FormUtil.findElement(disableValidatorID, form, formData);
     
    if (disableValidatorElement != null) {
        //get value of disable validator
        String[] disableValidatorValues = FormUtil.getElementPropertyValues(disableValidatorElement, formData);
        for(int i = 0 ; i < disableValidatorValues.length ; i++){
            System.out.println("Toggle Button Value " + i + ": " + disableValidatorValues[i]);
            //remove validator if checkbox value = Disable
            if (disableValidatorValues[i].equalsIgnoreCase("Disable")) {
                removeValidator(form, formData);
                break;
            }
        }
    }

    return null;
}


public void removeValidator(Element e, FormData formData) {
    e.setValidator(null);
    
    Collection children = e.getChildren(formData);
    if (children != null) {
        for (Element child : children) {
            removeValidator(child, formData);
        }
    }
}

//call load method with injected variable
return load(element, primaryKey, formData);

Sample App

This Sample App contains the example in Approach 2

View file
nameapp_kb_dx8_saveAsDraftValidate.jwa
height250

...