วิธีดีที่สุดในการให้ข้อมูลจำนวนมากให้ javascript คือรูปแบบ json ไม่เว้นแม้แต่ใน JoGet เพราะถึงแม้จะสามารถดึงข้อมูลจาก input หรือ grid ได้ แต่มันจะถูกบันทึกลง database ไปด้วยแถมดูรก
วิธีที่ดีอีกวิธีคือให้ beanshell ใน section ดึงข้อมูลจาก query แล้วแสดงออกมาใน input ตัวเดียว
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);
ตัวอย่างฟอร์ม
{ "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": "" } } ] }