一、简介

  1. UPDATE公式用于更新目标表中符合条件的数据。

  2. UPDATE更新目标有两种:

    1. 表单中的普通组件值(比如单行多行等数据)

    2. 表单下明细值,明细下有多条数据,可以根据设置的条件,只更新符合条件的明细数据。

  3. 一些概念

    1. 主条件:一个表单下有多条数据,需要我们设置条件,只更新符合条件的表单数据,这个条件称为主条件,用于定位哪条数据。

    2. 子条件:先用主条件定位到具体哪条表单数据需要更新。但是如果要更新的是这条数据下某个明细的某些符合条件的数据,这时就还需要另外一个条件,专门用来定位明细下哪些数据要更新,这个条件称为子条件。主条件定位哪条表单数据,子条件定位更新的表单数据下某个明细下哪条明细数据要更新。

    3. 录入表:配置高级公式,录入数据,触发高级公式的表单。

    4. 目标表:被高级公式UPDATE数据的表单。

  4. UPDATE格式 : UPDATE(目标表, 主条件, 子条件, 目标列1, 目标值1, 目标列2, 目标值2…)

    1. 目标表: 要更新数据的目标表单

    2. 主条件: 定位目标表下需要更新的表单数据。主条件是由逻辑函数构成。比如EQ(存货表.商品名, “铅笔”), 则表示目标表是“存货表”, 要更新的数据是:商品名为“铅笔”的这批数据。如果有多个条件,可以用AND函数组合。比如AND(EQ(存货表.商品名, “铅笔”), GT(存货表.存货量 , 10)) 表示要更新的数据是:商品名为“铅笔”,并且“存货量”大于10的那批数据。

    3. 子条件: 要更新的表单数据已经确定,但要更新的是这条数据下某个明细的明细数据。用子条件定位明细哪些数据要更新。子条件是由逻辑函数构造。如果不需要更新明细下的值,则填””,不能不填。

    4. 目标列

      1. 如果子条件为””,表示不更新明细下的值,那么目标列必须为目标表下的普通组件。

      2. 如果子条件不为””,表示更新的是明细下的值。那么目标列必须为要更新的目标表要更新的明细下的组件。

      3. 不能既更新普通组件,又要更新明细下的值。如果有这种场景,请分成两个UPDATE函数,一个用来更新普通组件,一个用来更新明细下的数据。

    5. 目标值: 指目标列要更新成的值。目标值可以由当前录入表某个组件值,要更新目标表某个组件值,固定值通过其他函数组合而成。

  5. 接下来,会按照以下几个场景介绍UPDATE函数的使用

    1. 录入表的普通组件数据更新目标表的普通组件数据

    2. 录入表的明细组件数据更新目标表的普通组件数据

    3. 录入表的普通组件数据更新到目标表的明细组件数据

二、录入表普通组件数据更新目标表的普通组件数据

  1. 使用的表单:
    存货表: 商品名(单行输入框)、存货量(数字输入框)
    出货表:商品名(下拉单选)、当前存货量(数字输入框)、出货量(数字输入框)
    UPDATE - 图1
    UPDATE - 图2

  2. 需求:存货表中保存着一批商品的存货量。通过出货表将货物出掉。
    出货表中的商品名来自于存货表中存货商品。
    出货表中,当选中某件商品时,显示这件商品当前的存货量。
    出货表出货时,出货量不能大于存货量。
    出货表出货后,存货表中对应商品的库存量要相应扣除。

  3. 在出货表的业务关联规则中,配置公式:
    UPDATE - 图3

  1. 公式解析:
    目标表:存货表。
    主条件:EQ(存货表.商品名,商品名)。更新的数据是存货表中商品名为出货表的商品名的数据。
    子条件:由于更新的是“存货表”中的普通组件:商品名,不涉及明细,因此子条件填写为””。
    目标列:存货表.存货量
    目标值:存货表.存货量 - 出货量。 根据条件匹配到存货商品后,在原来存货量的基础上扣除这次的出货量。

  2. 完整配置过程和效果如下图
    在出货表中,通过“关联其他表单数据”,让可选的商品来自于存货表;
    在出货表中,通过“数据联动”,让商品剩余存货量自动联动出来。
    在出货表中,设置“表单校验”,在出货量大于剩余库存量时,不给提交。
    在出货表中,配置“业务关联公式”,让出货表提交数据时,自动扣除库存数据。
    在存货表中录入“铅笔”,库存10。录入“橡皮”,库存20。
    在出货表中提交“铅笔”,出货是5. 重新查看存货表,库存变成5了。

UPDATE - 图4

三、录入表明细组件数据更新目标表的普通组件数据

  1. 使用的表单:
    出货表: 商品类别(下拉单选)、出货明细(明细组件)。出货明细下有:商品名(下拉单选)、当前库存(数字输入框)、出货量(数字输入框)。
    存货表:商品类别(下拉单选)、商品名(单行输入框)、存货量(数字输入框)
    UPDATE - 图5
    UPDATE - 图6
  1. 需求:出货表下有出货明细,一次可以出货多个商品。对于出货的多个商品,把存货对应的商品库存量扣除。

  2. 在出货表的业务关联规则中,配置公式:
    UPDATE - 图7

  3. 公式解析:
    目标表:存货表。
    主条件:AND(EQ(存货表.商品名,明细.商品),EQ(存货表.商品类别,商品类别)).定位数据用到两个条件,即商品名相等(EQ(存货表.商品名,明细.商品))和商品类别相等(EQ(存货表.商品类别,商品类别))。两个条件要同时成立,则用AND将两个条件放一起。
    子条件:由于更新的是“存货表”中的普通组件存货量,没有更新明细,因此子条件填写为””.
    目标列:存货表.存货量
    目标值:存货表.存货量 - 明细.出货量。 根据条件匹配到存货商品后,在原来存货量的基础上扣除这次的出货量。

  4. 操作的完整过程和效果如下图:
    在“出货表”中,通过“关联其他表单数据”配置商品类别来自于“存货表”的商品类别。通过“关联其他表单数据”配置商品来自于“存货表”的商品。通过“数据联动”配置明细下每件商品的存货量。通过“表单校验”配置出货量大于存货量时,阻断不给提交。
    在“出货表”中,配置“业务关联公式”,设置出货表出货时,在库存表中将对应商品的库存量扣除出货量。
    在库存表中录入铅笔10,橡皮20。
    在出货表中,铅笔出货5, 橡皮出货10,提交。
    查看库存表,铅笔只剩5,橡皮只剩10。

UPDATE - 图8

四、录入表普通组件数据更新目标表的明细组件数据

  1. 使用的表单:
    存货表: 商品类别(下拉单选)、存货明细(明细组件)。存货明细下有商品名(单行输入框),存货量(数字输入框)
    出货表: 商品类别(下拉单选)、商品名(单行输入框)、出货量(数字输入框)
    UPDATE - 图9
    UPDATE - 图10

  2. 需求:存货表中记录着多个商品的存货量。当出货表中每提交一条数据,在存货表的明细下能找到对应商品数据时,就将对应商品的库存量扣除出货量。

  3. 公式配置详情
    UPDATE - 图11

  4. 公式配置解析
    目标表:存货表。
    主条件:EQ(存货表.商品类别,商品类别)。查找存货表中,商品类别等于出货表商品类别的数据。在定位哪条表单数据需要更新时,不能使用目标表的明细组件。
    子条件:EQ(存货表.明细.商品名,商品名)。子条件用于定位明细下哪条数据需要更新,因此必须包含更新明细下的组件。
    目标列:存货表.明细.存货量
    目标值:存货表.明细.存货量-出货量

  5. 完整配置过程和效果如下:
    出货表中配置“业务关联规则”,配置出货时,更新存货表下明细的商品数据。
    存货表先录入一条数据,明细下有铅笔,存货量10;橡皮,存货量20.
    出货表上提交数据,铅笔出货5。再提交一条数据,橡皮出货10.
    查看存货表中原来那条数据,存货量已发生变化。

UPDATE - 图12

五、其他注意点

  1. UPDATE函数通过主条件定位需要更新的数据时,如果定位到的数据超过50条,会直接提示超过50条,不允许提交。

  2. UPDATE函数一次只能只能操作表单下一个明细组件里的数据。如果有操作多个明细组件数据的需求,请配置多个UPDATE函数。

  3. 主条件和子条件是由逻辑函数构造的。除了AND和OR之外,其他逻辑函数第一个参数必须是目标表中的组件,两个参数的位置不能调换。