倒计时控件使用案例-自动保存单据原创
3人赞赏了该文章
916次浏览
编辑于2021年11月01日 10:32:20
业务场景:
系统中开发了服务工单,一张单据包含报修信息、服务现场信息记录等。应用流程为内勤人员通过在单据中选择服务工程师完成派工;服务工程师通过企业微信登录系统可以看到被派工的工单,现场服务过程中需要采集相应信息,包括配件使用情况、关键内容拍照等。
碰到的问题:
系统设置了10分钟不操作自动退出(设置方式参考:https://vip.kingdee.com/article/201364354711515136)。
但是由于工程机械现场服务一般时间比较长,而且现场工作环境等因素,服务工程师使用手机不是太方便,所以拍照后直接将手机收起或放在一边,经常忘记点保存。一旦超时退出会导致单据中无法将照片保存。
同时,单据设置图片只能调取摄像头拍照不允许上传相册图片,而一旦维修完成也无法再重现故障现场。
缺失现场资料的工单在后期结算时难以评判。
解决:
由于几百服务人员遍布全国而且存在人员流动,很难单纯靠用户自觉操作规避此问题。
所以想到通过单据自动保存来解决。
首先第一想法是当单据字段发生变化时就调用保存,但是实际情况中工单字段众多,通过插件实现复杂,后期如果增加或调整字段插件也需要修改;而且有些服务现场网络状况不好,保存时间较长会影响使用体验。
否定第一想法后,考虑参考office的自动保存,设置时间间隔,定时保存。
系统提供了倒计时控件,只要循环触发倒计时即可实现定时自动保存的功能。以下简单的代码实现了5分钟自动保存一次
//
//界面初始化后,设置倒计时时间并启动倒计时@Override
public void afterCreateNewData(EventObject e) {
CountDown c=this.getView().getControl("sdzn_timer");
c.setDuration(300);
c.start();
}
//倒计时结束后,保存单据,并重置倒计时时间开始计时
@Override
public void onCountDownEnd(CountDownEvent evt) {
SaveServiceHelper.saveOperate("xxx",new DynamicObject[]{this.getModel().getDataEntity()}, OperateOption.create());
CountDown c=this.getView().getControl("sdzn_timer");
c.setDuration(300);
c.start();
}
以上代码中保存使用了saveOperate,保存操作会触发校验及操作插件,可能会造成保存失败,所以在实际应用中,仅仅暂存单据可以使用save直接保存。