软件工厂软件加工快速开发平台 | ||||||||||||||||
1 前言 【KCOM 商业工程】是一个采用“基于设计的全自动化软件工厂”开发模式的软件工具平台。 采用【KCOM 商业工程】软件工具平台开发应用软件,会具有前所未有的高效率、高质量、高适应性。本篇将阐述如何使用“基于设计的全自动化软件工厂”开发模式开发复杂管理软件。 1.1 有没有软件业的摩尔定律 从第一台计算机产生开始,硬件技术和软件技术几乎同时开始它们的发展历程。但是半个世纪以来硬件技术的发展速度要远远高于软件技术的发展,从电子管到晶体管,从集成电路到超大规模集成电路,运算速度从每秒几千次到每秒几十万亿次。相比之下软件技术就远远跟不上硬件技术的发展。著名的摩尔定律归纳了硬件技术的发展速度,那么软件技术有没有相应的定律呢,几十年来,软件业界人士一直没有停止过这方面的思考。 近二十年前,美国著名的图灵奖获得者布鲁克斯博士曾在他的《没有银弹:软件工程的根本和次要问题》论文中将能给软件产业带来本质上突变的技术称为“银弹”,并且宣称,“没有单纯的技术或者管理上的进步能够独立承诺在十年当中大幅度地提高软件的生产率、可靠性和解决性”。这个论断在这二十年里一直没有被打破。 1.2 基于组装的人工软件工厂 软件开发一直以来都受到以下几个方面的困扰:开发进度缓慢、开发费用超支、维护成本增长过快、不恰当的功能设计、拙劣的性能、不断膨胀的bug和代码量、不兼容、重复开发等等。这些问题在最严重的情况下就会导致所谓的“软件危机”。可喜的是,由面向对象技术发展而来的组件技术以及基于组件技术的软件开发的工厂模式,有望解决以上的问题。 软件工厂是一个按照流水线的工作方式、遵循一定的生产质量规范,批量、高效地生产标准化的软件产品组件,并对其进行组装从而批量完成产品的机构。 组件的组装产生了软件工厂的概念。为了构造新应用程序,软件开发人员找出适当的组件,将这些组件加入到正生产中的应用程序,同时对应用程序进行测试并保证应用程序的组装工作按照预定的规划正常进行。软件开发人员所起的作用和车间流水线工人别无二至,只是开发软件的“流水线”上跑的是应用程序产品。 软件工厂的出现使得软件开发商可以通过可重复的开发过程快速生产出高效率、低成本、高质量的企业级软件。 到目前为止,“软件工厂”这一概念基本上还停留在“基于组装的人工软件工厂”阶段,也就是说,由软件开发人员人工组装软件组件来构造应用软件系统。在这一阶段,整体的软件开发效率还很大程度上依赖于软件开发人员的组装效率,软件开发并没有质的飞越。 1.3 企业级应用软件开发 近年来,企业级应用软件系统遇到了很大挑战。 首先,企业级应用软件系统所要处理的环境更为复杂,功能要更为全面、细致。现在经济全球化和竞争越来越激烈,社会中不稳定与干扰因素也处处可见、时时发生,这导致在研发企业的应用软件系统时,需要考虑的因素越来越多,也越来越难以控制。 其次,企业需求的变化越来越快。这是现在企业级应用软件系统研制过程中遇到的最大问题。由于竞争的残酷,企业的管理与业务经常变化,可能是今天刚制定了一套业务流程,明天就要推倒重来。这就意味着,企业级应用软件系统必须要能适应、且是快速适应企业需求的变化。 提升竞争力的最佳武器,它们最后,企业的要求越来越苛刻。由于IT系统越来越成为企业对系统的功能要求越来越高,不仅要处理日常的工作,还要具有分析、预测和决策等各种功能。只要能想到的,企业都希望IT系统帮它实现。另一方面,IT系统在企业的日常管理与业务中的地位越来越重要,它甚至已成为企业的关键业务系统。对于这样的系统,企业要求不能有丝毫的差错,不能有一刻的停顿,不能有任何的意外,否则的话它们会为此而遭受巨大损失。因此,企业对系统的快速交付性、安全性、可靠性、稳定性提出了极高的要求。 这样的复杂的企业级的应用软件开发不是仅仅靠软件组件的简单组装就可以完成的,而且也不是人工组装就能适应的。 “基于组装的人工软件工厂”开发模式在复杂的企业应用软件系统开发面前是束手无策的。 1.4 基于设计的全自动化软件工厂 软件业的发展再现了制造业的发展过程,软件业与制造业具有很大程度上的相似性。制造业提供硬件产品和服务,它的工序包括市场调查、产品定义、产品设计、产品加工;软件业提供软件产品和实施服务,同样需要经历业务调查、需求定义、软件设计、软件开发等。从本质、流程上说,软件业也是制造业,其发展的必然归宿是生产的自动化和装配的柔性化。 在很多人的直观印象中,汽车是工人在生产线上一个个零件组装起来的、高楼大厦是建筑工人一砖一瓦盖起来的,因此软件系统也应该是程序开发人员一个个组件组装起来的。这种印象其实是错误的,事实是,真正起关键作用的是汽车设计图纸、建筑设计图纸,因此软件系统应该是设计出来的。 理想的软件开发模式应该是“基于设计的全自动化的软件工厂”开发模式,在这种模式下,软件开发的主要工作是进行软件设计,应用软件系统由“全自动化的软件工厂”加工而成。 【KCOM 商业工程】软件工具平台真正实现了“基于设计的全自动化的软件工厂”开发模式,它提供诸多的设计工具用于软件设计,提供了【管理软件工厂】 用于将软件设计图加工成最终的、可交付的应用软件系统,而这一加工过程仅仅需要几十分钟的时间。 2 应用软件开发过程 在【KCOM 商业工程】软件工具平台上开发企业级应用软件系统的一般过程包括‘需求分析’、‘系统设计’、‘软件加工’、‘发布运行’。 2.1 需求分析 需求分析是企业级应用软件系统开发的前提。要开发一个企业级应用软件系统,首先需要对企业应用需求有详细的了解,然后进行仔细的分析。 2.2 系统设计 【KCOM 商业工程】软件工具平台提供了一系列的软件设计工具,包括:‘业务过程’、‘组织机构’、‘数据模型’等等。利用这些软件设计工具提供的功能,画出应用软件系统的设计图,完整地定义图形元素的属性及相互关系,最后将软件设计资料提交给【管理软件工厂】。有关各软件设计工具的功能和使用方法,请参考相应的篇章。 2.3 软件加工 在“基于组装的人工软件工厂”的应用开发模式下,这一环节是需要有软件编程人员通过组装组件、编写代码来完成的;而在“基于设计的全自动化软件工厂”的应用开发模式下,这一环节是通过【管理软件工厂】由软件工具自动组装、编程来完成的。这两种模式在开发效率上有量级上的差距。 【管理软件工厂】读入前一阶段的软件设计资料,通过一个类似高级语言编译器编译过程的加工过程,将软件设计资料自动转化为由KCOM组件代码来表达的应用软件系统。 2.4 发布运行 【管理软件工厂】加工而成的应用软件系统是可以直接运行的。在软件的实际运行过程中,经常会发现许多需求分析不充分、系统设计不合理的成份。在这种情况下,尽可以返回到需求分析、系统设计阶段,添加新的需求、完善原有设计,然后再次通过【管理软件工厂】进行加工。经过多次迭代开发,应用软件系统逐步完善,最终达到可以交付发布运行的状态。这样的往复迭代过程在“基于设计的全自动化软件工厂”的应用开发模式下是可以随时进行的;而在“基于组装的人工软件工厂”的应用开发模式下,任何形式的迭代都会是对项目进度、项目费用的巨大挑战。 3 管理软件工厂 【KCOM 商业工程】软件工具平台里提供了一个类似高级语言编译器的【管理软件工厂】,用于将应用系统设计图加工编译成可运行的组件代码。 由【KCOM 商业工程】开发的应用系统一般包含基础数据页面、单据页面、报表页面、数据分析页面、参数页面。有关报表页面和数据分析页面的设计开发,请参考【商业智能】篇。 3.1 软件加工 【管理软件工厂】的加工过程与高级语言的编译过程类似: , 装载工程文件。在【KCOM 商业工程】里打开工程文件,如“分销管理系统.BPJ”,装 载各设计图。 , 启动【管理软件工厂】。点击‘标准工具栏’上的‘管理软件工厂’按钮,启动【管 理软件工厂】。 , 按下‘加工’按钮,【管理软件工厂】就开始加工,最后输出可运行的应用软件系统。 , 在开始加工前,可以按下‘取消’按钮,关闭【管理软件工厂】,并生成一个空白的KCOM 组件。 , 开始加工后,‘取消’按钮变成‘停止’按钮。 , 在加工过程中,可以按下‘停止’按钮,中止加工过程,并输出包含已加工模块的程序 组件。 , 加工完成以后,将输出一个可运行的KCOM组件,保存以后,即可以浏览运行。 , ‘加工’和‘全部加工’按钮功能的差别类似于高级语言编译器的‘编译’和‘全部编 译’的差别。第一次加工时,【管理软件工厂】会加工全部的设计内容;当修改了某些 设计内容后,第二次加工时,将只需要加工已修改的部分,这样,第二次加工过程很快 就能完成。‘全部加工’与第一次‘加工’相同。 3.2 基础数据 基础数据页面提供基础资料的录入、修改、查询、删除等功能。在【KCOM 商业工程】里设计基础数据模块是非常简单的,只需要定义基础数据表,在设置一些属性,就可提交【管理软件工厂】加工成包含所有基本功能的基础数据页面。 通常情况下,每个企业应用软件都会包含一个由基础数据模块组成的‘模块组’,‘模块组’包含基础数据功能模块的入口按钮。要设计一个‘模块组’,只需要添加名为‘基础数据’的‘物理数据模型’,该模型内包含所有的基础数据表。 3.2.1 定义基础数据表 定义基础数据表和创建一般的数据库表没什么差别,具体的操作方法请参照【数据模型】篇。 3.2.1.1 添加表 在物理数据模型里添加表,修改表的名称为基础数据表的名称。 3.2.1.2 定义表的属性 , 在‘数目’框里输入数字,指定在生成测试数据时,该表的测试数据记录数。 , 定义打印方式。基础数据表页面提供打印功能,可以有三种打印输出方式:‘KCOM 商 业工程’、‘Microsoft Excel’、‘Microsoft Word’。 , 定义版面风格:‘水平风格’、‘垂直风格’,缺省风格是‘水平风格’。版面风格指的是 表的栏(字段)输入框在页面中的排版方式:‘水平排列’、‘垂直排列’。 水平风格 垂直风格 , 定义‘录入’、‘修改’、‘删除’属性,以决定是否该基础数据模块是否具有‘录入’、 ‘修改’、‘删除’功能。 , 选中‘显示’属性,这样在主页面上就会有相应的模块按钮入口。 3.2.1.3 添加栏(字段) 打开表的属性对话框,依次添加全部栏。 3.2.1.4 定义栏的属性 栏的属性包括‘一般属性’、‘检查约束’。 栏的‘一般属性’用来定义了有关栏的一些基本属性: , 选择定义栏(字段)的数据类型,包括长度和精度。 , 定义栏的高度和宽度。栏的高度和宽度决定了在基础数据页面中栏输入框的高度和宽 度。栏的宽度还决定了查询结果列表中列的宽度。如果没有定义高度,基础数据页面将 会采用缺省的高度;如果没有定义宽度,由数据类型的长度来决定宽度。数据类型的长 度表示该栏(字段)所占用的字节数,每个字节的在页面中所占用的缺省宽度是6个像 素,因此VA30所对应的宽度大致是30*6。要注意的是汉字占用2个字节,因此VA30 所对应的输入框大约能显示15个汉字。数据类型大致可以分为字符串类和数值类两大 类,属于字符串类的数据类型,通常都会指定长度;属于数值类的数据类型,通常都不 指定长度,在计算宽度时,一般按8个字节来算。 , 如果该栏(字段)是表的记录的唯一标识,那么选上‘主键’属性。 , 如果该表用于代码表,并且该该栏用于代码帮助的名称,那么选上‘主名’属性。‘主 名’栏和‘主键’栏一样必须是唯一的。 , 如果该栏的内容不能为空,那么选上‘非空’的属性。在基础数据录入页面提交数据时, 会检查栏的内容是否为空,如果内容为空,会弹出警告对话框,提示输入该栏的内容。 , 如果该栏的值是由其它字段计算而来的,并且选定的数据库系统支持计算字段,那么选 上‘计算’属性,并且在右边的表达式输入框中输入输入相应的计算表达式。具有‘计 算’属性的栏在基础数据录入页面中没有相应的输入框。 , 如果该栏的值是其它表的主键栏的值,那么选上‘外键’属性,并且在右边的‘外键表’ 中选择所对应的外键表的名称。 , 如果该栏要表示的是图像,那么选上‘图像’属性。 , 如果该栏要表示的是文件,那么选上‘文件’属性。 , 如果要在基础数据查询页面的查询结果中显示该栏的数据,那么选上‘结果’属性。 , 如果想按该栏查询表的记录,那么选上‘查询’属性。例如,要按‘商品名称’查询商 品的信息,那么只需设置栏‘商品名称’的‘查询’属性。基础数据页面有两种风格, 一种是带查询界面的风格,另一种是不带查询界面的风格。如果基础数据表的任何一栏 具有‘查询’属性,那么生成的基础数据页面页面就具有带查询界面的风格,否则生成 的基础数据页面页面就具有不带查询界面的风格。 栏的‘检查约束’用来定义了有关栏的一些约束属性: , 如果栏的取值有所限制,那么可以设置栏的‘最大值’、‘最小值’、‘缺省值’。属性‘最 大值’、‘最小值’作用在具有数值类型的栏上,属性‘缺省值’则对栏的数据类型没有 要求。定义了‘最大值’、‘最小值’后,在基础数据录入页面编辑该栏时,会检查输入 的内容,确保输入的数值落在指定的范围内。定义了‘缺省值’的栏,在装载基础数据 录入页面时,会自动在栏的输入框上填上已定义的缺省值。 , 如果要在基础数据录入页面上显示栏的单位,那么设置‘单位’属性。 , 如果要限制基础数据录入页面上栏编辑框内只能输入大写的字符,那么选上‘大写’属 性。 , 如果要限制基础数据录入页面上栏编辑框内只能输入小写的字符,那么选上‘小写’属 性。 , 如果要限制基础数据录入页面上栏编辑框只能显示,不能录入,那么选上‘只读’属性。 , 基础数据录入页面上栏编辑框有‘可操作’、‘不可操作’两种状态,在‘不可操作’的 状态下,栏编辑框不能编辑,并且不相应鼠标、键盘等事件。这两种状态通过‘可操作’ 属性来决定。 , 数据类型为‘日期型’的栏,可以通过‘格式’属性指定日期的输出格式。 , 如果栏的值只能在某几个值中选择一个,那么需要添加这些可选值。定义了可选值的栏, 在基础数据录入页面上显示为一个下拉列表,下拉列表列出已定义的可选值。 3.2.1.5 表元素解读 从表的图形元素上可以快速、直观地解读出有关表的许多信息: , 表的图形元素的上方显示的是表的名称。 , 表的图形元素的下方显示的是表的键名称。 , 表的图形元素的中间显示的是表栏的信息。 , ‘商品名称’表示表栏的名称。 , ‘VA30’表示表栏的类型及长度,意思是类型为文本,长度为30。又如:‘N5,2’表示 类型为数字,长度为5,精度为2。 , 尖括号内表示的是表栏的一些属性,其中的对应关系如下: 标记 含义 pk 主键 pn 主名 fk 外键 qr 查询 rs 结果 cp 计算 pt 路径 id 标识 ac 关联 3.2.2 自动生成基础数据页面 商品’的这样的页定义完基础数据表,就可以通过【管理软件工厂】自动生成具有‘页面_面名称的基础数据页面。 查询界面 录入界面 不带查询界面的基础数据页面 3.3 业务单据 企业的日常业务基本上都是在业务单据上进行的,因此业务单据设计是系统设计中最重要并且也是最复杂的。 3.3.1 定义单据表 单据表一般由一个主表和一到多个明细子表组成。定义单据表和创建一般的数据库表没什么差别,具体的操作方法请参照【数据模型】篇。 3.3.1.1 添加表 假定我们现在要设计一张收货单据,那么可以创建‘收货单’作为单据主表,创建‘收货单明细’作为明细子表。 3.3.1.2 定义表的属性 单据主表 业务单据的属性主要取决于单据主表的属性。 , 指定相关联的业务过程‘收货单’。 , 定义版面风格:‘水平风格’、‘垂直风格’,缺省风格是‘水平风格’。版面风格指的是 表的栏(字段)输入框在页面中的排版方式:‘水平排列’、‘垂直排列’。 , 定义是否使用网格显示明细子表。 , 定义单据打印方式:‘KCOM 商业工程’、‘Microsoft Excel’、‘Microsoft Word’。 , 选中‘显示’属性,这样在主页面上就会有相应的模块按钮入口。 单据子表 , 单据子表的‘显示’属性必须设为‘否’,意思是单据子表的输入是依赖于单据主表, 在主页面上没有单独的入口。 3.3.1.3 添加栏 , 用于业务单据的单据主表必须包含一个名称为‘过程号’的栏。 , 单据子表必须包含一个指向主表的外键栏。 , 添加其它栏的方法和添加基础数据栏相同。 3.3.1.4 定义栏的属性 , 单据主表的‘过程号’必须是主键,并且数据类型必须是长整型。 , 有关栏的其它属性的用法请参考‘基础数据栏’的属性定义。 3.3.2 定义业务单据节点 与定义基础数据页面不同的是,定义业务单据页面除了要定义单据表以外,还需要定义业务过程节点。每个业务单据与一个业务过程的人工业务节点对应。 3.3.2.1 添加业务过程 每个业务单据都是属于某个业务过程的一个环节。要创建业务单据,首先要定义业务过程。比如要创建一个名为‘收货单’的业务单据,就要先创建‘收货过程’,尽管该过程只包含‘收货单’这一个业务节点。当然,业务过程往往是复杂的。 收货过程 , 定义业务过程属性。 , 定义开始节点属性。在开始节点的属性里定义启动该业务过程的类型。 , 定义过程变量。过程变量是一种全局变量,它在过程实例的全生命期中存在,用以在各 业务节点之间传递信息。过程变量在业务过程的属性对话框中定义,在业务规则、过程 规则、流向条件中被引用。过程变量常用于条件表达式,以决定过程的流转。 业务过程与单据主表是相关联的,这种关联在单据主表的属性中定义。 3.3.2.2 添加业务节点 之前我们已经创建了一个名为‘收货单’的单据主表,现在我们还需要在‘收货过程’中添 加一个与单据主表同名的业务节点。在业务节点的属性对话框中,我们可以定义有关业务单据的业务栏、业务变量、业务规则等等。 业务单据节点名称需要与单据主表名称相同,那是因为需要根据名称来关联业务节点和单据主表。 3.3.2.3 定义业务节点一般属性 业务节点一般属性包括节点的名称、执行者、执行方式、完成时间等等。 , 指明业务节点名称,该名称必须与单据主表的名称相同。 , 设置‘执行者’属性,指定谁来操作该业务单据。 , 设置‘完成时间’、‘延长时间’属性,指明该业务单据的存在期限。比如,设置‘完成 时间’的值为1,‘延长时间’的值为7,意思就是该业务单据需要在1天内完成,超过 1天的期限,该业务单据就是过期了,再过7天时间,如果该业务单据仍未提交,那么 系统会自动删除该业务单据。 , 在一些情况下,多个用户可以操作同一个业务单据,这时,‘任务执行方式’就决定了 是否允许多个用户同时打开业务单据,也就是是否能‘独占’业务单据。一旦设置了‘独 占’属性,那么当第一个用户正在填写该业务单据时,其它用户就不能打开该业务单据。 3.3.2.4 定义业务栏 单据表的栏并不是都能显示在业务单据页面上的。业务单据页面上显示的内容是在业务节点的‘业务定义’中指定的。 , 在‘业务定义’对话框中首先要指明与业务节点相关联的物理数据模型和单据表。 , 单据表的栏以列表的形式显示在‘表栏’中,单据明细子表也作为特殊的栏列在‘表栏’ 中。 , 从‘表栏’中选择栏分别添加到‘查看栏’或‘录入栏’中,以定义哪些栏在业务单据 页面中只能被查看以及哪些栏能编辑。剩下的栏不会出现在业务单据页面上。 , 定义为‘查看栏’或‘录入栏’的表栏,统称为‘业务栏’。如果明细子表也被定义为 ‘查看栏’或‘录入栏’,那么在‘业务栏’列出的是明细子表栏,如:‘收货单明细. 商品’。 3.3.2.5 定义业务变量 业务变量是一种全局变量,它在业务单据节点的全生命期中存在。在填写一张业务单据时,经常不能一次就能填写完毕并提交业务,而希望下次继续填写,这种情况下,就需要用业务变量来保存一些中间信息,以便下次操作该业务单据时不必重新填写。 3.3.3 业务规则 ‘业务规则’是【KCOM 商业工程】的核心组成部分之一,也是最复杂的。 在填写业务单据时,填写某些业务栏往往会影响到其它业务栏。例如,在‘销售单明细子表’中输入‘数量’和‘实售价’,‘实售金额’会被自动计算并显示出来。 在提交一张业务单据时,通常都需要进行一些后台处理。例如,提交一张‘销售单’的同时,将会改变库存数量、记录商品流水帐。 在传统的RAD开发环境里,以上这些过程是通过响应事件、在事件函数里书写处理代码来实现的。在由【管理软件工厂】生成的程序组件中,也是采用RAD的方式。实现一个完整的企业应用系统,需要大量的事件和事件处理代码,这些代码和其它代码混杂在一起,书写、阅读、修改非常麻烦。 【KCOM 商业工程】将业务处理归纳成‘业务规则’,并提供简便、直观的业务规则定义工具用于描述‘业务规则’。【管理软件工厂】自动将‘业务规则’解释组装成相应的事件和代码。 每一条业务规则都表述为:当某个事件发生时,如果满足某种条件,那么执行处理操作。 ‘业务规则’在业务过程节点的属性对话框里定义。 在【KCOM 商业工程】里,有三种业务规则:作用在业务栏上的‘业务栏规则’、作用在业务变量上的‘业务变量规则’、作用在业务单据上的‘业务规则’。 3.3.3.1 业务栏规则 对每个业务栏(可录入),可以定义相应的‘业务栏规则’。每个业务栏在内容改变、内容提交、开始编辑、结束编辑时,都可能会有一些后台操作要处理,业务栏规则表示当这些事件发生时,如果满足一定的条件,那么就做相应的处理。 3.3.3.2 业务变量规则 对每个业务变量,可以定义相应的‘业务变量规则’。每个业务变量在内容改变时,可能会有一些后台操作要处理,业务变量规则表示当这些事件发生时,如果满足一定的条件,那么就做相应的处理。 3.3.3.3 业务规则 每个业务在开始、激活、结束时,都可能会有一些后台操作要处理,业务规则表示当这些事件发生时,如果满足一定的条件,那么就做相应的处理。 3.3.3.4 定义业务规则 定义业务规则的过程是选择事件、书写条件表达式、书写规则处理表达式。 3.3.3.4.1 选择事件 在规则定义对话框中,事件是以下拉列表形式提供选择的。 ‘业务变量规则’只有一个事件:‘内容改变’。该事件在业务变量内容改变时触发。 ‘业务栏规则’有四个事件: , ‘内容改变’。该事件在业务栏内容改变时触发。如果该业务栏的内容影响到其它业务 栏,那么可以响应该事件。 , ‘内容提交’。该事件在业务栏内容提交时触发。如果在提交业务之前,要校验业务栏 的内容,那么可以响应该事件。 , ‘开始编辑’。该事件在开始编辑业务栏内容时触发。如果在编辑该业务栏之前需要准 备相关的数据,那么可以相应该事件。 , ‘结束编辑’。该事件在结束业务栏内容编辑时触发。如果该业务栏的内容影响到其它 业务栏,那么可以响应该事件。 ‘业务规则’有三个事件: , ‘业务开始’。该事件在第一次进入业务单据时触发。可以响应该事件初始化业务单据。 , ‘业务激活’。该事件在每次进入业务单据时触发。可以响应该事件将业务单据恢复到 上次退出的状态。 , ‘业务结束’。该事件在业务提交时触发。可以响应该事件进行后台业务处理。 3.3.3.4.2 书写条件表达式 业务规则的条件表达式采用【KCOM Basic】的语法,因此,在表达式中可以使用【KCOM Basic】的运算符、函数。有关【KCOM Basic】的运算符、函数的说明请参照【KCOM Basic】参考手册。 业务规则的条件表达式可以包含参数,可用的参数可以是:系统参数、过程变量、业务变量、业务栏等。例如: UCase([销售单明细.订单号])=="TJ" 参数由前后两个方括号标识。上面的条件表达式包含一个业务栏参数:[销售单明细.订单号]。 在计算业务规则条件表达式的值时,表达式中的参数会替换成真实的值,然后参与表达式计算。 3.3.3.4.3 书写规则处理表达式 三种形式的业务规则处理表达式都可以包含参数。在这里,既可以取参数的值,也可以设置参数的值。可用的参数可以是:系统参数、过程变量、业务变量、业务栏等。参数由前后两个方括号标识。 上面的赋值语句中,包含两个业务栏参数:[单据号]、[过程号]。参数[单据号]用来设置业务栏‘单据号’的值;参数[过程号]用来取业务栏‘过程号’的值。运行时,首先将参数[过程号]替换成真实的值,计算出赋值号右边表达式的值,然后将值赋给业务栏‘单据号’。 上面的SQL语句中,也包含业务栏参数:[过程号]。参数[过程号]用来取业务栏‘过程号’的值。运行时,首先会将参数[过程号]替换成真实的值,然后将替换后的新的SQL语句提交后台数据库系统执行。 在SQL语句中也可以为业务栏赋值。例如: 务栏规则中。 定义了‘业务规则’以后,【管理软件工厂】将会自动生成响应事件的规则处理代码。因此,【KCOM 商业工程】的用户并不需要关心应用系统如何实现业务规则,只需要关心业务规则本身。 3.3.4 单据流转 企业的日常业务由业务单据来完成,在不同的业务单据之间往往有信息需要从一个单据转到下一个单据。 例如,下面是‘分销管理系统’的发货过程: ‘发货单’提交以后,会触发一个收货过程并产生一张‘收货单’。在‘发货单’和‘收货单’之间有业务信息关联:‘收货单’的商品信息来自于‘发货单’的商品信息,等等。为了避免在‘收货单’重复输入,减少操作时间,我们希望将‘发货单’的商品信息自动流转到‘收货单’。 在【KCOM 商业工程】里定义单据流转是很简单的,方法如下: , 双击‘发货单’和‘收货单’之间的‘流向’,弹出‘流向属性对话框’。 , 在‘流向属性对话框’中定义‘业务关系’ ‘业务关系’用于定义‘流向’前后两个业务节点之间的数据流转。‘源业务栏’包括源业务节点的系统参数、业务变量、业务栏。‘目标业务栏’包括目标业务节点的业务变量、业务栏。 定义业务关系的方法如下: , 在业务关系列表上选择‘目标业务栏’。 , 在‘表达式’输入框里编辑关系表达式。 , 输入‘表达式’的同时业务关系列表也同步更新。 定义了‘业务关系’以后,【管理软件工厂】将会自动生成包含相关处理代码的程序组件。因此,【KCOM 商业工程】的用户并不需要关心应用系统如何实现单据流转。 3.3.5 自动生成业务单据页面 在所有有关业务单据的设计完成以后,就可以通过【管理软件工厂】自动生成具有‘收货过 程_收货单’的这样的页面名称的业务单据页面。 单据页面有两种风格:‘列表风格’、‘网格风格’,取决于单据主表的属性定义。 网格风格 列表风格 【管理软件工厂】除了生成单据录入页面以外,还自动生成单据查询页面。 3.4 系统参数 应用系统往往需要设置‘系统参数’来适应不同的应用情况。比如,根据最终用户是否配备打印机,可以设定系统参数‘是否打印’。系统参数的值将会影响到业务单据的功能。 3.4.1 定义系统参数表 系统参数用‘系统参数表’来表达与存储。要定义系统参数,只需要创建‘系统参数表’,而各系统参数则定义为表的栏。 ‘系统参数表’的创建是很简单的: , 添加一个表元素。 , 选中表的属性‘系统参数’。 , 定义参数栏。参数栏的添加方法和基础数据栏的添加方法相同。 用系统参数 3.4.2 使 系统参数主要应用在业务单据里。在定义业务单据的业务规则时,可以读取系统参数的值,但不能改变系统参数的值。系统参数的值是在专门的系统参数页面中设定的,并保存在数据库中。 3.4.3 自动生成系统参数页面 定义完系统参数表以后,就可以通过【管理软件工厂】自动生成具有‘页面_系统参数’的这样的页面名称的系统参数页面。 3.5 辅助功能 3.5.1 代码帮助 ‘代码帮助’是一种输入辅助工具,用于快速、准确地从它所提供的代码列表中选取要输入的内容。‘代码帮助’的内容列表由代码和名称组成,称为‘代码表’。‘代码表’主要分为两种,一种是静态的,另一种是动态的。‘静态代码表’的内容来自于数据库表的记录,‘动态代码表’的内容来自于数据库查询结果。 3.5.1.1 定义静态代码表 基础数据表往往也是静态代码表。基础数据表要成为静态代码表,必须具有主键栏和主名栏。主键栏用于代码表的代码,主名栏用于代码表的名称。 代码表 3.5.1.2 定义分类静态 ‘静态代码表’还可以是分类的,称为‘分类静态代码表’,意思是代码表的内容可以按类别划分。例如,‘商品规格’可以按‘商品小类’来划分。 定义分类代码表的步骤如下: , 在‘静态代码表’中定义具有‘路径’属性的栏,例如,‘商品规格’表中,‘商品小类’ 就具有‘路径’的属性。 , 在业务规则中指定代码表类别。例如,在编辑‘收货单明细’时,输入‘商品’信息后, 我们希望‘规格’的代码表的内容仅限于与所输入的商品具有相同小类的规格,那么我 们可以定义一个业务栏规则,该规则在开始编辑‘规格’时触发,其内容是: 商品] 上面的查询语句用来查询‘商品’所属的‘小类’,查询结果会暂存在程序变量中,并 且在弹出‘商品规格’的‘代码帮助’时用来对‘代码表’进行过滤,使得‘代码帮助’ 中只显示相关小类的‘商品规格’。 3.5.1.3 使用静态代码表 指向静态代码表的外键栏所对应的录入页面的编辑框,都能在按下Enter键或者鼠标双击下弹出代码帮助。例如,收货单明细的‘商品’就是指向静态代码表‘商品’的外键栏,‘代码帮助’就用于在几万种商品中快速选中所要输入的商品。 3.5.1.4 定义动态代码表 动态代码表的定义较为复杂。 , 首先,定义外键栏的‘动态代码表’属性。例如要定义收货单明细的‘商品’使用动态 代码表,要在‘商品’栏的属性对话框中选中‘动态代码表’属性。 , 其次,在业务规则中定义查询语句。例如,下面就是‘商品’的动态代码表查询语句: 其中,‘[代码表.商品.代码]’和‘[代码表.商品.名称]’分别用于指明动态代码表的代码和名称。 3.5.1.5 使用动态代码表 动态代码表主要用来缩小‘代码帮助’的列表内容的数目,以更快、更准确地选择输入。例如,在输入‘销售单’的‘商品’信息时,只需要从当前库存里有的商品中而不是从全部商 品中选择输入,这种情况下就可以使用动态代码表。 动态代码表的查询语句在满足业务规则条件时触发,例如,上一节的查询语句在输入‘帐目’后触发查询,查询结果会象静态代码表一样存放在本地的文件中。 当编辑收货单明细的‘商品’时,按下Enter键,就会弹出包含动态代码表查询结果的‘代码帮助’;鼠标双击‘商品’输入框,弹出的是包含静态代码表的‘代码帮助’。 3.5.2 查询树 数据条目的显示往往通过列表来显示,在数据条目很多的情况下,会显得有点杂乱无章,因此提供一个类似Windows的资源管理器的‘查询树’就显得很必要了。 3.5.2.1 定义查询树 ‘查询树’可以在基础数据表中定义,也可以在视图中定义。 3.5.2.1.1 在基础数据表中定义 在基础数据表中定义‘查询树’,只需要将表的某些栏定义为‘路径’,那么当查询该基础数据表时,在基础数据查询页面中就会有‘查询树’来辅助分类查询。 例如,我们定义了‘商品’这一基础数据表,当‘商品’的信息有几千、几万条时,就会不便于浏览。我们知道,‘商品’有‘品牌’、‘大类’、‘小类’等属性,因此,我们希望能按‘品牌’、‘大类’、‘小类’浏览‘商品’信息,这时候就可以使用‘查询树’。要定义‘商品’的‘查询树’,只需要设置表栏‘品牌’、‘大类’、‘小类’的‘路径’属性。 3.5.2.1.2 在视图中定义 当‘视图’用于‘输入选择对话框’时,对话框中的查询结果列表往往也需要用‘查询树’来辅助分类查询。定义视图的‘查询树’和定义‘基础数据表’的‘查询树’类似,只需要设置一些视图栏的‘路径’属性。例如,用于‘输入选择对话框’的视图‘发货单明细视图’中的‘品牌’、‘大类’、‘小类’就具有‘路径’属性。 3.5.2.2 使用查询树 定义了‘路径’属性的基础数据查询页面上都有‘查询树’。 上图左边就是‘查询’树,使用方法很象Windows的资源管理器:在‘查询树’中选择某一项,如‘针织内衣’,在右边的列表中就会显示具有‘雅戈尔’品牌、‘针织T恤’大类、‘针织内衣’小类的全部商品。 3.5.3 输入选择对话框 ‘输入选择对话框’用来查询并批量添加明细条目。例如,填写发货单时,需要从当前库存中查询并选择要发出的商品。 3.5.3.1 定义输入选择对话框 输入选择对话框的定义步骤如下: , 定义查询视图。创建查询视图的方法与一般的视图创建方法相同。 , 设置单据明细子表的‘视图’属性。 需要注意的是: , 查询视图的‘显示’属性的值必须设为‘否’,这是因为查询视图在主页面中并不需要 有单独的入口按钮。 , 查询视图的栏的名称必须与单据明细子表的栏的名称对应 3.5.3.2 使用输入选择对话框 定义了明细子表查询视图的业务单据录入页面,都可以弹出‘输入选择对话框’。 在‘输入选择对话框’中选择好条目后,关闭对话框,所选的内容就会按照查询视图栏和明 细子表栏的对应关系添加到明细子表中。 3.6 权限 权限是指用户对应用系统的访问、操作、监控的权力。 用户的权限来源于用户所属的角色的权限。 3.6.1 访问功能模块的权限 对功能模块,可以设置‘查看’、‘更改’两种权限。 在角色的属性对话框中可以定义角色访问功能模块的权限。 3.6.2 访问业务单据的权限 业务单据录入页面的编辑权限是由业务节点的‘执行者’属性决定的。 当某一角色成为业务单据的执行者时,该角色的用户就具有业务单据的编辑权限。 业务单据查询页面的查询权限在角色的属性对话框中定义,方法与定义功能模块权限相同。 3.6.3 监控业务过程的权限 , 要在浏览器端监控业务过程,前提是工程的‘过程监控’属性值为‘真’。 设置工程的‘过程监控’属性的方法是:点击‘标准工具栏’上的‘商业工程属性’按钮,弹出属性对话框,选中‘过程监控’属性。 , 要在浏览器端监控业务过程,还需要定义哪些业务过程可监控,方法是设置业务过程的 模型属性‘可查看业务过程’值为‘真’。 , 要在浏览器端监控业务过程,最后还需要指明那些角色具有监控权限。 属性‘启动者可加控’决定了该业务过程的启动者是否具有监控该业务过程的权限。 3.6.4 系统管理员 ‘系统管理员’具有对应用系统的最大权限。 , 定义了‘系统管理员’属性的角色,不必定义数据权限,就能访问所有的功能模块。 , ‘系统管理员’可以完全监控业务过程,如:‘暂停过程’、‘终止过程’、‘删除过程’ 等。 ‘系统管理员’在角色的‘一般属性对话框’中定义。
|