Versions Compared

Key

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

You may initialize a new form with some fields prepopulated with the use of pre-populated using Beanshell Form Binder.

Figure 1 below shows an example of a form that with the whose first 3 fields intended are to be prepopulatedpre-populated.


Figure 1: Form with fields to prepopulate.Fields to Pre-populate

The quick and easy approach in addressing this requirement is to make use of the Beanshell Form Binder in the section's Load Binder. Edit the section.


Figure 2: Configure the section's properties to determine how data is being handled.Configuring Section Properties to Determine How Data Will Be Handled

In In the Load Binder, choose select Bean Shell Form Binder as the Load Binder.


Figure 3: Choose Beanshell Form Binder as the Load Binder.

Configure the Bean Shell Form Binder with your own coding to populate the relevant fields intended , as shown in the next figure . This is the code below.

Code used in this example.:

Code Block
import org.joget.apps.app.service.*;
import org.joget.apps.form.model.*;
import org.joget.apps.form.service.*;
import java.sql.*;
import java.util.*;

public FormRowSet getData() {

    //-----------------------------------------------------------------------------------
    //In this part of code, it trying to load the original data from form data table.

    FormRowSet results = null;
    if (primaryKey != null && primaryKey.trim().length() > 0) {
        AppService appService = (AppService) FormUtil.getApplicationContext().getBean("appService");
        Form form = FormUtil.findRootForm(element);
        if (form.equals(element) && form.getParent() != null) {
            form = FormUtil.findRootForm(form.getParent());
        }
        if (form != null) {
            results = appService.loadFormDataWithoutTransaction(form, primaryKey);
        }
    }
    //------------------------------------------------------------------------------------

    //------------------------------------------------------------------------------------
    //In this second part of code, it will load the data from external source by using
    //JDBC. It will run only when the first part of code fail to retrieve data from
    //form data table. This example use dir_user table of Joget as external source.

    if (results == null) {
        results = new FormRowSet();

        Connection con = null;
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
	        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/jwdb2?characterEncoding=UTF-8", "root", "root");

	        if(!con.isClosed()){
	            String pId = "#currentUser.username#";
	            String sql = "SELECT firstName, lastName, email FROM dir_user WHERE username=?";
	            PreparedStatement stmt = con.prepareStatement(sql);
		        stmt.setString(1, pId);

		        ResultSet rs = stmt.executeQuery();
		        while (rs.next()) {
		            FormRow row = new FormRow();
		            row.put("firstName", (rs.getString(1) != null)?rs.getString(1):"");
			        row.put("lastName", (rs.getString(2) != null)?rs.getString(2):"");
			        row.put("email", (rs.getString(3) != null)?rs.getString(3):"");
			        results.add(row);
		        }
	        }

	    } catch(Exception ex) {
	        System.err.println("Exception: " + ex.getMessage());
	    } finally {
	        try {
                if(con != null)
                    con.close();
            } catch(SQLException e) {}
	    }
    }
    //------------------------------------------------------------------------------------

    return results;
}

return getData();


Figure 4: Populate the Beanshell Form Binder with the necessary codes.Necessary Codes

If With the coding is properly written and tested. You should be able to achieve the result as shown in the next figure., you should get this result:


Figure 5: The 3 intended fields are prepolulated with values when a new form is loaded.Fields Pre-populated with Values When a New Form is Loaded