问题描述
我有一个名为Button_Import的按钮,单击此按钮后,我会通知用户该导入可能需要一些时间,然后它将调用一个需要花费数小时才能完成的数据工厂(通过Logic Apps)。
整个点击过程仅需几秒钟,然后按钮将重新启用。
我的目标是故意禁用按钮约30秒钟,以确保不会出现用户双击的情况,从而避免可能重复调用数据工厂。
如何实施?
解决方法
您可以使用计时器控件和几个variables来实现此逻辑。在按钮的OnSelect控件中,您可以看到类似于下面的表达式:
UpdateContext({ startTimer:true,buttonDisabled:true });
Notify("Imported started,it will take some time...");
MyDataFactoryProcess.Run(...)
按钮的DisplayMode将使用buttonDisabled
变量来确定是否要禁用它:
If(!buttonDisabled,DisplayMode.Edit,DisplayMode.Disabled)
在Timer控件中,您可以使其依赖于startTimer
变量,并且在结束时将重置该变量和buttonDisabled变量。这些将是要更新的计时器的属性,以及它们各自的值:
Duration: 30000 // 30 seconds
Start: startTimer
OnTimerEnd: UpdateContext({ buttonDisabled:false,startTimer:false })
这样,当按下按钮时,它将禁用自身并启动计时器;当计时器结束时(在您的Duration属性中指定的时间之后),它将启用该按钮并重置startTimer变量,以便再次按下该按钮时,计时器可以再次启动。