金蝶云苍穹-动态表单中使用单据体控件如何动态控制操作列的显示

金蝶云苍穹-动态表单中使用单据体控件如何动态控制操作列的显示

个人博客

实现

     先说一下,官方文档中提供的hideOperateItems方法,并不实用,只要翻页之后,就会没有效果。hideOperateItems 方法只会针对当前的表格做隐藏的处理,并不是真正的修改数据,并且如果你设置的行号大于了当前单据体的最大展示行数,还会把整个表格都隐藏掉,所以如果你的单据体不需要翻页的话,是可以用这个方法的。

    动态表单中的单据体的实体对象时EntryGrid。该类可以添加PackageDataListener ,对PackageData事件进行监听,从而达到和单据列表中的packageData方法一样的效果。

如何使用

  1. 插件实现Consumer<PackageDataEvent>接口,并重写 accpet方法,这个方法和单据列表的packageData方法效果一样

  2. afterCreateNewData() 事件中为单据体添加监听器,这一步是为了,在赋值之后,就可以直接触发accpet方法

  3. registerListener() 事件中为单据体添加监听器,这一步是为了,用户在单据体界面中做交互时,如果触发了刷新单据体数据的事件(如:翻页),能够触发accpet方法

  4. 参考代码:

public class BounsTypeListPlugin extends AbstractFormPlugin implements Consumer<PackageDataEvent>{
    final static String OPT_KEY_PUBLISH = "publish";
    final static String OPT_KEY_DELETE_ROW = "deleterow";
    final static String OPT_KEY_CANCEL = "cancel";
    final static String OPT_KEY_PUBLISH_AGAIN = "publishagain";
    final static String selectField = "id, name, status";
    private final String table = "billlistap";
    @Override
    public void registerListener(EventObject e) {
        EntryGrid billList = this.getControl(table);
        billList.addPackageDataListener(this);
 }
    @Override
    public void afterCreateNewData(EventObject e) {
        EntryGrid billList = this.getControl(table);
        billList.addPackageDataListener(this);
        billList.addDataBindListener(this);
        setData();
    }
    private void setData() {
        DynamicObject[] dynamicObjects = queryData();
        this.getModel().deleteEntryData(table);
        //赋值
        if(dynamicObjects != null && dynamicObjects.length > 0){
            this.getModel().batchCreateNewEntryRow(table, dynamicObjects.length);
            DynamicObjectCollection entryEntity = this.getModel().getEntryEntity(table);
            int i = 0;
            for(DynamicObject bounsType : entryEntity){
                DynamicObject dynamicObject = dynamicObjects[i++];
                bounsType.set(BounsTypeEntity.ID, dynamicObject.getString(BounsTypeEntity.ID));
                bounsType.set(BounsTypeEntity.NAME, dynamicObject.getString(BounsTypeEntity.NAME));
                // 状态
                String status = dynamicObject.getString(BounsTypeEntity.STATUS);
                bounsType.set(BounsTypeEntity.STATUS, status);
            }
        }
        this.getView().updateView(table);
    }
    @Override
    public void accept(PackageDataEvent e) {
        Object obj = e.getSource();
        // 获取当前行数据
        DynamicObject rowData = e.getRowData();
        String status = rowData.getString("status");
        if (obj instanceof OperationColumn) {
            List<OperationColItem> operationColItems = (List<OperationColItem>) e.getFormatValue();
            for (OperationColItem item : operationColItems) {
                String operationKey = item.getOperationKey();
                if (BounsTypeEntity.STATUS_DRAFT.equals(status)) {
                    //草稿状态只显示 删除 / 发布 两个操作
                    if( !operationKey.equals(OPT_KEY_DELETE_ROW) && !operationKey.equals(OPT_KEY_PUBLISH)){
                        item.setVisible(false);
                    }
                }
            }
        } 
    }
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值