7.14. 应用条件来映射
在某些集成中,向映射添加条件处理会很有帮助。例如,假设您将 source zip code 字段映射到目标 zip code 字段。如果 source zip code 字段为空,您可能需要使用 99999
填写目标字段。要做到这一点,您可以指定一个表达式来测试 zip 代码源字段,以确定它是否为空,如果为空,将 99999
插入 zip 代码目标字段。
应用条件到映射仅是一项技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。有关红帽技术预览功能支持范围的详情,请参考 https://access.redhat.com/support/offerings/techpreview/。
数据映射程序支持与 Microsoft Excel 表达式类似的表达式,但不支持所有 Microsoft Excel 表达式语法。条件表达式可以引用单个字段或集合中的字段。
您可以为每个映射定义零个或一个条件。
以下流程从应用条件开始进行映射。
注: 将条件添加到映射后,Source 和 Target 转换选项将被禁用。您必须将任何转换放在条件表达式中。
先决条件
- 您在 Data Mapper 步骤中映射字段。
- 熟悉 Microsoft Excel 表达式,或者您有您想要应用到映射的条件表达式。
流程
如果数据类型还没有可见,点 来显示它们。
虽然这不是指定条件的要求,但查看数据类型会很有帮助。
创建您要对其应用条件的映射,或者确保当前选择的映射是您要将条件应用到的映射。例如,考虑这个映射:
在左上角,点 以显示条件表达式输入字段。
在 expression 字段中,数据映射器会自动显示当前映射中的 source 字段的名称。例如:
在表达式输入字段中,源字段的顺序是您创建映射时选择的顺序。这很重要,因为默认映射行为是数据映射程序串联字段值,以便在 target 字段中插入结果。在本例中,要创建此映射,首先选择
lastName
,然后选择firstName
。编辑 expression 输入字段,以指定您希望数据映射程序应用到映射的条件表达式。有关支持的条件表达式的详情,请遵循此流程。
如果要在条件映射中包含转换,您必须将转换添加到条件表达式中。
在指定表达式时,您可以键入
@
和 start 来键入字段的名称。数据映射器显示与您输入的字段列表。选择您要在表达式中指定的字段。当您向表达式中添加字段名称时,data mapper 会将该字段添加到映射中。例如,考虑这个条件表达式:
在执行过程中,如果数据映射器决定
lastName
字段为空,它将firstName
字段映射到目标customerName
字段。如果lastName
字段包含一个值,即不是空的,则 data mapper 会串联 sourceorderId
和phone
字段中的值,并在customerName
字段中插入结果。(本示例展示了逻辑的工作方式,但可能不是有用的示例,因为lastName
字段中有一个值时,您很可能希望数据映射程序只执行映射,而不是将一些其他值映射到目标。)在本例中,输入表达式后,数据映射为:
在条件表达式中,如果您删除表达式应用到的映射中的字段名称,则数据映射程序会从映射中删除该字段。换句话说,映射中的每个字段名称都必须在条件表达式中。
- 如果映射预览字段尚未可见,点 来显示它们。
- 在源预览输入字段中键入示例数据,以确保 target 字段或目标字段获得正确的值。
(可选)点击您要应用转换的每个字段旁的 来把一个或多个源或目标字段应用到所选映射中的一个或多个源或目标字段,然后从下拉菜单中选择所需的转换。
例如,在此流程中介绍的映射中,在 Mapping Details 面板中,您可以将
Uppercase
转换应用到firstName
字段。您可以通过在firstName
字段的 preview 输入字段中输入数据来测试这一点。- 根据需要编辑条件表达式,以获取所需的结果。
条件表达式中支持的函数
SELECT(FILTER(source-collection-name, source-field-name1 != 'v1' ), source-field-name2)
对于具有多个字段的集合,数据映射程序会根据不同 source 字段的值(在同一集合中)过滤一个 source 字段中的值。例如,如果集合(
个人
)包含多个字段,包括name
gender
,您可以使用以下条件表达式根据gender
字段的值过滤名称,以便只有 male 名称映射到 target 字段:SELECT(FILTER(person, gender = 'male' ), name)`
ISEMPTY(source-field-name1 [+ source-field-name2])
ISEMPTY ()
函数的结果是一个布尔值。至少指定一个参数,这是您要将条件应用到的映射中的 source 字段的名称。当指定的 source 字段为空时,ISEMPTY ()
函数返回 true。另外,还可使用附加字段添加 + (分散)Operator,例如:
ISEMPTY(lastName + firstName)
如果 source 字段
lastName
和firstName
都为空,则此表达式评估为 true。通常,
ISEMPTY
() 函数是IF ()
函数中的第一个参数。IF(boolean-expression, then, else)
当
boolean-expression
评估为 true 时,数据映射器会返回。当
boolean-expression
评估为 false 时,数据映射器会返回其他
。所有这三个参数都是必需的。最后的参数可以是 null,这意味着当boolean-expression
评估为 false 时,不会映射任何参数。例如,假设目标
customerName
字段中组合了lastName
和firstName
源字段的映射。您可以指定此条件表达式:IF (ISEMPTY (lastName), firstName, lastName + ',' + firstName)
在执行过程中,数据映射器会评估
lastName
字段。-
如果
lastName
字段为空,即ISEMPTY (lastName)
返回 true,则数据映射器仅将firstName
值插入到目标customerName
字段中。 如果
lastName
字段包含一个值,即ISEMPTY (lastName)
返回 false,则 data mapper 会映射lastName
值,后跟一个逗号,后接firstName
值到目标customerName
字段中。现在,如果表达式中的第三个参数为 null,则请考虑行为:
IF (ISEMPTY (lastName), firstName, null)
在执行过程中,数据映射器会评估
lastName
字段。-
如上例所示,如果
lastName
字段为空,即ISEMPTY (lastName)
返回 true,则数据映射器仅将firstName
值插入到目标customerName
字段中。 -
但是,当第三个参数为 null 时,如果
lastName
字段包含值,即ISEMPTY (lastName)
返回 false,则数据映射器不会将任何内容映射到目标customerName
字段中。
-
如果
l (x,y)
或 < (x,y)
数据映射程序评估
x
和y
,并返回较低值。x
和y
都必须是数字。TOLOWER (string)
数据映射器将指定的字符串转换为小写并返回它。
Operator | Description |
| 添加数字值或串联字符串值。 |
| 从另一个数字值中减去一个数字值。 |
| 多数字值. |
| 划分数字值。 |
| 如果左侧和右侧运算对象为 true,则返回 true。每个操作对象都必须返回一个布尔值。 |
| 如果左侧操作对象为 true,或者右侧操作对象为 true,或者两个操作对象都为 true,则返回 true。每个操作对象都必须返回一个布尔值。 |
| not |
| 如果左侧数字运算对象大于右侧数字运算对象,则返回 true。 |
< | 如果左侧数字运算对象小于右侧数字运算对象,则返回 true。 |
| 如果左侧运算对象和右侧运算对象相同,则返回 true。 |