Joget DX 8 Stable Released
The stable release for Joget DX 8 is now available, with a focus on UX and Governance.
In this article, we are going to use Bean Shell code to populate our grid with a custom order and filter out some unwanted data. There are 2 ways to achieve this.在本文中,我们将使用Bean Shell代码以自定义顺序填充网格,并过滤掉一些不需要的数据。有两种方法来实现这一点。
...
FormDataDao是处理表单数据的服务类。我们将使用find方法检索数据并使用sort参数对数据进行排序。我们可以使用condition&params 参数来过滤它。FormDataDao is a service class to dealing with form data. We will be using the find method to retrieve data and using the sort parameter to sort the data. We can use the condition & params parameters to filter it as well.
public org.joget.apps.form.model.FormRowSet find(java.lang.String formDefId, java.lang.String tableName, final java.lang.String condition, final java.lang.Object[] params, final java.lang.String sort, final java.lang.Boolean desc, final java.lang.Integer start, final java.lang.Integer rows)
Sample Code示例代码:
Code Block | ||
---|---|---|
| ||
import org.joget.apps.app.service.AppUtil; import org.joget.apps.form.dao.FormDataDao; 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; import org.joget.commons.util.LogUtil; public FormRowSet load(Element element, String primaryKey, FormData formData) { String formDefId = "grid_entry"; //change this to the form id used to store grid data String tableName = "grid_entry"; //change this to the table name used to store grid data String foreignKey = "fk"; //change this to the foreign key String sort = "name"; //change to other field id for sorting Boolean desc = false; //change to true for descending order FormRowSet rows = new FormRowSet(); try { FormDataDao formDataDao = (FormDataDao) AppUtil.getApplicationContext().getBean("formDataDao"); String foreignKeyFilter = getFormPropertyName(foreignKey); String condition = (foreignKeyFilter != null && !foreignKeyFilter.isEmpty()) ? " WHERE " + foreignKeyFilter + " = ?" : ""; Object[] paramsArray = new Object[]{primaryKey}; //add additional filter /* String nameFilter = getFormPropertyName("name"); condition += " AND " + nameFilter + " LIKE ?"; paramsArray = new Object[]{primaryKey, "%TEST%"}; */ rows = formDataDao.find(formDefId, tableName, condition, paramsArray, sort, desc, null, null); } catch (Exception e) { LogUtil.error("Bean Shell Form Load Binder", e, "Load data with custom sorting and filtering"); } rows.setMultiRow(true); return rows; } public String getFormPropertyName(String propertyName) { if (propertyName != null && !propertyName.isEmpty()) { if (!FormUtil.PROPERTY_ID.equals(propertyName)) { propertyName = FormUtil.PROPERTY_CUSTOM_PROPERTIES + "." + propertyName; } } return propertyName; } //call load method with injected variable return load(element, primaryKey, formData); |
...
在这种方法中,我们将重用多行表单绑定器来检索数据,然后做一些后处理,在将数据返回到Grid之前进行排序或过滤。In this method, we will reuse the multirow form binder to retrieve the data then do some post processing to sort or filter it before return the data to the grid.
Code Block | ||
---|---|---|
| ||
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; import java.util.Collections; import java.util.Comparator; public FormRowSet load(Element element, String primaryKey, FormData formData) { String formDefId = "grid_entry"; //change this to the form id used to store grid data String foreignKey = "fk"; //change this to the foreign key final String sortField = "name"; FormRowSet f = new FormRowSet(); // 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); //post processing if (f != null && !f.isEmpty()) { Collections.sort(f, new Comparator() { public int compare(Object row1, Object row2) { String sort1 = ((FormRow) row1).getProperty(sortField); String sort2 = ((FormRow) row2).getProperty(sortField); return sort1.compareTo(sort2); } }); } return f; } //call load method with injected variable return load(element, primaryKey, formData); |
The sample app for this article本文示例应用: APP_custom_grid_load-1-20151119111806.jwa