基于Extjs的web表单设计器 第七节——取数公式设计之取数公式的使用
2015-05-03 23:27
253 查看
基于Extjs的web表单设计器
基于Extjs的web表单设计器 第一节
基于Extjs的web表单设计器 第二节——表单控件设计
基于Extjs的web表单设计器 第三节——控件拖放
基于Extjs的web表单设计器 第四节——控件拖放
基于Extjs的web表单设计器 第五节——数据库设计
基于Extjs的web表单设计器 第六节——界面框架设计
基于Extjs的web表单设计器 第七节——取数公式设计之取数公式定义
基于Extjs的web表单设计器 第七节——取数公式设计之取数公式的使用
基于Extjs的web表单设计器 第八节——表单引擎设计
在上一节中给大家介绍了如何定义一套取数公式,以及取数公式的参数设计。有了这些知识基础,我们本节主要介绍取数公式的使用。
一个具体业务范畴的系统中,我们首先会根据业务知识的积累,定义出业务范围之内通用的取数公式。比如单据的日期、单据编号、制单人、制单部门、部门职员、职员职责等等信息。这些取数方法基本上每个业务单据都会涉及到。当我们抽象并定义出了这些取数公式之后,后面在表单设计器中设计业务单据的时候直接使用它们就行了。
首先我们定义一个取数公式的实体类型:
取数公式数据源接口
那么至此我们准备好了取数公式的数据源,剩下的事儿就是在表单设计器中根据不同类型的控件来选择这些不同的取数公式并设定相关的公式参数。文不如图,那么就直接上图,下面图二是表单设计器中我们对两类不同类型控件的取数公式界面的截图展示。一个是金额控件,一个是下拉树控件,请大家对比其中的一些区别地方。
![](http://images.cnitblog.com/blog2015/266444/201505/032142375211948.png)
图二
区别有三:
1.下拉树控件的取数公式的类型比金额控件多了一个选项“资源取数”;
2.下拉树控件的取数公式选择类型为“资源取数”后,设置的界面多了一个“设置取值范围”的功能,见上图;
3.两种控件的公式取数,取数公式内容不一样;(PS:上图是看不出来的,不用找了)
这里对这三个区别一一做出解释:
1.下拉树控件的取数方法多了一个资源取数,这儿请大家联想我们在上一节中介绍的知识去理解。因为下拉树的数据源就是我们系统中的资源类型,这里的资源取数其实就是对应我们在上一节中介绍的静态资源。我们可以为下拉树控件直接设定它的数据源是某种静态的资源,而不需要根据其他参数进行组合筛选,因此这里的资源取数是必要的的。
2.因为有了上面的1的存在,因此2 的存在也是必要的。既然我们可以为下拉树控件设置静态的资源,那么我们就可以设定一个静态的资源作为下拉树控件的默认值。有些同学可能会问,难道根据公式取数的动态资源就不能设定默认值么???答案是可以设定的,但是设定了是没有意义的,既然没有意义,那么就不需提供这个功能!!!为什么没有意义?我的解释是——既然是公式取数,那么公式就是在运行时解析的一个东西,我们事先是不能明确该公式的参数值的,既然参数值都不能确定,那么结果值就更不能确定了,也许结果集里面根本就不包含这个默认值,那么你设置一个默认值还有意义么?所以公式取数我们是没有默认值范围的。
3.在上一节中已经介绍了,每个取数公式都有一个支持的控件的类型,不同类型的控件能够使用的取数公式也自然是不一样的。因此我们在表单设计器中使用的时候肯定会根据选择的控件类型不同来对取数公式的数据源进行过滤,只提供该类型控件能够使用的取数公式列表即可。
下面我们来通过一个例子介绍一下取数公式在表单设计器中的使用。比如有一个叫取数公式“部门下的职员”——意思就是根据选择的部门key来动态获取该部门下的所有职员的列表。那么在我们的表单模板设计中,比如有两个控件:一个是“借款部门”,另一个是“借款人” 如图三所示。
![](http://images.cnitblog.com/blog2015/266444/201505/032239484119023.jpg)
图三
然后借款人就需要根据“部门下的职员”这个取数公式来动态的传入“借款部门”这个控件所选取的值作为参数来获取该部门下的职员列表。那么我们在设置借款人这个控件的取数公式的时候就需要选择公式列表中的“部门下的职员”这个公式。然后设定它的公式参数“部门”的值为"借款部门"这个控件。这里我们也提供了两种特殊的取数公式“摘要生成”和“公式计算”的使用截图,如图四所示。请大家注意图四中几幅图的区别和联系。
![](http://images.cnitblog.com/blog2015/266444/201505/032245201937162.jpg)
![](http://images.cnitblog.com/blog2015/266444/201505/032301439436287.jpg)
![](http://images.cnitblog.com/blog2015/266444/201505/032301514116240.jpg)
图四
然后设置好这些属性之后,我们点击控件属性面板的“确定”按钮表单设计器就会自动的为控件生成一个取数公式的JSON对象,并且会去校验取数公式设置的正确与否,如果正确就存放到控件的Formula属性中去,最后保存表单模板的就会直接存入数据库中。至此,我们介绍了取数公式在表单设计器中的使用,到这里我们表单设计器这个部分的主要功能和设计都已经作了介绍。余下的就是另一个重要的组成部分——表单引擎的介绍了。表单引擎主要负责了我们表单模板的加载、控件层级关系嵌套及渲染,控件各个属性的生成及应用,控件取数公式的生成及解析,控件联动关系的生成及解析,权限值的控制及应用等等核心内容。这些内容我们会在后面的章节娓娓道来,请看下一节“基于Extjs的web表单设计器 第八节——表单引擎设计 “。
基于Extjs的web表单设计器 第一节
基于Extjs的web表单设计器 第二节——表单控件设计
基于Extjs的web表单设计器 第三节——控件拖放
基于Extjs的web表单设计器 第四节——控件拖放
基于Extjs的web表单设计器 第五节——数据库设计
基于Extjs的web表单设计器 第六节——界面框架设计
基于Extjs的web表单设计器 第七节——取数公式设计之取数公式定义
基于Extjs的web表单设计器 第七节——取数公式设计之取数公式的使用
基于Extjs的web表单设计器 第八节——表单引擎设计
在上一节中给大家介绍了如何定义一套取数公式,以及取数公式的参数设计。有了这些知识基础,我们本节主要介绍取数公式的使用。
一个具体业务范畴的系统中,我们首先会根据业务知识的积累,定义出业务范围之内通用的取数公式。比如单据的日期、单据编号、制单人、制单部门、部门职员、职员职责等等信息。这些取数方法基本上每个业务单据都会涉及到。当我们抽象并定义出了这些取数公式之后,后面在表单设计器中设计业务单据的时候直接使用它们就行了。
首先我们定义一个取数公式的实体类型:
public IEnumerable<Formula> GetFormulaList() { XElement xRoot = XElement.Load(path); foreach (var xel in xRoot.Elements()) { var url = xel.Attribute("Url"); var controlType = xel.Attribute("ControlType"); var resourceTypeId = xel.Attribute("ResourceTypeID"); Dictionary<string, string> dict = null; if (xel.HasElements) { dict = new Dictionary<string, string>(); foreach (var p in xel.Element("Parameters").Elements()) { var pName = p.Attribute("Name"); var name = pName == null ? null : pName.Value; dict.Add(p.Value, name); } } yield return new Formula { Name = xel.Attribute("Name").Value, Url = url == null ? null : url.Value, ControlType = controlType == null ? null : controlType.Value, ResourceTypeID = resourceTypeId == null ? null : resourceTypeId.Value, Parameters = dict }; } }
取数公式数据源接口
那么至此我们准备好了取数公式的数据源,剩下的事儿就是在表单设计器中根据不同类型的控件来选择这些不同的取数公式并设定相关的公式参数。文不如图,那么就直接上图,下面图二是表单设计器中我们对两类不同类型控件的取数公式界面的截图展示。一个是金额控件,一个是下拉树控件,请大家对比其中的一些区别地方。
![](http://images.cnitblog.com/blog2015/266444/201505/032142375211948.png)
图二
区别有三:
1.下拉树控件的取数公式的类型比金额控件多了一个选项“资源取数”;
2.下拉树控件的取数公式选择类型为“资源取数”后,设置的界面多了一个“设置取值范围”的功能,见上图;
3.两种控件的公式取数,取数公式内容不一样;(PS:上图是看不出来的,不用找了)
这里对这三个区别一一做出解释:
1.下拉树控件的取数方法多了一个资源取数,这儿请大家联想我们在上一节中介绍的知识去理解。因为下拉树的数据源就是我们系统中的资源类型,这里的资源取数其实就是对应我们在上一节中介绍的静态资源。我们可以为下拉树控件直接设定它的数据源是某种静态的资源,而不需要根据其他参数进行组合筛选,因此这里的资源取数是必要的的。
2.因为有了上面的1的存在,因此2 的存在也是必要的。既然我们可以为下拉树控件设置静态的资源,那么我们就可以设定一个静态的资源作为下拉树控件的默认值。有些同学可能会问,难道根据公式取数的动态资源就不能设定默认值么???答案是可以设定的,但是设定了是没有意义的,既然没有意义,那么就不需提供这个功能!!!为什么没有意义?我的解释是——既然是公式取数,那么公式就是在运行时解析的一个东西,我们事先是不能明确该公式的参数值的,既然参数值都不能确定,那么结果值就更不能确定了,也许结果集里面根本就不包含这个默认值,那么你设置一个默认值还有意义么?所以公式取数我们是没有默认值范围的。
3.在上一节中已经介绍了,每个取数公式都有一个支持的控件的类型,不同类型的控件能够使用的取数公式也自然是不一样的。因此我们在表单设计器中使用的时候肯定会根据选择的控件类型不同来对取数公式的数据源进行过滤,只提供该类型控件能够使用的取数公式列表即可。
下面我们来通过一个例子介绍一下取数公式在表单设计器中的使用。比如有一个叫取数公式“部门下的职员”——意思就是根据选择的部门key来动态获取该部门下的所有职员的列表。那么在我们的表单模板设计中,比如有两个控件:一个是“借款部门”,另一个是“借款人” 如图三所示。
![](http://images.cnitblog.com/blog2015/266444/201505/032239484119023.jpg)
图三
然后借款人就需要根据“部门下的职员”这个取数公式来动态的传入“借款部门”这个控件所选取的值作为参数来获取该部门下的职员列表。那么我们在设置借款人这个控件的取数公式的时候就需要选择公式列表中的“部门下的职员”这个公式。然后设定它的公式参数“部门”的值为"借款部门"这个控件。这里我们也提供了两种特殊的取数公式“摘要生成”和“公式计算”的使用截图,如图四所示。请大家注意图四中几幅图的区别和联系。
![](http://images.cnitblog.com/blog2015/266444/201505/032245201937162.jpg)
![](http://images.cnitblog.com/blog2015/266444/201505/032301439436287.jpg)
![](http://images.cnitblog.com/blog2015/266444/201505/032301514116240.jpg)
图四
然后设置好这些属性之后,我们点击控件属性面板的“确定”按钮表单设计器就会自动的为控件生成一个取数公式的JSON对象,并且会去校验取数公式设置的正确与否,如果正确就存放到控件的Formula属性中去,最后保存表单模板的就会直接存入数据库中。至此,我们介绍了取数公式在表单设计器中的使用,到这里我们表单设计器这个部分的主要功能和设计都已经作了介绍。余下的就是另一个重要的组成部分——表单引擎的介绍了。表单引擎主要负责了我们表单模板的加载、控件层级关系嵌套及渲染,控件各个属性的生成及应用,控件取数公式的生成及解析,控件联动关系的生成及解析,权限值的控制及应用等等核心内容。这些内容我们会在后面的章节娓娓道来,请看下一节“基于Extjs的web表单设计器 第八节——表单引擎设计 “。
相关文章推荐
- 基于Extjs的web表单设计器 第七节——取数公式设计之取数公式定义
- 基于Extjs的web表单设计器 第二节——表单控件设计
- 基于Extjs的web表单设计器 第五节——数据库设计
- 基于Extjs的web表单设计器 第六节——界面框架设计
- 使用ExtJs开发MIS系统(1):基于ExtJs的MIS构架设计
- 使用ExtJs开发MIS系统(1):基于ExtJs的MIS构架设计
- 使用模型驱动开发和基于模式的工程来设计 SOA之第 4 部分
- [ZT]如何使用Erwin进行基于MYSQL的数据库设计
- 基于wpf的相关设计问题-Command的使用
- 基于wpf的相关设计问题-Command的使用
- 使用Flex进行基于模板的应用程序设计
- 基于CSS的DIV网页设计 - 使用固定层方法设计网页
- 使用Python语言设计基于HTML的C语言语法加亮显示程序
- 基于Extjs的相册系统设计
- 使用Biztalk Server实现基于消息的状态机设计模式
- 基于STM32 8通道ADC采样实现源代码(转) 以后设计参考使用
- 基于WG2005的PCB设计-DxDesigner使用指南(一)
- 基于WG2005的PCB设计-DxDesigner使用指南(二)
- 基于EXTJS与VML的web流程设计器(Activit BPM20规范)
- extjs使用gridPanel演示基于asp.net使用json传送数据