您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 动态单据框架使用总结
动态单据框架使用总结1、引言最近我们协同系统部办公自动化组开发了一个流程管理模块,使用了最新的动态单据框架,现在这个模块已基本完成了一期的发布。整个开发过程,也是一个摸索和学习的过程,由于是一个新框架,说明文档和参考资料也不是很多,其间我们也遇到过不少问题,也走了一些弯路,现在将我在整个开发过程中的体会记录下来,以供自己和初次使用动态框架的同事参考。2、动态框架简介动态单据框架是直接基于JSF和ExtJS开发的,而不是在WAF框架之上开发的,所以在性能方面相对要好很多。动态单据框架主要功能是让我们可以通过设计器拖放和做一些配置来生成序时簿页面和单据编辑页面,而不需要像以前那样手工写bill.xhtml页面和后台管理的BillBean,这些工作框架都帮我们做好了,如果要做一些通用功能之外的自定义操作,我们也只需要写一个插件,并将操作写在插件中就可以实现了。这样就极大的简化了开发单据的过程,提高了开发效率。3、动态框架的使用1、动态单据的基本用法首先,创建所需实体。然后打开金碟EAS客户端,在功能菜单中选系统平台,再双击动态单据配置,如图:然后再选择要放到哪个子系统之下,确定之后出现如下界面:这就是我们设计动态单据的主界面了(做过Winform的朋友一定看出来了,这和Winform非常相似,也为我们提供相当易用的人机界面,包括工具栏上的一系列布局按钮,让我们使用起来相当方便),右边的子系统区域显示了刚才所选的子系统下的所有动态单列表,我们可以在这修改已存在的单据,也可以新建一个动态单据。点新建按钮,选择一个模板,确定就根据模板生成了一张新的动态单据,我们也可以创建自已的模板,过程和新建单据基本一致,只要最后修改一下数据库记录即可,后面会谈到这个。设计单据的过程比较简单,从工具箱里拖出控件,在属性面板中修改相应的属性,再保存,就可以了,这里只是重点提一下单据和控件的绑定,其它的在这不多涉及。首先要给单据绑定实体,选定单据(注意:不是选定控件,要选择最外面的框),然后在属性面板中点绑定实体右边的按钮(如左图),弹出选择业务对象对话框,在这里我们选择最开始创建的实体,确定,就完成了单据和实体的绑定。这样我们的这张动态单据的序时簿和编辑界面就可以显示和修改所绑定的实体的属性了。然后点下面的操作列表,定义这张单可以执行的据所有操作(如下图)。这里框架给我们提供了20多种内置的操作。我们在这选了单据所具有的操作功能(比如说保存操作),后面才能在给按钮事件添加Action时调用单据的保存功能,这也包括在工具条上的按钮要调用单据功能的情况。操作列表里的权限是指执行某一操作所必须的权限项,如果为某个操作配了权限项,则框架在执行这个操作之前会先验权,如果有相应权限则执行,没有则抛出异常并终止执行操作。检查工作流是指在执行操作前是否要先检查该记录有没有在工作流之中,如设置为检查则当该记录已在工作流中时给出提示并取消操作,不在工作流中才往下执行。单据中的控件都要和实体的一个属性绑定,这样才能在单据编辑页面读出实体的属性值或在保存时将控件的值存入实体相应属性里。对于文本框和日期框等,当我们点绑定实体属性右边的安钮时,会自动找出该单据所绑定实体的所有字符属性或日期属性。下拉列表框则会找出所有枚举属性供选择。对于基础资料控件,除了绑定实体属性外,还要选择基础资料类型和关联的基础资料字段名,实际上就是指定当点击这个F7控件时,要去找哪个基础资料实体的哪个字段的值显示在控件上。另外提一下默认值的问题,我们可以给单据的某个或几个字段设置默认值,这样当新建单据时会自动为这个字段给上默认值,这对于一些不能让用户修改的字段如创建人等特别有用。设置默认值只需要选中控件,在缺省值中填入要取的值即可。目前框架还没有提供让我们直接选择就能设好默认值的方法。我们只能手工输入表达式来达到这个目的,下面是几种常用的默认值表达式写法(照下面的输入即可,不用改动):getUser(@CONTEXT,Person)取当前登录的职员getUser(@CONTEXT,User)取当前登录的用户getBillNumber(@CONTEXT,@THIS,@MAINORG)自动生成单据编号getDate()取当前日期getOrgUnit(@CONTEXT,LoginOrg,@MAINORGTYPE)取当前登录组织在创建并保存了单据之后,我们就可以看到单据的序时簿界面和单据编辑界面了。键入以下地址就可以查看了:如上图,就是刚刚创建的“导出测试”单据的序时簿界面,连快速查询都帮我们生成了,同时我们也可以在左侧的单据中找到“导出测试”的单据编辑界面。动态单据框架真是强大,我们没有写一行代码就配出了序时簿和编辑界面,基本功能也都有了,如果摸熟了肯定会让开发效率上一台阶的。2、动态单据框架使用进阶上面所说的只是动态单据框架的基本用法,我们要实现一些自定义的功能或其他操作,还要做这几件事:给序时簿添加工具条,为序时簿和编辑页面写插件,在插件中实现我们的功能,将插件注册到单据。1)、给序时簿添加工具条按照以上步骤做出来的单据序时簿页面是没有如上图中的查看,删除,刷新等工具按钮的,因为我们还没有做相关配置。但是我们都知道,序时簿页面的主要功能是要靠工具按钮来实现的,如果没有工具条,那我们在序时簿就只能简单的查看一下记录,做不了更多的事,这样的序时簿显然是不实用的。接下来我们就来让工具条现身。很愦憾,目前框图架还没有提供设计界面来配置工具条(但是我们相信,动态框架很快就支持这个功能的),我们只能以手工方式来配置数据库来达到这个目的。以下就详细介绍如何配置数据库来添加工具条,其中可能牵涉了多张表,因而会多花一些篇幅来介绍表的结构和各表之间的关系。我们或许可以认为既然框架马上就会提供设计界面来支持工具条了,那为什么还要花时间去了解这些表结构呢,因为我们相信一个开发人员如果能更多的了解某个框架的底层技术细节,那么他所开发出来的程序不管是在运行效率上,还是在逻辑架构和扩展性方面,都会比一个完全不清楚框架的程序员所写的程序要完善很多,同时了解框架构成也有助于我们在开发时调错。整个动态单据框架中最基础的表要算T_BAS_Form表了,我们每创建一张动态单据,都会在这个表里写入一条记录,包括动态单据的模板,也是在这张表里记录着。它的主要字段如下:FID主键,唯一标识,一个28位的字符串,在整个EAS系统中都是唯一的,这也是其它表中所频繁使用的FormID。FName_L1动态单据名称或模板名称,FName_L2和FName_L3是多语言的名称FElementTypeIDForm类型,一般我们创建的单据(在这也可以称Form)这个字段的值是100,如果我们在保存了单据之后,再手工把单据的这个字段改成-100(或是小于0的其它整数),那么这张单就会成为模板,我们在上面第二张图的子系统里将不会再看到FElemetTypeID为负数的单据,而是会在点设计器的新建时会看到这张单已经显示在右边的模板里面了,(如下图)小技巧:当我们开发时要做2张或2张以上比较相似的单据,只有少量字段不同,我们可以先做一张,然后将这张单的FElementTypeID改为-100,再点新建,以刚才那张单为模板复制一张新单,稍做修改,最后再把第一张单的FElementTypeID改回100就可以了,这样会大大减少开发相似单据的工作量。FBosType动态单据所绑定的实体的BosType,就是我们最开始所创建的实体的BosType,然后在上面用设计器绑定到了这张单上。FPermissionItem权限项字段FVersionForm的版本号,是一个Timestamp值,当我们做完下面的步骤,配好工具条后,刷新或重启IE,可能发现工具条并没有出现,只有重启服务器之后才会出现,但是这样影响开发效率,这时我们只需要改一下Form的FVersion值,再刷新IE就会看到了。其他的一些修改也是如此。FSubsysID子系统ID,记录单据是属于哪个子系统,二级子系统可以到T_BAS_FormSubSystem表中查,一级子系统可以到T_BAS_FormTopClass表是查。FTemplateID如果单据是从模板新建的,将会把模板的FID写到这里,否则为空T_BAS_FormEntity表,记录了Form对应的实体,FTableName是单据绑定的实体对应的实体表名,FBosType和FFormID字段都和T_BAS_Form表相对应。T_BAS_FormField表,记录动态单据的所有字段信息,主要字段如下:FFormID该字段是属于哪一个Form的FKey字段的key值,也就是在设计器中该控件的“标识”属性的值,在插件编程时会用到key值来标识该控件。FFieldName该控件所绑定的实体属性所对应的实体表的字段名,也就是在设计器为控件绑定实体属性之后,在字段名中所显示的值(灰色,不可更改)FElementTypeID控件类型,是文本框还是下拉框,可以在T_BAS_ElementType表中查FDataScope取值范围,示例:0,255表示可以取0-255之间的值FLookUpObjectID针对F7字段,确定点F7时弹出窗口要使用哪个查询,对应于T_BAS_LookUpClass表的FID,如一个行政组织的F7他的FLookUPObjectID是0,查T_BAS_LookUpClass表,对应的QueryInfo就是com.kingdee.eas.basedata.org.app.AdminOrgUnitQueryFControlFieldKey主要用在字段值携带时,设置当哪个key值的字段发生变化时,要相应改变本字段的值,要配合FPropertyName,FRefPropertyName和FLink字段一起使用FDefValue控件的默认值,写法参见上面说明FEnumType针对下拉列表字段,跟FLookUpObjectID一样,标识要使用哪个枚举,在这要查T_BAS_FormEnum表T_BAS_FormFunction表,框架内置函数表,记录了当前动态单据框架所支持的内置函数及用法示例,之前所介绍的默认值的用法,我们也可以在这张表里查到,以后如果框架添加了新的内置函数,也可在这里看到。T_BAS_FormOperation表,单据功能操作列表,我们在为单据绑定操作列表时(如上面的操作列表选择图),所选的操作,都会在这个表中生成一条相关记录,代表了这个Form所能调用的单据功能有哪些,目前一共有25种操作,可以在T_BAS_FormOperationType表中查询。FFormID单据的formIDFPermissionItem权限项,如果配了,则操作前要先验权FStateField操作执行后要更改的字段名,如没有,则空。比如说我们在提交操作之后要将工作流状态字段置1,则这里填工作流状态字段名FworkflowStatus,在下面的FSuccessSateValue中填1FSuccessSateValue操作成功后要将FStateField所设定的字段更改为的目标值。FFailedSateValue操作失败后要将FStateField所设定的字段更改为的目标值。FOperationID操作代码,对应T_BAS_FormoperationType的FID字段FCheckWfState操作前是否检查工作流状态,-1为默认,0为不检查,1为检查T_BAS_FormoperationType表,FOperation操作标识,我们在后面的T_BAS_FormActionList表中调用单据功能时,配FParaments参数,要和这里相对应。FName_L2操作名,FName_L1,FName_L3为多语言FIsConfirm操作前是否要确认,0为不要,1为要确认FEnabledState在哪种单据状态中可用,VIEW查看页面,ADDNEW新建页面,EDIT编辑页面T_BA
本文标题:动态单据框架使用总结
链接地址:https://www.777doc.com/doc-4434269 .html