JoGet: BeanShell Create Json

ในการพัฒนาแอปพลิเคชันบน JoGet หรือระบบที่ต้องมีการส่งข้อมูลจำนวนมากจาก Backend ไปยัง Frontend (เช่น JavaScript) การส่งข้อมูลในรูปแบบ JSON (JavaScript Object Notation) ถือเป็นมาตรฐานที่ดีที่สุด เนื่องจาก JSON ถูกออกแบบมาเพื่อการแลกเปลี่ยนข้อมูลที่อ่านง่ายและมีโครงสร้างชัดเจน

ปัญหาที่พบบ่อยคือการดึงข้อมูลจากฐานข้อมูล (เช่น PostgreSQL) แล้วนำมาแสดงผลในรูปแบบของ Input Field หรือ Grid โดยตรง ซึ่งอาจทำให้โค้ดดูซับซ้อนและจัดการยาก

ทางออกที่ทรงประสิทธิภาพคือการใช้ฟังก์ชัน BeanShell ร่วมกับการ Query ข้อมูลจากฐานข้อมูล PostgreSQL เพื่อสร้าง Object JSON ที่สมบูรณ์ในส่วนของ Section โดยไม่ต้องยุ่งเกี่ยวกับ Input Field จำนวนมาก

หลักการทำงาน: BeanShell สร้าง JSON จาก PostgreSQL Query

หลักการนี้คือการให้ BeanShell ทำหน้าที่เป็นตัวกลางในการเชื่อมต่อกับฐานข้อมูล (DataSource) โดยรันคำสั่ง SQL เพื่อดึงชุดข้อมูลที่ต้องการ จากนั้น BeanShell จะวนลูป (Loop) ข้อมูลที่ได้มาทั้งหมด และแปลงโครงสร้างข้อมูลเหล่านั้นให้เป็นรูปแบบ JSON String ก่อนที่จะส่งค่า JSON String นั้นกลับไปให้ส่วนอื่นของแอปพลิเคชันนำไปใช้งานต่อ

ตัวอย่างโค้ด (PostgreSQL Context)

ตัวอย่างนี้แสดงการดึงข้อมูลรายการสินค้า (appId, name) จากตารางจำลองใน PostgreSQL และแปลงเป็น JSON Array:

SQL

// โค้ดนี้รันใน BeanShell Environment ของ JoGet

// 1. เชื่อมต่อฐานข้อมูล (DataSource)
Connection con = null;
try {
    DataSource ds = (DataSource) AppUtil.getApplicationContext().getBean("setupDataSource");
    con = ds.getConnection();
    
    // 2. กำหนด Query สำหรับ PostgreSQL
    String sql = "SELECT product_id, product_name, price FROM public.products WHERE category = ?;";
    
    // 3. เตรียม Statement และรัน Query
    PreparedStatement stmt = con.prepareStatement(sql);
    stmt.setString(1, "Electronics"); // Parameter: กรองเฉพาะหมวด Electronics
    ResultSet rs = stmt.executeQuery();
    
    // 4. สร้าง JSON Object
    JSONObject jsonArray = new JSONObject();
    JSONArray items = new JSONArray();
    while (rs.next()) {
        JSONObject item = new JSONObject();
        item.put("id", rs.getString("product_id"));
        item.put("name", rs.getString("product_name"));
        item.put("price", rs.getDouble("price"));
        items.add(item);
    }
    jsonArray.put("products", items);
    
    // 5. ส่งค่า JSON String ออกไป
    return jsonArray.toString();

} catch (SQLException e) {
    // จัดการ Exception
    return "[]";
} finally {
    // ปิด Connection
    if (con != null) con.close();
}}

ข้อดีของการใช้ BeanShell สร้าง JSON

  • ความสะอาดของโค้ด (Clean Code): ข้อมูลทั้งหมดถูกรวมอยู่ใน JSON String เดียว ทำให้โค้ดฝั่ง JavaScript อ่านและจัดการได้ง่ายมาก
  • ประสิทธิภาพ (Efficiency): การ Query ข้อมูลครั้งเดียวและสร้าง JSON ทั้งหมดใน Backend ช่วยลดภาระการทำงานของ Frontend
  • ความยืดหยุ่น (Flexibility): สามารถรวมข้อมูลจากหลายตาราง (JOIN) และประมวลผลทางธุรกิจ (Business Logic) ก่อนสร้าง JSON ได้อย่างสมบูรณ์

บทสรุป

การใช้ BeanShell เพื่อสร้าง JSON จากผลลัพธ์ของ PostgreSQL Query เป็นเทคนิคระดับ Senior Architect ที่ช่วยยกระดับการจัดการข้อมูลใน JoGet อย่างมาก ผู้พัฒนาควรใช้เทคนิคนี้เมื่อต้องส่งชุดข้อมูลที่มีความซับซ้อนและมีปริมาณมากไปยังส่วนติดต่อผู้ใช้ (UI) เพื่อให้มั่นใจว่าข้อมูลที่ส่งผ่านระบบมีความเป็นระเบียบ มีโครงสร้าง และพร้อมสำหรับการนำไปใช้งานต่อในรูปแบบ JavaScript ได้อย่างราบรื่น