Issue 2
Internally this one is quote complex to understand, but boils down to the button being associated with a Row, which then completely repopulates the browse, which makes the setting "obsolete". But as the events bubble up to the form, the selected row setting bubbles up as well.
The most elegant way I've found to fix this is to add the following code to the DepartmentList procedure, to the Validate::Other2 routine (ie where your code is) and explicitly remove the row value there. In other words you're saying "yeah, that row value that got passed in, forget it...".
p_web.DeleteValue('RHI:REC_ID')
note that this is deleting from the ValueQueue, not the SessionValue queue, so the session value is unchanged. (and is being set correctly elsewhere.)
cheers
Bruce