虚拟字段是什么呢?
先来看几个例子。
1、假设客户名包括“中文名”和“英文名”,那么就可能存在这样的需求:
导出时需要在同一个单元格中显示“张三三(Tom Zhang)”这样的格式,也许你觉得显示成2个单元格也是可以的,但是有些客户需求就一定要显示在一次;
打印时也有同样的需求,如果是普通的打印我们可以通过“标签+E6脚本”把这两个字段拼接起来打印,这问题不大。单如果是打印成表格呢?问题就和前面这一条一样;
2、假设表单中有2个字段:“总金额”,“已付金额”,那么现在需要在查询列表中显示“未付金额”,以及可能需要按未付金额来进行查询;
3、比如在SQLServer中,我们需要根据员工出生日期计算员工年龄,并能够在查询列表中显示,并且永远都是正确的。
上面这两种情况其实都可以用E6的“虚拟字段”控件来实现。那么什么是虚拟字段呢?在数据库中(MySQL, SQLServer都支持)虚拟字段其实是一个不实际存储的字段,他的值来源于其他字段的计算值。
怎么使用虚拟字段呢?
在E6中虚拟字段控件和普通输入控件一样。在做成“工具箱 - 常规控件”中,找到并拖拽到想要的位置。
设置属性:从下图虚拟字段的属性可以看到,虚拟字段和普通字段区别不大。
别名:和普通字段别名一样,用于在Web客户端时候自动生成字段标签;
所属单据:虚拟字段本身就是一个数据库字段(只不过不实际存储值),所以在E6表单中,引用其他单据字段的时候,也可以引用这个虚拟字段过来;
虚拟字段名:表示此虚拟字段在数据库表中的字段名,当你创建了虚拟字段后,你是可以在数据库中使用 “SELECT 虚拟字段名 FROM表名”这样的查询语句的,可以看出来虚拟字段和普通字段一样,区别就是他不实际存储值;
虚拟字段脚本:这是一段SQL脚本,比如我想将表中的“Name”和“NameEn”两个字段组成“Name(NameEN)”这样的格式,则这里可以输入“Name + '(' + NameEN + ')' ”这样的;在比如上面的我要显示“未付金额”,假设我的“总金额”和“已付金额”字段分别为“__PremiumNewBase__”和“__FeeIn__”,则这里就可以输入“__PremiumNewBase__-__FeeIn__”;
比如在SQLServer中(MySQL不支持日期这种计算),知道员工出生日期(字段名为 Birthday)则可以用下面的语句,使用虚拟字段计算员工年龄:
DATEDIFF(YEAR, Birthday, GETDATE()) - CASE WHEN (MONTH(Birthday) > MONTH(GETDATE())) OR (MONTH(Birthday) = MONTH(GETDATE()) AND DAY(Birthday) > DAY(GETDATE())) THEN 1 ELSE 0 END
虚拟字段类型:表示虚拟字段结果类型;
虚拟字段长度:这个其实目前意义不大;
虚拟字段的使用:
增加了虚拟字段后,你就可以在查询列表,打印模版,Excel模版,Word模版中使用这个虚拟字段了,在表单或者打印模版中也可以使用E6的取数脚本“GetValue("虚拟字段名")”读取虚拟字段的值。总之,虚拟字段在E6子就是一个只读的普通字段。
虚拟字段在我们实际的客户需求中,解决了很多非常棘手的问题。