One way to simulate this would be to have a Global or Instance variable (whichever is more appropriate) of a datawindow array:
datawindow idw_array[]
Whenever a DW is created dyamically you add a pointer to that array:
datawindow ldw1
ldw1 = CREATE datawindow
ll_max = UpperBound (idw_array)
idw_array [ll_max + 1] = ldw1 // Clean up the array if ldw goes out of scope
Whenever a DW is created in the IDE you arr a pointer when the object is opened:
// Open event of window
ll_max = UpperBound (idw_array)
ll_max = ll_max + 1
idw_array [ll_max] = dw_first
ll_max = ll_max + 1
idw_array [ll_max] = dw_second
.
.
.
When you are ready for the Update, scroll through the array
ll_max = UpperBound (idw_array)
FOR ll_idx = 1 TO ll_max
ldw = idw_array [ll_idx]
ll_rc = ldw.Update () // If parameters are required use a CASE statement here
IF (ll_rc <> 1) THEN
// error handling here
END IF
NEXT