Overview
In this post, we’ll explore how to connect Joget to external databases — specifically Microsoft SQL Server and Oracle ERP — using a BeanShell script.
This example dynamically loads dropdown options based on user-selected values (like Organization and PO Number).
Full Script (with explanations)
// Import required packages
import java.sql.*;
import javax.sql.DataSource;
import org.joget.apps.form.model.*;
import org.joget.apps.app.service.AppUtil;
import org.joget.commons.util.LogUtil;
// Log entry to confirm script execution
LogUtil.info("", "Script Execution Started");
// Function to dynamically load dropdown data
public FormRowSet load(String[] values) {
    FormRowSet rows = new FormRowSet();
    // Validation: Check if both required parameters are present
    if (values.length < 2 || values[0] == "" || values[1] == "") {
        LogUtil.info("", "Insufficient input values");
        FormRow option = new FormRow();
        option.setProperty(FormUtil.PROPERTY_VALUE, "");
        option.setProperty(FormUtil.PROPERTY_LABEL, "Please Select Organization and PO");
        rows.add(option);
        return rows;
    }
    try {
        // Retrieve Joget data source
        DataSource ds = (DataSource) AppUtil.getApplicationContext().getBean("setupDataSource");
        Connection conn1 = ds.getConnection();
        // External database connection details (example placeholders)
        String SQL_SERVER_URL = "jdbc:sqlserver://<server-host>";
        String SQL_SERVER_USER = "<username>";
        String SQL_SERVER_PASSWORD = "<password>";
        // Dynamic parameters
        String orgId = values[0];
        String PO = values[1];
        // Oracle ERP data access through OpenQuery
        String selectQuery =
            "SELECT VENDOR_SITE_ID, SUPPLIER_SITE_VAT_REG " +
            "FROM OPENQUERY(ORA_ORACLEERP, " +
            "'SELECT VENDOR_SITE_ID, SUPPLIER_SITE_VAT_REG " +
            "FROM APPS.XXMSCRM_PO_HEADERS " +
            "WHERE PO_NUMBER = '''" + PO + "''' " +
            "AND ORG_ID = '''" + orgId + "'''')";
        // Load SQL Server driver and execute query
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        Connection conn = DriverManager.getConnection(SQL_SERVER_URL, SQL_SERVER_USER, SQL_SERVER_PASSWORD);
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery(selectQuery);
        // Handle data
        if (!rs.next()) {
            LogUtil.info("", "No records found");
            FormRow option = new FormRow();
            option.setProperty(FormUtil.PROPERTY_VALUE, "");
            option.setProperty(FormUtil.PROPERTY_LABEL, "Not Found");
            rows.add(option);
        } else {
            do {
                FormRow option = new FormRow();
                option.setProperty(FormUtil.PROPERTY_VALUE, rs.getString("VENDOR_SITE_ID"));
                option.setProperty(FormUtil.PROPERTY_LABEL, rs.getString("SUPPLIER_SITE_VAT_REG"));
                rows.add(option);
            } while (rs.next());
        }
        conn.close();
        LogUtil.info("", "Dropdown data loaded successfully for Org: " + orgId + " PO: " + PO);
    } catch (Exception e) {
        LogUtil.error("BeanShell", e, "Error loading data");
    }
    return rows;
}
// Execute the load function
return load(values);
    
Top comments (0)