Joget DX 8 Stable Released
The stable release for Joget DX 8 is now available, with a focus on UX and Governance.
Figure 1 below shows an example of a form whose first 3 fields are to be pre-populated.
รูปที่ 1 ด้านล่างแสดงตัวอย่างของฟอร์มที่มี 3 ฟิลด์แรกที่จะถูกเติมไว้ล่วงหน้า
Figure 1: Form with Fields to Pre-populate
รูปที่ 1: ฟอร์มที่มีฟิลด์ที่จะเติมไว้ล่วงหน้า
วิธีที่ง่ายและรวดเร็วในการจัดการกับความต้องการนี้คือการใช้ประโยชน์จาก Beanshell Form Binder ใน Load Binder ของส่วน แก้ไขส่วน
Figure 2: Configuring Section Properties to Determine How Data Will Be Handled
รูปที่ 2: การกำหนดค่าคุณสมบัติส่วนเพื่อกำหนดวิธีจัดการข้อมูล
ใน Load Binder เลือก "Bean Shell Form Binder" เป็น Load Binder
Figure 3: Choose Beanshell Form Binder as the Load Binder
รูปที่ 3: เลือก Beanshell Form Binder เป็น Load Binder
Code used in this example:
กำหนดค่า Bean Binder แบบฟอร์มถั่วด้วยการเข้ารหัสของคุณเองเพื่อเติมฟิลด์ที่เกี่ยวข้องดังแสดงในรูปด้านล่าง
รหัสที่ใช้ในตัวอย่างนี้:
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 Beanshell Form Binder with the Necessary Codes
รูปที่ 4: เติม Binder แบบฟอร์ม Beanshell ด้วยรหัสที่จำเป็น
If the coding is properly written and tested, you should get this result:
หากการเขียนโค้ดและการทดสอบถูกต้องคุณควรได้รับผลลัพธ์นี้:
Figure 5: The 3 Pre-populated Fields After a New Form is Loaded
รูปที่ 5: ฟิลด์ที่มีการเติมข้อมูลล่วงหน้า 3 ฟิลด์หลังจากฟอร์มใหม่เต็มแล้ว