วิธีดีที่สุดในการให้ข้อมูลจำนวนมากให้ javascript คือรูปแบบ json ไม่เว้นแม้แต่ใน JoGet เพราะถึงแม้จะสามารถดึงข้อมูลจาก input หรือ grid ได้ แต่มันจะถูกบันทึกลง database ไปด้วยแถมดูรก
วิธีที่ดีอีกวิธีคือให้ beanshell ใน section ดึงข้อมูลจาก query แล้วแสดงออกมาใน input ตัวเดียว[code language=”java” title=”Bean Shell Create Json”]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.apps.form.service.FormUtil;
import org.joget.commons.util.LogUtil;
import org.json.simple.JSONObject;
public FormRowSet load(Element element, String username, FormData formData) {
FormRowSet rows = new FormRowSet();
Connection con = null;
try {
DataSource ds = (DataSource) AppUtil.getApplicationContext().getBean("setupDataSource");
con = ds.getConnection();
sql = "SELECT appId, appVersion, name FROM jwdb.app_app WHERE published = 1;";
//LogUtil.info("Bean Shell Create Json", "sql = " + sql);
if (!con.isClosed()) {
PreparedStatement stmt = con.prepareStatement(sql);
ResultSet rs = stmt.executeQuery();
/* create json */
JSONObject json = new JSONObject();
while (rs.next()) {
JSONObject item = new JSONObject();
item.put("appVersion", rs.getObject("appVersion"));
item.put("name", rs.getObject("name"));
json.put(rs.getObject("appId"), item);
}
/* add json to input */
FormRow row = new FormRow();
rows.add(row);
row.put("json", json.toString());
}
} catch (Exception e) {
LogUtil.error(getClassName(), e, "Bean Shell Create Json");
} finally {
try {
if (con != null) {
con.close();
}
} catch (SQLException e) {}
}
return rows;
}
return load(element, primaryKey, formData);[/code]
ตัวอย่างฟอร์ม[code language=”javascript” title=”Bean Shell Create Json”]{
"className": "org.joget.apps.form.model.Form",
"properties": {
"noPermissionMessage": "",
"loadBinder": {
"className": "org.joget.apps.form.lib.WorkflowFormBinder",
"properties": {}
},
"name": "Bean Shell Create Json",
"description": "",
"postProcessorRunOn": "both",
"permission": {
"className": "",
"properties": {}
},
"id": "BeanShellCreateJson",
"postProcessor": {
"className": "",
"properties": {}
},
"storeBinder": {
"className": "org.joget.apps.form.lib.WorkflowFormBinder",
"properties": {}
},
"tableName": "prototypes"
},
"elements": [
{
"elements": [
{
"elements": [
{
"className": "org.joget.apps.form.lib.TextArea",
"properties": {
"readonly": "",
"validator": {
"className": "",
"properties": {}
},
"workflowVariable": "",
"id": "json",
"label": "JSON",
"placeholder": "",
"rows": "10",
"value": "",
"cols": "100",
"readonlyLabel": ""
}
}
],
"className": "org.joget.apps.form.model.Column",
"properties": {
"width": "100%"
}
}
],
"className": "org.joget.apps.form.model.Section",
"properties": {
"readonly": "",
"loadBinder": {
"className": "org.joget.apps.form.lib.BeanShellFormBinder",
"properties": {
"useAjax": "",
"cacheIdlePause": "120",
"cacheInterval": "",
"script": "import java.sql.Connection;\nimport java.sql.PreparedStatement;\nimport java.sql.ResultSet;\nimport java.sql.SQLException;\nimport javax.sql.DataSource;\nimport org.joget.apps.app.service.AppUtil;\nimport org.joget.apps.form.model.Element;\nimport org.joget.apps.form.model.FormData;\nimport org.joget.apps.form.model.FormRow;\nimport org.joget.apps.form.model.FormRowSet;\nimport org.joget.apps.form.service.FormUtil;\nimport org.joget.commons.util.LogUtil;\nimport org.json.simple.JSONObject;\n\npublic FormRowSet load(Element element, String username, FormData formData) {\n\n FormRowSet rows = new FormRowSet();\n\n Connection con = null;\n try {\n DataSource ds = (DataSource) AppUtil.getApplicationContext().getBean(\"setupDataSource\");\n con = ds.getConnection();\n\n sql = \"SELECT appId, appVersion, name FROM jwdb.app_app WHERE published = 1;\";\n //LogUtil.info(\"Bean Shell Create Json\", \"sql = \" + sql);\n\n if (!con.isClosed()) {\n PreparedStatement stmt = con.prepareStatement(sql);\n ResultSet rs = stmt.executeQuery();\n\n /* create json */\n JSONObject json = new JSONObject();\n while (rs.next()) {\n JSONObject item = new JSONObject();\n\n item.put(\"appVersion\", rs.getObject(\"appVersion\"));\n item.put(\"name\", rs.getObject(\"name\"));\n\n json.put(rs.getObject(\"appId\"), item);\n }\n\n /* add json to input */\n FormRow row = new FormRow();\n rows.add(row);\n row.put(\"json\", json.toString());\n }\n\n } catch (Exception e) {\n LogUtil.error(getClassName(), e, \"Bean Shell Create Json\");\n } finally {\n try {\n if (con != null) {\n con.close();\n }\n } catch (SQLException e) {}\n }\n\n return rows;\n}\n\nreturn load(element, primaryKey, formData);"
}
},
"permissionReadonly": "",
"permission": {
"className": "",
"properties": {}
},
"comment": "",
"id": "section1",
"label": "Bean Shell Create Json",
"storeBinder": {
"className": "",
"properties": {}
},
"readonlyLabel": ""
}
}
]
}[/code]