ToolJet/docs/versioned_docs/version-2.33.0/how-to/bulk-update-multiple-rows-in-table.md
Akshay 2d08d889de
Release: Community changes (v2.34.0) (#9226)
* add custom resolvers info and editable row selection info (#9057)

* fix system requirements icon

* add auth info for webhooks and fix casing

* add regex custom validation info (#9068)

* [docs]: Marketplace 1.7 updates (#9085)

* [docs] Amazon redshift plugin

* make minor improvements

* add and update docs for marketplace 1.7

* update order of plugins in overview to match sidebar

* create new version

---------

Co-authored-by: Shubhendra <withshubh@gmail.com>

* add the latest version in the versions.json file (#9094)

* [docs]: Update PDF component (#9088)

* update PDF component

* merged with develop and added changes to the new version

* update docs favicon: (#9118)

* [docs] SSO revamp (#9031)

* add method to set default language

* update image settings through custom css and update screenshots for getting started and tooljet concepts (#9158)

* fix read documentation button

* fix formatting for setup icons (#9172)

* fix sidebar link for aws lambda

* Update static media (#9175)

* updated the screenshots

* reduced the gif size

* reverted the package.json file

* edited the zoomed in images and replaced some gifs with screenshots

* removed one gif

* update static media

* update file names

* update toolbar

* fix file names

* fix: dynamodb img path

* update media for org management dashboard

* fix: casing and formatting

* update workspace constant media

* update media in workspace settings and github

* update github sso

* minor change to github sso docs

* minor fix

* update google sso

* change includeCurrentVersion flag to false

---------

Co-authored-by: Asjad Ahmed Khan <iitasjad2001@gmail.com>
Co-authored-by: Asjad Ahmed Khan <60435499+2001asjad@users.noreply.github.com>
Co-authored-by: Karan Rathod <karan.altcampus@gmail.com>

* Feature: Engagespot plugin (#9012)

* feat(plugins): added engagespot plugin

* feat(docs): added engagespot plugin docs

* chore(engagespot-plugin): revised copywritings

* Feature: Databricks data source (#9174)

* plugin-created

* Databricks integration

* icon, error handling

* removed unrelated changes from marketplace and frontend package-lock.json removed runAsync and maxRows timeouts pending

* timeout implementation

* socket timeout and error handling

* resolve comments

* resolve comments2

* solved render issue test connection improvements

* solved undefined error

* fix TJDB not null value fail for is operation (#9055)

* fix TJDB not null value fail for is operation

* handling not null and null case insenstive values

* Support for marketplace plugin deploy on render preview app (#9221)

* Fix for marketplace error on render preview app

* add marketplace build command

* Adding new workflow for building marketplace plugin

* removed render app creation

* [:docs] Add documentation for Databricks plugin (#9224)

* add docs for databricks

* update databricks docs

* update docs

* remove ref to clusters

* bump to v2.34.0

* Fixed data source cypress failure (#9227)

* updated spec with required text

* updated mongodb and import spec

* updated import spec

---------

Co-authored-by: Karan Rathod <karan.altcampus@gmail.com>
Co-authored-by: Adish M <44204658+adishM98@users.noreply.github.com>
Co-authored-by: Midhun G S <gsmithun4@gmail.com>
Co-authored-by: Shubhendra <withshubh@gmail.com>
Co-authored-by: Aman Regu <amanregu@gmail.com>
Co-authored-by: Asjad Ahmed Khan <iitasjad2001@gmail.com>
Co-authored-by: Asjad Ahmed Khan <60435499+2001asjad@users.noreply.github.com>
Co-authored-by: Jobin Jose <129726530+jobin-logidots@users.noreply.github.com>
Co-authored-by: Syed Mohammad Akhtar Rizvi <85864291+ShazanRizvi@users.noreply.github.com>
Co-authored-by: blank0537 <111295371+blank0537@users.noreply.github.com>
Co-authored-by: Mekhla Asopa <59684099+Mekhla-Asopa@users.noreply.github.com>
2024-03-29 19:13:26 +05:30

5.1 KiB

id title
bulk-update-multiple-rows Bulk Update Multiple Rows in Table

For the purpose of this guide, it's presumed that you've already established a successful connection to your data source. We'll use PostgreSQL for this example, but you can adjust the queries based on the SQL database that you are using.

1. Create a Query to Get the Data

  • Create a PostgreSQL query in SQL mode, rename it to users and enter the below code.
SELECT * FROM <table name> // *replace <table name> with your table name*
  • Enable the Run the query on application load? option to execute the query automatically when the application starts.
  • Click on the Run button to fetch the data from the database.
Fetch the Data

2. Display the Data on the Table

  • Drag and drop a Table component onto the canvas from the components library on the right.
  • Click on the Table component to open its properties on the right sidebar.
  • To populate the Table with the data returned by the query, add the below code under the Data field of the Table:
{{queries.users.data}}
Display Data on the Table

3. Make the Columns Editable

  • Under the Columns accordion, click on the column name that you want to make editable.
  • On clicking the column name, a new section will open. Enable the toggle for Make editable to make the column editable.
Make Column Editable

4. Enable Multiple Row Selection

  • Under the Row Selection accordion, enable the Allow Selection, Highlight Selected Row, and Bulk Selection option.
Multiple Row Selection

5. Create a Custom JS query

  • Create a new Run Javascript query and use the code below to generate the SQL query for updating multiple rows. The query will be named as runjs1 by default.
const uniqueIdentifier = "id"
const cols = Object.values(components.table1.changeSet).map((col, index) => {
  return {
    col: Object.keys(col),
    [uniqueIdentifier]: Object.values(components.table1.dataUpdates)[index][uniqueIdentifier],
    values: Object.values(col),
  };
});

const sql = cols.map((column) => {
  const { col, id, values } = column;
  const cols = col.map((col, index) => `${col} = '${values[index]}'`);
  return `UPDATE users SET ${cols.join(", ")} WHERE id = '${id}';`;
});

return sql

Here the unique identifier is id and Table component's name is table1. You can update the unique identifier if you are using a different column as a unique identifier. You can also update the Table name if you have renamed it, the default name is table1.

RunJS code to later the data

6. Create an Update Query

  • Create a PostgreSQL query in SQL mode and rename it to update:
{{queries.runjs1.data.join(' ')}}
  • This query will run the SQL query generated by the runjs1 query.
Bulk Update Rows

7. Adding Event Handlers to Execute Queries in Sequence

  • Edit the Table component and add an event handler for Save Changes event so that whenever a user will edit the Table and hit the Save Changes button the runjs1 query will run.
  • Optionally, add loading state to the Table by clicking on fx next to the Loading state property.
  • Use the below code to show the loading state whenever a query is getting executed.
{{queries.users.isLoading || queries.update.isLoading}}
Adding Events
  • Now, go to the runjs1 query and add an event to run the update query for Query Success event. This will run the update query after the runjs1 query is successfully executed.
Query Success

The data needs to reload once the update query runs since we want the Table component to be populated with the updated data.

  • Add a new event handler in the update query.
  • Select Query Success as the Event and Run Query as the Action.
  • Select users as Query.

This will refresh the table whenever the update query will be run.