วิธีดีที่สุดในการให้ข้อมูลจำนวนมากให้ javascript คือรูปแบบ json ไม่เว้นแม้แต่ใน JoGet เพราะถึงแม้จะสามารถดึงข้อมูลจาก input หรือ grid ได้ แต่มันจะถูกบันทึกลง database ไปด้วยแถมดูรก
วิธีที่ดีอีกวิธีคือให้ beanshell ใน section ดึงข้อมูลจาก query แล้วแสดงออกมาใน input ตัวเดียว
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | 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); |
ตัวอย่างฟอร์ม
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | { "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" : "" } } ] } |