跳转至
For the complete DHIS2 documentation index, see llms.txt.

Android Capture App支持的程序规则

以下是 DHIS2 中可用的所有程序规则组件(变量类型和操作)的完整列表,以及有关这些组件是否已在 DHIS2 Android 应用程序中实现的注释。

注意

有关使用 Android 特定功能的任何问题都会以感叹号突出显示!。

传说 描述
值类型已实现
值类型未实现,但会被安全忽略(如果不是强制性的)
不适用
工作正在进行中。功能尚未完全实施或已报告意外行为

程序规则支持的变量源类型

变量类型 变量类型说明 注册程序 无需注册的程序 实施注意事项
程序阶段最新事件的数据元素 此源类型的工作方式与“当前程序中来自最新事件的数据元素”的工作方式相同,只不过它仅评估来自特定程序阶段的值。
来自当前程序中最新事件的数据元素(已注册) 此源类型填充有为注册中的指定数据元素收集的最新数据值。
当前程序中最新事件的数据元素(无需注册) 该程序规则变量将使用在同一组织单位中的10个最新事件中找到的最新数据值填充。
当前事件中的数据元素(已注册) 变量从当前事件中获取数据元素’s的值。
当前事件中的数据元素(无需注册) 包含来自用户当前打开的同一事件的数据值。
先前事件的数据元素(已注册) 具有这种源类型的程序规则变量将包含指定数据元素的所有先前事件的最新值。当前打开的事件未评估。
先前事件的数据元素(无需注册) 该程序规则变量将填充当前事件日期之前的10个事件(即不包括当前事件)中找到的最新数据值。
跟踪实体属性 使用当前TEI(例如当前患者)的指定跟踪实体属性填充程序规则变量。
计算值 计算值。

程序规则支持的操作(当前事件中的数据元素)

行动 动作说明 注册程序 无需注册的程序 实施注意事项
隐藏场 如果规则为true,则隐藏单个数据元素。 !如果在隐藏字段后更改值,它将根据值类型规则引擎默认值还原操作。我们建议将其与hasvalue函数结合使用。
隐藏部分 如果规则为true,则隐藏整个节及其数据元素。
隐藏选项 为给定数据元素/跟踪的实体属性中的选项集隐藏单个选项。当与显示选项组结合使用时,隐藏选项具有优先权
隐藏选项组 隐藏给定选项组和数据元素/跟踪的实体属性中的所有选项。当与显示选项组结合使用时,隐藏选项具有优先权
显示选项组 用于仅显示给定数据元素/跟踪的实体属性中给定选项组中的选项。要显示选项组,将隐式隐藏不属于所显示组的所有选项。
赋值 如果规则为true,则将值分配给指定的数据元素或属性。 要添加文本,必须使用单引号引起来。例如:“ 2 + 2”将显示文本2 + 2和2 + 2,不带单引号的文本将显示4。
显示警告 如果规则为true,则向用户显示弹出警告;不会阻止用户继续。
完成警告 如果在点‘complete’处单击某个规则,则向用户显示弹出警告。这不会阻止用户继续。
显示错误 在规则为真时立即向用户显示弹出错误消息,并阻止用户继续操作直到规则不再为真。 该值不会保存,但不会清除文本,以便用户轻松修复它。
完成时出错 如果“完成”,则向用户显示弹出警告;单击表示规则为真,并阻止用户继续执行,直到规则不再为真。
使字段强制 将数据元素设置为“强制”;如果规则为真。
显示文字(事件程序) 用于显示不是错误或警告的信息,例如反馈。 与源变量类型无关,文本将以形式显示为最后一节的最后一个元素。文本将显示为指示符选项卡中的消息。
显示文字(跟踪程序) 用于显示不是错误或警告的信息,例如反馈。 1.程序规则配置为“仅针对程序阶段的触发规则”。 文本将仅以形式显示为最后一节的最后一个元素。文本将显示为指示符选项卡中的消息。 ->如果程序规则使用的不是当前阶段的任何变量类型,则该规则将无法评估,并且消息也不会显示。 2.程序规则未配置为“仅针对程序阶段的触发规则”。 文本将仅在“指示器”选项卡中显示,而不在表格中显示。 ->如果程序规则使用“当前事件”类型的任何变量,则该规则将无法评估,并且消息也不会显示。
显示键值/对(事件程序) 用于显示从数据元素中提取的信息。 变量类型: * 来自最新事件的数据元素当前节目* 上一个事件的数据元素* 当前事件中的数据元素 * 内置变量键/值对将仅在指定部分以表单形式显示。
显示键值/对(Traker程序) 用于显示从数据元素中提取的信息。 1。变量类型:* 当前事件中的数据元素Key/值对将仅在指定部分显示在表单中。2.变量类型:* 当前程序中最新事件的数据元素* 先前事件的数据元素* 程序阶段最新事件的数据元素* 跟踪的实体属性* 内置变量键/值对将仅显示在指标选项卡中,而不显示在表单中。
隐藏程序阶段 如果规则为真,则向用户隐藏整个程序阶段。 仅适用于当前程序类型中最新事件和跟踪的实体属性变量中的数据元素的操作规则。
发信息 发送消息会根据提供的消息模板触发通知。只要数据值发生更改,就会执行此操作。但是,可以通过在程序规则表达式中提供事件注册状态来控制此行为 此功能在服务器端执行。
排程讯息 Schedule Message将在Expression在数据字段中提供的日期安排通知。 此功能在服务器端执行。

程序规则支持的操作(其他变量)

行动 动作说明 当前程序中最新事件的数据元素(已注册) 当前程序中最新事件的数据元素(无需注册) 来自上一个事件的数据元素(已注册) 来自上一个事件的数据元素(未注册) 程序阶段最新事件的数据元素(注册) 跟踪的实体属性(已注册) 实施注意事项
隐藏场 如果规则为true,则隐藏单个数据元素。
隐藏部分 如果规则为true,则隐藏整个节及其数据元素。
隐藏选项 为给定数据元素/跟踪的实体属性中的选项集隐藏单个选项。当与显示选项组组合使用时,隐藏选项具有优先权。
隐藏选项组 隐藏给定选项组和数据元素/跟踪的实体属性中的所有选项。与显示选项组组合时,隐藏选项优先。
赋值 如果规则为true,则将值分配给指定的数据元素或属性。 要添加文本,必须使用单引号引起来。例如:“ 2 + 2”将显示文本2 + 2和2 + 2,不带单引号的文本将显示4。
显示警告 如果规则为true,则向用户显示弹出警告;不会阻止用户继续。
完成警告 如果在单击“完成”时,规则为真,则向用户显示弹出警告。这不会阻止用户继续。
显示错误 在规则为真时立即向用户显示弹出错误消息,并阻止用户继续操作直到规则不再为真。 该规则将使用户完成注册,但会阻止完成事件,直到规则不再成立为止。该值不会保存,但不会清除文本,以便用户轻松修复它。
完成时出错 如果在单击“完成”时,规则为真,则向用户显示弹出警告。这不会阻止用户继续。
使字段强制 如果规则为true,则将数据元素设置为“强制性”。
显示文字(事件程序) 用于显示不是错误或警告的信息,例如反馈。 与源变量类型无关,文本将以形式显示为最后一节的最后一个元素。文本将显示为指示符选项卡中的消息。
显示文字(跟踪程序) 用于显示不是错误或警告的信息,例如反馈。 1.程序规则配置为“仅针对程序阶段的触发规则”。 文本将仅以形式显示为最后一节的最后一个元素。文本将显示为指示符选项卡中的消息。 ->如果程序规则使用的不是当前阶段的任何变量类型,则该规则将无法评估,并且消息也不会显示。 2.程序规则未配置为“仅针对程序阶段的触发规则”。 文本将仅在“指示器”选项卡中显示,而不在表格中显示。 ->如果程序规则使用“当前事件”类型的任何变量,则该规则将无法评估,并且消息也不会显示。
显示键值/对(事件程序) 用于显示从数据元素中提取的信息。 变量类型: * 来自最新事件的数据元素当前节目* 上一个事件的数据元素* 当前事件中的数据元素 * 内置变量键/值对将仅在指定部分以表单形式显示。
显示键值/对(Traker程序) 用于显示从数据元素中提取的信息。 1。变量类型:* 当前事件中的数据元素Key/值对将仅在指定部分显示在表单中。2.变量类型:* 当前程序中最新事件的数据元素* 先前事件的数据元素* 程序阶段最新事件的数据元素* 跟踪的实体属性* 内置变量键/值对将仅显示在指标选项卡中,而不显示在表单中。
隐藏程序阶段 如果规则为真,则向用户隐藏整个程序阶段。 仅对于当前程序变量类型中最新事件中的数据元素支持操作规则。如果事件是自动生成的,则该规则将不适用。
发信息 发送消息会根据提供的消息模板触发通知。只要数据值发生更改,就会执行此操作。但是,可以通过在程序规则表达式中提供事件注册状态来控制此行为 此功能在服务器端执行。
排程讯息 Schedule Message将在Expression在数据字段中提供的日期安排通知。 此功能在服务器端执行。

程序规则表达式中使用的函数

功能 功能说明 状态 实施注意事项
d2:ceil 将输入参数四舍五入到最接近的整数。
d2:楼层 将输入参数四舍五入到最接近的整数。
d2:圆 将输入参数四舍五入到最接近的整数。
d2:模数 将第一个参数除以第二个参数时产生模数。
d2:zing 如果值是负数,则将数字类型的参数评估为零,否则为值本身。
d2:oizp 如果值为零或正数,则将类型为number的参数评估为1,否则为零。
d2:串联 从输入参数生成字符串连接的字符串。支持任意数量的参数。 请使用d2:concatenate函数,而不要使用“ +”,因为应用程序中的表达式评估器将添加数字。
d2:daysBetween 生成第一个参数和第二个参数之间的天数。如果第二个参数日期早于第一个参数,则返回值将为两个日期之间的负天数。静态日期格式为“yyyy-MM-dd”。
d2:星期之间 生成第一个参数和第二个参数之间的整周数。如果第二个参数日期早于第一个参数,则返回值将为两个日期之间的负周数。静态日期格式为“yyyy-MM-dd”。
d2:monthsBetween 产生第一个参数和第二个参数之间的完整月份数。如果第二个参数日期在第一个参数之前,则返回值为两个日期之间的负月份数。静态日期格式为“ yyyy-MM-dd”。
d2:年之间 产生第一个参数和第二个参数之间的年数。如果第二个参数日期在第一个参数之前,则返回值为两个日期之间的负年数。静态日期格式为“ yyyy-MM-dd”。
d2:addDays 根据第一个参数日期产生一个日期,加上第二个参数天数。
d2:计数 计算在参数中为源字段输入的值的数量。
d2:countIfValue 计算在第一个参数中为源字段输入的匹配值的数量。仅计算与第二个参数匹配的出现次数。
d2:countIfZeroPos 计算在参数中为源字段输入的零或正值的数量。源字段参数是程序中已定义源字段之一的名称。
d2:hasValue 如果参数源字段包含值,则计算结果为 true;如果未输入值,则计算结果为 false。
d2:validatePattern 如果输入文本与提供的正则表达式模式完全匹配,则评估为true。正则表达式需要转义。
d2:左 从第一个字符开始算起num-chars,计算到文本的左侧。
d2:对 从最后一个字符开始计算num-chars,计算到文本的右侧。
d2:子字符串 求值到由开始和结束字符号指定的字符串部分。
d2:分割 用定界符分割文本,并保留第n个元素(第一个元素为0)。
d2:长度 查找字符串的长度。
d2:zpvc 返回给定对象参数中数字零和正值的数量。可以提供任意数量的参数。
d2:inOrgUnitGroup * 评估当前组织单位是否在参数组中。可以使用ID或组织单位组代码定义自变量。
d2:hasUserRole** 如果当前用户具有此角色,则返回true,否则返回false。
d2:zScoreWFA*** 函数根据WHO年龄加权指标提供的数据计算z得分。根据重量值,其值在-3.5至3.5之间变化。 提供小于 0 或大于 60 的年龄将导致不计算计划规则。此外,WFA 表的年龄参数增量为 1,提供分数年龄将使该值下限(2.3 个月 → 2 个月)。
d2:zScoreHFA*** 函数根据 WHO 年龄别身高指标提供的数据计算 z 分数。其值根据重量值在 -3.5 到 3.5 之间变化。 提供小于 0 或大于 60 的年龄将导致不计算计划规则。此外,HFA 表的年龄参数增量为 1,提供分数年龄将使该值下限(2.3 个月 → 2 个月)。
d2:zScoreWFH*** 函数根据 WHO 身高体重指标提供的数据计算 z 分数。其值根据重量值在 -3.5 到 3.5 之间变化。 提供小于 45 或大于 120 的高度将导致程序规则无法计算。此外,WFH 表的高度参数增量为 0.5,提供分数高度将使该值下底 (45.3 → 45

注意

  • 适用于 DHIS2 v2.30 ** 适用于 DHIS2 v2.31 及更高版本 *** 适用于 DHIS2 v2.32 及更高版本

程序规则表达式中使用的标准变量

在DHIS2 v2.30中可用

变量 功能说明 状态 实施注意事项
V {current_date} 执行规则时包含当前日期。
V {event_date} 包含当前事件执行的事件日期。规则作为注册表格的一部分执行时将没有值。
V {event_status} 包含当前事件或注册的状态。
V {due_date} * 执行规则时,此变量将包含当前日期。注意:这意味着该规则可能会在不同时间产生不同的结果,即使没有其他改变。
V {event_count} 包含注册中的事件总数。
V {enrollment_date} * 包含当前注册的注册日期。对于单个事件程序将没有值。
V {incident_date} * 包含当前注册的事件日期。对于单个事件程序将没有值。
V {enrollment_id} * 当前注册的通用标识符字符串(UID)。对于单个事件程序将没有值。
V {event_id} 当前事件上下文的通用标识符字符串(UID)。规则作为注册表格的一部分执行时将没有值。
V {orgunit_code} 包含链接到当前注册的组织单位的代码。对于单个事件程序,将改用当前事件组织单元中的代码。
V {environment} 包含代表规则的当前运行时环境的代码。可能的值为“ WebClient”,“ AndroidClient”和“ Server”。当程序规则仅应在一种或多种客户端类型中运行时可以使用。
V {program_stage_id} 包含触发规则的当前程序阶段的ID。这可用于在特定程序阶段运行规则,或避免在某些阶段执行。在TEI注册表单中执行规则时,变量将为空。
V {program_stage_name} 包含触发规则的当前程序阶段的名称。这可用于在特定程序阶段运行规则,或避免在某些阶段执行。在TEI注册表单中执行规则时,变量将为空。

注意

*仅适用于跟踪器

网络版计划规则与Android版之间的区别

由于网页和安卓应用程序目前使用的是不同的*程序规则引擎*,因此可能会出现在一个系统中有效而在另一个系统中无效的程序规则。一般来说,可以说安卓系统的*程序规则引擎*更为严格,因此,一些在网页版 DHIS2 中有效的程序规则在安卓系统中会失效。本小节将介绍其中的主要区别,以及如何调整规则,使其在两个系统中都能正常运行。

布尔类型的求值

DHIS2 Web 版本将布尔类型视为 0 或 1(可以评估为 true 或 false),但 Android 仅将它们评估为 true 或 false。虽然这使得在 Web 中添加布尔值成为可能,但在 Android 中却会失败;为了解决这个问题,需要一个额外的*程序规则变量*来将布尔值转换为可以操作的数字。请查看下表以获取示例和可能的解决方案。

对于以下示例,请考虑以下内容:

  • yn_prv1:是一个程序规则变量,已配置为获取“是/否”数据元素的值
  • yn_prv2:是程序规则变量,已配置为获取“是/否”数据元素的值
  • prv_boolean_one:是一个程序规则变量,已配置为获取“是/否”数据元素的值
  • prv_boolean_two:是一个程序规则变量,已配置为获取“是/否”数据元素的值
  • prv_boolean_one_to_number:是具有计算值的程序规则变量
  • prv_boolean_two_to_number:是具有计算值的程序规则变量
  • 有时将true用作程序规则条件,表示始终执行该操作
  • 使用以下缩写词:
    • DE(数据元素)
    • PR(计划规则)
    • PRE(程序规则表达式)
    • PRC(程序规则条件)
    • PRV(程序规则变量)
    • PRA(程序规则操作)
计划规则条件 计划规则动作 网络版 Android版 评论
d2:hasValue('yn_prv1')|| d2:hasValue('yn_prv2') 为DE分配固定值
| # 为DE分配固定值
d2:hasValue('yn_prv1')|| d2:hasValue('yn_prv2') 将值分配给DE:#{yn_prv1} +#{yn_prv2} + 1 当布尔值被标记为表达式会导致 true+false+1 时,Android 中会崩溃
PR1: #{prv_boolean_one}

PR2: #{prv_boolean_two}

PR3: #{prv_boolean_one} || #
PRA1。将值“ 1”分配给PRV“#{prv_bool_one_to_number}”

PRA2。将值:“ 1”分配给PRV“#{prv_bool_two_to_number}”

PRA3。将值分配给DE:“#{prv_bool_one_to_number} +#{prv_bool_two_to_number} + 1”
布尔值有2个变量,一个通过PRV定义“值形式DE”获取值,另一个通过PRA获得。如果未标记布尔值,则将其视为字符串而不是数字
四个 PR 用于将 1 或 0 分配给布尔值,还有一个用于加法。优先级从上到下

PRC1: !d2:hasValue('prv_boolean_one') || !#{prv_boolean_one}

PRC2: d2:hasValue('prv_boolean_one' ) && #{prv_boolean_one}

PRC3: !d2:hasValue(' prv_boolean_two') || !#{prv_boolean_two}

PRC4: d2:hasValue('prv_boolean_two') && #{prv_boolean_two}

PRC5: true
PRA1: Assign value: "0" to PRV "#{prv_bool_one_to_number}"

PRA2: Assign value: "1" to PRV "#{prv_bool_one_to_number}"

PRA3: Assign value: "0" to PRV "#{prv_bool_two_to_number}"

PRA4: Assign value: "1" to PRV "#{prv_bool_two_to_number}"

PRA5: Assign value: "#{prv_bool_one_to_number} + #{prv_bool_two_to_number} + 1" to DE
布尔值有2个变量,一个通过PRV定义“值形式DE”获取值,另一个通过PRA获得。

数字评估

DHIS2 网络版本以更灵活的方式评估数字,将值从整数转换为浮点数,反之亦然。这可能会导致一些问题,如下例所示。

数字除法{ #division-of-numbers }

如果需要除法,网络将从整数强制转换为浮点数,但是,Android 采用数字本身(字面意义上的并且没有强制转换),这最终会给出意想不到的结果。请查看下表以获取示例和可能的解决方案。

计划规则条件 计划规则动作 网络版 Android版 评论
真正 将值分配给DE:d2:daysBetween('2020-05-13','2020-05-17')/ 3 用户期望将除法计算为4/3,结果为1.3333。但是,Android不会将4强制转换为浮点数(与Web版本相同,为4.0),因此Android的结果是纯1,这是整数除法4/3的结果
真正 将值分配给DE:d2:daysBetween('2020-05-13','2020-05-17')/ 3.0 网页和Android中的除法结果均为1.33333

使用函数 validatePattern

同样,如果使用数字类型的 DataElement,Android 会将该值用作浮点数(包括小数),这可能会导致 validatePattern 函数无法按预期工作。

考虑以下:

  • tempatue_prv:是一个程序规则变量,包含数据元素*温度*的值。
  • 用户在数据元素中输入 38。
计划规则条件 计划规则动作 网络版 Android版 评论
!d2:validatePattern(#{temperature_prv},'\\{d}') 如果值不是 2 位,则显示错误 用户希望程序规则不会显示错误,因为 38 确实与模式匹配。但是,Android 尝试根据 38.0 验证模式 \{d} ,导致 Android 显示错误。
!d2:validatePattern(#{temperature_prv},'(\\d{2}|\\d{2}\\.\\d|\\d{2}\\.\\d{2})$') 如果值不是 2 位,则显示错误 这里使用的正则表达式将匹配整数和浮点数,从而在 Web 和 Android 中正确计算并且不会显示错误。

计划规则的变更(从应用 2.2 版开始){ #capture_app_pr_changes }

该应用程序的 2.2 版本(2020 年 8 月发布)包含了一个新的规则引擎。该规则引擎需要对程序规则表达式执行一些可选和一些强制更改,以便使其在新应用程序中工作。以下小节包含这些更改的列表、如何检测它们以及如何修复它们。

评估“ d2:hasValue”

描述

这是一个可选的更改。 d2:hasValue 现在可以使用单引号或完整变量表达式。以下表达式有效:(d2:hasValue('variable_name') 和 d2:hasValue(#{variable_name}))

如何通过API进行识别?

获取条件或程序规则操作使用d2:hasValue函数的programRules。

https://example.org/api/programRules?fields=program[name],name,programRuleActions[data],condition&filter=programRuleActions.data:like:hasValue&filter=condition:like:hasValue&rootJunction=OR

``xml d2:hasValue(#{Age in years}) d2:hasValue('Age in years')

#### 如何解决? { #how-to-fix-it } 

上面的示例显示了使用hasValue函数的不同方式如何与2.2版产生相同的效果。没有强制性的更改,但是要记住,在编写新程序规则时,保持一致可能有助于避免问题。

### 变量评估 { #capture_app_pr_changes_eval_var }

#### 描述 { #description } 

这是强制性的改变。 *!#{variable_name}* 只能使用布尔类型变量(BOOLEAN 和 TRUE_ONLY)。

#### 如何通过API进行识别? { #how-to-identify-via-api } 

获取类型为NOT BOOLEAN或TRUE_ONLY的dataElements的programRulesVariables
https://example.org/api/programRuleVariables?fields=name&filter=dataElement.valueType:!in:[TRUE_ONLY,BOOLEAN]&paging=False
获取所有programRule.conditions
https://example.org/api/programRules?fields=displayName,condition&paging=False
手动(或通过脚本以编程方式)检查是否在programRule.conditions列表(通过第二个API调用获得)中使用了任何程序规则变量(通过第一个API调用获得)。

例如,从第一个列表中,我们得到:

``xml
<programRuleVariable name="AdditionalMedication"/>
<programRuleVariable name="age"/>
<programRuleVariable name="Age in years"/>
<programRuleVariable name="AgeYears"/>
<programRuleVariable name="allergies"/>
<programRuleVariable name="apgarcomment"/>

我们可以与第二个列表进行比较:

xml <programRule> <condition>!#{Pregant} PR03- !#{varible_name} - BOOLEAN</condition> <displayName>PR03- !#{varible_name} - BOOLEAN</displayName> </programRule> <programRule> <condition>!#{ 年龄(岁数}</condition> <displayName>PR03- !#{varible_name} - NOT BOOLEAN</displayName> </programRule> <programRule> <condition>#{PregnancyStatus} != 'YES' (怀孕状态</condition> <displayName>怀孕状态:假</displayName> </programRule>

这表明NON BOOLEAN变量被错误地使用。

#### 如何解决? { #how-to-fix-it } 

确保在您的条件下评估BOOLEAN或TRUE_ONLY变量。如果程序规则变量不是该类型,请使用d2:hasValue(#{variable_name})或d2:hasValue('variable_name')更新程序规则条件

在上面的示例中,条件应更改为:

``xml
<condition>年龄</condition>
到:xml d2:hasValue('Age in years')

### 评估文字 { #capture_app_pr_changes_eval_text }

#### 描述 { #description } 

这是强制性的改变。在 ASSIGN、DISPLAY TEXT、DISPLAY KEY/VALUE PAIR、SHOW WARNING、SHOW ERROR、WARNING ON COMPLETE 或 ERROR ON COMPLETE 类型的程序规则操作中,如果要计算和分配/显示的表达式是文本,则必须用单引号括起来引号。

#### 如何通过API进行识别? { #how-to-identify-via-api } 

获取程序规则,这些操作的类型为文本,并且在字段数据上带有某些内容,并验证其数据内容以查找不带引号的字符串。
https://example.org/api/programRules?fields=program[name],name,programRuleActions[programRuleActionType,content,data]&filter=programRuleActions.programRuleActionType:in:[ASSIGN,DISPLAYTEXT,DISPLAYKEYVALUEPAIR,SHOWWARNING,SHOWERROR]&filter=programRuleActions.data:!null&paging=false
例如,我们可以在此处检测到第一个“程序规则操作”中没有引号的文本字段错误,而第二个正确。

``xml
<programRule name="PR04- !#{varible_name} - BOOLEAN - Assign text without quotes">
<program name="JB_Testing_2.2"/>
<programRuleActions>
<programRuleAction>
<programRuleActionType>显示警告</programRuleActionType>
<data>嵌入</data>
<content>PR04 文本带引号:</content>
</programRuleAction>
</programRuleActions>
</programRule>

``xml 显示警告 embarazada PR04 带引号的文本是

#### 如何解决? { #how-to-fix-it } 

扫描生成的列表(通过建议的API调用)以查找“程序规则操作”中未引用文本的数据组件,然后转到每个已标识的程序规则并进行更新。

### 字符串和对象的串联 { #capture_app_pr_changes_concat }

#### 描述 { #description } 

这是强制性的改变。在 ASSIGN、DISPLAY TEXT、DISPLAY KEY/VALUE PAIR、SHOW WARNING、SHOW ERROR、WARNING ON COMPLETE 或 ERROR ON COMPLETE 类型的程序规则操作中,如果要计算和分配/显示的表达式是文本,则必须用单引号括起来引号(与之前的更改相同);但是,最重要的是,如果需要连接两个字符串或函数组合,则必须使用 *d2:concatenate* 函数。

#### 如何通过API进行识别? { #how-to-identify-via-api } 

获取程序规则,这些操作是文本类型的,具有字段数据上的任何内容,并验证其数据内容以检查是否在两个或多个字符串(或其他对象)被合并的情况下使用了d2:concatenate函数

获取程序规则,其中哪些操作为文本类型,并验证其数据内容以查找不带引号的字符串。
http://localhost:8034/api/programRules?fields=program[name],name,programRuleActions[programRuleActionType,content,data]&filter=programRuleActions.programRuleActionType:in:[ASSIGN,DISPLAYTEXT,DISPLAYKEYVALUEPAIR,SHOWWARNING,SHOWERROR]&filter=programRuleActions.data:!null&paging=false
例如,我们可以在不使用d2:concatenate的情况下在一个动作中检测到两个字符串的错误。

``xml
<programRule name="PR08- Assign text and variable without concatenate">
<program name="JB_Testing_2.2"/>
<programRuleActions>
<programRuleAction>
<programRuleActionType>显示警告</programRuleActionType>
<data>年龄为 10,模数""另一个字符串</data>
<content>PR05 不带连接的文本是:</content>
</programRuleAction>
</programRuleActions>
</programRule>

如何解决?

扫描生成的列表(通过建议的API调用)以找到程序规则操作中要串联两个或更多对象的数据组件,并使用d2:concatenate函数对其进行更新。

在上面的示例中,数据应更改为:

``xml '年龄为 10,模数' '另一个字符串

到:
``xml
<data>d2:concatenate('Age is 10 and modulus','another string')</data>