EAS二次开发的入门原创
金蝶云社区-飞天
飞天
9人赞赏了该文章 3,099次浏览 未经作者许可,禁止转载编辑于2020年11月08日 21:11:00
summary-icon摘要由AI智能服务提供

文本详细描述了如何在金蝶BOS系统中进行单据制作的全过程,包括导入解决方案、新建业务组别和业务单元、添加单据头和单据体字段、单据的美化调整,以及Java代码层面的实现。首先,在业务建模工具视图中导入解决方案,并创建新的数据中心和业务单元。接着,通过右键菜单在单据头和单据体中新增字段,并设置字段属性和数据来源。在单据设计完成后,还进行了单据界面的美化调整,如拖拽控件和设置自适应布局。最后,通过Java编码在ControllerBean中实现createNewData()和onLoad()方法,完成单据的数据初始化和页面加载逻辑,如根据用户选择和业务逻辑设置字段值和处理事件监听。整体过程涉及前端设计和后端开发,确保了单据制作的完整性和功能性。

1.在进行单据制作前首先导入解决方案
在界面右上角的金蝶BOS的业务建模工具视图下,
业务建模工具视图
在界面左边的业务单元管理的空白处鼠标右键有一个导入解决方案.第一次导入的话需要打开本地服务器server.

名称自己写,别名可以是中文.
在这里插入图片描述
点下一步。选中从本地导入,文件目录为kingdeeEAS85下的eas\server文件夹。方案选择一般选1235四个,点下一步选择你创建的数据中心,点完成,在下方然更新解决方案视图下显示正在运行,数据比较多,等着就行了。导入完成后会在控制台输出执行完成。在业务单元管理栏里出现你创建的解决方案名称。

新建单据

可以选中用户自定义,鼠标右键新建一个业务组别
在这里插入图片描述
名称自己取,别名可以写中文.这个组别类似于Java的类.在新建的组别新建一个业务单元.业务属性选择业务单据,其他可以默认.也可以根据需要选择.
在这里插入图片描述
在这里插入图片描述
这里不同的选择可以生成不同样式的单据,一般选择第一个.
在这里插入图片描述
上图可以选择你想生成的模板字段,一般情况默认,点击完成,一个基本单据就建好了.

给单据新增字段

单据头新增字段

鼠标放在单据头空白处右键新增字段
在这里插入图片描述

在这里插入图片描述
字段名称自己定义,最好是驼峰命名法.
字段别名可以是中文,也是字段界面显示的名称
数据来源根据需要选择,这里简单说一下
在这里插入图片描述
手工录入的字段类型可以选择多个类型比较常用在这里插入图片描述
基础资料类别也很常用,它可以选择你的字段想要绑定的F7控件,这样在生成单据之后预览的时候,你就可以在字段点击的时候看到基础资料显示的信息了.
固定下拉列表选择的是一个枚举.
了解以上之后,我们以资产验收单为例做一个简单的单据.
需求:
在这里插入图片描述
在这里插入图片描述
1.导入解决方案,在用户自定义下新建业务组别,在组别下新建业务单元生成单据
2.在单据头新增字段,字符型都选择手工录入的文本,日期选手工录入的日期,枚举都是下拉列表,如果没有可以选择的枚举,就自己新建一个枚举
新建枚举:在界面右上角切到金蝶BOS设计开发工具视图下
在这里插入图片描述
一般用户自定义下的单据都会在下图的路径下在这里插入图片描述
在client下右键新建一个枚举,设置对应的至于编号即可.
在这里插入图片描述
基础资料的选择一定要留意数据来源,选择的基础数据是否正确,如果没有这个基础资料也可以手动增加,以申请人字段为例,这个一般对应的是person
在这里插入图片描述
点击确定就好了.在显示字段的时候一般都选择名称,这个根据你的需要,你想选择显示基础资料的什么信息.
在这里插入图片描述

单据体新增字段

在这里插入图片描述
在这里插入图片描述
在单据分录右键新增字段和单据头新增一样

单据的美化调整,自适应

可以通过拖拽控件位置然后点击规范布局
在这里插入图片描述
就调整好了,自适应首先在金蝶BOS设计开发工具下点击单据空白处,在属性的布局设置为KD_Layout
在这里插入图片描述
然后选择单个控件进行一一锚定
在这里插入图片描述
一般情况下,控件上边都是固定距离,底边不锚定,靠左边边界的左边固定距离,右边边界的右边固定距离,其他的等比缩放.
剩下的功能在java视图下完成
在这里插入图片描述
我们写代码时在**ControllerBean里面写
在这里插入图片描述
使用快捷键Alt+Shift+S覆盖重写方法,可以选择你要实现的方法

1.createNewData()主要时给字段赋值

  /**
     * output createNewData method
     */
    protected com.kingdee.bos.dao.IObjectValue createNewData()
    {
        com.kingdee.eas.custom.assertacceptanceform.AssertAcceptInfo objectValue = new com.kingdee.eas.custom.assertacceptanceform.AssertAcceptInfo();
        objectValue.setCreator((com.kingdee.eas.base.permission.UserInfo)(SysContext.getSysContext().getCurrentUser()));
        try {
//			ChangetypeInfo changetypeInfo=ChangetypeFactory.getRemoteInstance().getChangetypeInfo(new ObjectUuidPK("+5uT4cVvR8e1NIuQPPHMtWD1vyw="));
//			ChangetypeInfo changetypeInfo =(ChangetypeInfo) ChangetypeFactory.getRemoteInstance().getValue(new ObjectUuidPK("+5uT4cVvR8e1NIuQPPHMtWD1vyw="));
//			ChangetypeInfo changetypeInfo=changetypeInfo1.get(0);
//			BOSUuid create = BOSUuid.create(changetypeInfo.getBOSType());
	        //根据id查询不同的info对象
			FaAlterModeInfo faAlterModeInfo=FaAlterModeFactory.getRemoteInstance().getFaAlterModeInfo(new ObjectUuidPK("4ff9eebb-0108-1000-e001-0c65c0a813c839B5C1AB"));
			FaUseStatusInfo faUseStatusInfo=FaUseStatusFactory.getRemoteInstance().getFaUseStatusInfo(new ObjectUuidPK("5b35cf51-0101-1000-e000-ced1c0a83c7f6E274F2B"));
			CurrencyInfo currencyInfo=CurrencyFactory.getRemoteInstance().getCurrencyInfo(new ObjectUuidPK("dfd38d11-00fd-1000-e000-1ebdc0a8100dDEB58FDC"));
			//获取当前登录人对象
			UserInfo currentUserInfo = SysContext.getSysContext().getCurrentUserInfo();
			PersonInfo personInfo = PersonFactory.getRemoteInstance().getPersonInfo(new ObjectUuidPK(currentUserInfo.getPerson().getId().toString()));
//			//获取当前登录人的职位
			EntityViewInfo viewInfo = new EntityViewInfo();
			//查询指定字段
			SelectorItemCollection selector = new SelectorItemCollection();
			//查询的字段
			selector.add(new SelectorItemInfo("position.id"));
			selector.add(new SelectorItemInfo("position.number"));
			selector.add(new SelectorItemInfo("position.name"));
			selector.add(new SelectorItemInfo("position.adminOrgUnit.id"));
			selector.add(new SelectorItemInfo("position.adminOrgUnit.number"));
			selector.add(new SelectorItemInfo("position.adminOrgUnit.name"));
			selector.add(new SelectorItemInfo("id"));
			selector.add(new SelectorItemInfo("number"));
			selector.add(new SelectorItemInfo("name"));
			//查询条件
			FilterInfo filterInfo = new FilterInfo();
			filterInfo.getFilterItems().add(new FilterItemInfo("person.id",personInfo.getId(),CompareType.EQUALS));
			filterInfo.getFilterItems().add(new FilterItemInfo("isPrimary",1,CompareType.EQUALS));
			viewInfo.setFilter(filterInfo);
			viewInfo.setSelector(selector);

			PositionMemberCollection collection = PositionMemberFactory.getRemoteInstance().getPositionMemberCollection(viewInfo);
			PositionMemberInfo positionMemberInfo = collection.get(0);
			//获取职位对象
			PositionInfo position = positionMemberInfo.getPosition();
			//获取组织部门
			AdminOrgUnitInfo adminOrgUnit = position.getAdminOrgUnit();
			//获取币别
			EntityViewInfo entityViewInfo=new EntityViewInfo();
			//查询结果
			SelectorItemCollection selectorrate=new SelectorItemCollection();
			//查询指定字段
			selectorrate.add(new SelectorItemInfo("*"));
			//查询条件
			FilterInfo filterrate=new FilterInfo();
			filterrate.getFilterItems().add(new FilterItemInfo("exchangeAux.targetCurrency.number",currencyInfo.getNumber(),CompareType.EQUALS));
			//添加条件
			entityViewInfo.setFilter(filterrate);
			//添加查询字段
			entityViewInfo.setSelector(selectorrate);
			//创建汇率实例
			ExchangeRateCollection exchangeRateCollection=ExchangeRateFactory.getRemoteInstance().getExchangeRateCollection(entityViewInfo);
//			String rateValue="";
//			if(exchangeRateCollection.size()>0){
				ExchangeRateInfo exchangeRateInfo = exchangeRateCollection.get(0);
//			}
			//给申请人职位和申请人部门赋值
			//赋值给资产验收单
			objectValue.setQueUser(personInfo);
			objectValue.setChangeType(faAlterModeInfo);
			objectValue.setUseStaus(faUseStatusInfo);
			objectValue.setCurrency(currencyInfo);
			objectValue.setQueUserPosition(position);
			objectValue.setQueUseDepartment(adminOrgUnit);
			objectValue.setRate(exchangeRateInfo);
		} catch (EASBizException e) {
			e.printStackTrace();
		} catch (BOSException e) {
			e.printStackTrace();
		}
		
        return objectValue;
    }1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283

2.页面加载时的方法onLoad,这个方法的执行顺序在create NewData方法之前

	@Override
	public void onLoad() throws Exception {
		super.onLoad();
		this.contAssisetType.setEnabled(false);
    	//对下拉框选择添加事件
    	InspectType.addActionListener(new ActionListener(){

			public void actionPerformed(ActionEvent e) {
				//处理验收类型选择事件
				actionInspectType_actionPerformed(e);
			}

			/**
			 * 验收类型选择事件
			 * @param e
			 */
			private void actionInspectType_actionPerformed(ActionEvent e) {
				//获取验收类型框的值
				KDComboBox kdBox=(KDComboBox)e.getSource();
				InspectType inspectType=(InspectType) kdBox.getSelectedItem();
				String value=inspectType.getValue();
				setEnable(value);				
			}

			/**
			 * 设置资产类别的enable事件
			 * @param value
			 */
			private void setEnable(String value) {
				if ("1".equals(value)) {
					contAssisetType.setEnabled(true);
					contFyhpType.setEnabled(false);
				} else if("2".equals(value)){
					contAssisetType.setEnabled(false);
					contFyhpType.setEnabled(true);
				}				
			}
			
    	});
    	//分录添加监听
    	kdtEntrys.addKDTPropertyChangeListener(kdListener);
    	//获取分录中的F7控件对象
    	Object obj=kdtEntrys.getColumn("material").getEditor().getComponent();
    	if(obj instanceof KDBizPromptBox){
    		KDBizPromptBox prmtF7=(KDBizPromptBox)obj;
    	EntityViewInfo entityViewInfo=new EntityViewInfo();
    	FilterInfo filterInfo=new FilterInfo();
    	filterInfo.getFilterItems().add(new FilterItemInfo("name","%电脑%",CompareType.LIKE));
    	entityViewInfo.setFilter(filterInfo);
    	//F7控件设置实体视图信息
    	prmtF7.setEntityViewInfo(entityViewInfo);
    	}
    	
    	//调用方法实现分录添加默认值
//    	addKdtEntryDetailPanelListener();
    	//调用物料F7控件显示树状菜单
//    	getMaterialF7ForReportFilterUI();
	}
    
//	public KDBizPromptBox getMaterialF7ForReportFilterUI() {  
//		KDBizPromptBox kdPromptBox = new KDBizPromptBox();
//		Object obj=kdtEntrys.getColumn("material").getEditor().getComponent();
//		if(obj instanceof KDBizPromptBox){
//    		kdPromptBox=(KDBizPromptBox)obj;
//		
//		kdPromptBox.setEditable(true);
//		kdPromptBox.setDisplayFormat("$number$");
//		kdPromptBox.setEditFormat("$number$");
//		kdPromptBox.setCommitFormat("$number$;$helpCodes$");
//		GeneralKDPromptSelectorAdaptor selectorListerMaterial = null;
//		try {
//			MaterialGroupInfo info = new MaterialGroupInfo();
//			selectorListerMaterial = new GeneralKDPromptSelectorAdaptor(kdPromptBox,new F7MaterialTreeListUI(),this,info.getBosType().toString(),"com.kingdee.eas.basedata.master.material.app.F7MaterialInventoryQuery","materialGroup.id",false);
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
//		selectorListerMaterial.setIsMultiSelect(false);
//		selectorListerMaterial.setQueryProperty("helpCode", "or");
//		kdPromptBox.setSelector(selectorListerMaterial);
//		kdPromptBox.addSelectorListener(selectorListerMaterial);
//		kdPromptBox.setQueryInfo("com.kingdee.eas.basedata.master.material.app.F7MaterialInventoryNoGroupQuery");
//		return kdPromptBox;
//		}
//		return kdPromptBox;
//	}12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485

在这里插入图片描述
3.上图方法主要时写分录的表格的一些操作
4.控件值绑定事件,给币别绑定一个值改变事件

  /**
     * 币别汇率改变事件
     */
    @Override
	protected void prmtcurrency_dataChanged(DataChangeEvent e) throws Exception {
    	CurrencyInfo newValue =(CurrencyInfo) e.getNewValue();
    	CurrencyInfo oldValue = (CurrencyInfo)e.getOldValue();
    	if(newValue==oldValue){
    		return;
    	}
		//获取currencyInfo
    	CurrencyInfo currencyInfo = (CurrencyInfo)e.getNewValue();
		EntityViewInfo entityViewInfo=new EntityViewInfo();
		//查询结果
		SelectorItemCollection selector=new SelectorItemCollection();
		//查询指定字段
		selector.add(new SelectorItemInfo("*"));
		//查询条件
		FilterInfo filterInfo=new FilterInfo();
		filterInfo.getFilterItems().add(new FilterItemInfo("exchangeAux.targetCurrency.number",currencyInfo.getNumber(),CompareType.EQUALS));
		//添加条件
		entityViewInfo.setFilter(filterInfo);
		//添加查询字段
		entityViewInfo.setSelector(selector);
		//创建汇率实例
		ExchangeRateCollection exchangeRateCollection=ExchangeRateFactory.getRemoteInstance().getExchangeRateCollection(entityViewInfo);
		String rateValue="";
		if(exchangeRateCollection.size()>0){
			rateValue=String.valueOf(exchangeRateCollection.get(0).getConvertRate());
		}
		//给汇率复值
		this.prmtrate.setValue(rateValue);
	}
    
    /**
     * 申请人职位改变事件
     */
	protected void prmtqueUser_dataChanged(DataChangeEvent e) throws Exception {
    	//在datachange事件是用e判断新值和旧值进行比较
		PersonInfo newValue =(PersonInfo) e.getNewValue();
		PersonInfo oldValue =(PersonInfo) e.getOldValue();
		if(newValue==oldValue){
			return;
		}
		//获取personInfo
//		PersonInfo personInfo=(PersonInfo) this.prmtqueUser.getValue();
		PersonInfo personInfo =(PersonInfo) e.getNewValue();
		EntityViewInfo viewInfo = new EntityViewInfo();
		//查询指定字段
		SelectorItemCollection selector = new SelectorItemCollection();
		//查询的字段
		selector.add(new SelectorItemInfo("position.id"));
		selector.add(new SelectorItemInfo("position.number"));
		selector.add(new SelectorItemInfo("position.name"));
		selector.add(new SelectorItemInfo("position.adminOrgUnit.id"));
		selector.add(new SelectorItemInfo("position.adminOrgUnit.number"));
		selector.add(new SelectorItemInfo("position.adminOrgUnit.name"));
		selector.add(new SelectorItemInfo("id"));
		selector.add(new SelectorItemInfo("number"));
		selector.add(new SelectorItemInfo("name"));
		//查询条件
		FilterInfo filterInfo = new FilterInfo();
		filterInfo.getFilterItems().add(new FilterItemInfo("person.id",personInfo.getId(),CompareType.EQUALS));
		filterInfo.getFilterItems().add(new FilterItemInfo("isPrimary",1,CompareType.EQUALS));
		viewInfo.setFilter(filterInfo);
		viewInfo.setSelector(selector);
		//查询的集合
		PositionMemberCollection collection = PositionMemberFactory.getRemoteInstance().getPositionMemberCollection(viewInfo);
		PositionMemberInfo positionMemberInfo = collection.get(0);
//		PositionMemberInfo positionMemberInfo=PositionMemberFactory.getRemoteInstance().getPositionMemberInfo("where person ="+"'"+personInfo.getId().toString()+"'");
		//根据positionMeberInfo获取positionInfo对象
//		PersonPositionInfo positionInfo=PersonPositionFactory.getRemoteInstance().getPersonPositionInfo(new ObjectUuidPK());
		//获取职位对象
		PositionInfo position = positionMemberInfo.getPosition();
		//获取组织部门
		AdminOrgUnitInfo adminOrgUnit = position.getAdminOrgUnit();
//		PositionFactory.getRemoteInstance().getPositionInfo(new ObjectUuidPK(positionMemberInfo.getId()));
		//根据Position获得AdminOrgUnit对象
//		AdminOrgUnitInfo adminOrgUnitInfo=AdminOrgUnitFactory.getRemoteInstance().getAdminOrgUnitInfo(new ObjectUuidPK(positionInfo.getId()));
		//给申请人职位和申请人部门赋值
		this.prmtqueUserPosition.setValue(position);
		this.prmtqueUseDepartment.setValue(adminOrgUnit);

	}12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485

给控件加事件需要在设计模式下,选中控件,在事件选项下选择要添加的事件.

图标赞 9
9人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!