BOS用户入门手册(二次开发人员,高级)_第1页
BOS用户入门手册(二次开发人员,高级)_第2页
BOS用户入门手册(二次开发人员,高级)_第3页
BOS用户入门手册(二次开发人员,高级)_第4页
BOS用户入门手册(二次开发人员,高级)_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、BOSV3.0用户入门手册版本修订历史序号日期修订内容修订人1.2003-11-18初稿冯仁飞2.2003-11-26整理结构万小青3.4.目录TOC o 1-5 h z HYPERLINK l bookmark0 一、BOS界面介绍4 HYPERLINK l bookmark2 二、使用BOS5 HYPERLINK l bookmark4 1、建立解决方案51)实体对象62)数据对象7界面对象7关系9 HYPERLINK l bookmark6 Query9 HYPERLINK l bookmark8 6)Rule10 HYPERLINK l bookmark10 2、发布113、编译12

2、HYPERLINK l bookmark12 4、部署ejb121)目录方式12 HYPERLINK l bookmark14 2)EAR文件方式13三、发布后代码补充逻辑示例151.关于数字15 HYPERLINK l bookmark16 新增(addnew)15 HYPERLINK l bookmark18 修改(update)16 HYPERLINK l bookmark20 获取集合(Filter.Selector)16 HYPERLINK l bookmark22 建立主键(ObjectUuidPK)16 HYPERLINK l bookmark24 登陆上下文(LoginCont

3、ext)16 HYPERLINK l bookmark26 使用Selector对象17 HYPERLINK l bookmark28 使用Filter对象17 HYPERLINK l bookmark30 判断业务数据是否取出(containsKey)18 HYPERLINK l bookmark32 Rule对象的使用(RuleExecutor)181)执行Rule(服务器端)18 HYPERLINK l bookmark34 Query对象的使用(QueryExecutor)18服务器端不带参数的Query19 HYPERLINK l bookmark36 客户端不带参数Paramete

4、r19服务器端带选项Option19服务器端带参数19 HYPERLINK l bookmark38 QueryInfo的实例化19 HYPERLINK l bookmark40 2)IRowSert的实例操作19四、BOS的思考错误!未定义书签。1.关于代码发布错误!未定义书签。2.关于继承错误!未定义书签。关于Facade错误!未定义书签。关于Rule错误!未定义书签。关于Query错误!未定义书签。关于数据绑定错误!未定义书签。一、BOS界面介绍启动BOS:运行安装目录下的eclips.exe。界面主要由编辑区、透视图、透视图包含的若干视图组成。这里主要介绍BOSStudio透视图及视图

5、:金蝶BOSStudio透视图:是BOS视图的集合,打开它默认打开BOS开发环境BOS的视图分为一下几种:1、BOSstudio资源导航:显示已经存在的解决方案(如果方案不存在,通过Eclipse引入解决方案),可以对解决方案进行新建,删除,打开,刷新,以及cvs操作。2、BOS控制台:显示后台输出信息和错误信息,如果出现错误但是控制太上没有显示可以查看BOS的log文件位于bos_home%/workspace.metadata.log。3、包分类:显示解决方案的包结构,右键可以修改解决方案属性。4、类型:分类显示BOS所有对象5、应用分类:显示建立的发布方案的内容6、大纲:BOS对象的概要

6、信息。7、属性:显示选中对象的属性。8、数据绑定视图。B09金蝶BOSStudioAccBillItem.entityBOSStudio厲包分类11BOSValiBetaMetasmetadata&-LZicorn白口kingdeebosvalidate申心bizrule曰心accountcenter上AccBill.entity欢迎使用IAccBill.entityAccBillltem的基础信息门一般信息描述此实体对象的一般信息jgAccBillltememployee.relationLMAccBillltem.entity二类实现信息描述此实体对象在运行期的类实现的相关內容AccBil

7、lltem.entitAccBillltem.AccBillltemAccBillltemAccBillltemAccBillltem.cosi:::osiern:expinvc殳BillBizState.enun力BillRelationship.eBflBillRelationship_ruleMethodnamecal/namealiasruleObjectrule.basedata.BankRule.ruleMethodcal.alias/aliasdescriptionruleObjectrule.basedata.BankRule.ruleMethodcal.description

8、/descriptionruleContentresult=22+pari;result=result+bank.idresult=345354+result;result=result+bank.id/ruleContent/ruleMethod10包分粪BOSValiBfi发布解决方案属性亩“匕winui2、发布3AccBillItememployee.relati(Eclipse平台要解有黄工作台中已并选择想要的功能部件透视图、视图和编辑窗口包含一或多牛透:配置透视图可農通过拖动视图和编要将透视图重新设苴为.旦扫E列了透视图,就连接CVS小组要连接CVS开发小组,资源库位苴将出现在C:在

9、BOS中建立好元数据后,鼠标单击“包分类”视图的方案节点,先通过菜单设置发布属性。例如:如下设置:元数据发布目录C:Apusic-4.0metas;java发布目录C:BOSworkspaceBOSValidateServersrcj2ee发布目录C:BOSworkspaceBOSValidateServerdeploy;然后再通过菜单发布。发布成功后,设置的路径下会分别生成元数据、java代码、供Apusic加载应用的ear目录(里面有描述符文件)。注意,此时需要额外的人工工作:需要手工将解决方案文件(XXX.solution)拷贝到元数据发布目录(C:Apusic-4.0metas)。如果

10、元数据模型定义得不正确导致发布失败,“BOS”控制台视图中,会报告红色的错误信息。发布时尽量有选择的发布。3、编译将发布的java代码编译成class文件(放在bin目录下,因为启动apusic的seteasenv.bat文件已经加入到classpath目录下)PS:建议使用BOS开发java代码,不要使用jbuilder(主要是防止类库引用不正确)。建议使用BOS_HOME%pluginscom.kingdee.bos.studio_1.0.0下的文件,如果没有才使用外部的包。4、部署ejb运行先前定义的批处理文件SetEASEnv.bat,启动Apusic。启动界面如图XXX:1)目录方式

11、使用apusic部署工具,通过菜单“文件/新建ear目录”,选择刚才发布的deploy目录,部署工具已经可以识别这个目录形式的ear应用,为EAR起名后,按F5进行部署,ear及其包含的javabean便被服务器启动。(今后如果修改了服务器端代码,可以重新启动服务器即可,现在bos不支持热部署,元数据有缓存)。2)EAR文件方式将应用打包ear文件,apusic可以支持命令行方式部署。F:DocumentsandSettingsfengrenfeijavacom.apusic.tools.appctl.Main用法:appctl选项命令选项包括:-s服务器主机名(默认为localhost:68

12、88)-p管理员口令(如未提供则要求从控制台输入)命令包括:install应用名企业档案文件(.ear)-vhost虚拟主机名-context虚拟目录名uninstall应用名liststart应用名stop应用名restart应用名PS:ant自动部署脚本(每次添加新的entity&fagade对象后需要重新部署ejb,删除删除对象后需要需要清除部署描述文件,不提供编译,使用BOS编译工具编译后的class文件,class文件不用打包到ear文件中,通过apusic启动时的classpath设置引用。projectname=Basedefault=deploybasedir=.propert

13、yname=deploy.dirvalue=deploy/propertyname=build.dirvalue=bin/propertyname=project.class.pathvalue=bin/propertyenvironment=env/pathid=apusic.class.pathincludename=*/*.jar/targetname=earjar/targettargetname=uninstall/targettargetname=deploydepends=earjar,uninstall/targettargetname=clean/targettargetna

14、me=cleanDeploymkdirdir=deploy/targetErrandTaskItemInfoi1newErrandTaskItemInfo();/建立分录我们试一下发布后的应用能否跑通:这里以验证实体对象为例,做几个调用的例子:1.关于数字由于jdbc有问题,对于double类型的数据不支持(小数点位数太多),应此对类型为double的属性赋值方式为(doublecount=4444.55f;voucherInfo.count=count)强制使用单精度。同理,对于BigDecimal类型的使用方式为(BigDecimalinterest=newBigDecimal(“4444

15、.44”),使用字符串参数构造函数,限制精度。也可以使用BigDecimal的publicBigDecimalsetScale(intscale,introundingMode);方法设置小数点位数。PS:EAS设计规范规定数值只使用int,和BigDecimal两类。2.新增(addnew)ErrandTasklnfoerrtinfo=newErrandTaskInfo();/建立值对象IErrandTaskerrt=ErrandTaskFactory.getRemotelnstance();/获取实体Stringnumber=number001;IDataClassdc=DataClass

16、Factory.getRemoteInstance();DataClassInfodcInfo=dc.getValue(newObjectUuidPK(B0SUuid.read(85c6377c-00f8T000-e000-001ec0a81089dcla);/通过bosuuid获取实体对象errtinfo.setNumber(number);errtinfo.setBillType(dcInfo);UserInfouserInfo=newUserInfo();userInfo.setId(B0SUuid.read(867d5df6-00f8T000-e000-0009c0a81089sysu

17、);/通过BOSUuid建立实体对象BigDecimalex=newBigDecimal(343434.445);/建立属性BigDecimalex2=newBigDecimal(12345678901234567.8);/错误errtinfo.setExchangeRate(ex);errtinfo.setCreator(userInfo);errtinfo.setAuditDate(newDate(System.currentTimeMillis();/时间属性Timestampcreatedate=newTimestamp(System.currentTimeMillis();errti

18、nfo.setCreateDate(createdate);errtinfo.setBizState(BillBizState.create);/枚据属性errtinfo.setSave(true);/Boolean属性il.setLineNo(34);errtinfo.getEntries().add(i1);/添加分录errtinfo.getEntries().add(newErrandTaskItemlnfo();/添加分录IObjectPKpk=errt.addnew(errtinfo);/保存值对象,返回逻辑键,可以通过逻辑键获取值对象(如下)/ErrandTaskInfoerr2=

19、errt.getValue(pk);3.修改(update)IErrandTaskerrt=ErrandTaskFactory.getRemoteInstance();Stringid=8b35b903-00f8T000-e000-0008c0a81089errt;ObjectUuidPKpk=newObjectUuidPK(BOSUuid.read(id);/建立逻辑键newInfo=errt.getValue(pk);/获取值对象System.out.println(this:+errtinfo.getExchangeRate();/获取属性errtlnfo.setExchangeRate

20、(ex);/修改属性属性errt.update(pk,newInfo);更新数据删除(remove)errt.remove(pk);/通过逻辑键删除单据内容4.获取集合(Filter,Selector)CurrencyInfocur=newCurrencylnfo();ICurrencyc=CurrencyFactory.getRemotelnstance();/建立实体对象FilterInfoi=newFilterlnfo();/建立过滤条件i.getFilterItems().add(newFilterItemInfo(number,ddff,CompareType.EQUELS);i.g

21、etFilterItems().add(newFilterItemInfo(id,ddff,CompareType.EQUELS);EntityViewInfoevi=newEntityViewInfo();/建立视图信息evi.setFilter(i);/添加过滤条件evi.getSelector().add(newSelectorItemInfo(id);/添加获取属性evi.getSelector().add(newSelectorItemInfo(number);CurrencyCollectionco=c.getCollection(evi);/获取集合建立主键(ObjectUuid

22、PK)OrgUnitInfocompanyInfo=OrgUnitFactory.getRemoteInstance().getValue(newObjectUuidPK(B0SUuid.read(d7d2df4f-00f7T000-e000-0027c0a81351unit);登陆上下文(LoginContext)Stringurl=tcp:/localhost;ORMRPCServiceLocator.setCurrentServiceURL(url);/设置服务器ILoginModulelogin=null;trylogin=LoginModuleFactory.getRemoteIns

23、tance();/建立登陆模块catch(BOSExceptione)/TODO自动生成catch块e.printStackTrace();LoginContextctx=newLoginContext(nullnullBOSValidateMeta,/元数据方案名称BOSValidateMeta,/帐套名称Locale.SIMPLIFIED_CHINESE);/登陆上下文trylogin.login(ctx);/登陆(建立Session)catch(BOSExceptionel)/TODO自动生成catch块e1.printStackTrace();7.使用Selector对象另外,Filt

24、er的正确写法应该是首先构造一个FilterInfo,然后赋给EntityViewInfo。EntityViewInfoevi=newEntityViewInfo();evi.getSelector().add(newSelectorItemInfo(id);evi.getSelector().add(newSelectorItemInfo(number);evi.getSelector().add(newSelectorItemInfo();8.使用Filter对象另外,Filter的正确写法应该是首先构造一个FilterInfo,然后赋给EntityViewInfo。EntityViewI

25、nfoevi=newEntityViewInfo();FilterInfofilter=newFilterInfo();filter.setMaskString(#1or#2);/设置过滤条件的逻辑关系filter.add(newFilterItemInfo(ID,10000);filter.add(newFilterItemInfo(ID,20000);evi.setFilter(filter);单据分录操作(entries)ErrandTaskItemInfoil=newErrandTaskItemInfo();errtinfo.getEntries().add(il);il.setLin

26、eNo(34);errtinfo.getEntries().add(newErrandTaskItemlnfoO);IObjectPKpk=errt.addnew(errtinfo);9.判断业务数据是否取出(containsKey)newInfo.containsKey(company.id)/业务对象返回null,有两种可能如果返回为空,表示未从数据库取出数据。10.Rule对象的使用(RuleExecutor)Rule对象现在只能支持服务器端调用,客户端通过fagade对象调用。因此和大家理解的可能有出入,他能提供的功能很少。RuleExecutor是Rule对象的实例和执行引擎。对Ru

27、le对象的操作就是对RuleExecutor的操作。1)执行Rule(服务器端)RuleExecutorexec=newRuleExecutor(ctx,newMetaDataPK(rule.basedata,BankRule);exec.addParameter(par1,newInteger(20);Stringid=c37398d8-00f8T000-e000-0004c0a810896345B9FF;BankInfobank=BankFactory.getLocalInstance(ctx).getValue(newObjectUuidPK(BOSUuid.read(id);exec.

28、addParameter(bank,bank);Resultresult=exec.executeFunction(cal);return(String)result.getProperty(result);PS:Rule是什么?你可以把它想象成一个javabean定义一个javabean,首先设置属性,然后添加方法。使用时设置属性,执行方法,然后取出属性值(结果)。BOS中定义属性的传入,传出选项,就是javabean中添加setter,getter方法。11.Query对象的使用(QueryExecutor)现在Query对象的远程接口有问题,同Rule对象一样只能在服务器端调用(参数还有

29、问题)。Query对象的使用就是对QueryExecutor实例的使用。1)服务器端不带参数的QueryQueryExecutorquery=QueryExecutor.getLocallnstance(newMetaDataPK(rule.basedata,BankQuery),ctx);IRowSetrs=query.executeQuery();2)客户端不带参数Parameter3)服务器端带选项Option4)服务器端带参数5)QueryInfo的实例化QueryInfoqueryInfo=MetaDataLoaderFactory.getRemoteMetaDataLoader()

30、.getQuery(newMetaDataPK(rule.basedata,BankQuery);2)IRowSert的实例操作IRowSetMetaDatarsmd=rs.getRowSetMetaData();while(rs.next()for(inti=1;ipropertyname二uservalue二designer/propertyname二passwordvalue二designer/remoteacluseradmin/user2.运行主框架运行类:com.kingdee.eas.base.uiframe.client.LoginFrame3.打开窗体例如在凭证列表界面上点击

31、工具条按钮新增凭证,则需要弹出另一个新增凭证的界面对象,这种情况,请使用类似如下代码创建界面对象:IUIFactoryuiFactory=UIFactory.createUIFactory(factoryName);IUIWIndowwindow=uiFactory.create(“com.kingdee.eas.gl.VoucherEduiiCt”on,text,uiObject,oprt);window.Show();其中factoryName为你要创建的界面对象工厂类名,例如com.kingdee.eas.base.uiframe.client.UIFixTabFactory(固定页签中

32、打开)com.kingdee.eas.base.uiframe.client.UINewTabFactory(新页签中打开)com.kingdee.eas.base.uiframe.client.UINewSessionFactory(新会话中打开)com.kingdee.eas.base.uiframe.client.UINewFrameFactory(新窗口中打开)com.kingdee.eas.base.uiframe.client.UIModelDialogFactory(模式对话框中打开)(说明:尽管还有其它的界面工厂,但是目前仅推荐以上五种,而且,对于大部分自己控制的界面对象,尤其

33、是需要传入dataObject和oprt来构造的界面对象,推荐使用UIModelDialogFactory)关于参数UIContext的说明:对于使用UIFixTabFactory,UINewTabFactory,UINewSessionFactory,UINewFrameFactory,必须传入参数MainFrame,可选参数UlClassParam(有此参数就传,没有就不传)。对于UIModelDialogFactory,必须传入参数Owner(父窗口对象,可以是Frame类型或者IUIWindow类型),可选参数UIClassParam(有此参数就传,没有就不传)。示例代码:MapuiContext=newHashMapO;uiContext.put(MainFrame,mainFrame);uiContext.put(UIClassParam,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论