金蝶云苍穹如何设置页面插件?

注册方式

  1. 注册JAVA插件

金蝶云苍穹如何设置页面插件?

  1. 注册JavaScript插件

金蝶云苍穹如何设置页面插件?

实现方式

Java实现方式
实现步骤
  1. 新建插件类

金蝶云苍穹如何设置页面插件?

package kd.bos.form.plugin;
import java.math.BigDecimal;
import java.util.EventObject;
import java.util.List;

import org.apache.commons.lang3.StringUtils;

import kd.bos.bill.AbstractBillPlugIn;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.entity.datamodel.events.ChangeData;
import kd.bos.entity.datamodel.events.PropertyChangedArgs;
import kd.bos.form.field.BasedataEdit;
import kd.bos.form.field.events.BeforeF7SelectEvent;
import kd.bos.form.field.events.BeforeF7SelectListener;
import kd.bos.list.ListShowParameter;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.user.UserServiceHelper;

/**
 * <p>Title: </p>  
 * <p>
 *    Description:
 *    采购申请单插件
 * </p>
 * <p>Copyright: Copyright (c) 2020</p>  
 * @author xx
 * @date 2020年2月22日  
 * @return the bare_field_name  
 * @version 1.0  
 */  
public class PurReqBillEdit extends AbstractBillPlugIn implements BeforeF7SelectListener{

        /**
         * (non-Javadoc)  
         * <p>Title: propertyChanged</p>  
         * <p>
         *    Description:
         * 注册值改变监听事件,若物料改变,则获取长宽高拼凑成字符串设置到规格型号,并且设置计量单位
         * 申请人改变时,关联设置申请部门
         * </p>  
         * <p>Copyright: Copyright (c) 2020</p>
         * @author xx
         * @date 2020年2月22日
         * @param e  
         * @see kd.bos.entity.datamodel.events.IDataModelChangeListener#propertyChanged(kd.bos.entity.datamodel.events.PropertyChangedArgs)  
         */
        @Override
        public void propertyChanged(PropertyChangedArgs e) {
            String propertyName = e.getProperty().getName();
            boolean stopClear;
            ChangeData cd = e.getChangeSet()[0];
            if (StringUtils.equals("materia", propertyName)) {
                // 设置规格型号
                int index = cd.getRowIndex();
                if (cd.getNewValue() != null) {
                    long materiaId = (long) ((DynamicObject) cd.getNewValue()).getPkValue();
                    DynamicObject materia = (DynamicObject) BusinessDataServiceHelper.loadSingle(materiaId, "bd_material");
                    BigDecimal length = (BigDecimal) materia.get("length");
                    BigDecimal width = (BigDecimal) materia.get("width");
                    BigDecimal height = (BigDecimal) materia.get("height");
                    if (length != null && width != null && height != null && length.compareTo(BigDecimal.ZERO) > 0
                            && width.compareTo(BigDecimal.ZERO) > 0 && height.compareTo(BigDecimal.ZERO) > 0) {
                        String model = length.intValue() + "*" + width.intValue() + "*" + height.intValue();
                        this.getModel().setValue("model", model, index);
                    }

                    // 设置计量单位
                    DynamicObject unit = (DynamicObject) materia.get("baseunit");
                    Object unitId = unit.getPkValue();
                    this.getModel().setValue("unit", unitId, index);
                } else {
                    this.getModel().setValue("model", null, index);
                    this.getModel().setValue("unit", null, index);
                }
            } else if (StringUtils.equals("applier", propertyName)) {
                // 申请人改变时校验申请组织
                if (cd.getNewValue() == null) {
                    this.getModel().setValue("applyorg", null);
                } else {
                    long applierId = (long) ((DynamicObject) cd.getNewValue()).getPkValue();
                    if (this.getModel().getValue("applyorg") != null) {
                        DynamicObject applyorg = (DynamicObject) this.getModel().getValue("applyorg");
                        if (!UserServiceHelper.getOrgsUserJoin(applierId).contains(applyorg.getLong("id"))) {
                            // 默认填充申请人主业务组织
                            this.getModel().setValue("applyorg", UserServiceHelper.getUserMainOrgId(applierId));
                        }
                    } else {
                        this.getModel().setValue("applyorg", UserServiceHelper.getUserMainOrgId(applierId));
                    }
                }
            }

            super.propertyChanged(e);
        }

        /**
         * (non-Javadoc)  
         * <p>Title: afterCreateNewData</p>  
         * <p>
         *    Description:
         * 重置界面部分字段的默认值
         * </p>  
         * <p>Copyright: Copyright (c) 2020</p>
         * @author xx
         * @date 2020年2月22日
         * @param e  
         * @see kd.bos.entity.datamodel.events.IDataModelListener#afterCreateNewData(java.util.EventObject)  
         */
        @Override
        public void afterCreateNewData(EventObject e) {
            super.afterCreateNewData(e);

            // 获取用户id
            long userId = UserServiceHelper.getCurrentUserId();
            // 设置当前用户为申请人
            this.getModel().setValue("applier", userId);
            // 设置用户主业务组织为默认的申请部门
            this.getModel().setValue("applyorg", UserServiceHelper.getUserMainOrgId(userId));
            // 默认币种人民币
            this.getModel().setValue("currency", 1);
        }

        /**
         * (non-Javadoc)  
         * <p>Title: afterBindData</p>  
         * <p>
         *    Description:
         * 界面数据加载完毕后,对界面控件可见性坐设置。
         * 暂存和已关闭状态根据菜单项标识禁用部分菜单
         * </p>  
         * <p>Copyright: Copyright (c) 2020</p>
         * @author xx
         * @date 2020年2月22日
         * @param e  
         * @see kd.bos.form.plugin.AbstractFormPlugin#afterBindData(java.util.EventObject)  
         */
        @Override
        public void afterBindData(EventObject e) {
            super.afterBindData(e);

            // 获取单据状态值
            String billstatus = String.valueOf(this.getModel().getValue("billstatus"));
            // 设置部分控件的可见性
            if (StringUtils.equals("A", billstatus)) {
                this.getView().setVisible(Boolean.FALSE, "trackdown");
            } else if (StringUtils.equals("D", billstatus)) {
                this.getView().setVisible(Boolean.FALSE, "bar_save", "bar_new", "bar_modify", "bar_submit", "bar_del", "push");
            }
            // 申请人为空时清空申请部门
            if (this.getModel().getValue("applier") == null) {
                this.getModel().setValue("applyorg", null);
            }
        }

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

            // 侦听基础资料字段的事件
            BasedataEdit applyorg = this.getView().getControl("applyorg");
            applyorg.addBeforeF7SelectListener(this);

            BasedataEdit applier = this.getView().getControl("applier");
            applier.addBeforeF7SelectListener(this);
        }
        
        /**
         * (non-Javadoc)  
         * <p>Title: beforeF7Select</p>  
         * <p>
         *    Description:
         *  选择申请部门时根据申请人过滤申请部门
         * </p>  
         * <p>Copyright: Copyright (c) 2020</p>
         * @author xx
         * @date 2020年2月22日
         * @param beforeF7SelectEvent  
         * @see kd.bos.form.field.events.BeforeF7SelectListener#beforeF7Select(kd.bos.form.field.events.BeforeF7SelectEvent)  
         */
        @Override
        public void beforeF7Select(BeforeF7SelectEvent beforeF7SelectEvent) {
            String propertyName = beforeF7SelectEvent.getProperty().getName();
            if (StringUtils.equals("applyorg", propertyName)) {
                if (this.getModel().getValue("applier") != null) {
                    // 设置申请组织的过滤条件
                    DynamicObject applier = (DynamicObject) this.getModel().getValue("applier");
                    List<Long> applierOrgsList = UserServiceHelper.getOrgsUserJoin(applier.getLong("id"));
                    // 生成过滤条件对象QFilter
                    QFilter qFilter = new QFilter("id", QCP.in, applierOrgsList);
                    // 设置列表过滤条件
                    ListShowParameter showParameter = (ListShowParameter) beforeF7SelectEvent.getFormShowParameter();
                    showParameter.getListFilterParameter().setFilter(qFilter);
                }
            }
        }
}

  1. 注册插件

金蝶云苍穹如何设置页面插件?

金蝶云苍穹如何设置页面插件?

  1. 关闭start-cosmic.bat

金蝶云苍穹如何设置页面插件?

  1. Debug模式重启DebugServer

金蝶云苍穹如何设置页面插件?

  1. 回到页面保存并预览

金蝶云苍穹如何设置页面插件?

以上代码实现的效果如下:

  • 通过插件设置物料自动携带物料规格型号以及计量单位到对应的列
  • 根据状态控制菜单的可见性
  • 修改界面部分默认值
  • 根据申请人过滤申请部门
校验功能
  1. 通过插件设置物料自动携带物料规格型号以及计量单位到对应的列

金蝶云苍穹如何设置页面插件?

金蝶云苍穹如何设置页面插件?

这里出现了一个问题,如上图所示,可以看到必填项创建组织控制策略为不可编辑状态,这样就会造成一个问题,不能通过校验。。,所以可以通过如下步骤解决上述问题。

路径:系统云 –> 基础资料 –> 基础资料 –> 物料

金蝶云苍穹如何设置页面插件?

创建组织的锁定性撤销 新增锁定修改锁定

金蝶云苍穹如何设置页面插件?

金蝶云苍穹如何设置页面插件?

控制策略的锁定性撤销 新增锁定修改锁定,而后发现还是不行。。这个问题点我暂进没有找到方法,暂时性跳过

上述 控制策略 未解决的bug的暂时性替代方法可以设置其缺省值,其效果就是在为空值进有一个值,而不可选择。。。。。

金蝶云苍穹如何设置页面插件?

接下来继续进行验证操作,回到采购申请单预览界面采购分录的物料编码

金蝶云苍穹如何设置页面插件?

金蝶云苍穹如何设置页面插件?

金蝶云苍穹如何设置页面插件?

金蝶云苍穹如何设置页面插件?

如下图所示自动带出了物料规格型号以及计量单位

金蝶云苍穹如何设置页面插件?

  1. 根据状态控制菜单的可见性

下图为原有的菜单的菜单显示

金蝶云苍穹如何设置页面插件?

下图为预览时的菜单的菜单显示

金蝶云苍穹如何设置页面插件?

下图为保存后的状态的菜单显示

金蝶云苍穹如何设置页面插件?

下图为已提交状态的菜单显示

金蝶云苍穹如何设置页面插件?

  1. 修改界面部分默认值

如下图字段为设置的默认值

金蝶云苍穹如何设置页面插件?

  1. 根据申请人过滤申请部门

不做演示

JavaScript实现方式
实现步骤
  1. 参照以下步骤进入路径

金蝶云苍穹如何设置页面插件?

金蝶云苍穹如何设置页面插件?

金蝶云苍穹如何设置页面插件?

金蝶云苍穹如何设置页面插件?

金蝶云苍穹如何设置页面插件?

  1. 编码

/**
* @author xx
* @date 2020-02-24
*/
var plugin = new FormPlugin({
         propertyChanged : function(e){
             var propertyName =  e.getProperty().getName();
                if("materia"==propertyName)
                {
                    //设置规格型号
                    var index =  e.getChangeSet()[0].getRowIndex();
                    var materiaId =  e.getChangeSet()[0].getNewValue().getPkValue();
                    var materia =   BusinessDataServiceHelper.loadSingle(materiaId,"bd_material")
                    var  length =  materia.get("length");
                    var  width = materia.get("width");
                    var  height = materia.get("height");
                    if(length.compareTo(BigDecimal.ZERO)> 0 && width.compareTo(BigDecimal.ZERO)>0 && height.compareTo(BigDecimal.ZERO)>0) {
                        var model = length.intValue() +"*" + width.intValue() +"*"+height.intValue();
                        this.getModel().setValue("model", model, index);
                    }
                    //设置计量单位
                    var unit  = materia.get("baseunit");
                    var unitId =  unit.getPkValue();
                    this.getModel().setValue("unit",unitId,index);
            }
        },
        afterBindData : function(e){
            // 获取单据状态值
            var billstatus = this.getModel().getValue("billstatus");
            // 设置部分控件的可见性
            if ("A" == billstatus) {
                this.getView().setVisible(false, "trackdown");
            } else if ("D" == billstatus) {
                this.getView().setVisible(false, "bar_save");
                this.getView().setVisible(false, "bar_new");
                this.getView().setVisible(false, "bar_modify");
                this.getView().setVisible(false, "bar_submit");
                this.getView().setVisible(false, "bar_del");
                this.getView().setVisible(false, "push");
            }
        }
});

校验功能
  1. 注册脚本

金蝶云苍穹如何设置页面插件?

金蝶云苍穹如何设置页面插件?

金蝶云苍穹如何设置页面插件?

  1. 验证

如图所示验证成功

金蝶云苍穹如何设置页面插件?

金蝶云苍穹如何设置页面插件?

金蝶云苍穹如何设置页面插件?

金蝶云苍穹如何设置页面插件?

以上就是我关于 金蝶云苍穹如何设置页面插件? 知识点的整理与总结的全部内容。


分割线


© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
重生的头像 - 宋马
评论 抢沙发

请登录后发表评论

    暂无评论内容