# 动态动作

目前支持的动态动作有以下几种:

# 控件visible

visible设置普通控件或者重复节表控件是否可见,目前可以通过配置普通控件或者重复节表的visible,rowVisible,tableVisible,itemVisible,colVisible设置可见性。其中除rowVisible外的几个动态visible只支持一个布尔参数,true可见,false不可见。

# visible

用于设置普通控件或者重复节表控件或者整个视图是否可见
visible与在style里设置display是等价的,例如现在有个字段(fieldA)想根据另一个字段(fieldB,int类型)的值是否大于0决定显示与否,那么可以设置fieldA的visible:第一个参数格子填$fieldB>0,条件格子留空即可;相对应的可以通过设置2条style来达到相同的目的:style1:参数填写display:none,条件填写$fieldB<=0;style2参数填写display:,条件填写$fieldB>0。

# rowVisible

用于设置普通控件或者重复节表控件所在tr或者所在重复行是否可见。使用rowVisible来控制表单部分内容显示或者不显示的时候,请尽量不要使用带rowSpan或者colSpan的Table,如果有rowSpan或者colSpan,可以考虑里面再嵌套一层只有一行内容的table。
控件所在行的定义如下:控件所在tr(infopath中画的表格的一行)或者控件所在重复表的行,或者控件所在重复节的行,或者所在视图。
rowVisible支持三个参数,rowVisible(visible,expandType,level)

  • visible布尔值,表示是否可见
  • expandType扩展方向,支持out,up,down三种,也可以用数字0,1,2表示,缺省不填就是0。扩展的含义是需要设置rowVisible的行可能并不是(或者并不止是)第一次找到的行,可以继续向外寻找行,或者向上(下)寻找行。其中向外寻找行有界限限制,如果找到了重复节或重复表的一行或者找到了视图,那么寻找过程结束,不再向外扩展。
  • level扩展的层数(向上下扩展时可以理解为控制rowVisible的行数),缺省不填就是1
    向外寻找解决的问题是,由于画表单时需要文字对齐等因素,所以常常是表格里套表格,控件可能只是在内层的表格内,外层表格未必有控件,那么如果想控制外层表格行是否显示就必须增加额外的控制字段,这样的字段如果很多就不方便表单绘制和后期维护管理。所以我们从内层表格的控件出发,通过向外扩展,控制外层表格行是否显示。向外扩展的例子如下:

    • 图中所示四个控件1,2,3,4的rowVisible分别设置为false,(false,0,2),(false,0,3),(false,0,4) ,后三种设置表示向外扩展2层、3层和4层,实际执行效果是分别控制了图中的红色,蓝色,绿色框(3,4效果一致)的不可见。蓝色框子是从2号控件出发向外找到的第二个tr(表格行),绿色框子是从3号控件出发向外找到的第三个行(重复节的行),从4号控件出发向外4层由于受限制于重复节的行,所以只能控制到绿色框子区域,也就是如果这个重复节有多行,那4号控件也只能控制到它所在的那行。
    • 向上(下)扩展相对容易理解,例如上图中如果设置了1号控件rowVisible(false,2,3),那么会将1,2,3号控件所在行隐藏;如果设置了4号控件rowVisible(false,1,2),那么会将3,4号控件所在行隐藏。

# tableVisible

用于设置普通控件所在表格是否可见,这可以运用于用某个控件设置整块内容区域的可见性。

# itemVisible

用于设置重复节表每一行是否可见。可以运用$INDEX变量辅助设置itemVisible。例如如果想设置重复表的第一行可见,其余行不可见,那么可以设置itemVisible,内容值为false,条件值为$INDEX>0即可。

# colVisible

用于在重复表中控制某个字段所在列是否可见。

# 视图的visible

视图的visible比较特殊,单列一栏说明。可以对视图设置动态,点击所有字段的根对象,可以对视图的动态进行设置,如图:

  点击myFields后进入视图属性设置页面

条件栏输入$PAGE=='视图名称'来对特定视图设置是否可见,判断逻辑放到visible的参数里,如图表示的是对于E页这个视图,当$fieldCheck3为true时候显示,否则不显示。

# 视图标题栏titleVisible

多视图表单的标题栏仅在移动端下可见,所以设置titleVisible仅对移动端多视图表单有效。

如图输入false后,移动端所有视图标题栏将不可见,如果想单独设置某个视图的标题栏的可见性,请在条件里用$PAGE=='view名称'来限定视图
限定前后显示效果如图所示

# readOnly

设置普通控件或者重复节表控件是否只读,重复节表只读时候不能进行新增、删除、上下移等操作,不显示操作菜单。对于普通控件,readonly的参数是一个布尔类型,true只读,false不只读。对于重复节表控件,readonly支持三个参数,都是布尔变量,分别控制是否能新增、删除、移动;其中后2个参数是选填的,如果只传递了一个参数表示重复节表的增删移都只读(或不只读),传了3个参数就可以分别控制,例如readonly里填了params(false,true,true),这表示该重复节表可新增,但是不能删和移动行的位置,params可以用一对括号简写,在readonly值的栏位填(false,true,true)即可。

# itemReadOnly

重复节表控件可以通过设置itemReadOnly,使某些行数据不能删除,参数为一个布尔类型,true不可删除,false可删除。

# dataSource

dataSource可以为CheckList,OptionList,Select设置数据源。对于CheckList可以直接设置一个字符串代表选项,不同的选项之间用,或者回车(\n)间隔,例如可以填写'A\nB\nC',这样就会产生3个checkbox,值分别是A、B、C。对于Select或OptionList,可以用其它字段的属性值来设置数据源,例如有个用户字段(fieldUser),该字段有属性indepOrganize,里面会带有该用户所有隶属的部门,那么可以用其作为下拉框的数据源,在dataSource里填写$fieldUser.indepOrganize即可。

dataSource支持第二个参数,布尔变量,表示是否用数据源中的第一个值作为缺省值,在Select和OptionList中支持,需要配合params函数使用,例如dataSource里填写params($fieldUser.indepOrganize,true),也可以用params的语法糖,直接用括号将参数括起来,dataSource里直接填写($fieldUser.indepOrganize,true)即可。

请注意在表单初始化时候,只有当该字段必填时,第二个参数才会生效,非表单初始化时没有这个限制。

# tooltip


tooltip用于在控件获得焦点的时候显示一个浮动的提示信息,当控件失去焦点时提示信息消失。目前除了label,hidden,iframe,help,map,file,doc,picture,image不支持tooltip,其它控件都支持。tooltip支持warning,info,success,danger四种类型,缺省是info。

如果是info类型,tooltip栏位可以填写如:'这是我的提示'。如果是其它类型,可以填写一个json串,例如:'{"tip":"这是提示","type":"warning"}'。

# notNullMark

notNullMark用于动态显示字段自动非空提示,其功能和字段上配置ShowNotNullMark大体一致,不同点在于字段上的ShowNotNullMark是字段级配置,是一个静态配置,在所有表单上其配置是一样的,如果想在不同的模版上使用不同的提示逻辑或者根据表单上其它一些字段内容来动态决定提示信息,那么就可以使用动态notNullMark。如果同时在字段上配置了ShowNotNullMark和动态notNullMark,那么提示信息和位置将会由动态notNullMark决定,这是由执行顺序决定的,静态配置执行在前(表单初始化时),动态执行在后。另一个不同点在于,字段配置ShowNotNullMark属性只有在ValidateNotNull设置为true的情况下才生效,而动态notNullMark无论ValidateNotNull是否设置都会生效。

notNullMark共支持三个参数,其中第一个参数必填,后两个参数选填。当设置了第二、三个参数后请用params()或()包裹参数,如果只用一个参数可不用params包裹。

  • 第一个参数是提示信息,和静态只能显示*号不同,动态notNullMark可以自定义提示内容,例如'(*)'
  • 第二个参数是提示位置,这个和字段属性配置ShowNotNullMark一致,可以有下面五种选择,既可以使用数字,也可使用字符串,关于这五种值的含义可参考ShowNotNullMark,如果第二个参数不填缺省使用标签前。
    • 0或'auto' 自动--桌面版等同于beforeLabel,移动版等同于afterLabel
    • 1或'beforeLabel' 标签前
    • 2或'afterLabel' 标签后
    • 3或'beforeControl' 控件前
    • 4或'afterControl' 控件后
  • 第三个参数是样式字符串,可以用这个参数控制提示信息的样式,样式参数可以没有,缺省样式颜色为红色

举例:params('(*)',2,'color: blue') 这个设置会在标签后显示蓝色自动非空提示 (*),这个配置也可简化为('(*)',2,'color: blue')

# 动态notNullMark和静态配置ShowNotNullMark对比

功能对比 静态配置ShowNotNullMark 动态notNullMark
生效时机 ValidateNotNull为true时生效 动态的条件满足时(忽略ValidateNotNull配置)
标记内容 固定为* 可配置
标记位置 可配置 可配置,且优先级高于静态配置
标记样式 固定为红色 可配置

通过对比我们可以发现,事实上动态notNullMark具有高度灵活性,甚至标记不一定用于非空必填,在控件需要任何提示文字时其实都可以用notNullMark来实现。