版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目录1.简介..目的4范围4适用对象4参考资料42.EAS业务开发过程.EAS应用架构简介4EAS开发流程...设计业务对象6调整数据库结构7设计查询对象7设计界面82.3.小结83.基本编程模型与操作过程.3.3.样例需求简要描述8准备阶段9实现一个单据编辑功能.3.2.元数据建模9编写业务逻辑163.4.实现一个单据序时簿功能.4.2.元数据建模17编写业务逻辑.让程序运行起来20为单据加上打印功能.6.2.列表打印
2、21单据打印.为业务操作加上日志功能23为单据加上工作流...定义事件25定义业务功能26定义流程27发布流程274.编程注意事项284.1.协议类2.1.2.不要在协议类中客户端或服务端特有的类28尽量使用Selector来限制查询数据量2.1.4.所有的金额、数量属性用BigDecimal类型28正确地构造BigDecimal284.2.服务端2....2.6.不要用对象级的变量信息29在EJB组件中不要启动多线程29获取当前登录信息29
3、数据库资源的正确29尽量使用参数化的SQL30避免写只适用于特定数据库的SQL304.3.客户端30...4.3.5.获取当前登录信息30获取组件的接口30的挂接和卸载30侦、快捷键的禁用与启用31菜单、线程更新UI315.总结31EAS 编程模型1.1.目的以一个简单的单据业务处理案例为例,描述 EAS 的开发流程和具体实现过程及细节,形成全面的编程模型供开发参考。1.2.范围Studio范围包括:开发实现过程,分样例代码。中的设计开发操作步骤、开发业务逻辑的细节和部1.3.适用对象本文档适用于:系统设计师开发工程师1.4.参考资料略2.1.EAS
4、应用架构简介EAS状态 Ses用 EJB的客户端采用 Swing作为界面展现方式,服务端采用J2EE 应用服务器的无服务提供。相对于直接采Bean 组件模型,两者间的通讯由自定义的接口的方法,ORMRPC 可以ORM RPC,客户端不依赖于 J2EE;相对于 Servlet 响应 HTTP 请求的方法,ORM RPC 有效率上的优势,可以在不同的通讯协议间切换。以下是 EAS 应用架构的概要图:2.EAS 业务开发过程1.简介UI 通过件。接口向服务端发送请求,ORMRPC 服务接受请求后转发给相应的 EJB 组在 EJB 组件中,可以通过 ORMap来数据库,对于特别复杂的业务,也可以直 接
5、编写符合 KSQL 规范的查询语句,由Kingdee JDBC Driver 运行。KSQL 针对不同的目标 数据库对查询语句作必要的翻译。最终查询语句被送至各厂商提供的 JDBC Driver执行并返 回结果。UI 与服务端之间属于无状态连接,所以框架在服务端了一个会话信息(Context)的列前也表,在同一次会话的多次请求间建立了联系。登录等功能模块在这个会话信息中了当财务组织、当前用户等业务数据,在实现业务逻辑时,可以直接从中获取相关数据。框架将该信息缓存到客户端,只是在名字上有所不同(SysContext)。上述步骤中网络通讯与数据库是耗时较大的过程,在编写业务逻辑时要尽量减少 UI
6、与应用服务器的交互,减少对数据库的,尤其注意不要在循环中执行这样的代码。2.2.EAS 开发流程元数据是支撑框架运行的基础。定义元数据、发布元数据、在发布代码中添加业务逻辑成为当前开发工作的基本模式。在应用架构中,各业务功能需要重点处理的是 UI 与 EJB组 件的逻辑。集成开发环境与应用框架类库为实现这两个任务提供了很大的便利。基于和应用框架的开发流程主要由四个步骤组成:设计业务对象、调整数据库结构、设计 查询对象、设计界面。2.2.1.设计业务对象可以从 Together 的设计模型中导出业务对象,也可以在中手工定义。 般来说,详细设计模型中的一个“实体类”对应一个一个 业务对象的大致过程
7、:业务对象。下图展示了定义在定义一个业务对象前,应该详细分析它的特征,在应用框架中选择合适的基类,这样定义出来 的业务对象就具备了一些典型业务的逻辑,例如从 DataBase 继承的业务对象自动具有新增、保存等基本功能。有关应用框架类库体系的介绍,详见应用框架编程制南。业务对象的继承分抽象继承与非抽象继承两种。两者的区别在于数据结构不同,在业务逻辑 上没有区别。前者将基类属性到子类对应的表,后者将基类属性到基类对应的表。业务对象的属性分为两种:自有属性与连接属性,后者是与其它业务对象关联的属性,在建立连接属性前必须先定义对象间的关系。有两种特殊的自有属性须特别注意:一种是枚举类型,详见 TOD
8、O;另一种是多语言属性,当指定某属性为多语言后,发布工具将为该属性生成多个字段, 每个字段对应一种语言,ORMap会根据当前系统语言确定存取哪个字段。业务对象可以拥有一个逻辑主键,主键是对象的唯一标志,由若干个属性组成。必须注意的是,在某些特殊场合下,例如只批量地更新或查找,不操作单个主键,否则将给批量操作带来很多麻烦。,不应该额外地去设置一个逻辑定义业务方法时应根据该方法执行的操作正确设置事务属性,通常将只进行查询操作的方法设置为“Supports”,否则为“Required”。若该方法须抛出业务异常,则在异常列表处添加 EASBizException。根据需要可能配置一些业务对象类及其属性
9、的扩展属性,这些扩展属性用于实现编码规则、BOTP、权限等功能,详细列表请参见 TODO。一个业务对象发布后将生成协议类们可以在 EJB 组件类中编写业务逻辑。与本地接口、EJB 组件类,以及用于部署的组件描述符。 我2.2.2.调整数据库结构的“实体导出为表”功能创建,但默认生成的业务对象相关的表可以用合理,需要手工调整。结构不是非常首先, 根据“$/KDSP3.0/PDSP-EAS/ 过程& 指南/2_G_设计指南_数据建模规范.doc”调整表名、 字段名、主键名、索引名、外键名。其次,根据字符型字段将要的数据选择是否支持Unicode 以 及字段长度等。最后,根据需要增加索引,以提高程序
10、运行效率。2.2.3.设计查询对象提供的查询对象为实现一些简单的查询提供了很大的便利。查询对象可以与 F7 控件、通用框、列表界面直接绑定,只需写少量代码就可以完成一个基本的业务功能。过滤排序查询对象的字段可以由主对象及其子对象的属性导入,也可以定义成计算式。对于于 F7 控KINGDEE构架设计文档DOC ID:KDSP EAS T V3.0.0第 7 页 共 31件的查询对象,一般要定义它的默认排序条件。如果要支持虚模式取数,查询对象还须定义一个主键。在执行虚模式查询时,程序首先得到一个主键列表,之后的查询都将直接通过主键而不是原始过滤条件查询,此方式大大了分页性能。查询对象及其属性都有相
11、关的扩展用于实现 F7 查询、通用过滤排序等功能,详见 TODO。2.2.4.设计界面对应于服务端组件,UI在应用框架中也有一整套典型业务的基类,设计界面前应该选择合适的应 不 同 的 显 示 分 辨 率 , 界 面 通 常 采 用KDLayout范)对控件的选择、排列、规格等都作出了明确规定,建议一开始基人(类机。界为面适规布 局 。就严格遵守界面规范,以免后期返工。界面可以是一个空容器,也可以与业务对象或查询对象绑定。一般来说,编辑性质的界面与它操作的业务对象绑定,而序时簿性质的界面与一个查询对象绑定。绑定后的界面会自动根据对象属性类型分配不同的控件,并添加装载与保存的代码。设计期的一个重
12、要任务是定义 Action,每个 Action 可能与界面的菜单、按钮或快捷键对应,用户对界面元素的操作将触发不同的 Action 事件。将 Action 的功能作了扩展,不仅用它来控制相关 界面元素的状态,而且将它与权限控制(详见 TODO)、工作流(详见 TODO)等基础服务联系起来, 以一种可配置的方式提供基础服务。2.3.小结本节简要地介绍了 EAS 的应用架构以及开发的基本流程,目的是给初学者一个整体的映像,明 确在开发过程中的主要任务以及框架运行的基本原理。后面的章节将以一个实例详细地描述开发流程 的各个方面,包括打印、工作流等高级应用。下面通过3.1.样例需求简要描述本节为了重点
13、是说明开发技术,选择了一个相对简单的需求:实现一张单据的功能,该单据可以在序时簿中查找、过滤,具有新增、修改、删除等基本功能,支持打印与打印预览,单据提交后经过多级到达工作流结束点。通过这些实现来描述 EAS 的基本编程模型和操作过程。单据头属性列表:名称类型描述公司业务对象单据所属财务组织,默认为当前公司单据类型枚举只有两种类型:甲、乙3.基本编程模型与操作过程KINGDEE构架设计文档DOC ID:KDSP EAS T V3.0.0第 8 页 共 31字符串单据的。为简单起见,由用户输入,系统保证不重复。业务日期日期说明业务发生的日期单据体属性列表:3.2.准备阶段(1)(2)从2eas4
14、.1 下拷贝setup.bat执行,安装开发环境;执 行W:adminpt.bat更 新的 日 构 件 , 将W:easdeployapusicmetas.jar解 压 到W:apusicmetas 目录下,然后修改配置文件:i.W:easdeployapusicconfig*.xmlii.W:easdeploycntconfig.xml(3)从 /3.0 上 Check out 整个 eas 工程,并且在中作为解决方案打开, 并且设置解决方案的属性:如此设置后,程序运行时将从 W:apusicmetas 目录下发布的元数据。(4)新建一个 Java 工程,取名为 sle,建立一个 src 目
15、录用于存放源文件,classes 目录为输出 路径,并且将 classes 路径加入 W:easdev 下的配置文件 server-user.liblist。这样,程序运行时将 优 先 一 放 置 于工 程编 译 的 类 文 件 , 而 不 是 部 署 包 。 工 程 依 赖 的 包统 W:easlibdebug。3.3.实现一个单据编辑功能3.3.1.元数据建模 参照前一节“基本开发流程”的描述,需要进行四个步骤的建模。名称类型描述摘要字符串用户可以选择或直接输入科目业务对象可以选择,按单据头公司金额数字本位币金额,需处理币别精度,提供千分号制单业务对象单据创建者,默认为当前用户KINGDE
16、E构架设计文档DOC ID:KDSP EAS T V3.0.0第 9 页 共 31.定义业务对象单据头经过详细设计阶段,可以分析出该功能有一个唯一的实体类单据,查找应用框架类层次,发现 BillBase 这个基类最适合派生,因为它包含了单据共有的一些属性,而且提供了单据的一般操作方法。选择基类点击确定后,可以得到如下的类信息:注意:由于控制器相关的类将被部署在服务端,所以将它放在对 象的名称,该表不一定物理存在,在使用“实体导出为表”时,盖数 据表。app 包中。可以手工输入表将根据表对象名称新建或覆.1. 定义属性 切换到第二个页签“属性”,发现大多数单据头属性基类都已经提供,只需要额外定义
17、一个枚举类型的属性“单据类型”。首先定义一个枚举对象:该枚举类将被业务对象的协议类,所以必须定义在 com.kingdee.eas.sle包下,部署程序会将该包下的类同时发布到服务器与客户端。之后就可以基于枚举对象定义“单据类型”属性了,如图:KINGDEE构架设计文档DOC ID:KDSP EAS T V3.0.0第 10 页 共 31其中的字段“FBillType”与前面的表对象一样,不一定要存在。根据命名规范,字段名以 F 开头,这样可以防止与数据库系统的变量。.2. 定义逻辑键 定义好属性列表后,就可以指定其中的某些属性作为逻辑键,此处保留默认的继承属性 id为逻辑键。KINGDEE构
18、架设计文档DOC ID:KDSP EAS T V3.0.0第 11 页 共 31.3. 定义方法业务对象的方法最终被发布为 EJB 组件的接口方法,可以调用。方法可以直接从基类导入或者手工创建。一般来说,只导入 getCollection 系列方法,这样可以提供强类型的集合对象返回值(注意:SillCollection 直接从 AbstractObjectCollection 继承,与 BillBaseCollection 没有派生关系),其它方法可以直接在派生类中 override。还定义了一个方法fetchInitData,用于返回界面初始化需要的参数,该方法只执行查询,因为“Suppor
19、ts” ,此事务属性设置返回值类,型并为且java.util.HashMapmon.EASBizException。注意,参数、返回值、已经异常抛 出 c必须从下拉列表中选 择或者直接填写完整的类名(包含包名)。.定义业务对象单据体单据体的定义过程与单据头类似,不再赘述。需要注意的是“金额”属性的数据类型应该选用BigDecimal,该属性类型可以提供任意精度的数字,在财务核算系统中这个特性尤为重要。.定义业务对象的关联关系单据头与单据体是一对多的关系。为了在程序中可以在两者直接相互导航象建立一个关联。首先定义一个关系对象:可以给这两个对KINGDEE构架设计文档DOC ID:KDSP EAS
20、 T V3.0.0第 12 页 共 31基于该关系对象,在单据头中定义 entries 属性关联到单据体,对应地,单据体上的到单据头:bill属性关联同样地,定义出单据体与科目的关联关系。.定义数据表完成业务对象的定义后,可以利用的导表功能轻松得到表结构元数据。在的“包视图”中右键选择实体对象,并选择“实体导出为表”,就可以得到下列表结构:KINGDEE构架设计文档DOC ID:KDSP EAS T V3.0.0第 13 页 共 31需要注意其中的 FDesc 字段,单据体的备注字段被设计成可以Unicode 字符(NVARCHAR),最大长度为 200。对于金额字段,不允许空值,可以设置默认
21、值为 0,当设计跨数据库程序时, 这点非常重要,因为不同数据库对聚合函数中空值的处理可能不一致。对于 FSeq 和 FBillID,这两个 字段不允许为空,从数据库约束层面来保证业务逻辑。之后右键选择数据表将它们导出到业务数据库。.定义编辑界面与业务对象相对应,应用框架在 UI 层也有一个类库体系,可以选择 BillEditUI 作为该功能 的基类。在向导的第二步,可以指定界面与 Sill 实体绑定。在第三步中可以选择与控件绑定的 属性。点击完成后,自动生成了相关的控件,并按照默认布局排列。为了适应不同的显示分辨率,应该界面的布局为 KDLayout,该布局管理器可以根据窗口大小自动重排控件。
22、对于单据体上的科目属性,目前无法生成绑定信息,必须手工在表格设计器中新建一列:KINGDEE构架设计文档DOC ID:KDSP EAS T V3.0.0第 14 页 共 31然后手工增加绑定信息:.发布元数据至此,完成了编辑功能所需元数据的定义,现在可以右键选择它们发布。切换到 Java图,刷新包资源管理器,(1)协议类com.kingdee.eas.s可以看到 src 文件夹下新建了很多 Java 源文件。le包下放置的都是协议类,包括数据包、组件接口以及枚举对象等。最 终部署时,客户端与服务器都将装载这些类。协议类中不要编写的代 码,否则将出现类无法装载的异常。服务器或客户端特有类协议类类
23、型类名说明接口类ISillSill 组件接口SillFactory创建组件接口的工厂数据包AbstractSillInfo、Sill的数据包,提供强类型的KINGDEE构架设计文档DOC ID:KDSP EAS T V3.0.0第 15 页 共 31服务端组件com.kingdee.eas.s同, 不再赘述。客户端代码com.kingdee.eas.sle.app 包下放置的是 EJB 组件类,这些组件类与 EJB 规范相t 包下放置了客户端相关的代码。其中的抽象基类AbstractSillEditUI 中包含了初始化界面、数据绑定相关的逻辑,每次发布元数据,该文件将被重新生成。可以在 S盖。
24、illEditUI 中编写特定的逻辑,该文件在重新发布时不会被覆3.3.2.编写业务逻辑前面提到 AbstractSillEditUI 中包含了初始化界面、数据绑定等基本逻辑现在所要做的是在 SillEditUI 中编写特定的业务逻辑。重点在于下列方法:方法名称描述onLoad界面初始化事件。可以在此:1、 获取 UI 的上下文和初始化数据;2、 设置控件风格;3设置界面组件的状态;loadFields将业务数据装载到控件。数据绑定代码在super.loadFieldsstoreFields从控件中获得的业务数据。数据绑定 代码 在getSelectors指定查询单据对象时需要的属性列表。ve
25、rifyInput在客户端检查业务逻辑,不合法时抛出异常。 此处的检查不能代替服务端的校验,只是为了在业务数据时尽量少地提交服务端。createNewData创建一个新业务对象,在新增时被调用。可以在此处为业务对象的属性赋默认值。createNewDetailData创建一个新分录对象,在新增分录时被调用。可以在此处为分录对象的属性赋默认值。setFieldsNull在业务对象时,需要将它的一些属性置空或改变,例如对象的 ID 和分录的 ID。getEditor创建各个属性的编辑器,重点关注:1、 带扩展器的 F7;2、 可支持模糊查询与框的 F7;3金额编辑器的创建;SillInfo、Abs
26、tractSillCollection、 SillCollection据接口。其中抽象基类在每次发布时重新生成,所以不要在其中编写逻辑。枚举对象SillType提供多语言支持的枚举类KINGDEE构架设计文档DOC ID:KDSP EAS T V3.0.0第 16 页 共 31getRender创建各个属性的绘制器,重点关注:1、金额格式化输出;这些方法中都有很详细的代码注释。 服务端的代码相对简单,重点关注 3 个方法:至此,已经完成了单据编辑的基本功能,具备了新增、修改、删除、等功能,支持各种编辑器和格式化的输出。3.4.实现一个单据序时簿功能3.4.1.元数据建模.定义查询对象通过定义查
27、询对象(Query)可以快速地实现序时簿这种简单的查询功能。以 Sill 实体定义了如下的 Query:为主对象,方法名称描述_fetchInitData获取初始化数据,重点关注:1、 如何从 Context 中获取登录信息;_submit提交业务数据,重点关注:1、 如何使用_exists 等方法;2、 如何存取分录;_delete删除业务数据,重点关注:1、如何删除分录;KINGDEE构架设计文档DOC ID:KDSP EAS T V3.0.0第 17 页 共 31对于查询字段,需要注意“可见性”这个选项,若不选择该项,则 Select 字句中将不出现该字段,但它还可用于 Where 或
28、Order by 子句中。为了使用通用的过滤排序框,还需要定制字段的扩展属性。如下:Query 的主键指定为 id,这样列表界面在查询时将先取 ID 列表,然后分批次用 ID 取实际数据;若不指定主键,则列表界面将采用 SELECT TOP N 方式查询,在数据量很大时,这种方式的性能表现不是非常理想。.定义列表界面以 ListUI 为父类,以上节定义的 Query 作为绑定对象,可以很容易地生成一个列表界面。该界面的绑定信息如下:名称类型描述monQueryFilter字段是否出现在“自定义”页签的下拉列表中。monQuerySorter字段是否出现在“排序”页签的下拉列表中。isUsing
29、F7在“自定义”页签中,是否可以用 F7输入比较 值。defaultF7Query字符串若 isUsingF7 为 true,该属性制定一个 F7 QueryKINGDEE构架设计文档DOC ID:KDSP EAS T V3.0.0第 18 页 共 31.定义过滤页签所有的过滤页签都必须从 t.CustomerQueryPanel 继承。该 页签主要用于放置一些无法用通用过滤形式表示的条件选项,例如多选一、对起始和结束日期有约束 等。在 SleFilterUI 中放置了起始日期和结束日期两个选项。.发布元数据发布后,cnt 下将生成 SillListUI 和 SleFilterUI 相关的类文
30、件。3.4.2.编写业务逻辑由于列表界面 SillListUI功能相对简单,所需重写的方法较少:过滤界面 SleFilterUI 的重要方法:方法名称描述getParam将界面控件值封装到参数对象。setParam参数对象将数据装载到控件。getFilterInfo将参数对象转化成 FilterInfo,让通用框组合出一个完整的过滤排序条件。verify在按确定按钮前被调用,用于验证过滤条件的。clear新建一个过滤方案时将被调用,可以在此处赋方案的默认值。方法名称描述onLoad界面初始化事件。可以在此:1、获取 UI 的上下文和初始化数据;2、设置控件风格;3设置界面组件的状态;getDe
31、faultFilterForQuery返回默认的过滤条件,本例中,只过滤当前公司的单据。monQueryDialog必要时构造一个通用过滤排序框,重点关注:1、 如何设置框大小;2、 如何预置过滤排序条件;3如何添加特有的过滤页签;KINGDEE构架设计文档DOC ID:KDSP EAS T V3.0.0第 19 页 共 313.5.让程序运行起来如下定义一个 Java 应用程序:为了调试服务端程序还必须保证 W:/admin/StartServ项:l中 Apusic的启动参数包含下列选-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend
32、=n,address=8000,然后在eclipse中配置一个远程Java应用程序:启动 Apusic 后,在eclipse 中先后启动 server 与 cnt 应用程序,就进入了调试程序的阶段。 首先利用 EAS 的菜单编辑功能增加一个菜单:单据序时簿。唯一重要的一个菜单属性“UI 对象”设置为:com.kingdee.eas.s了。t.SillListUI。重新登录后就可以直接双击打开单据序时簿现在单据的查询、新增、修改、删除等功能基本上已经了。KINGDEE构架设计文档DOC ID:KDSP EAS T V3.0.0第 20 页 共 313.6.为单据加上打印功能3.6.1.列表打印
33、列表打印相当简单,由于控件与应用框架的良好支持,只要写很少的代码就可以将该功能集成进来。详见 SillListUI 的方法:3.6.2.单据打印相对列表打印,单据打印复杂得多,主要由个步骤组成:.准备打印元数据打印元数据与前面提到的业务对象、查询对象等元数据不同,它实际上是一个 XML 格式的 描述文件,列举了可用于绑定模板控件的字段。定义一个新的元数据文件时可以能的 文件,然后对表名和字段名稍做修改就可以了。一个类似功定义好元数据后,可以用 EAS 套打设计器的管理功能将它引入到报表服务器上:方法名称描述preparePrPageHeader此处可以增加表头行。行格式中可以使用变量。getP
34、rExtVarProvider提供 preparePrPageHeader 中定义的变量的具体取值。KINGDEE构架设计文档DOC ID:KDSP EAS T V3.0.0第 21 页 共 31注: 为每一类单据定义一个元数据目录和一个模板目录,两者必须对同。称也必须相.设计打印模板模板设计工具的具体使用不再详述,这里着重强调几点: 数据源的类型选择“元数据”,在备选来源中选择第一步定义的元数据。设置分录循环区内第一个分组容器的分组属性为“单据唯一标志”:KINGDEE构架设计文档DOC ID:KDSP EAS T V3.0.0第 22 页 共 31.编写代码调用套打功能在 SillEdit
35、UI 的 invokePrFunction 方法中,首先同步界面控件与业务对象的状态,之后将绑定信息传递给公用的打印数据源对象 BillPrDataSource , 最后以数据源对象为参数调用KDNoteHelprPreview 显示出预览窗口。3.7.为业务操作加上日志功能添加日志功能非常简单,甚至不用写一句代码,在配置项:Studio 中打开 service.log 文件,增加如下KINGDEE构架设计文档DOC ID:KDSP EAS T V3.0.0第 23 页 共 31日志项与业务对象的方法绑定,即该方法被调用时,相应日志项信息就会被执行了一个新增单据的操作,将在日志中看到:到上机日
36、志中。例如日志很清晰地了操作人、操作对象、执行时间等信息。注意:修改 service.log 文件后,直接用工将其拷贝到 W:/apusic/metas 下。Studio 的发布功能无法正常使用日志配置项,必须手3.8.为单据加上工作流设计这样一个工作流:制单人提交单据后,将启动一个工作流实例,之后经过多级走到结束点,在单据被前制单人可以修改或删除它。如图:KINGDEE构架设计文档DOC ID:KDSP EAS T V3.0.0第 24 页 共 313.8.1.定义事件工作流的驱动过程与事件相关,而事件是与业务对象的方法绑定的,当方法被调用时,相关的事件被触发,从而将工作流驱动到下一节点。因
37、此首先定义两个事件 evtSubmit 与 evtDelete,分别与方法 submit 与 delete 绑定。KINGDEE构架设计文档DOC ID:KDSP EAS T V3.0.0第 25 页 共 313.8.2.定义业务功能业务功能与界面元素关联,并且被指定到工作流的某个节点上。消息中心处理消息时,将当前节点关联的业务功能,从而找到相应的界面,将其展现出来。例如 ActionSubmit 功能,当流转到该指定了该功能的节点时,SillEditUI 将被调出。KINGDEE构架设计文档DOC ID:KDSP EAS T V3.0.0第 26 页 共 313.8.3.定义流程在这个流程中
38、定义了两个普通的人工节点和一个节点:在定义消息或者编写时,可以流程变量:注:为了测试方便,参与人全部设置成流程发起人。3.8.4.发布流程为了使用公共的工作流批量处理功能,还需要稍微修改一下 Sill.entity 的扩展属性:变量名称类型描述billID内码单据 IDbillNumber字符串单据maResult枚举多级的结果节点名称任务出口参数提交ActionSubmit单据 ID = billID单据= billNumber删除ActionRemove结果 = maResultKINGDEE构架设计文档DOC ID:KDSP EAS T V3.0.0第 27 页 共 31定义好流程后,右
39、键选择发布,流程就即时生效了。现在提交一张单据,切换到消息中心看看有没有新的消息。双击未处理消息就可以调出相应的功能界面了。以下是一些编程的注意事项,提醒开发注意。4.1.协议类协议类包括数据封装类和接口等。4.1.1.不要在协议类中客户端或服务端特有的类在部署 EAS 时,客户端和服务端特定的类是分离的,只有协议类在两端都部署。因此若协议类了服务端特有的类,则在客户端使用协议类时就会出现类找不到的错误;反之亦然。中4.1.2.Selector 来限制查询数据量尽量使用ORMap类中。 Selector只将程序 中引擎将根据 Selector指定的属性列表,从数据库中查询数据并封装到协议信息将
40、直接影响到查询的数据量,所以应该尽量只检索必需的属性。一般的原则是到的属性加入 Selector。4.1.3.所有的金额、数量属性用 BigDecimal 类型系统对金额、数量的精度要求很高, 而 float、double 这些类型能够处理的精度有限,只有BigDecimal 才能够支持无限精度的数字。程序在执行数算时也应该始终使用 BigDecimal。4.1.4.正确地构造 BigDecimalBigDecimal 有多个重载的构造函数,这些函数表面差异不大,对程序运行却有着的影响。到 数据库时 若是 用BigDecimal(double) 构造 将可能 出 现OutOfArrayInde
41、xError 异常。 个 数字 ,则在传 入JDBC4.编程注意事项KINGDEE构架设计文档DOC ID:KDSP EAS T V3.0.0第 28 页 共 314.2.服务端EAS 的服务端代码主要包括 EJB 组件类。4.2.1.不要用对象级的变量信息前面提到过,EAS 的服务端组件采用的是无状态 Ses不 同的 EJB 对象在响应请求,因此如果在对象变量中Bean,在两次调用方法期间,可能是信息,可能会导致这些信息的紊乱。若遇到必 须在多个方法间共享信息的情况,请考虑一下是否可以用参数传递的方式解决。4.2.2.在 EJB 组件中不要启动多线程EJB 组件在当前线程上下文中了事务相关的
42、信息,如果在组件中又启动了线程,则会出现事务的紊乱。与这条原则相关的一个比较隐蔽的场景出现在服务端调用 Query 查询中,Query 查询时启 动了一个新的线程获取Query 执行查询操作。ID,然后当前线程等待前者返回结果。所以绝对不要在服务端调用4.2.3.获取当前登录信息服务端的 Context 中了当前登录信息,可以通过工具类 ContextUtil 来获取当前组织、当前用 户等信息。要对何时使用这些信息有个正确的认识,例如对单据的据所 属公司而不是登录信息中的当前公司。进行校验时应该使用单4.2.4.数据库资源的正确数据库资源是非常有限的资源,若在使用完毕后长时间不,则可能导致资源
43、耗尽,系统无法DBUtils.cleanup(rs, ps, conn);继续运行。这些资源包括结果集、语句、连接等,为了保证可以正常它们,一般要将代码放在一个 finally 子句中,如下:Connection conn = null; PreparedS ement ps = null; ResultSet rs = null;tryconn = getConnection(ctx);ps = conn.prepareS ement(sql); rs = ps.executeQuery();finallyKINGDEE构架设计文档DOC ID:KDSP EAS T V3.0.0第 29 页 共 31这些资源,以便在 finally 中要保证有一个变量它们。绝不允许下列代码出
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度房屋买卖合同标的房产交易时间2篇
- 2024年度艺术品买卖复杂合同2篇
- 2024电子支付清结算系统建设合同3篇
- 2024年企业品牌形象策划与推广合同2篇
- 四方合同范本工作范文
- 员工培训管理分析总结报告
- 2024年度科研机构服务器租赁及高性能计算服务协议2篇
- 2024年度广告投放合同协议
- 有关技术协议书模板
- 2024年度设备买卖合同细节2篇
- 高中出国成绩单模版(中英文)
- 卷扬机专项施工方案
- 波峰焊实验设计分析报告
- 石阡县年产30万吨饮用天然矿泉水产品建设项目(取水工程变更)环评报告
- 山东济宁旅游PPT介绍济宁幻灯片模板
- 初中英语- It's important to get enough sleep.2a教学课件设计
- 2022年初中语文新课标(附权威解读)
- 第3课时亿以内数的写法(教案)四年级数学上册(人教版)
- T-CSSS 002-2023 健康成年人身体活动能量消耗参考值
- 外交学概论知到章节答案智慧树2023年外交学院
- 2022年北京科技大学第二批非教学科研岗位招聘笔试备考题库及答案解析
评论
0/150
提交评论