Versions Compared

Key

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

You may initialize a new form with some fields pre-populated using Bean Shell Form BinderData Store.

Thai

คุณสามารถเริ่มต้นฟอร์มใหม่ด้วยบางฟิลด์ที่มีการเติมข้อมูลไว้ล่วงหน้าโดยใช้ Bean Shell Form BinderData Store

Figure 1 below shows an example of a form whose first 3 fields are to be pre-populated.

Thai

รูปที่ 1 ด้านล่างแสดงตัวอย่างของฟอร์มที่มี 3 ฟิลด์แรกที่จะถูกเติมไว้ล่วงหน้า


Image AddedImage Removed
Figure 1: Form with Fields to Pre-populate

...

Thai

วิธีที่ง่ายและรวดเร็วในการจัดการกับความต้องการนี้คือการใช้ประโยชน์จาก Beanshell Form Binder ใน Load Binder ของส่วน แก้ไขส่วน


Image AddedImage Removed
Figure 2: Configuring Section Properties to Determine How Data Will Be Handled

...

Thai

ใน Load Binder เลือก "Bean Shell Form Binder" เป็น Load Binder


Image AddedImage Removed
Figure 3: Choose Beanshell Form Binder as the Load Binder

...

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();


Image AddedImage Removed
Figure 4: Populate Beanshell Form Binder with the Necessary Codes

...

Thai

องค์ประกอบที่เกี่ยวข้อง