使用BeanShell加载表单数据
注入的参数
- element - org.joget.apps.form.model.Element
- primaryKey - 主键(ID或者其他主键)
- formData - org.joget.apps.form.model.FormData
- element - org.joget.apps.form.model.Element
返回参数
- org.joget.apps.form.model.FormRow 对象
- org.joget.apps.form.model.FormRow 对象
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.commons.util.LogUtil; public FormRowSet load(Element element, String username, FormData formData) { FormRowSet rows = new FormRowSet(); if (username != null && !username.isEmpty()) { Connection con = null; try { // retrieve connection from the default datasource DataSource ds = (DataSource)AppUtil.getApplicationContext().getBean("setupDataSource"); con = ds.getConnection(); // execute SQL query if(!con.isClosed()) { PreparedStatement stmt = con.prepareStatement("SELECT username, firstName, lastName, email from dir_user where username=?"); stmt.setObject(1, username); ResultSet rs = stmt.executeQuery(); while (rs.next()) { FormRow row = new FormRow(); System.out.println(rs.getObject("username") ); row.setProperty("username", (rs.getObject("username") != null)?rs.getObject("username").toString():""); row.setProperty("firstName", (rs.getObject("firstName") != null)?rs.getObject("firstName").toString():""); row.setProperty("lastName", (rs.getObject("lastName") != null)?rs.getObject("lastName").toString():""); row.setProperty("email", (rs.getObject("email") != null)?rs.getObject("email").toString():""); rows.add(row); break; } } } catch(Exception e) { LogUtil.error("Sample app - Form 1", e, "Error loading user data in load binder"); } finally { //always close the connection after used try { if(con != null) { con.close(); } } catch(SQLException e) {/* ignored */} } } return rows; } //call load method with injected variable return load(element, primaryKey, formData);
使用BeanShell加载Ajax下拉选项数据
注入的参数
- values - 如果是使用了 ajax 级联,则会传入values
返回参数
- FormRow集合,并且每个对象都包含 "label","value"属性.
import java.util.Collection; 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.directory.model.User; import org.joget.directory.model.service.ExtDirectoryManager; public FormRowSet load(String[] values) { FormRowSet rows = new FormRowSet(); ExtDirectoryManager directoryManager = (ExtDirectoryManager) AppUtil.getApplicationContext().getBean("directoryManager"); //set groupId based on dependency value String groupId = null; if (values != null && values.length > 0) { groupId = values[0]; } //Get users using directory manager Collection userList = directoryManager.getUsers(null, null, null, null, groupId, null, null, "firstName", false, null, null); for(Object u : userList){ User user = (User) u; FormRow option = new FormRow(); option.setProperty(FormUtil.PROPERTY_VALUE, user.getUsername()); option.setProperty(FormUtil.PROPERTY_LABEL, user.getFirstName() + " " + user.getLastName()); rows.add(option); } return rows; } //call load method with injected variable return load(values);
使用BeanShell加载表单下拉选项数据
注入的参数
- element - org.joget.apps.form.model.Element
- primaryKey - 主键(ID或者其他主键)
- formData - org.joget.apps.form.model.FormData
- element - org.joget.apps.form.model.Element
返回参数
- FormRow集合,并且每个对象都包含 "label","value"属性.
- FormRow集合,并且每个对象都包含 "label","value"属性.
import java.util.Map; 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.TimeZoneUtil; public FormRowSet load(Element element, String primaryKey, FormData formData) { FormRowSet rows = new FormRowSet(); //Get timezones using timezone util for(Map.Entry entry : TimeZoneUtil.getList().entrySet()){ FormRow option = new FormRow(); option.setProperty(FormUtil.PROPERTY_VALUE, (String) entry.getKey()); option.setProperty(FormUtil.PROPERTY_LABEL, (String) entry.getValue()); rows.add(option); } return rows; } //call load method with injected variable return load(element, primaryKey, formData);
使用BeanShell加载表单元素多行数据
注入的参数:
- element - org.joget.apps.form.model.Element
- primaryKey - java.lang.String
- formData - org.joget.apps.form.model.FormData
返回参数:
- org.joget.apps.form.model.FormRowSet
例子:
如果当前没有任何数据,从另一个表中加载多行数据。
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.plugin.base.PluginManager; import org.joget.apps.form.model.FormLoadBinder; public FormRowSet load(Element element, String primaryKey, FormData formData) { String defaultFormDefId = "default_grid_entry"; //change this to the form id used to store default grid data String formDefId = "grid_entry"; //change this to the form id used to store grid data String foreignKey = "fk"; //change this to the foreign key FormRowSet f = new FormRowSet(); f.setMultiRow(true); // Reuse Multi Row Binder to load data PluginManager pluginManager = (PluginManager) FormUtil.getApplicationContext().getBean("pluginManager"); FormLoadBinder binder = (FormLoadBinder) pluginManager.getPlugin("org.joget.plugin.enterprise.MultirowFormBinder"); //Load from the grid table binder.setProperty("formDefId", formDefId); binder.setProperty("foreignKey", foreignKey); f = binder.load(element, primaryKey, formData); //if no grid data is retrieved, get from default table if (f == null || f.isEmpty()) { binder.setProperty("formDefId", defaultFormDefId); //set the foreign key value to empty f = binder.load(element, "", formData); } return f; } //call load method with injected variable return load(element, primaryKey, formData);