Skip to main content
January 2, 2025
Solved

Refreshing a Grid from two different scenarios

  • January 2, 2025
  • 10 replies
  • 0 views

I have an interface that gets data via an integration and then filters those results:

  local!caseCommentsResult: rule!UWM_Get_Case_Comments(caseId: ri!caseId),
  local!caseComments: local!caseCommentsResult.result.body,
  local!filteredActivities: a!forEach(
    items: local!caseComments,
    expression: if(
      tostring(fv!item.commentType) = "CASE_NOTE",
      fv!item,
      null
    )
  ),

And it is displayed in a grid:

a!columnLayout(
        contents: {
          a!localVariables(
            local!pageSize: 25,
            {
              a!gridField_23r3(
                emptyGridMessage: "No comments available",
                data: local!filteredNonNullActivities,


I want the grid to refresh on two different scenarios - 
1.  on RECORD_ACTION  (adding a new row)
2.  when a row is edited by direct integration call

I've tried various different scenarios of local variables but cannot figure out how to get the refresh to work with both these scenarios, especially since something like this

local!isCommentAdded: a!refreshVariable(
value: true,
refreshAfter: "RECORD_ACTION"
),

Always sets the value to true, there is no actual change in value of that variable to work with.

Here is my best attempt -

  local!editCompleted : false,
  local!isCommentUpdated: a!refreshVariable(
    value: local!editCompleted,
    refreshOnReferencedVarChange: local!editCompleted
  ),
  local!isCommentAdded: a!refreshVariable(
    value: true,
    refreshAfter: "RECORD_ACTION"
  ),
  local!isRefreshNeeded: if(
    or(
      local!isCommentUpdated,
      local!isCommentAdded
    ),
    true,
    false
  ),
  
    local!caseCommentsResult: a!refreshVariable(
    value: rule!UWM_Get_Case_Comments(caseId: ri!caseId),
    refreshOnReferencedVarChange: local!isRefreshNeeded
  ),



But because "isCommentAdded" is always true there is no change for caseCommentsResult to act upon.


Best answer by stefanhelzle0001

More like so

a!localVariables(
  local!refreshCounter: 1,
  local!data: a!refreshVariable(
    value: /* YOUR QUERY */
    refreshAfter: "RECORD_ACTION",
    refreshOnVarChange: local!refreshCounter
  )
)

You can then increment that counter using a!save() inside any saveInto.

10 replies

mikes0011
Brainy
January 2, 2025

I worry that you're overcomplicating this.  What happens if you simply declare local!caseCommentsResult to use the "refreshAfter: "RECORD_ACTION"" parameter?

stefanhelzle0001
January 2, 2025

In such multi-update scenarios, I just create a local counter variable which I increment when I want the data to refresh. Then make my local refresh depending on that counter.

January 2, 2025

How would I make the record action increment the record counter?   The other scenario I can do (the edit that does a call to an integration I can do easily enough) the record action doesn't have a way for me to increment that variable?

mikes0011
Brainy
January 2, 2025

In rarer cases like this, I've found it useful to use a local timetamp.

local!lastUpdateTime: a!refreshVariable(value: now(), refreshAfter: "RECORD_ACTION"),

this value will be updated to a new timestamp any time a record action is observed.  This variable cand then be added to the refresh variable "on var change" watchers for any relevant local variable(s) that need to be updated after the record action.