You may want to store specific fields from your form to other tables using the Beanshell Form Data Store. The image below shows an example of a form where the first 3 fields are to be stored in another data source in addition to the original form data table.

Then, click the form's Properties tab and navigate to the Advanced page. Choose Bean Shell Form Data Store as the Store Data Store.

Configure Bean Shell Form Data Store with your coding to store the fields as intended, as shown in the figure below. See the code used in this example in the following code block:
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.joget.apps.app.model.AppDefinition;
import org.joget.apps.app.service.AppService;
import org.joget.apps.app.service.AppUtil;
import org.joget.apps.form.model.Element;
import org.joget.apps.form.model.FormData;
import org.joget.apps.form.model.FormRow;
import org.joget.apps.form.model.FormRowSet;
import org.joget.apps.form.model.FormStoreBinder;
import org.joget.apps.form.service.FormUtil;
import org.joget.plugin.base.PluginManager;
import org.joget.commons.util.LogUtil;
public FormRowSet storeData(Element element, FormRowSet rows, FormData formData) {
if (rows == null || rows.isEmpty()) {
return rows;
}
normalStoring(element, rows, formData);
FormRow originalRow = rows.get(0);
FormRowSet newRows = new FormRowSet();
FormRow newRow = new FormRow();
newRow.put("firstName", originalRow.getProperty("firstName"));
newRow.put("lastName", originalRow.getProperty("lastName"));
newRow.put("email", originalRow.getProperty("email"));
newRows.add(newRow);
String id = "#currentUser.username#";
storeToOtherFormDataTable(element, newRows, formData, id);
storeUsingJDBC(element, newRows, formData, id);
return rows;
}
public void normalStoring(Element element, FormRowSet rows, FormData formData) {
PluginManager pluginManager = (PluginManager) AppUtil.getApplicationContext().getBean("pluginManager");
FormStoreBinder binder = (FormStoreBinder) pluginManager.getPlugin("org.joget.apps.form.lib.WorkflowFormBinder");
binder.store(element, rows, formData);
}
public void storeToOtherFormDataTable(Element element, FormRowSet rows, FormData formData, String id) {
AppService appService = (AppService) AppUtil.getApplicationContext().getBean("appService");
String formId = "user";
AppDefinition appDef = AppUtil.getCurrentAppDefinition();
appService.storeFormData(appDef.getId(), appDef.getVersion().toString(), formId, rows, id);
}
public void storeUsingJDBC(Element element, FormRowSet rows, FormData formData, String id) {
Connection con = null;
try {
DataSource ds = (DataSource)AppUtil.getApplicationContext().getBean("setupDataSource");
con = ds.getConnection();
if (!con.isClosed()) {
String selectQuery = "SELECT username FROM dir_user WHERE username=?";
PreparedStatement stmt = con.prepareStatement(selectQuery);
stmt.setString(1, id);
ResultSet rs = stmt.executeQuery();
Boolean isExist = false;
if (rs.next()) {
isExist = true;
}
FormRow row = rows.get(0);
if (isExist) {
String updateQuery = "UPDATE dir_user SET firstName = ?, lastName = ?, email = ? WHERE username = ?";
PreparedStatement ustmt = con.prepareStatement(updateQuery);
ustmt.setString(1, row.getProperty("firstName"));
ustmt.setString(2, row.getProperty("lastName"));
ustmt.setString(3, row.getProperty("email"));
ustmt.setString(4, id);
ustmt.executeUpdate();
} else {
String insertQuery = "INSERT INTO dir_user (id, username, firstName, lastName, password, email) values (?, ?, ?, ?, 'md5(password)', ?)";
PreparedStatement istmt = con.prepareStatement(insertQuery);
istmt.setString(1, id);
istmt.setString(2, id);
istmt.setString(3, row.getProperty("firstName"));
istmt.setString(4, row.getProperty("lastName"));
istmt.setString(5, row.getProperty("email"));
istmt.executeUpdate();
}
}
} catch (Exception e) {
LogUtil.error("Sample app - StoreToMultipleSource form", e, "Error storing using jdbc");
} finally {
try {
if(con != null) {
con.close();
}
} catch (SQLException e) {}
}
}
return storeData(element, rows, formData);

If the code is written correctly and tested, you will get this result:

Check the data in the database:
