ป้ายกำกับ: ออบเจ็ค

JoGet: BeanShell Create JsonJoGet: BeanShell Create Json

วิธีดีที่สุดในการให้ข้อมูลจำนวนมากให้ javascript คือรูปแบบ json ไม่เว้นแม้แต่ใน JoGet เพราะถึงแม้จะสามารถดึงข้อมูลจาก input หรือ grid ได้ แต่มันจะถูกบันทึกลง database ไปด้วยแถมดูรก

วิธีที่ดีอีกวิธีคือให้ beanshell ใน section ดึงข้อมูลจาก query แล้วแสดงออกมาใน input ตัวเดียว
BeanShell 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();

  String sql = "SELECT appId, appVersion, name FROM jwdb.app_app WHERE published = 1;";
  //LogUtil.info("BeanShell 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, "BeanShell Create Json");
 } finally {
  try {
   if (con != null) {
	con.close();
   }
  } catch (SQLException e) {}
 }

 return rows;
}

return load(element, primaryKey, formData);




ตัวอย่างฟอร์ม
BeanShell Create Json

{
	"className": "org.joget.apps.form.model.Form",
	"properties": {
		"noPermissionMessage": "",
		"loadBinder": {
			"className": "org.joget.apps.form.lib.WorkflowFormBinder",
			"properties": {}
		},
		"name": "BeanShell 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(\"BeanShell 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, \"BeanShell 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": "BeanShell Create Json",
				"storeBinder": {
					"className": "",
					"properties": {}
				},
				"readonlyLabel": ""
			}
		}
	]
}