ตัวอย่างการใช้ BeanShell ดึงค่าจาก database มาแสดง
สร้าง table app_fd_prototype โดยใช้
--
-- Table structure for table `app_fd_prototype`
--
CREATE TABLE `app_fd_prototype` (`id` varchar (255) NOT NULL,
`dateCreated` datetime DEFAULT NULL,
`dateModified` datetime DEFAULT NULL,
`c_Checkbox` longtext NOT NULL,
`c_DatePicker` longtext NOT NULL,
`c_FileUpload` longtext NOT NULL,
`c_HiddenField` longtext NOT NULL,
`c_PasswordField` longtext NOT NULL,
`c_Radio` longtext NOT NULL,
`c_SelectBox` longtext NOT NULL,
`c_TextArea` longtext NOT NULL,
`c_TextField` longtext NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Dumping data for table `app_fd_prototype`
--
INSERT INTO `app_fd_prototype` (`id`, `dateCreated`, `dateModified`, `c_Checkbox`, `c_DatePicker`, `c_FileUpload`, `c_HiddenField`, `c_PasswordField`, `c_Radio`, `c_SelectBox`, `c_TextArea`, `c_TextField`) VALUES ('399895e8-ac15e1b1-2ddac962-1ca1ea8b', '2017-10-02 00:00:00', '2017-10-27 00:00:00', 'permanent', '10/09/2017', '04a972cda3440360b437a67d3a0dbb9d.jpg ', 'HiddenField ', 'PasswordField', 'male', 'programmer', 'โปรแกรมเมอร์ธรรมดาที่อยากเขียนสิ่งที่ไม่ธรรมดา ลูกค้า ผู้ชมเข้ามาดูต้องบอกว่า ดี แจ๋ง ง่าย แต่คนเขียนต้องไม่ลำบากกับชีวิต', 'pitt phunsanit') ;
--
-- Indexes for dumped tables
--
--
-- Indexes for table `app_fd_prototype`
--
ALTER TABLE `app_fd_prototype`
ADD PRIMARY KEY (`id`) ;
COMMIT;
สร้างฟอร์มโดยใช้
ADVANCED: JSON Definition
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.joget.apps.app.service.AppUtil;
import org.joget.apps.form.model.Element;
import org.joget.apps.form.model.FormData;
import org.joget.apps.form.model.FormRow;
import org.joget.apps.form.model.FormRowSet;
import org.joget.commons.util.LogUtil;
public FormRowSet load (Element element, String primaryKey, FormData formData) {
FormRowSet rows = new FormRowSet () ;
// ตรวจสอบ primaryKey (Unescaped && เรียบร้อยแล้ว) if (primaryKey != null && !primaryKey.isEmpty ()) {
Connection con = null;
try {
/* ดึง DataSource หลักของ Joget */
DataSource ds = (DataSource) AppUtil.getApplicationContext () .getBean ("setupDataSource") ;
con = ds.getConnection () ;
if (con != null && !con.isClosed ()) {
/* SQL Query ดึงข้อมูลจากตาราง Table Name ที่ระบุ */
String sql = "SELECT c_Checkbox, c_DatePicker, c_FileUpload, c_HiddenField, c_PasswordField, c_Radio, c_SelectBox, c_TextArea, c_TextField FROM app_fd_prototype WHERE id = ?";
PreparedStatement stmt = con.prepareStatement (sql) ;
stmt.setString (1, primaryKey) ;
ResultSet rs = stmt.executeQuery () ;
if (rs.next ()) {
FormRow row = new FormRow () ;
// ดึงค่ามาพักไว้และจัดการ Null Safety ก่อน put ลง FormRow
// หมายเหตุ: ชื่อ key ใน row.put ต้องตรงกับ ID ของ Element ใน Form
row.put ("Checkbox", (rs.getObject ("c_Checkbox") != null) ? rs.getObject ("c_Checkbox") .toString () : "") ;
row.put ("DatePicker", (rs.getObject ("c_DatePicker") != null) ? rs.getObject ("c_DatePicker") .toString () : "") ;
row.put ("FileUpload", (rs.getObject ("c_FileUpload") != null) ? rs.getObject ("c_FileUpload") .toString () : "") ;
row.put ("HiddenField", (rs.getObject ("c_HiddenField") != null) ? rs.getObject ("c_HiddenField") .toString () : "") ;
row.put ("PasswordField", (rs.getObject ("c_PasswordField") != null) ? rs.getObject ("c_PasswordField") .toString () : "") ;
row.put ("Radio", (rs.getObject ("c_Radio") != null) ? rs.getObject ("c_Radio") .toString () : "") ;
row.put ("SelectBox", (rs.getObject ("c_SelectBox") != null) ? rs.getObject ("c_SelectBox") .toString () : "") ;
row.put ("TextArea", (rs.getObject ("c_TextArea") != null) ? rs.getObject ("c_TextArea") .toString () : "") ;
row.put ("TextField", (rs.getObject ("c_TextField") != null) ? rs.getObject ("c_TextField") .toString () : "") ;
rows.add (row) ;
}
}
} catch (Exception e) {
LogUtil.error ("BeanShell Form Binder", e, "Error loading data for ID: " + primaryKey) ;
} finally {
try {
if (con != null && !con.isClosed ()) {
con.close () ;
}
} catch (SQLException e) {
/* Ignored */
}
}
}
return rows;
}
// เรียกใช้ Method load
return load (element, primaryKey, formData) ;
ใส่ Edit Form > Advanced > Configure BeanShell Form Binder
Configure BeanShell Form Binder
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.joget.apps.app.service.AppUtil;
import org.joget.apps.form.model.Element;
import org.joget.apps.form.model.FormData;
import org.joget.apps.form.model.FormRow;
import org.joget.apps.form.model.FormRowSet;
import org.joget.commons.util.LogUtil;
public FormRowSet load (Element element, String primaryKey, FormData formData) {
FormRowSet rows = new FormRowSet () ;
// แก้ไขจาก && เป็น && ปกติ
if (primaryKey != null && !primaryKey.isEmpty ()) {
Connection con = null;
try {
DataSource ds = (DataSource) AppUtil.getApplicationContext () .getBean ("setupDataSource") ;
con = ds.getConnection () ;
if (con != null && !con.isClosed ()) {
String sql = "SELECT c_Checkbox, c_DatePicker, c_FileUpload, c_HiddenField, c_PasswordField, c_Radio, c_SelectBox, c_TextArea, c_TextField FROM app_fd_prototype WHERE id = ?";
PreparedStatement stmt = con.prepareStatement (sql) ;
stmt.setString (1, primaryKey) ;
ResultSet rs = stmt.executeQuery () ;
if (rs.next ()) {
FormRow row = new FormRow () ;
// สร้าง Helper Function ภายใน (เลือกใช้ตามความเหมาะสม) หรือเขียนแบบสั้น
// row.put (ID_Element, Value) row.put ("Checkbox", formatValue (rs.getObject ("c_Checkbox"))) ;
row.put ("DatePicker", formatValue (rs.getObject ("c_DatePicker"))) ;
row.put ("FileUpload", formatValue (rs.getObject ("c_FileUpload"))) ;
row.put ("HiddenField", formatValue (rs.getObject ("c_HiddenField"))) ;
row.put ("PasswordField", formatValue (rs.getObject ("c_PasswordField"))) ;
row.put ("Radio", formatValue (rs.getObject ("c_Radio"))) ;
row.put ("SelectBox", formatValue (rs.getObject ("c_SelectBox"))) ;
row.put ("TextArea", formatValue (rs.getObject ("c_TextArea"))) ;
row.put ("TextField", formatValue (rs.getObject ("c_TextField"))) ;
rows.add (row) ;
}
}
} catch (Exception e) {
LogUtil.error ("BeanShell Form Binder", e, "Error loading data for ID: " + primaryKey) ;
} finally {
try {
if (con != null && !con.isClosed ()) {
con.close () ;
}
} catch (SQLException e) { /* ignored */ }
}
}
return rows;
}
// Helper method เพื่อลดความซ้ำซ้อนของโค้ด
private String formatValue (Object obj) {
return (obj != null) ? obj.toString () : "";
}
/* เรียกใช้ method */
return load (element, primaryKey, formData) ;
Injected Variables:
- element
- Element that this binder is tie to. (org.joget.apps.form.model.Element)
- primaryKey
- The primary key provided by the element to load data. (java.lang.String)
- formData
- The data holder of the whole form. (org.joget.apps.form.model.FormData)
อ่านเพิ่มเติม