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