EASBOS开发问题解决Word文件下载.docx
《EASBOS开发问题解决Word文件下载.docx》由会员分享,可在线阅读,更多相关《EASBOS开发问题解决Word文件下载.docx(39页珍藏版)》请在冰豆网上搜索。
如果在其他视图下进行操作,将无法复原。
导出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.MetaDataNotFoundException:
CannotfoundmetadataBOSType[null]
没有重写ListUI的getBizInterface()方法。
一定要重新实现ListUI和EditUI的getBizInterface()方法,重新实现ListUI的getBizInterface()方法问题解决。
keyFiled没有设置,请重写getFiledName()方法。
在设置query元数据的时候没有配置好主键,一定要设置主键
无法实现字段排序
在*UI.java文件上面添加方法
protectedvoidtblMain_tableClicked(KDTMouseEvente)throwsException{
//覆盖原方法
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文件删除即可解决。
Oraclesql语句报错:
“未明确定义列”
在表关联中出现了相同的字段名字,给与一个别名就可以解决。
如何在java文件中添加一个F7控件
由于不允许在标准产品上面添加控件,所以只能够在java上面添加。
可参考F7业务控件指南(KDBizPromptBox)使用指南。
在这里只写上一些基础配置。
一般使用F7都给包含在一个KDLabelContainer控件里面。
创建一个KDLabelContainer控件
this.borrowContain=newcom.kingdee.bos.ctrl.swing.KDLabelContainer();
创建一个KDBizPromptBox控件
this.borrowBox=newcom.kingdee.bos.ctrl.extendcontrols.KDBizPromptBox();
将KDBizPromptBox附在KDLabelContainer上面。
borrowContain.setBoundEditor(borrowBox);
设置一个弹出窗口
FilterInfofilter=newFilterInfo();
FilterItemCollectionfic=filter.getFilterItems();
fic.add(newFilterItemInfo("
CU.id"
company.getCU().getId().toString()));
CAA.id"
null,CompareType.NOTEQUALS));
filter.setMaskString("
#0and#1"
AccountPromptBoxapb=newAccountPromptBox(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.F7AccountViewQuery"
设置borrowBox的弹出窗口
this.borrowBox.setSelector(apb);
在查询页面上保存一个方案的时候是如何得到页面上各个控件的值。
由于保存一个查询方案的时候是由QueryToolBar类中的saveButton_actionPerformed方法执行的。
而该方法又通过调用getCustomerParams()方法来获得界面上各个控件的值。
如果控件是通过java文件上添加的,就是不是在标准产品上面改的,所以必须在getCustomerParams()方法中设置调用setObject()方法进行设置。
例子:
Debitvalue为一个引用。
RptParamsparams=super.getCustomerParams();
params.setObject(debitvalue,debitBox.getValue()==null?
"
:
debitBox.getValue());
无法显示一个控件的值。
虽然上面的一个问题可以保存控件的值,但是要让控件保存的值显示出来,还需要添加一个方法setCustomerParams()方法,将控件的值设置进去。
if(params.getObjectElement(debitvalue)!
=null){
debitBox.setValue(params.getObjectElement(debitvalue));
}
如何在页面显示时间格式,金钱格式
在UI的编辑表信息那里选择:
时间的字段,然后在formatString填入“%r{yyyy-M-d}t”这个是显示年月日的。
依次类推。
金钱格式为#,###.00
在UI上面添加一个KDLable,会出现跟前面的控件重叠
设置KDLable的constrain中的anchor,看来这个是重要的属性。
EAS的查询是如何实现的
(例子)
protectedbooleanisHasAttachMent(Stringbosid)throwsException{
CoreBaseCollectionass=(CoreBaseCollection)BoAttchAssoFactory
.getRemoteInstance().getCollection("
selectFAttachmentID"
+
"
whereboid='
+bosid+"
'
if(ass!
=null&
&
ass.size()>
0)
returntrue;
returnfalse;
解析:
该例子很简单,但是不知道的人确实非常困惑。
现在说明一下。
首先应该是BoAttchAssoFactory这个类,每一个实体都有一个factory这个类。
这个例子的实体就是BoAttchAsso。
这个factory类提供了一个远程的接口获取对象。
CoreBaseCollection则是将这个对象包装起来。
对象里面的内容就是根据里面的sql得出来的。
注意该sql是用实体来查询的。
不是数据库sql。
FAttachmentID,boid都是BoAttchAsso实体里面的属性。
这个例子总的就是说去实体里面找数据然后返回一个对象。
给实体新增了一个属性,如何获取该实体这个属性的值
给实体新增了一个属性,发布后都会在以Abstract开头的info类中产生get,set方法。
比如给实体BgAdjustBill新增了一个属性isNeedOrNotAttachment,发布后会在AbstractBgAdjustBillInfo类中产生这两个方法。
publicbooleanisIsNeedOrNotAttachment()
{
returngetBoolean("
isNeedOrNotAttachment"
}
publicvoidsetIsNeedOrNotAttachment(booleanitem)
setBoolean("
item);
就采用editData.isIsNeedOrNotAttachment()方法获得属性的值。
editData是在list页面传到edit页面上的对象,想要获取对象的值都可以通过editData。
Edit页面的数据如何保存
采用数据绑定。
在Edit的UI界面选择数据绑定。
在edit和list页面分别有两个checkbox控件。
想要让他们关联起来。
在edit的ui页面上选择数据绑定,选中要绑定的checkbox控件,由于是checkbox,所以是个bollean型的,选择其selected功能,再选择下一步绑定实体的属性。
这样子就关联上了。
点击保存的时候会将其保存。
弹出提示窗口的信息如何设置
MsgBox.showWarning(this,EASResource.getString(
BgAdjustBillHelper.RESOURCESTR,
"
mustBeSameOrg"
)
其中mustBeSameOrg为资源文件.resource定义的名称。
如何融合行。
变成如下的形式
现在的形式是如下。
privatevoidsetMergeColumn(booleanmerge){
//增加对于单据头的表格融合设置
StringmergeColumnKeys[]=getMergeColumnKeys();
if(mergeColumnKeys!
mergeColumnKeys.length>
0){
tblMain.checkParsed();
//指定KDTable要进行数据分组
tblMain.getGroupManager().setGroup(merge);
for(inti=0;
i<
mergeColumnKeys.length;
i++){
//指明要对列进行分组
tblMain.getColumn(mergeColumnKeys[i]).setGroup(merge);
//指明要对列的分组进行单元融合
tblMain.getColumn(mergeColumnKeys[i]).setMergeable(merge);
//有些时候会因为刷新然后没有重新排序,所以就要写下面这一句。
tblMain.getGroupManager().group();
}
}
//返回需要融合的列
publicString[]getMergeColumnKeys(){
//columnKeys数组是UI上面显示的字段名称,具体要融合哪些列,可以在table右键选择编辑表信息。
里面有各个字段的名称。
这里的字段还要按照顺序来排列,不允许中间有一个字段没有写进来,可以从编辑表信息里面查找,中间如果漏写了一个会没有效果,意思就是必须得按照顺序来排列。
String[]columnKeys={"
id"
createTime"
number"
"
bgScheme.name"
state"
"
creator.name"
auditor.name"
lastUpdateTime"
attachment"
bizDate"
};
returncolumnKeys;
在每次执行查询后调用setMergeColumn(true)这个方法就行了。
如何添加功能快捷键?
this.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
KeyStroke.getKeyStroke("
ctrlN"
),"
actionAddNew"
其中actionAddNew就是function。
2008-10-20
问题:
如何添加一个参数子系统树节点和参数?
参数子系统树节点可以通过直接修改xml文件来添加。
标准产品的xml文件为:
SubSystem.xml。
政府行业新增加的文件为:
SubSystem_industry.xml。
新增一个子系统数节点可以参考文章
。
添加一个子节点的xml(例子)
<
rowfullname="
com.kingdee.eas.ma.budget"
name="
budget"
alias_l1="
alias_l2="
政府预算"
alias_l3="
政府預算"
isleaf="
1"
parent="
com.kingdee.eas.gov"
/>
其中fullname为包名。
Parent表示父级目录的包名。
isLeaf表示目录的层次。
添加完之后,必需停止服务,并且在控制管理台那里的工具选项选择产生子系统树。
这个步骤最好在服务器上面做,本地运行产生子系统树貌似会出错。
在服务器上面操作时,需要将eas\server\metas\mdbview-metas.jar覆盖本地的所有这个包。
完成后重起服务,进入系统平台->
系统配置->
参数设置。
这时候会发现还没有出现刚才产生的节点。
由于如果节点下面没有任何参数的话,此节点是不会显示的。
现在为节点添加参数。
选中任意一个节点,按F12,会弹出一个参数对话框,可以在这个对话框添加,修改,删除参数。
选中刚才的节点:
政府预算。
新增一个参数。
新增参数需要了解一点:
组织类型非常重要,如果该节点的组织类型与所要添加参数的组织类型不一致,该参数将不会在参数设置页面里面显示,因为参数设置页面只是显示与节点的组织类型相同的参数,其它则不显示。
如果要想添加一个不同的组织类型的参数,则需要重新添加一个节点,将节点的类型设置为要添加参数的组织类型。
然后再新增加参数,总结起来就是说参数的组织类型要与节点的组织类型一致才可以在参数设置页面显示出来。
设置节点的组织类型的方法如下:
找到W:
\eas\Server\server\lib\client\eas\bs-param-client.jar这个包,双击进入找到com\kingdee\eas\base\param\client\subSysIdToOrgTypeMaps.xml这个文件。
添加的xml为:
attributekey="
com.kingdee.eas.ma.budget"
value="
CostCenter"
这句话的意思就是将上面添加的政府预算的节点的组织类型设置为预算组织。
Key对应fullname,value="
的意思为设置组织类型为预算组织。
想要查找有哪些组织类型,可以参考OrgType.enum。
名称为value的可选值。
参数添加成功之后,需要导出参数的sql脚本。
路径如下:
系统平台-->
预警平台-->
预警条目设置-->
按F11,选择参数导出,输入参数的编码。
如何获取“下次直接进入的方案”中自定义页签的过滤条件。
entityViewInfoTmp=(EntityViewInfo)iQuery.getDefaultFilterInfo
(getQuerySolutionUIName(),queryName);
QuerySolutionInfosolution=iQuery.getDefaultSolution
(getQuerySolutionUIName(),queryName);
如何给窗口添加最大化,最小化按钮?
当点击一个按钮的时候,会弹出一个窗口,窗口可以有五种类型:
分别是FIXTAB,NEWTAB,NEWWIN,NEWSESSION,MODEL。
FIXTAB的意思是弹出的窗口会替换掉原来在Tab上面的那个窗口。
NEWTAB的意思是在Tab上面新增加一个弹出窗口。
NEWWIN的意思是在页面中间弹出一个窗口,NEWSESSION的意思是在Tab上面弹出一个窗口,替代掉原来的窗口,并且重新刷新一下。
MODEL的意思是在页面中间弹出一个窗口,没有最大化,最小化按钮。
点击按钮的会弹出一个窗口,代码如下。
uiWindow=UIFactory.createUIFactory(UIFactoryName.NEWWIN)
.create(CmpSummaryReportUI.class.getName(),uiContext,null,OprtState.VIEW);
uiWindow.show();
从蓝色部分可以看出产生窗口的类型,这是一个在页面中间弹出的窗口,包含有最大化最小化按钮。
另外可以查看对应的窗体是哪个。
找到UIFactoryName.Java里面配置好了上面五种类型