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.

Configure BeanShell

Select Data Store > Select Source of Data (BeanShell)

...

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

Info
titleSample

Sample App that utilizes the BeanShell Binder 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(values);
            String searchWordReplaced = searchWord.replaceAll("Arrays.asList(filterQueryObjects[i].getValues())----------->"+Arrays.asList(filterQueryObjects[i].getValues()));
"%", "");
            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("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("s----------->"+s);
                System.out.println("targetColumn);
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 ---------------------------------------------->"+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.size();


Download sample app: