I want to replace the Opportunity related list component on the Account record page with a Flexcard that has a datatable element listing all the related Opportunity records.

I am aware that this use case is not best practise, but I use it to practise my Omnistudio skills.

I also want to restrict this example to the Flexcard only and use the Flexcard's native functionality to update these record.

I am able to display all the related Opportunity records in the datatable using an Integration Procedure that receives the AccountId and retrieves all related Opportunities.

The issue I encounter is updating these records when they are changed on the datatable:

enter image description here

The Salesforce Help files here lists a datatable event update that "Fires when table data changes."

I also found a very thorough Quip document going through all the datatable event use cases here.

I created an event listener that triggers on the 'update' event and passes the information to an Integration Procedure that updates the relevant record:

enter image description here

I assumed from the Quip document that the updated values will also be contained in the {action.result.FIELD_NAME} and as such I pass these merge fields to the IP.

From my GIF above, it seems like not to do the job, so my question is how to I pass the updated values to the IP to update the records OR is it even required to do such a thing with the 'update' event as from the Salesforce documentation as well as the Quip file it is not immediately obvious.

Should I rather use another event such as rowclick or selectrow?

I have created an MVP of the Flexcard which you can download here.

Thanks for your time!

1 Answer 1


So it seems the update event will not work for this scenario. I created a flexcard that basically showcases what each datable event does:

enter image description here

A summary of each event that I tested:

  • rowclick captures the row column values with {action.result.FIELD_NAME}. You can click anywhere on the row and it will return that row's information. In the GIF you can see how the recordId gets updated for "Clicked On RecordId"
  • selectrow returns the last selected row's details and each field's value can be accessed with {action.result.FIELD_NAME}.
  • update fires when the data in the datatable changes. It does not return the values of the row that was updated, or the updated {records} merge field

An interesting thing I picked up is that the {records} list does not get updated when you update a cell value in the datatable.

Also, I added in the event listener for rowclick to write the row values to Session.FIELD_NAME, but when I update a value and press the checkmark for row level edit (or click out of the cell I just updated for cell level edit), the updated value does not get written to its designated place.

This lets me assume that you actually cannot commit any changes made in the datatable to the database with the datatable alone.

As such I used the rowclick event to write the recordId to Session.Id and then launch a flyout Omniscript. The OS uses the recordId to get the relevant fields for that recordId and displays it for editing by the user. The user can then make the changes, save the record and the flexcard gets reloaded to display the newest changes:

enter image description here

My conclusion is thus:

  • Flexcards are used to display data and enables a user to take certain actions (such as click on a record to edit it, or press a button to launch an Omniscript).
  • Omniscripts are used to guide the user through a process which can be capturing/updating information.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .