首页卡片之间如何进行数据交互原创
金蝶云社区-陈来珍
陈来珍
3人赞赏了该文章 428次浏览 未经作者许可,禁止转载编辑于2023年08月11日 11:06:13

关键词:自定义卡片、页面缓存、父页面、子页面、pageid

一、需求

在系统首页中,有两个自定义卡片,如何实现点击卡片a的某个按钮时,把卡片a整数字段sunp_a的值赋值到卡片b的整数字段sunp_b中。

image.png

二、思路与方案

(1)pageid:每次页面打开时,都会生成一个pageid,页面关闭时销毁。

(2)根据pageid可以获取视图模型view

(3)根据视图模型view可以获取数据模型model

(4)根据数据模型model可以修改页面的数据

(5)卡片a何卡片b共用的同一个父页面,因此可以把卡片b的pageid放到父页面缓存中,然后卡片a就可以拿到卡片b的pageid对卡片b的页面数据进行修改

image.png

三、实现过程

1、存储卡片b的pageid

//卡片b的表单插件
public class CardBFormPlugin extends AbstractFormPlugin implements Plugin {
    @Override
    public void afterCreateNewData(EventObject e) {
        //把当前页面的pageid存到父页面的页面缓存中
        String pageId = this.getView().getPageId();
        IFormView parentView = this.getView().getParentView();
        parentView.getPageCache().put("pageIdB",pageId);
        super.afterCreateNewData(e);
    }
    @Override
    public void beforeClosed(BeforeClosedEvent e) {
        //清除缓存
        IFormView parentView = this.getView().getParentView();
        parentView.getPageCache().remove("pageIdB");
        super.beforeClosed(e);
    }
}

2、点击卡片a的按钮时,把卡片a的数据同步到卡片b中

public class CardAFormPlugin extends AbstractFormPlugin implements Plugin {
    @Override
    public void afterCreateNewData(EventObject e) {
        super.afterCreateNewData(e);
    }

    @Override
    public void registerListener(EventObject e) {
        Button bt=(Button)this.getView().getControl("sunp_buttonap");
        bt.addClickListener(this);
        super.registerListener(e);
    }

    @Override
    public void click(EventObject evt) {
    if (evt.getSource() instanceof Button){
        Button bt=(Button)evt.getSource();
        String key = bt.getKey();
        if (key.equals("sunp_buttonap")){
            //父页面中获取存储的B页面的pageid
            IFormView parentView = this.getView().getParentView();
            //B页面的pageid
            String pageIdB = parentView.getPageCache().get("pageIdB");
            //B页面的视图view
            IFormView viewB = this.getView().getView(pageIdB);
            //设置b页面整数b字段锁定性
           // viewB.setEnable(false,"sunp_b");
            //B页面的数据模型model
            IDataModel modelB = viewB.getModel();
            //根据数据模型修改B页面整数b的数据=当前a页面的整数a的数据
            modelB.setValue("sunp_b",this.getModel().getValue("sunp_a"));
            //跨页面调用需要给前端推送指令
            this.getView().sendFormAction(viewB);
        }
    }
        super.click(evt);
    }

四、效果图

image.png

五、开发环境版本

V5.0.011

六、参考资料

开发平台

学习成长中心

SDK接口

开发必备100个小知识

开发案例库



赞 3