Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

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


NameDescription
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
titleSample

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
titleGet 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
titleGet 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
titleGet 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
titleGet 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".

.size();


Download sample app: