异步处理耗时操作原创
金蝶云社区-吴锐雄
吴锐雄
17人赞赏了该文章 2,808次浏览 未经作者许可,禁止转载编辑于2021年03月09日 17:40:03

创作不易,如果文章对您有帮助,请为我点击一个朴实无华的赞^_^,我会更有动力地更新文章。


案例场景:

在开发的过程中,难免会遇到 数据库的查询和存储、磁盘文件操作、网络请求等等耗时的操作,这时需要把这些操作进行一个异步的处理。

思路:

1.按钮点击时,注册异步回调,在异步回调中处理耗时操作。

2.按钮点击时,锁定按钮,防止多次点击;耗时操作处理完成之后,解锁按钮。


设计器:

添加一个按钮

image.png

image.png

image.png

image.png

image.png




插件代码:

package kd.ecos.demo;

import kd.bos.context.RequestContext;
import kd.bos.form.control.Button;
import kd.bos.form.control.Control;
import kd.bos.form.events.ClientCallBackEvent;
import kd.bos.form.plugin.AbstractFormPlugin;

import java.util.EventObject;

public class DemoTestControlPlugin  extends AbstractFormPlugin {

    // 按钮点击时,异步的action
    private static final String ACTION_CLICK = "wrx1_buttonap_click";
    // 按钮的标识
    private static final String KEY_BUTTON = "wrx1_buttonap";


    @Override
    public void registerListener(EventObject e) {
        super.registerListener(e);

        Button button = getControl(KEY_BUTTON);
        button.addClickListener(this);

    }

    @Override
    public void click(EventObject evt) {
        super.click(evt);
        Control source = (Control)evt.getSource();
        if (source.getKey().equals(KEY_BUTTON)) {
            // 点击按钮时,立刻锁定按钮
            getView().setEnable(false, KEY_BUTTON);
            // 在异步处理
            this.getView().addClientCallBack(ACTION_CLICK, 0);
        }
    }



    @Override
    public void clientCallBack(ClientCallBackEvent e) {
        if(ACTION_CLICK.equals(e.getName())) {
            try {
                // 模拟耗时操作,2秒
                // 耗时操作可以是 数据库的查询和存储,网络请求等等具体的业务逻辑,这里用Thread.sleep来代替
                Thread.sleep(2000);
            } catch (Exception exception) {
            }

            // 打印操作日志
            System.out.println( RequestContext.get().getUserName() + ",操作成功");
            // 耗时操作完成,重新开启按钮
            getView().setEnable(true, KEY_BUTTON);
        }
    }

    
}



效果:

点击按钮之后,插件锁定,执行异步操作image.png

异步操作结束之后,输出日志,按钮解锁

image.png

image.png





图标赞 17
17人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!