文本详细描述了如何在金蝶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
给控件加事件需要在设计模式下,选中控件,在事件选项下选择要添加的事件.