how to save into a variable and start a process at the same time?

I have a feature where the user clicks a link to run a process in the background and perform some actions. What I want to do is to display a message to the user while the PM is running so they know that something is going on. However, I found out that you can't do any other saves until the onSuccess is run. I want to run the following code.

a!dynamicLink(
showWhen: not(ri!inProgress),
value: true,
saveInto: {
a!save(ri!showMessage, true),
a!startProcess(
processModel: cons!WM_PM_SYNC_HOLDS_DATA,
processParameters: {
siteAcronym: ri!siteAcronym,
siteId: ri!siteId,
writeType: ri!writeType,
user: loggedInUser(),
lastSyncDate: ri!lastSyncDate
},
onSuccess: {
a!save(
ri!processInstance,
fv!processInfo.pp.id
)
},
onError: a!save(ri!error, "error")
),
}
),

In the code above, a!save(ri!showMessage, true) is not executed until the onSuccess() in the starProcess() is run even though it's outside of the startProcess. I've tried chaining the process and without any chaining and that save always waits for the PM on success or onError(). Is there a way to get around this? I know there is other ways like using a process report which is what I'm doing, I just want to know if this scenario is possible.

  Discussion posts and replies are publicly visible

Parents
  • One possible way might be to have the PM write a "I'm now running" value to a DB table, and have your interface have a refreshVariable (set to auto-refresh every 30s say) that is fetching that value from the DB, and then an interface widget that displays the appropriate message. When the process ends it can then change the value in the DB to a "I'm done" value, the refreshVariable will then eventually fetch that value and your interface widget can now display a different message.

  • 0
    Certified Lead Developer
    in reply to Stewart Burchell

    This is a good example of why the timer-based auto refresh should have much lower options than the current minimum of 30 seconds.  This sort of example would be best served by a 5 second refresh interval, for example.  A relatively trim query would have basically no negative impact on system performance by being run every 5 seconds.

Reply Children