倒计时控件使用案例-自动保存单据原创
金蝶云社区-wh_cn
wh_cn
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直接保存。


赞 3