本文介绍了金蝶EAS系统中进行二次开发时单据创建的步骤,以资产验收单为例。首先,通过导入解决方案并在用户自定义下新建业务组别和业务单元生成单据。接着,在单据头和单据体中新增字段,并对字段属性进行设置,如手工录入、固定下拉列表等。随后,通过金蝶BOS设计开发工具对单据进行美化调整,使其自适应不同环境。最后,通过编写Java代码在ControllerBean中实现字段赋值等逻辑,包括页面加载时的方法,如设置下拉框的监听事件和默认值等。整体流程涵盖了单据制作的整个流程,并提供了详细的操作步骤和代码示例。
EAS二次开发的入门 ---- 单据创建,以资产验收单为例
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
给控件加事件需要在设计模式下,选中控件,在事件选项下选择要添加的事件.