closedCallBack事件

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

closedCallBack事件

1 事件介绍

父界面的插件,可以在此事件,接收子界面返回的数据。

 

说明:

需要在显示子界面时,调用FormShowParameter参数的setCloseCallBack方法,设置回调属性,才会在子界面关闭时触发此事件:


FormShowParameter  showParameter = new FormShowParameter();
showParameter.setFormId(GetValByConditionEdit.FormId_ValByCondition);
showParameter.setCloseCallBack(new CloseCallBack(plugin, CALLBACKID_MYCALLBACK));
showParameter.getOpenStyle().setShowType(ShowType.Modal);
this.getView().showForm(showParameter);

 

2 事件触发时机

子界面关闭时,触发父界面的closedCallBack事件。

 

3 代码模板

package   kd.bos.plugin.sample.dynamicform.pcform.form.template;
 
import   kd.bos.dataentity.utils.StringUtils;
import   kd.bos.form.events.ClosedCallBackEvent;
import   kd.bos.form.plugin.AbstractFormPlugin;
 
public class ClosedCallBack extends AbstractFormPlugin {
   
    private final static String CALLBACKID_MYCALLBACK = "mycallback";
   
    @Override
    public void closedCallBack(ClosedCallBackEvent closedCallBackEvent) {
         super.closedCallBack(closedCallBackEvent);
        
         if (StringUtils.equals(closedCallBackEvent.getActionId(), CALLBACKID_MYCALLBACK)
                  && closedCallBackEvent.getReturnData() != null){
             // TODO 在此添加业务逻辑
         }
    }
}


说明:
常量CALLBACKID_MYCALLBACK 替代回调标识。

 

4 参数说明

ClosedCallBackEvent closedCallBackEvent:

  • public Object getSource():实现了ICloseCallBack接口的插件,后续将由此插件响应回调事件;

  • public String getActionId():多处代码显示子界面时,通过此标识区分来源;

  • public Object getReturnData():子界面返回数据。

 

5 应用示例

5.1 案例说明

1. 创建一个父界面,表单上有个文本字段 textfield,编辑风格(按钮+文本);

2. 创建一个子界面,表单上有一个多行文本以及确定和取消按钮;

3. 用户点击父界面的文本字段按钮,会打开子界面,用户在子界面编辑文本;

4. 用户在子界面编辑完成后,点击确定,可以将子界面中输入的文本传给父界面并显示在父界面的文本字段上。

  

5.2 实现方案

1. 捕获文本按钮click事件,打开子界面;

2. 捕获closedCallBack事件,接受子界面上的文本内容,填写在文本字段中。

 

5.3 实例代码

父界面插件:

package   kd.bos.plugin.sample.dynamicform.pcform.form.bizcase;

import   java.util.EventObject;

import   kd.bos.dataentity.utils.StringUtils;
import   kd.bos.form.CloseCallBack;
import   kd.bos.form.FormShowParameter;
import   kd.bos.form.ShowType;
import   kd.bos.form.control.Control;
import   kd.bos.form.control.events.ClickListener;
import   kd.bos.form.events.ClosedCallBackEvent;
import   kd.bos.form.field.TextEdit;
import   kd.bos.form.plugin.AbstractFormPlugin;

// 父页面插件
public class ClosedCallBackParent extends AbstractFormPlugin implements ClickListener {

    // 控件标识
    private final static String KEY_TEXT = "textfield";

    // 打开的子页面编码
    private final static String SUB_NUMBER = "test_largertextedit";

    // 设置子页面回调表示
    private final static String CLOSED_CALL_BACK = "closedCallBackTextField";

    /**
     * 注册控件事件
     */
    @Override
    public void registerListener(EventObject e) {
        super.registerListener(e);
        // 侦听文本字段的按钮点击事件
        TextEdit textEdit = this.getView().getControl(KEY_TEXT);
        textEdit.addClickListener(this);
    }

    /**
     * 控件点击事件
     */
    @Override
    public void click(EventObject evt) {
        super.click(evt);
        Control source = (Control)evt.getSource();
        if (StringUtils.equals(KEY_TEXT, source.getKey())){
            // 打开子页面
            this.showForm();
        }
    }


    /**
     * 显示子界面
     */
    private void showForm(){
        FormShowParameter showParameter = new FormShowParameter();
        // 设置子页面编码
        showParameter.setFormId(SUB_NUMBER);
        // 设置传递给子页面的参数
        showParameter.setCustomParam("parentText",this.getModel().getValue(KEY_TEXT));
        // 子页面打开方式
        showParameter.getOpenStyle().setShowType(ShowType.Modal);
        // 设置子页面回调标识
        CloseCallBack callBack = new CloseCallBack(this, CLOSED_CALL_BACK);   // 由本插件处理子界面的回调
        showParameter.setCloseCallBack(callBack);
        // 打开子页面
        this.getView().showForm(showParameter);
    }

    /**
     * 子界面关闭事件
     */
    @Override
    public void closedCallBack(ClosedCallBackEvent closedCallBackEvent) {
        super.closedCallBack(closedCallBackEvent);
        // 判断回调标识
        if (StringUtils.equals(closedCallBackEvent.getActionId(), CLOSED_CALL_BACK)){
            this.receiveText(closedCallBackEvent);
        }
    }

    /**
     * 接收子界面返回的文本,填写在父界面的文本字段上
     */
    private void receiveText(ClosedCallBackEvent args){
        if (args.getReturnData() == null){
            // 编辑界面点击了取消按钮,不做处理
            return;
        }
        // 使用args.getReturnData()取得子页面传回的值,并填充到文本字段上
        this.getModel().setValue(KEY_TEXT, args.getReturnData());
    }
}


子界面插件:

package kd.bos.plugin.sample.dynamicform.pcform.form.bizcase;

import kd.bos.form.control.Control;
import kd.bos.form.control.events.ClickListener;
import kd.bos.form.plugin.AbstractFormPlugin;

import java.util.EventObject;
import java.util.Map;

// 子页面插件
public class ClosedCallBackSub extends AbstractFormPlugin implements ClickListener {

    public static final String TEXTAREAFIELD = "textareafield";

    public static final String BTNOK = "btnok";

    public static final String BTNCANCEL = "btncancel";

    /**
     * 注册控件事件
     */
    @Override
    public void registerListener(EventObject e) {
        super.registerListener(e);
        addClickListeners(BTNOK,BTNCANCEL);
    }

    @Override
    public void afterCreateNewData(EventObject e) {
        super.afterCreateNewData(e);
        // 获得父页面传递来的参数,并填充到多行文本字段 TEXTAREAFIELD 上
        Map<String, Object> customParams = this.getView().getFormShowParameter().getCustomParams();
        String parentText = customParams.get("parentText").toString();
        this.getModel().setValue(TEXTAREAFIELD,parentText);
    }

    @Override
    public void click(EventObject evt) {
        super.click(evt);
        // 获得控件标识
        String key = ((Control) evt.getSource()).getKey();
        // 点击了确定按钮
        if(BTNOK.equals(key)){
            // 取得多行文本字段的值,返回给父页面
            Object value = this.getModel().getValue(TEXTAREAFIELD);
            this.getView().returnDataToParent(value);
            // 关闭子页面,会自动触发父页面的closedCallBack方法
            this.getView().close();
        }
    }
}


5.4 运行效果

  1. 点击父界面的文本字段按钮,打开子界面。


  2. 在子界面中输入文本,点击确定按钮,将文本传回父界面。


  3. 父界面的文本字段中会显示子界面中输入的文本。




closedCallBack事件

1 事件介绍父界面的插件,可以在此事件,接收子界面返回的数据。 说明:需要在显示子界面时,调用FormShowParameter参数的setCloseCallBac...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息