Genexus Web中打开弹窗时能否暂停执行,待关闭后继续?
在GeneXus Web中实现弹窗关闭后再执行后续代码的简便方案
方案1:利用GeneXus 17U10自带的Popup回调参数(无需扩展)
GeneXus 17U10的Popup方法支持传入回调逻辑,直接在调用时指定弹窗关闭后要执行的代码即可,无需依赖额外扩展工具包。修改代码如下:
Event 'popup' WReadFlag.Popup(&FLAG, Sub() msg("FLAG " + &FLAG) EndSub) Endevent
通过Popup方法的第二个参数传入匿名子过程,弹窗关闭后会自动执行子过程内的代码,此时&FLAG已被弹窗赋值,能正常获取到有效值。
方案2:使用WorkWithPlus的模态弹窗特性(项目已集成时)
如果项目已经引入WorkWithPlus,它的模态弹窗默认支持阻塞式执行逻辑,只需将弹窗设置为模态模式,后续代码会自动等待弹窗关闭后再执行:
Event 'popup' WReadFlag.Popup(&FLAG, Mode: Modal) msg("FLAG " + &FLAG) Endevent
WorkWithPlus的模态弹窗会暂停当前事件的代码执行流程,直到弹窗关闭,后续的msg语句就能直接拿到正确的&FLAG值。
方案3:参考GeneXus新版本的Async/Await特性(兼容升级场景)
如果后续考虑升级到GeneXus 18及以上版本,可以利用新增的异步等待特性,通过Await关键字实现更直观的阻塞逻辑:
Event 'popup' Async Await WReadFlag.PopupAsync(&FLAG) msg("FLAG " + &FLAG) Endevent
需要将事件标记为Async,然后调用PopupAsync方法并配合Await关键字,代码会等待弹窗关闭后再执行后续语句,写法更简洁易懂。
内容的提问来源于stack exchange,提问作者Nicola
相关产品推荐
相关产品推荐

