值更新事件的应用

1.业务背景

在实际业务中,客户经常会希望输入某个字段值时,另外的字段随之更新值,或者需要调用一些其他的表单服务,如:锁定某字段,调用其他字段的值更新服务,设置某字段为非必录,携带与该字段相关的属性到指定字段等。整体来说值更新事件分为新增服务和新增操作两部分内容,本文用案例说明值更新事件的简单配置,以及值更新事件未触发的常见原因,以便大家能够更好的应用值更新事件。

案  例

应收单单据体明细页签有金额字段“test001”、“test002”、“test003”,数量字段“数量001”,单价字段“单价001”,单据头金额字段“金额003”。

他们之间的值更新关系为:

test001=数量001*单价001

test003=test001+test002

单据头金额003为单据体test003的合计数。

2.值更新事件的配置

2.1值更新事件的简单配置

本文档通过上述应收单的案例介绍值更新事件的简单配置,首先打开BOS,对应收单进行扩展,单据头新增金额字段“金额003”,明细页签分别新增金额字段“test001”、“test002”、“test003”,数量字段“数量001”,单价字段“单价001”,新增字段操作大同小异,在此仅阐述新增明细页签的金额字段test001的操作。

图-1 新增金额字段test001

打开BOS,在系统视图中,选择财务会计→应收款管理,确定。此时右侧界面会弹出应收款管理的项目,选中单据→应收单,右键扩展。在工具箱的业务字段选中金额,并拖动释放在应收单的明细页签,在界面右下方的属性,修改字段的名称和标题,均为test001,字段增加成功,如图-1,保存后在cloud的应收单界面就会显示此字段。

用相同方式增加其他字段,增加后应收单显示如图-2。

图-2 新增所有字段后的应收单

新增完字段后,设置值更新关系test001=数量001*单价001,这个值更新关系要在字段数量001和单价001分别设置。在属性下选择到单价001,点击值更新事件的右边,操作如图-3,会出现元素的值更新事件设置界面,点击新增服务,打开服务编辑界面,设置服务类型为“计算定义公式的值并填写到指定列”,前提条件不设置,前提条件表示满足条件时,执行本服务。服务描述可以自己填写,用具有标识性语言与其他做区分,本处设置为金额=单价*数量。如图-4为设置的单价001的值更新事件,数量001的设置与单价001的设置完全相同,不做赘述。

在值更新事件设置时,服务类型可以选择到所有的表单服务,在计算定义公式的值并填写到指定列时,可以运用多种运算符,如图-4中所示,我们可以根据需求选择。

图-3 设置值更新事件1

图-4 设置值更新事件2

单价001和数量001的值更新事件设置完成后,保存,返回Cloud进行测试,如图-5,依次输入单价和数量,test001都可以自动更新出结果。

图-5 值更新关系测试

值更新关系test001=数量001*单价001设置成功后,与上述操作类似,分别在test001和test002设置值更新关系test003=test001+test002,设置test001的值更新服务图-6。

图-6  test001值更新事件

值更新关系test003=test001+test002设置完成后,返回Cloud测试,依次录入数量001,单价001,test002,测试结果正常,如图-7所示。

依次录入test002,数量001,金额001,测试结果不正常,test003只能显示出test002的数值,如图-8所示。

图-7 值更新关系2测试

图-8 值更新关系2测试

从上述测试结果看,test001的值是通过数量001和金额001更新的,但是系统并未执行test001的值更新事件,可以通过调用值更新服务来实现。

在数量001和金额001字段的值更新事件分别新增服务—调用字段值更新服务来实现,当满足条件时会触发所选字段的值更新服务,可以设置触发多个字段值更新事件。在本案例中,希望触发test001字段的值更新服务,设置如图-9所示。数量001和金额001的设置相同。

图-9 调用字段值更新服务设置

分别在数量001和单价001设置完成后,再测试。依次输入test002,数量001,单价001后,测试结果正常,调用test001字段值更新设置成功。

值更新关系test003=test001+test002设置正确后,我们需要将明细test003的金额汇总到单据头,对字段test003做如图-10设置。

图-10 设置明细test003汇总到表头

测试设置test003汇总到表头设置是否正常,在明细中分别录入多行数据,如图-11所示,测试结果正常,但是当录入第三行数据时,汇总值并没有自动更新。另外,通过值更细事件更新的test003、test001的值可以做手工修改,这样很容易导致数据混乱。

图-11 测试明细test003汇总到表头

为保证数据的准确我们对字段test003做即时触发值更新事件设置,如图-12,同时我们也可以根据需求对其他字段勾选“即时触发值更新事件”。

需要即时就此字段的改动,进行相应的运算,刷新其他字段值时,需要勾选”即时触发值更新事件”选项。

图-12 即时触发值更新事件设置

当test001的值随数量金额更新过后锁定test001,在单价001设置值更新事件,新增服务-锁定字段test001,如图-13。我们也可以根据需求多个值更新结果字段进行锁定。

图-13 值更新事件-锁定字段

再返回Cloud进行测试,测试都正常,至此,案例的要求设置完成。

2.2值更新事件未触发的常见原因

在实际的设置过程会经常遇到值更新事件未触发的情况,导致这样的原因大多是设置可能存在一定的问题,可以从以下当面进行检查。

1、将值更新事件相关的服务条件删除,看是否更新,可能是服务条件设置不当所致;

2、是否有需要新增服务—调用字段值更新服务(在案例中做了阐述);

3、是否有被其他计算公式覆盖,可以先停用其他公式测试;

4、有时更新有时不更新,检查是否勾选“即时触发值更新事件”;

5、其他对值更新事件理解不准确引起的设置错误。

3.其他补充

本文大致讲述了值更新事件的应用场景、简单配置以及未触发的常见原因,还有一些特殊的值更新不能通过值更新事件配置实现,如:值更新事件涉及单据转换时无效,可以通过单据转换规则的表单服务策略设置。希望更新上游单据的值时,需要通过设置反写规则实现。当涉及较为复杂的值更新事件时也可以通过实体服务规则实现。在实际应用中,我们需要根据需求灵活变通,用最简单有效的方式实现需求。