Joget DX 8 Stable Released
The stable release for Joget DX 8 is now available, with a focus on UX and Governance.
BeanShell Data Binder empowers users to configure lists using BeanShell code, allowing for versatile customization and dynamic data manipulation.
Select Data Store > Select Source of Data (BeanShell)
Name | Description |
---|---|
Get Available Columns Script | This field is used to configure the columns of the list. Injected variables: plugin |
Get Data Rows Script | This field is used to configure the rows and filters of the list. Injected variables: plugin, dataList, filterQueryObjects, sort, desc, start & rows |
Get Number of Total Data Rows Script | Number of rows to retrieve for the list. |
Primary Key | Define the primary key column. By default, it should be "id". |
Sample
Sample App that utilizes the BeanShell Binder to manually populate a list and apply a filter.
import java.util.ArrayList; import java.util.List; import org.joget.apps.datalist.model.DataListColumn; List columns = new ArrayList(); // add default metadata fields columns.add(0, new DataListColumn("id", "id", true)); columns.add(0, new DataListColumn("name", "name", true)); columns.add(0, new DataListColumn("information", "information", true)); columns.add(0, new DataListColumn("category", "category", true)); return columns.toArray(new DataListColumn[0]);
import org.joget.apps.datalist.model.DataListCollection; import org.joget.apps.form.model.FormRow; import org.joget.apps.form.model.FormRowSet; import org.joget.apps.datalist.model.DataListFilterQueryObject; import java.util.regex.Pattern; DataListCollection resultList = new DataListCollection(); FormRowSet rowSet = null; FormRow fr = null; // Data 1 fr = new FormRow(); fr.setProperty("id", "example-id-1"); fr.setProperty("name", "example name 1"); fr.setProperty("information", "example information 1"); fr.setProperty("category", "example category 1"); rowSet = new FormRowSet(); rowSet.add(fr); resultList.addAll(rowSet); // Data 2 fr = new FormRow(); fr.setProperty("id", "example-id-2"); fr.setProperty("name", "example name 2"); fr.setProperty("information", "example information 2"); fr.setProperty("category", "example category 2"); rowSet = new FormRowSet(); rowSet.add(fr); resultList.addAll(rowSet); // Data 3 fr = new FormRow(); fr.setProperty("id", "example-id-3"); fr.setProperty("name", "joget"); fr.setProperty("information", "example information 3"); fr.setProperty("category", "example category 3"); rowSet = new FormRowSet(); rowSet.add(fr); resultList.addAll(rowSet); DataListFilterQueryObject obj = new DataListFilterQueryObject(); boolean isFiltered = false; Collection values = new ArrayList(); DataListCollection filteredResultList = new DataListCollection(); for (int i = 0; i < filterQueryObjects.length; i++) { if (filterQueryObjects[i].getValues() != null && filterQueryObjects[i].getValues().length > 0) { values.addAll(Arrays.asList(filterQueryObjects[i].getValues())); System.out.println("Arrays.asList(filterQueryObjects[i].getValues())----------->"+Arrays.asList(filterQueryObjects[i].getValues())); } for (s: resultList) { String targetColumn = s.getProperty("name"); System.out.println("s----------->"+s); System.out.println("targetColumn----------->"+targetColumn); for (String searchWord : values) { System.out.println("searchWord= " + searchWord); String searchWordReplaced = searchWord.replaceAll("%", ""); // Pattern pattern = Pattern.compile(searchWord); System.out.println("searchWordReplaced= " + searchWordReplaced); if (targetColumn.contains(searchWordReplaced)) { rowSet = new FormRowSet(); rowSet.add(s); filteredResultList.addAll(rowSet); isFiltered = true; } } } if(isFiltered){ return filteredResultList; } } if (values.size() > 0){ obj.setValues((String[]) values.toArray(new String[0])); } return resultList;
import org.joget.apps.datalist.model.DataListCollection; import org.joget.apps.form.model.FormRow; import org.joget.apps.form.model.FormRowSet; import org.joget.apps.datalist.model.DataListFilterQueryObject; import java.util.regex.Pattern; DataListCollection resultList = new DataListCollection(); FormRowSet rowSet = null; FormRow fr = null; // Data 1 fr = new FormRow(); fr.setProperty("id", "example-id-1"); fr.setProperty("name", "example name 1"); fr.setProperty("information", "example information 1"); fr.setProperty("category", "example category 1"); rowSet = new FormRowSet(); rowSet.add(fr); resultList.addAll(rowSet); // Data 2 fr = new FormRow(); fr.setProperty("id", "example-id-2"); fr.setProperty("name", "example name 2"); fr.setProperty("information", "example information 2"); fr.setProperty("category", "example category 2"); rowSet = new FormRowSet(); rowSet.add(fr); resultList.addAll(rowSet); // Data 3 fr = new FormRow(); fr.setProperty("id", "example-id-3"); fr.setProperty("name", "joget"); fr.setProperty("information", "example information 3"); fr.setProperty("category", "example category 3"); rowSet = new FormRowSet(); rowSet.add(fr); resultList.addAll(rowSet); DataListFilterQueryObject obj = new DataListFilterQueryObject(); boolean isFiltered = false; Collection values = new ArrayList(); DataListCollection filteredResultList = new DataListCollection(); for (int i = 0; i < filterQueryObjects.length; i++) { if (filterQueryObjects[i].getValues() != null && filterQueryObjects[i].getValues().length > 0) { values.addAll(Arrays.asList(filterQueryObjects[i].getValues())); } for (s: resultList) { String targetColumn = s.getProperty("name"); for (String searchWord : values) { String searchWordReplaced = searchWord.replaceAll("%", ""); if (targetColumn.contains(searchWordReplaced)) { rowSet = new FormRowSet(); rowSet.add(s); filteredResultList.addAll(rowSet); isFiltered = true; } } } if(isFiltered){ return filteredResultList.size(); } } return resultList.size();
Download sample app: