Introduction
BeanShell Data BinderStore empowers users to configure lists using BeanShell code, allowing for versatile customization and dynamic data manipulation.
Image RemovedImage Added
Configure BeanShell
Select Data Store > Select Source of Data (BeanShell)
Image Removed
Image Added
Image Added
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". |
Example
Image AddedImage Removed
Info |
---|
|
The code seen in the screenshots aboveSample App that utilizes the BeanShell Data Store to manually populate a list and apply a filter. Code Block |
---|
title | Get Available Columns Script |
---|
| 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]); |
Code Block |
---|
title | Get Data Rows Script |
---|
| 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;
import java.util.ArrayList;
import java.util.List;
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();
Collection uniqueRowKeys = new ArrayList(); // Collection to store unique row keys
System.out.println("START ----------------------------------------------");
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 (FormRow s : resultList) {
String targetColumn = s.getProperty("name");
String targetColumn2 = s.getProperty("information");
System.out.println(s);
for (String searchWord : values) {
System.out.println("Arrays.asList(filterQueryObjects[i].getValues())----------->"+Arrays.asList(filterQueryObjects[i].getValues())values);
String searchWordReplaced = searchWord.replaceAll("%", "");
if (targetColumn.contains(searchWordReplaced) || targetColumn2.contains(searchWordReplaced)) {
// Create a unique key for each row
String rowKey = s.getProperty("id") + "_" + searchWordReplaced;
// Check if the key is not in the collection (i.e., the row is not added yet)
if (!uniqueRowKeys.contains(rowKey)) {
FormRowSet rowSet = new FormRowSet();
rowSet.add(s);
}
filteredResultList.addAll(rowSet);
isFiltered = true;
for (s: resultList) {
uniqueRowKeys.add(rowKey); // Add the key to the collection
String targetColumn = sSystem.out.getPropertyprintln("nameRow added to result");
}
}
}
}
}
if (isFiltered) {
return filteredResultList;
}
if (values.size() > 0) {
obj.setValues(values.toArray(new String[0]));
}
System.out.println("s----------->"clear");
return resultList; |
Code Block |
---|
title | Get Number of Total Data Rows Script |
---|
| 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();
Collection uniqueRowKeys = new ArrayList(); // Collection to store unique row keys
System.out.println("START -----------------------------------"+s);
System.out.println("targetColumn----------->"+targetColumn);
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 (StringFormRow searchWords : valuesresultList) {
String targetColumn = s.getProperty("name");
String targetColumn2 = Systems.out.printlngetProperty("searchWord= " + searchWordinformation");
System.out.println(s);
for (String searchWord : values) {
System.out.println(values);
String searchWordReplaced = searchWord.replaceAll("%", "");
if (targetColumn.contains(searchWordReplaced) || targetColumn2.contains(searchWordReplaced)) {
// Pattern pattern = Pattern.compile(searchWord);
Create a unique key for each row
String rowKey = s.getProperty("id") + "_" + searchWordReplaced;
// Check if the key is not in the collection System(i.out.println("searchWordReplaced= " + searchWordReplaced);
e., the row is not added yet)
if (targetColumn!uniqueRowKeys.contains(searchWordReplacedrowKey)) {
FormRowSet rowSet = new FormRowSet();
rowSet.add(s);
filteredResultList.addAll(rowSet);
isFiltered = true;
}
} uniqueRowKeys.add(rowKey); // Add the key to the collection
}
System.out.println("Row added if(isFiltered){to result");
return filteredResultList;}
}
}
}
}
if (isFiltered) {
return filteredResultList.size();
}
if (values.size() > 0) {
obj.setValues((String[]) values.toArray(new String[0]));
}
System.out.println("clear");
return resultList; |
Code Block |
---|
title | Get Number of Total Data Rows Script |
---|
| return 3; |
|
...
This field is used to configure the columns of the list.
Injected variables: plugin
...
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
...
Define the primary key column.
By default, it should be "id".
Download sample app: