Yep - you’re referring to a multi-pass update process where certain values become dependencies of values that may have changed in the process. This is not possible with Formula fields because an updated formula value destroys the previous value. As such, it must be done with script.
One approach is to simply perform the entire logical process in script by loading the data into an array and use that to perform the business logic. As values need to change, refer to the array version as you build an updated (new array) version of the data. Then replace the data table with the updated array.
Yep - you’re referring to a multi-pass update process where certain values become dependencies of values that may have changed in the process. This is not possible with Formula fields because an updated formula value destroys the previous value. As such, it must be done with script.
One approach is to simply perform the entire logical process in script by loading the data into an array and use that to perform the business logic. As values need to change, refer to the array version as you build an updated (new array) version of the data. Then replace the data table with the updated array.
So people can’t update the table they have to do it within the app? I don’t think that will work.
To be clear I need to know what the value of a field was before the “On Update” automation began running so I know how to handle the update in a script. I just wasn’t sure if there was a way to access the value of a field before it was updated when the on update script runs.
I was thinking that I could store the value of a field in another hidden field and then update that value after I handle the script, however I thought it might not work because a field can be updated multiple times before the first automation ever finishes.
So people can’t update the table they have to do it within the app? I don’t think that will work.
To be clear I need to know what the value of a field was before the “On Update” automation began running so I know how to handle the update in a script. I just wasn’t sure if there was a way to access the value of a field before it was updated when the on update script runs.
I was thinking that I could store the value of a field in another hidden field and then update that value after I handle the script, however I thought it might not work because a field can be updated multiple times before the first automation ever finishes.
Yep - clear requirements and objectives make it easier to advise. :winking_face:
Is the script that’s triggered by On Update working on one record update or a collection of record updates?
And, are you aware that script actions are not instant (as most devs would expect)? I believe they can occur many minutes after the update actually occurs.
Yep - clear requirements and objectives make it easier to advise. :winking_face:
Is the script that’s triggered by On Update working on one record update or a collection of record updates?
And, are you aware that script actions are not instant (as most devs would expect)? I believe they can occur many minutes after the update actually occurs.
It runs when a field in one of my tables is updated.
I am aware it takes time for an automation to finish. That is what I am trying to point out is that my work around of storing the old value in a hidden field probably won’t work because of that issue. That is why I was hoping that there was some way to access the previous value before the on update ran.
It runs when a field in one of my tables is updated.
I am aware it takes time for an automation to finish. That is what I am trying to point out is that my work around of storing the old value in a hidden field probably won’t work because of that issue. That is why I was hoping that there was some way to access the previous value before the on update ran.
It’s not so much the time that it takes to finish; such a process is likely milliseconds - far quicker than you might imagine. The issue is the timing of it - you really can’t be certain when it will run, but when it does, it will be so quick that no aconcurrent] user edits are likely to impact the outcomes.
I don’t think this is an issue at all.
I think the latest historical value saved to an adjacent field will work fine and the cost of trying and testing this hypothesis is near zero.
In case there are many quick updates by users, most likely you're interested only in the last (final) update. In that case, you can wait for it and take action only then. Here's a sample code that does that:
// pass the last modified value of the field as input param to the script
let last_modified_1 = new Date(inputVars.last_modified_fieldX).getTime();
while (new Date().getTime() < last_modified_1 + 5000) {
// do nothing, wait for the updates to settle down (5 sec)
}
let table = base.getTable('My Table');
let rec = await table.selectRecordAsync(rec_id);
let last_modified_2 = new Date(rec.getCellValue('last_modified_fieldX')).getTime();
if (last_modified_1 != last_modified_2) {
console.log("New updates found in the last 5 sec... skipping processing.");
return;
}
// process the update, do your thing, use freshly obtained rec for calculations
// total processing time (including the update of the hidden field in the end)
// should not surpass 5 sec (otherwise increase the waiting time above)
(note that this code needs to run within a function, due to the "return" statement I'm using for a quick exit)