【二开】过账结账后增加自定义逻辑原创
金蝶云社区-战斗的凯文
战斗的凯文
38人赞赏了该文章 163次浏览 未经作者许可,禁止转载编辑于2024年09月09日 16:46:20
summary-icon摘要由AI智能服务提供

本文提出了一种在启用多线程服务的过账和结账操作后执行自定义逻辑的方法。通过表单插件中的OnQueryProgressValue()方法,系统每隔一段时间检查服务进度,若完成则执行自定义逻辑。为避免干扰,自定义逻辑应在新线程中执行,并通过检查凭证状态和账簿期来判断过账或结账是否完成。示例代码展示了如何在OnQueryProgressValue中开启新线程执行自定义逻辑及回调处理。

        需要在过账结账后增加自定义逻辑,但是,由于过账和结账均启用了多线程服务,常规的在相关点击事件后增加插件的方法,无法确保在过账或结账完成后才触发自定义逻辑,这里提供一种新的思路:

1,表单插件中实现OnQueryProgressValue()方法,该方法的作用是在过账或结账期间,每隔一段时间(默认3秒)自动检查一次服务进度,利用这个系统自动触发的方法的特性,反复的去检查看当前过账或结账是否已完成,如果已完成,就执行自定义逻辑。

2,在上述方法中开启一个新的线程,注意,OnQueryProgressValue()方法不宜执行耗时较长的逻辑,以免影响进度查询。因此,在该方法中实现自己逻辑时,尽量放到新的线程上操作,避免对现有功能产生干扰。

3,在这个线程中,判断是否过账或结账完成,如果完成,就调用自己定义逻辑的入口方法。

4,注意,检查过账是否完成,可以检查凭证在当前期间是否还存在未过账凭证,注意排除已作废凭证;检查结账是否完成,可以检查账簿的当前期是否变为下一期。

大致代码如下:

        /// <summary>
        /// 进度条事件
        /// </summary>
        /// <param name="e"></param>
        public override void OnQueryProgressValue(QueryProgressValueEventArgs e)
        {
			//开启新线程执行自定义逻辑MyWork,AsyncCallback为MyWork完成后的回调函数
			MainWorker.QuequeTask(this.Context, MyWork, new Action<AsynResult>(result => AsyncCallback(result)));        
        }
        
        /// <summary>
        /// 新线程执行自定义逻辑
        /// </summary>
        private void MyWork()
        {
            try
            {	
				//检查是否已完成
				if(CheckIsOver())
				{
					//自定义逻辑入口方法
					MyRealWork();
				}
            }
            catch (Exception ex)
            {
                this.View.ShowErrMessage(ex.StackTrace, ex.Message);
            }
        }
        
        /// <summary>
        /// 异步执行回调
        /// </summary>
        /// <param name="result"></param>
        private void AsyncCallback(AsynResult result)
        {
            //执行结束
            if (result != null && !result.Success)
            {
                //TODO
            }
        }


赞 38