EAS-BOS开发问题与解决

  • 格式:pdf
  • 大小:286.72 KB
  • 文档页数:14

EAS-BOS开发问题与解决

Studio新建的UI发布只能看到抽象类的问题

在导⼊了新的解决⽅案之后,在⼆次开发时进⾏新建UI,进⾏发布,但是在代码视图中只能看到抽象类,没有其他的代码。

对于客户⼆次开发中⽤户⾃定义的单据才⽣成实现类,但发现BOS Studio新建的ui元数据⾃定义标记为false,导致在发布时认为不是⽤户⾃定义的,因此没⽣成实现类。

需要把ToolCommon 插件下

(E:\kingdee\bos\BOSModular\boscommon\eclipse\plugins\com.kingdee.bos.toolcomm on)的toolcommon.properties 这个⽂件中的isDevelopVersion=true 改为:isDevelopVersion=false

如何修改UI的⽗类?

如何修改EditUI绑定的实体Entity?

点击UI,选择左边浏览⽅式“⼤纲”。选择Data Objects 的editData(查询对象)

设置由⾃⼰定义的⼀个Entity元素据。Java源码会有这样⼀句话:

editData = (com.kingdee.eas.fi.fi_cs.CsAccountViewInfo)ov;

其中CsAccountViewInfo是⾃⼰定义的⼀个Entity。⽽com.kingdee.eas.fi.fi_cs则是他的路径。

如何修改ListUI绑定的查询Query?

解决:

点击UI,选择左边浏览⽅式“⼤纲”。选择Data Objects 的mainQuery(查询对象)

设置由⾃⼰定义的⼀个Query元素据。Java源码会有这样⼀句话:

mainQueryPK = new MetaDataPK("com.kingdee.eas.fi.fi_cs.app", "CsAccountViewQuery");

其中CsAccountViewQuery是⾃⼰定义的⼀个Query。⽽com.kingdee.eas.fi.fi_cs.app则是他的路径。

将⼀个元数据从⼀个⽂件夹直接拉到另外⼀个⽂件夹,打开⽂件的时候会报错误com.kingdee.bos.engine.MDParseError

解决:

把元数据从⼀个⽂件夹移到另⼀个⽂件夹不能直接拉。需要⽤复制功能,并且只能够在EAS-BOS的⼯作透视图下。如果在其他视图下进⾏操作,将⽆法复原。

导出sql的时候CreateTable.sql⽆法创建table,oracle 和sqlserver定义的类型有什么不⼀致

原因:

导出数据表会⾃动⽣成⼀些脚本,但是选择oracle时,实际导出的却是sqlserver的脚本。导出有问题,oracle和sqlserver导出的都是sqlserver的脚本。

解决:

认清oracle和sqlserver定义的类型有什么不⼀致。Oracle的Date等同于sqlserver的DateTime,nvarchar2等同于sqlserver的nvarchar。Varchar2等同于sqlserver的varchar。

com.kingdee.bos.metadata.MetaDataNotFoundExcepti on: Cannot found metadata BOSType[null]

原因:

没有重写ListUI的getBizInterface() ⽅法。

解决:⼀定要重新实现ListUI和EditUI的getBizInterface()⽅法,重新实现ListUI的getBizInterface()⽅法问题解决。keyFiled没有设置,请重写getFiledName()⽅法。

解决:

在设置query元数据的时候没有配置好主键,⼀定要设置主键

⽆法实现字段排序

解决:在*UI.java⽂件上⾯添加⽅法protected void tblMain_tableClicked(KDTMouseEvent e) throws Exception { //覆盖原⽅法

super.tblMain_tableClicked(e);

}

该⽅法会实现⽗类的排序功能。

备注:tblMain_tableClicked是指双击的事件。⼀般⽤在查询页⾯。

还有⼀个tblMain_tableSelectChanged是指点击时触发的事件。

⽇志操作写错:指标录⼊(分配)审核写成了指标录⼊(分配)修改。

原因:审核,反审核的操作最后都执⾏了修改的操作。所以就将⽇志⽂件改成了修改。⽽不是审核或者反审核。

分析:⽇志操作⼀般在.log⽂件上⾯做修改。

⽐如说这个问题。⽇志⽂件为指标管理属于集中⽀付模块,gov_biz.log在这个模块的源⽂件下⾯gov/biz/。⼀般添加⽇志在.log⽂件的⽇志项。选择某个⽬录,为其添加⽇志项,组名,别名都需要每⼀层每⼀层写清楚(这会⾃动默认上下级关系)。接着选定引⽤对象,(有两种对象:引⽤对象和功能对象)。功能对象还不是很了解,引⽤对象是⼀个实体。接着选定某些引⽤⽅法,意思就是这些⽅法触发的时候写⼊⽇志。

另外还有⼀个⽅法写⼊⽇志。直接在某个按钮操作调⽤写⽇志⽅法。该⽅法在GovBasedataUtils是基础数据管理公⽤函数及接⼝。⽅法名为setOperLog,该⽅法有两个,具备不同的参数。选择所需要的⽅法调⽤。

备注:

针对这个bug需要注意⼀个空指针的问题,如果直接调⽤⽗类的actionPassAudit_actionPerforme的⽅法,会出现这个问题。原因是有refresh(e)⽅法进⾏刷新。所以不能调⽤⽗类的⽅法,⾃⼰重写。修改完⽇志的时候,还需要在⽂件菜单中同步⼀下⽇志项数据。setOperLog⽅法是写log进⼊操作对象这个字段。⽽不是写⼊操作这个字段。这点需要注意。

进⼊基础资料关联管理进⾏修改,删除的时候,⽇志操作出现字符串,没有正确显⽰操作对象

分析:⾸先检查⽇志有没有出错,没有出错的话可在java⽂件中进⾏修改。因为是删除和修改操作,所以我们可以重写⽗类的删除修改操作,添加⼀个写⽇志的操作。

解决:⾸先找到该Java⽂件:GovBaseDocBizRefListUI.java。

重写actionEdit_actionPerformed和actionRemove_actionPerformed⽅法。(GovBaseDocBizRefInfo) getBizInterface().getValue(newObjectUuidPK(keyValue),getSelectorItemCols())是⽤来得到⾃⼰定义的对象这⾥是GovBaseDocBizRefInfo。⽽该对象的数据则⽤getSelectorItemCols()⽅法来获取。最后则是⾃⼰定义的写log的⽅法。

在改bug的过程中,还出现⼀个问题,就是写⽇志操作必须在修改和删除操作之前执⾏,否则会出现⼀些意外问题,⽐如说写⽇志写的不是当前选择的数据,⽽是选择第⼀条数据。还有就是出现删除操作提⽰记录找不到。这都是因为把写⽇志操作放在了修改和删除操作之后导致的。原因是如果是修改操作后返回的是第⼀条数据,修改完⾃然写的就是第⼀条数据的⽇志了。如果先删除再写⽇志的话肯定得不到对象,因为被先删除了,所以会出现提⽰。

⽆法启动debugserver.bat,debugserver窗⼝⾃动关闭。

解决:

到W:\apusic\domains\server1路径下将server.xml⽂件删除即可解决。Oracle sql语句报错:“未明确定义列”

解决:

在表关联中出现了相同的字段名字,给与⼀个别名就可以解决。

如何在java⽂件中添加⼀个F7控件

备注:

由于不允许在标准产品上⾯添加控件,所以只能够在java上⾯添加。

解决:

可参考F7业务控件指南(KDBizPromptBox)使⽤指南。

在这⾥只写上⼀些基础配置。⼀般使⽤F7都给包含在⼀个KDLabelContainer控件⾥⾯。创建⼀个KDLabelContainer控件this.borrowContain = new com.kingdee.bos.ctrl.swing.KDLabelContainer();

创建⼀个KDBizPromptBox控件this.borrowBox= new com.kingdee.bos.ctrl.extendcontrols.KDBizPromptBox();

将KDBizPromptBox附在KDLabelContainer上⾯。borrowContain.setBoundEditor(borrowBox);

设置⼀个弹出窗⼝FilterInfo filter = new FilterInfo();

FilterItemCollection fic = filter.getFilterItems();

fic.add(new FilterItemInfo("CU.id", company.getCU().getId().toString()));

fic.add(new FilterItemInfo("CAA.id", null, CompareType.NOTEQUALS));

filter.setMaskString("#0 and #1 ");

AccountPromptBox apb = new AccountPromptBox(this, company.getAccountTable(), filter);

设置⼀些属性。

设置borrowBox为可编辑this.borrowBox.setEditable(true);

设置borrowBox的编辑格式this.borrowBox.setEditFormat("$number$");

设置borrowBox的显⽰格式this.borrowBox.setCommitFormat("$helpCode$;$number$;$name$");

设置borrowBox的提交格式this.borrowBox.setDisplayFormat("$number$ - $name$");

设置borrowBox的查询对象this.borrowBox.setQueryInfo("com.kingdee.eas.basedata.master.account.app.F7Acco untViewQuery");设置borrowBox的弹出窗⼝this.borrowBox.setSelector(apb);

在查询页⾯上保存⼀个⽅案的时候是如何得到页⾯上各个控件的值。

解决:

由于保存⼀个查询⽅案的时候是由QueryToolBar类中的saveButton_actionPerformed⽅法执⾏的。⽽该⽅法⼜通过调⽤getCustomerParams()⽅法来获得界⾯上各个控件的值。如果控件是通过java⽂件上添加的,就是不是在标准产品上⾯改的,所以必须在getCustomerParams()⽅法中设置调⽤setObject()⽅法进⾏设置。

例⼦:Debitvalue为⼀个引⽤。

RptParams params = super.getCustomerParams();

params.setObject(debitvalue,debitBox.getValue()==null?"":debitBox.getValue()); ⽆法显⽰⼀个控件的值。