如何对执行的长任务进行页面关闭前干预

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

如何对执行的长任务进行页面关闭前干预

【应用场景】

在关闭当前业务对象时,检测是否有由此业务对象产生的后台任务正在运行中,如有,则给出相应提示


【注意事项】

支持版本:PT-151005 [8.2.0.20231109]


【案例演示】

二开表单,执行长任务时,在页面关闭的时候自动检测是否可以关闭。


【实现步骤】

<1>编写表单插件,代码如下:

namespace BOSTest.Zy.PlugIn
{
    [HotUpdate]
    /// <summary>
    /// 长任务页面关闭测试
    /// </summary>
    [Description("长任务页面关闭测试")]
    public class LongWorkerPlugIn : AbstractDynamicFormPlugIn
    {
        public override void ButtonClick(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.ButtonClickEventArgs e)
        {
            base.ButtonClick(e);

            if (e.Key.EqualsIgnoreCase("FButton_qtr"))
            {
                StartTask();
            }
        }

        private void StartTask()
        {
            LongTaskWatcher longTask = new LongTaskWatcher();
            longTask.IsForbidCancel = false;//是否禁止强制关闭(默认false可以强制关闭,如果有超时,则超时后可以强制关闭)
            longTask.TimeOut = 20;//超时时间(单位:秒,超时后将强制退出)
            longTask.IsTimeOutIgnoreConfirm = false;//超时忽略消息提醒

            this.View.AddLongTaskWatcher(longTask);

            Task.Factory.StartNew(() =>
            {
                //执行长任务...


                //模拟进度
                try
                {
                    Thread.Sleep(1000);
                    RefeshTask(longTask.WatcherId, 10);

                    Thread.Sleep(2000);
                    RefeshTask(longTask.WatcherId, 30);

                    Thread.Sleep(5000);
                    RefeshTask(longTask.WatcherId, 100);
                }
                finally
                {
                    //释放长任务
                    this.View.ReleaseLongTaskWatcher(longTask.WatcherId);
                }

            });
        }

        /// <summary>
        /// 刷新进度
        /// </summary>
        /// <param name="watcherId">监控Id</param>
        /// <param name="progress">进度</param>
        private void RefeshTask(string watcherId, int progress)
        {
            JSONObject jo = new JSONObject();
            jo["LastUpdateTime"] = DateTime.Now;
            jo["BeforeCloseMessage"] = string.Format("正在进行XXX任务(进度{0})", progress);
            this.View.UpdateLongTaskWatcher(watcherId, jo);
        }
    }
}

 

<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。

<3>BOSIDE打开二开单据,注册表单插件,保存元数据,开发完毕。



【功能验证】

<1>登录业务站点,打开二开单据,执行自定义长任务。


<2>关闭时会有相应提示。




【金蝶云星空BOS二次开发案例演示】

https://vip.kingdee.com/article/94751030918525696



如何对执行的长任务进行页面关闭前干预

【应用场景】在关闭当前业务对象时,检测是否有由此业务对象产生的后台任务正在运行中,如有,则给出相应提示。【注意事项】支持版本:PT-1...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息