1、 亚信基础开发平台AppFrame培训制作:亚信南京研发中心(高级)(高级)培训目标n深入了解AppFrame体系结构n进一步掌握AppFrame的功能n更好更快的学习和使用AppFrame培训提纲()n再谈AppFrame的体系结构nAppFrame的配置文件及配置项nSessionManager对象nServiceManager对象nBO的使用nDS的使用nSet的使用培训提纲(二)n界面控制层数据交换的原理与过程n登陆框架,权限管理,系统管理nAppFrame与obdnAppFrame外围模块n应用case说明n讨论再谈AppFrame体系结构AppFrameAppFrame总体构架总体
2、构架用户界面(JSP)界面逻辑控制(Action)业务逻辑层接口(Business Interface)业务逻辑层(Business Interface Impl)数据存储(DataStore)nJ2EEn元数据管理DBGridDBFormDBPopmenuDBTreeDBButtonDBListbox数据封装数据集展现定义界面流转定义系统登录管理系统资源安全控制测试数据自动生成界面数据和业务数据的自动转换权限管理接口工作流接口数据分片接口数据审计接口日志管理接口权限管理工作流引擎数据分片数据审计日志管理连接池管理对象标识管理数据库自动存储Corba调用包装Tuxdeo调用包装调用包装配置管理
3、工具(Config Tool)Jsp编辑管理SET、DS管理业务接口自动生成业务逻辑配置管理数据存储代码的自动生成系统监控(WEB请求监控、数据库连接监控、数据库操作监控)AppFrame的配置配置文件配置文件naisystem.ini nAIConfig.xmlnLog4j.propertiesnmodule-config.xmlnxxx.modulenxxx.servicenAppFrameCss.jspntransaction.xmlaisystem.ini文件内容示例nnn n UserDataSourcen SELFn jdbc:oracle:thin:10.10.141.30:15
4、21:testdb2n 1n 5n shdemon 78636F6E6664n n系统默认的数据源名称,如果系统默认的数据源名称,如果需要同时使用其它数据源,需要同时使用其它数据源,可以使用其它不同的名称可以使用其它不同的名称连接串,包括连接串,包括ipip、端、端口、口、SIDSIDn n最大最小连接数最大最小连接数数据库用户名数据库用户名数据库密码,数据库密码,经过加密经过加密AIConfig.xml文件内容示例(1)nn n aisystem.inin n n UserDataSourcen n .n n.n该配置项是用来配置平台初始化时的一些参数,包括:数据库连接配置文件、缺省数据源名
5、称、数据源管理器实现类、数据对象唯一标识管理器实现类、数据存储管理器实现类、数据对象管理器实现类、RowSet管理器实现类、枚举数据管理器实现类、事务管理器实现类、权限管理之组织管理工厂的实现类、权限管理之岗位管理工厂的实现类、权限管理之员工管理工厂的实现类、权限管理之登陆用户的实现类、web程序主页面url、web框架的Loginin页面url、web框架的Loginout页面urlAIConfig.xml文件内容示例(2)nn n/jsv2/image/tree_pic/homepage.gifn n n/jsv2/image/tree_pic/fold_o.gifn n n/jsv2/i
6、mage/tree_pic/fold_c.gifn n n/jsv2/image/tree_pic/leaf_c.gifn n该配置项是用来配置树的根节点、树展开、树收缩、叶结点的默认图片。AIConfig.xml文件内容示例(3)/jsv2/image/tree_pic/fold_c.gif/jsv2/image/tree_pic/fold_o.gif/jsv2/image/tree_pic/leaf_c.gif 该配置项是用来配置树形结构的Table(即DBGrid组件)的目录节点展开、目录节点收拢、叶结点的默认图片的。AIConfig.xml文件内容示例(4)nn n com.ai.an
7、alyse.McGridn n n com.ai.analyse.TreeGridn n该配置项是用来配置交叉报表的标准类型和树形结构的实现类的。AIConfig.xml文件内容示例(5)nn n 15n n n 15n n n 10n n n 10n n n 5n n该配置项是用来配置各个标签在Session中的缓存队列长度的。AIConfig.xml文件内容示例(6)nn n ONn n n A28800n n n A7200n n n A7200n n n A7200n n该配置项用来配置客户端本地过期缓存,包括开关和各种类型文件的过期时间设置。AIConfig.xml文件内容示例(7)
8、nn n ONn n n 10n n n *.*,/business/*n n n *.*,/business/*n n该配置项用来配置文件压缩的相关设置,包括开关、需要压缩的最小文件大小、需要压缩的文件匹配和不需要压缩的文件匹配。AIConfig.xml文件内容示例(8)nn n com.ai.appframe2.privilege.PermissionImpln n该配置项用来配置缺省Permission接口的实现类。nn n Yn n该配置项用来配置是否做登陆用户的Session会话有效性校验。module-config.xml文件内容示例nn n n n配置应用中使用到的模块xxx.m
9、odulexxx.module文件示例文件示例nn n nn模块初始化类,应模块初始化类,应用启动时加载用启动时加载模块使用的模块使用的serviceservicexxx.servicexxx.service配置文件配置文件nn n n n n n n服务接口服务接口服务实现类服务实现类Transaction.xml配置nn n n n n默认事务默认事务事务默认数据源事务默认数据源AppFrameCss.jsp文件内容示例其内容是Appframe平台所有组件的样式。详细内容请参见Appframe组件样式风格配置指南ID_GENERATOR配置表配置表nID_GENERATOR表的结构设置nT
10、ABLE_NAME 数据表名nGENERATOR_TYPE M-最大值,S-序列号nSEQUENCE_NAMe 序列号名称nMAX_ID 当前值nSTART_VALUE IS 起始值nMIN_VALUE IS 最小值nMAX_VALUE IS 最大值nINCREMENT_VALUE IS 数据增量nCYCLE_FLAG IS Y-循环,N-不循环nCACHE_SIZE IS 缓存大小nSEQUENCE_CREATE_SCRIPT SEQUENCE创建脚本nSequence主键的设置nMaxID方法主键的设置SessionManager ServiceManagerSessionMangerSe
11、ssionManger介绍(一)介绍(一)ActionAction、JSPJSP中使用:中使用:n nSessionManager.getRequest();SessionManager.getRequest();n nSessionManager.getUser();SessionManager.getUser();n nSessionManager.getContextName();SessionManager.getContextName();n nSessionManager.getCacheManager();SessionManager.getCacheManager();Serv
12、iceManagerServiceManager介绍介绍nService中使用n nServiceManager.getSession().getNewConnection();ServiceManager.getSession().getNewConnection();n nServiceManager.getSession().getConnection();ServiceManager.getSession().getConnection();n nServiceManager.getDataStore().crateDtaContainerFromResServiceManager.g
13、etDataStore().crateDtaContainerFromResultSet();ultSet();n nServiceManager.getDataStore().execute(conn,sql,paraList);ServiceManager.getDataStore().execute(conn,sql,paraList);n nServiceManager.getDataStore().retrieve(conn,sql,paramlist);ServiceManager.getDataStore().retrieve(conn,sql,paramlist);n nSer
14、viceManager.getUser();ServiceManager.getUser();n nServiceManager.getIdGenerator();ServiceManager.getIdGenerator();n nServiceManager.getDataSourceDBType(DataSourceName)ServiceManager.getDataSourceDBType(DataSourceName)n nServiceManager.getDatabaseType(Connection)ServiceManager.getDatabaseType(Connect
15、ion)BOBO使用使用n nBOBO、查询、查询BOBO的使用的使用n n显示属性的说明与设置显示属性的说明与设置n nBOBeanBOBean的生成与使用的生成与使用查询查询BOBO的使用的使用有时候前台DBForm或者DBGrid需要展现的数据,不是直接从一张表中获取数据,而是由几张表联合查询后获取数据,这时候我们可以通过创建查询BO来实现功能。比如:nnn n n select a.name,b.name as org_name n from staff a,organize b n where a.organize_id=b.organize_idn n n n n NAMEn n
16、n ORG_NAMEn n n n n nBOBO显示属性的配置显示属性的配置(1)(1)当前台页面中有些字段不希望以其实际值展示,而需要以其他值显示,比如某些ID值,希望展现在前台的是ID值对应的名称,这时候可以通过配置BO的显示属性来实现。配置显示属性通过ConfigTool工具来完成。第一步如下图:BOBO显示属性的配置显示属性的配置(2)(2)BOBO显示属性的配置显示属性的配置(3)(3)点击过配置按钮后将进入第二步,弹出对话框进行显示属性各项属性的配置,包括关联BO、显示字段选择以及关联条件。详细请见下图BOBO显示属性的配置显示属性的配置(4)(4)以上步骤完成后保存即可,同步至
17、工程中,为工程所引用。由于BO文件最终以XML格式存储,所以程序员也可以直接通过修改XML的方式完成该配置工作,但是为了格式内容的准确性,推荐使用ConfigTool工具完成该项工作。另外还有一点需要补充,在实际使用中,由于很多查询是通过Engine中的通用方法getBeans(Connection conn,String cols,String condition,HashMap parameter,int startNum,int endNum,boolean isShowFK)来实现的,而如果需要实现显示值替代实际值,则该方法的参数isShowFK必须赋值为true,否则实现不了需要的效
18、果。DSDS使用使用n nDSDS的四种的四种DataSetDataSet类型类型nFunction类型DS的方法格式,返回值的类型n n动态动态DSDS的参数设置的参数设置n nAIListBox TagAIListBox Tag用法说明用法说明DSDS的四种的四种DataSetDataSet类型类型nBODATA方式通过指定BO文件、值属性、显示属性以及条件由平台完成从数据库获取数据并在前台进行展示的方式nSQLDATA方式通过指定SQL语句、数据源、值属性和显示属性由平台完成从数据库获取数据并在前台进行展示的方式nSTATIC方式通过指定值属性和显示属性直接构造下拉列表的方式nFUNCT
19、ION方式通过指定类、方法、值属性、显示属性、参数由平台完成经指定方法获取数据并在前台进行展示的方式Function类型DS的方法格式,返回值的类型(1)public List getFunctionds1()List list=new ArrayList();for(int i=1;i 11;i+)HashMap map=new HashMap();map.put(ORGANIZE_ID,+i);map.put(NAME,营业区+i);list.add(map);return list;Function类型DS的方法格式,返回值的类型(2)public DataContainerInterf
20、ace getFunctionds2(Long pOrgId)throws Exception Connection connObj=null;DataContainerInterface reVal=null;try/定义查询条件String conStr=ORGANIZE_ID=:ARG0;HashMap paraMap=new HashMap();paraMap.put(ARG0,pOrgId);/获取连接connObj=SessionManager.getSession().getConnection();/获取返回的bean数组reVal=BOStaffEngine.getBeans
21、(connObj,conStr,paraMap);catch(Exception ex)ex.printStackTrace();finally if(connObj!=null)connObj.close();return reVal;Function类型DS的方法格式,返回值的类型(3)public String getFunctionds3()String reVal=new String102;for(int i=1;i 11;i+)reVali-10=+i;reVali-11=行政区+i;return reVal;Function类型DS的方法格式,返回值的类型(4)public O
22、bject getFunctionds4()MyObject reVal=new MyObject10;for(int i=1;i 11;i+)MyObject obj=new MyObject();obj.setName(对象下拉测试+i);obj.setStaffid(+i);reVali-1=obj;return reVal;动态动态DSDS的参数设置的参数设置(1)(1)动态动态DSDS的参数设置的参数设置(2)(2)动态动态DSDS的参数设置的参数设置(3)(3)动态动态DSDS的参数设置的参数设置(4)(4)省市:城市:动态动态DSDS的参数设置的参数设置(5)(5)functio
23、n onValChange(fieldName,oldVal,newVal,formPK)if(fieldName=PROVICE)g_FormRowSetManager.get(listboxForm).refreshDynamicListBox(CITY);也可以使用DBForm的js方法refreshDynamicListBox(“ColName”)来刷新下拉框。SETSET使用(使用(1 1)n nSETSET配置说明配置说明nSET的编辑组件n nSETSET中动态下拉数据源的配置中动态下拉数据源的配置SETSET使用(使用(2 2)n拼装数据(DataContainer),再在页面
24、通过set来显示后台java代码:DataContainer dcs=new DataContainer1;dcs0=new DataContainer();dcs0.set(OPPE_DATA,now);dcs0.set(OPER_NAME,strCode);return dcs;前台jsp代码:在aiform中使用ActionDataModel,从后台方法中取得数据SETSET使用(使用(3 3)n n自定义自定义setset(AutoFormAutoForm)前台前台jspjsp代码:代码:后台后台javajava代码:代码:AutoSet set=new AutoSet(this.SE
25、TNAME);for()set.addDBEditFieldSimple(pName,pTitle,isModify,attrValue);return set;界面控制层数据交换的过程界面控制层结构界面控制层结构ConfigTool进行SET、DS对象定义SET对象定义信息,DS对象定义信息界面展现控制层HTML输出TAG对象JSP文件业务逻辑层局部HTML输出(XmlHttp)用户操作Action请求界面控制层的数据交互方式界面控制层的数据交互方式n n数据请求的方式:数据请求的方式:n nJsp TagJsp Tagn nServletServlet(ActionAction)n数据提交
26、的方式n nXML HTTPXML HTTPn nForm CommitForm Commitn nXMLXML数据的解析数据的解析n nDataContainerListDataContainerList HttpUtil.HttpUtil.getDataContainerLists(InputStream in,Class getDataContainerLists(InputStream in,Class dataContainerClass)dataContainerClass)n nDataContainerInterface DataContainerInterface getCo
27、lDataContainerInterface(String aBoName)getColDataContainerInterface(String aBoName)n nHttpUtilHttpUtil的其他方法的其他方法前台组件的数据交互方式前台组件的数据交互方式n nDBGridDBGrid,DBFormDBForm,DBTreeDBTree组件数据交互的原组件数据交互的原理理n nMVCMVC模式模式n nDataModelDataModel接口说明,缺省接口说明,缺省DataModelDataModel的使用的使用n n自定义自定义DataModelDataModeln n前台其他显
28、示组件的使用前台其他显示组件的使用n n PopMenuPopMenu的使用的使用n n aitabaitab的使用的使用n n aiListboxaiListbox的使用的使用n n NormalRowSetNormalRowSet的使用的使用n n提交数据的方法提交数据的方法PostInfoPostInfo,SaveRowSetSaveRowSetn nGlobe_v2.jspGlobe_v2.jspn nUserDataUserData与与CustomPropertyCustomProperty 前台组件的数据交互方式前台组件的数据交互方式(2)(2)n n小量数据前后台交互例子删除客户
29、小量数据前后台交互例子删除客户前台代码:var retMsg=postParam(“/business/com.asiainfo.bboss.web.customer.CustomerAction?action=deleteCustomer”,Id=+partyRoleIdvar retVal=retMsg.getValueByName(retVal);后台代码:strId=HttpUtil.getParameter(request,Id);。CustomProperty cp=CustomProperty.getInstance();cp.set(retVal,0);HttpUtil.sho
30、wInfo(response,cp);登陆管理,权限管理,系统管理登录管理登录管理n登录管理的基本原理n系统登录框架和超时校验的实现模式nUserInfoInterfacenUserManagernIncludedhead.jspnBaseSever与CentralControllern登录管理的后期调整方式nFilter模式n文件级校验权限管理权限管理(1)(1)n权限管理的基本思想nMO的创建与应用,被管理对象被管理对象组织元素组织元素权限管理配置工具权限管理配置工具权限管理接口权限管理接口功能菜单功能菜单界面元素界面元素数据对象数据对象岗位岗位角色角色人员人员权限管理的缺省实现权限管理的
31、缺省实现其它扩展实现其它扩展实现权限管理权限管理(2)(2)使用ConfigTool创建MO文件权限管理权限管理(3)(3)在需要进行权限控制的地方写入代码进行权限控制,代码范例如下:范例1:范例2:mo即为由ConfigTool创建的mo文件,这里写出它的全路径;operator为mo中的操作,代表了一个如按钮之类的操作。权限管理权限管理(4)(4)权限管理权限管理(5)(5)1、从被管对象树上选择需要进行配置的被管MO对象2、点击新增按钮添加和被管对象MO相关的员工、岗位、岗位类型;或者删除原来和MO对象关联的员工、岗位、岗位类型。3、双击MO对象的操作列表或属性列表记录,添加到已选操作、
32、已选属性;选择已选记录,点击删除。4、在输入条件栏输入条件表达式,作为限制操作或查看属性的条件。MO查询操作的条件语句遵循sql语法,其他操作遵循java语法。在条件表达式中可以使用系统定义的全局变量,系统定义了这些全局变量:nSql语法示例:User.ID in(1,2)and station_id in(User.StationsString)nJava语法示例:User.ID=1&Station.OrganizeId=1 n*java语法中使用全局变量时在操作方法前需要加空格,例如:StationType.OrganizeIdsArrayList .contains(12);5、扩展BO
33、用于查询时和条件语句做关联。6、点击保存按钮保存定义的MO对象权限。权限管理权限管理(6)(6)n在授权的时候,可以首先将mo以及mo所对应的操作和属性与岗位类型关联,然后再为该岗位类型建立权限点,最后把权限点赋给员工,这样员工拥有了权限点,就等同于拥有了操作的控制权。系统管理概念系统管理概念n系统管理概念n员工n岗位n岗位类型n功能模块(菜单)n角色n组织n行政区域n营业区n分级授权系统管理关系系统管理关系Appframe Appframe 与与 OBDOBD关系关系Appframe外围模块自定义查询自定义查询n自定义查询简介:n一种辅助查询的手段;n方便用户快速查询到感兴趣的数据;n个性化的需要;n功能定义n自定义查询配置界面n自定义查询的显示表格n自定义查询的列表功能n用户接口 其它扩展功能其它扩展功能通知管理预约提醒信息评论附件上传数据导出应用case说明n多级动态下拉数据源在DBForm中的使用n多表关联查询与保存的实例说明nDBGrid,DBForm,DBTreeNew的自定义DataModel的实例说明Thank You!Thank You!选择亚信,共创成功问题讨论