如何动态控制附件字段的附件类型原创
金蝶云社区-陈来珍
陈来珍
2人赞赏了该文章 608次浏览 未经作者许可,禁止转载编辑于2022年11月07日 16:14:41

关键词:附件字段、附件类型

一、需求

       在单据h单据头上,有一下拉列表字段(附件类型kded_atttype),选择不同的附件类型时,动态控制单据头附件字段和单据体的附件字段只能选择该类型的附件。

image.png

二、思路与方案

        参考单据体附件字段设计器上设置附件类型,弹出动态表单-附件上传(bos_entryattach_upload)这个动态表单设置附件字段类型的过程:

(1)单据体附件字段点击时,触发方法:kd.bos.form.control.EntryGrid.attachmentClick(Map<String, Object>);在该方法中可以调试到根据附件字段的编程模型的ExtendName属性去赋值的附件字段的类型

(2)点击单据体附件字段后,在弹出动态表单bos_entryattach_upload的初始化插件方法kd.bos.form.plugin.EntryGridAttachFieldPlugin.afterCreateNewData(EventObject)实现具体的控制附件字段的附件类型的逻辑(实际上就是限制扩展名)

image.png

举一反三,可以根据前面的调试代码可以参考实现代码控制附件上传最大数、排序字段、排序方式(ASC/DESC)等.

三、实现过程

        在值更新事件中获取下拉列表(附件类型)的字段值,去设置单据体附件字段和单据体附件字段的扩展名。(注意要开启附件类型字段的即时触发更新)

public class DemoHBillPlugin extends AbstractBillPlugIn {
	@Override
	public void propertyChanged(PropertyChangedArgs e) {
		String name = e.getProperty().getName();
		if (name.equals("kded_atttype")) {
			Object type = e.getChangeSet()[0].getNewValue();
			if (type != null) {
				// 1、控制单据头附件字段的类型
				Map<String, Object> meta = new HashMap<String, Object>();
				meta.put("ext", type);
				Map<String, Object> item = new HashMap<String, Object>();
				item.put("item", meta);
				this.getView().updateControlMetadata("kded_attachmentfield1", item);

				// 2、控制单据体附件字段的类型
				AttachmentEdit attedit = this.getView().getControl("kded_attachmentfield");

				AttachmentProp prop = (AttachmentProp) attedit.getProperty();

				prop.setExtendName(String.valueOf(type));
				
			}
		}
		super.propertyChanged(e);
	}
}

四、效果图

选择附件类型txt类型,再分别选择附件1、附件,可以看到只能选择txt类型的附件

image.png

image.png


五、开发环境版本

V5.0.002

六、参考资料

开发平台

学习成长中心

SDK接口

开发必备100个小知识

开发案例库


赞 2