本文探讨了在使用软件系统时遇到的常见问题,如值更新事件、服务规则不生效等,指出这些问题的根源可能在于前提条件的设置不当。文章详细介绍了前提条件的定义、适用位置、常规排查方法,并提供了基本元素类型字段的前提条件设置规范及示例,涵盖了文本、单据状态、类型、组织、基础资料等多种字段类型。此外,还探讨了特殊场景的判断方法,并邀请读者提出疑问以便进一步更新和完善。
值更新事件、实体服务规则不生效?工作流流转条件没作用?保存校验规则设置不成功?前提条件老是报错?遇到这些问题到底该怎么办???
很大可能是你的前提条件写的有问题啦!!!下面通过一系列讲解,并且附上最真诚的例子,帮助你写下百发百中的前提条件!!!
一、前提条件概述
1、前提条件是什么?
前提条件的判断一般根据给出的字段变量名通过一定的计算判断后返回True或False的值,系统依据True或者False来执行一系列后续的服务。例如,根据前提条件为物料编码不为空的判断来执行值更新事件,根据单据体的金额字段是否大于1万小于100万来判断工作流是否需要财务经理审核单据,这样都是前提条件所能够满足的业务场景。
2、前提条件的适用位置
注意,以下所有列举出来的位置,都是适用后面的前提条件逻辑规范,所以只需要了解相关的逻辑思路,就可以写一个条件放到所有可以适用的位置啦!!
(1)值更新事件的前提条件
(2)实体服务规则的规则条件
(3)操作的校验规则的表单服务规则和服务端服务的服务的前置条件
(4)校验规则中关于单据合法性校验的校验表达式
(5)工作流中的高级条件
(6)采购管理系统参数中按条件实现控制
(7)其余标记为写前置条件或者前提条件的地方(例如基础资料的高级过滤等)
各个位置的详细位置截图及解析见: https://vip.kingdee.com/article/146068
3、前提条件的常规排查
很多时候,许多客户或者开发同事在写值更新事件或者实体服务规则的时候,老是会问:为什么我的服务不生效?其实很多时候服务写对了,但是原因实际上是前提条件没有按照规范写导致服务一直不生效。建议若服务不生效的时候可按照如下步骤去排查:
(1)按照文章中查找对应元素类型字段前提条件的逻辑规范
(2)前提条件中需要判断的字段是否都勾选了即时触发值更新事件: https://vip.kingdee.com/questions/16208/answers/21418
(3)当设置的前提条件都不生效时(此方法适用第2小点提到的所有位置的不生效):
以上的步骤都已经检查不出问题,那么可通过专门在单据头增加一个文本字段,设置符合条件则执行计算定义公式的值并填写到指定列的服务:文本='1';设置不符合条件则执行计算定义公式的值并填写到指定列的服务:文本='',并在该条实体服务规则填写自己的前提条件。
若前提条件没有问题,那么正常是可以符合条件则令文本=1,若不符合条件则清空文本。通过这样的方式来判断服务不生效的问题原因:是由前提条件设置错误,还是服务设置错误。
二、基本元素类型
以下包含所有常用的基本的元素类型字段的前提条件设置规范,请准确自行判断在BOS中所加的字段的元素类型是什么,并依据元素类型去查找相关的设置规范,查看字段元素类型请参考:https://vip.kingdee.com/article/146069
1、文本
(1)如何判断文本为空:文本=null Or 文本='' Or 文本=' '
https://vip.kingdee.com/questions/16155/answers/21370
(2)如何判断文本不为空:文本<>null And len(文本.strip()) >0
https://vip.kingdee.com/article/146057
(3)判断文本字段里面是否包含某个字符:find('XXX')>=0,XXX代表所需要判断的具体文本。
https://vip.kingdee.com/questions/16150/answers/21367
(4)判断文本字段是否左包含、右包含某个字符:文本[0:2] = 'AA'
https://vip.kingdee.com/questions/16165/answers/21379
(5)如何判断文本的值:文本='XXX',XXX代表所需要判断的具体文本。
https://vip.kingdee.com/article/146058
2、单据状态:单据状态='XXX',XXX代表所需要判断的状态值。
https://vip.kingdee.com/questions/16231/answers/21438
3、单据类型:单据类型<>null And 单据类型.编码= 'XXX'
https://vip.kingdee.com/questions/16248
4、组织:组织<>null And 组织.编码='XXX'
https://vip.kingdee.com/questions/16187/answers/21399
5、基础资料、基础资料属性、多类别基础资料:基础资料<>null And 基础资料.属性 = 'XXX'
https://vip.kingdee.com/article/146065
6、多类别基础资料列表:多类别基础资料列表='XXX',XXX代表所需要判断的具体基础资料英文标识。
https://vip.kingdee.com/article/146056
7、单选辅助资料列表:单选辅助资料<>null And 单选辅助资料.编码='XXX'
https://vip.kingdee.com/article/146054
8、分组:分组<>null And 分组.Number = 'XXX'
https://vip.kingdee.com/questions/16251/answers/21457
9、用户、创建人:用户<>null And 用户.名称='XXX'
https://vip.kingdee.com/article/146063
11、日期
(1)大于某个固定日期:日期.ToString('yyyy-mm-dd')>='2019-06-01'
https://vip.kingdee.com/questions/16048/answers/21363
(2)两个元素类型为日期字段的比较:日期1>日期2
https://vip.kingdee.com/questions/16232/answers/21439
12、复选框:复选框=1
https://vip.kingdee.com/article/146062
13、下拉列表:下拉列表='XXX',XXX代表所查询的枚举项值。
https://vip.kingdee.com/questions/16238/answers/21444
14、数量、单价、金额、折扣率、打印次数:数量1>数量2
https://vip.kingdee.com/article/146064
三、特殊场景
1、判断分录行是否关联生成
https://vip.kingdee.com/questions/16246/answers/21452
2、判断两个单位间的换算类型
https://vip.kingdee.com/questions/16245/answers/21451
四、后记
以上内容若有疑问欢迎指正,以便及时做相关的调整、改正与更新。
推荐阅读