# 动态公式

表单界面常有某个字段需要根据另一个字段变化而变化值的需求,公式就用来满足这个需求,将表达式填写在value上就能设置公式。

  • 条件公式支持联动,例如fieldA的变动引起fieldB的变动,而fieldB的变动又引起fieldC的变动,则在表单上改变A时会同时引起B和C的变动
  • 条件公式的联动可以有环路,例如设置A->B B->C C->A(箭头代表前者引起后者的变动),则改变B会引起C的变化,C的变化引起A的变化,但A的变化不会改变B,即不会循环变动
  • 对于Code、User、Organize数据类型的字段(fieldA)
    1 如果别的字段(fieldB)想根据该字段的值变化,则需要设置fieldB的公式为$fieldA.value
    2 如果fieldB想根据fieldA的显示的值变化,则需要设置fieldB的公式为$fieldA.displayValue或者$fieldA.name
    3 如果fieldB也同样为Code、User、Organize并且想跟随fieldA变动,则设置fieldB公式为$fieldA
    4 如果fieldA具有属性attrC,fieldB想根据该属性变化,则设置fieldB公式为$fieldA.attrC
    5 如果fieldB也同样为Code、User、Organize且想根据fieldA的属性(例如teacher)变化,那么引起其变化的属性值必须有相应的_name字段支持,即必须fieldA同时具有属性teacher,teacher_name,设置fieldB公式为fieldA.teacher,则fieldB的显示值和实际值都根据fieldA的teacher变化,如果fieldA只有teacher属性,但是没有teacher_name属性,那么在上例中fieldB只会改变其值,但是显示值会为空
  • 对于重复节表里的字段支持显示当前行号,用变量$INDEX即可(注意该行号以0为起始)
  • 对于重复节表里的字段支持显示所在重复节表(最里面的那层)当前行数,用变量$COUNT表示

# 公式实例

例A: 表单上有个字段(fieldA)是布尔类型,用公式可以将其显示为字符“是”或者"否"
  这里需要两个公式
  公式1: 第一个参数填写‘是’ (注意有单引号,表示字符串常量) 条件这里填写$fieldA==true
  公式2: 第一个参数填写‘否’ (注意有单引号,表示字符串常量) 条件这里填写$fieldA==false
例B: 表单上重复表里有个字段(fieldScore)是double类型的代表着分数,重复表外又个字段(fieldSum)也是double类型,代表着总分,用动态公式可以自动计算总分,要求总分这里显示的数字四舍五入到小数点后面两位。
  fieldSum公式内容为toFixed(sum($fieldScore),2),条件这里留空即可,表示总是执行这个公式。
例C: 表单上有个字段(fieldUser)是Code类型(外部代码表),根据该字段的age属性值在fieldAge字段(int类型label)显示用户年龄
  fieldAge设置公式为$fieldUser.age,条件留空。当然这样的设定有个先决条件,外部代码表返回的内容需要包含age属性
例D: 表单上有一个重复表,在重复表的第一个栏位(fieldRowNumber)显示当前是第几行
  fieldRowNumber设置公式为$INDEX+1,条件留空。