如果您不熟悉 PI/PO 领域,Node 函数“Collapse Context”和“Remove Context”可能会令人困惑。尽管 Collapse Context 和 Remove Context 有相似之处,但它们之间存在一些主要差异。
演示中使用的 SAP 版本:
- SAP PO 7.5
什么是 PI 中的 Context?
在我们查看 Collapse Context 和 Remove Context 之间的区别之前,我们先看看 PI/PO 中的“ Context”是什么意思。
PI 中的 XML 消息作为队列处理。在队列中, Context 是 XML 节点(元素)相对于父节点的位置或级别。如果元素属于同一父节点,则元素位于同一 Context 中。当父节点更改时,Context Change 将插入到队列中。 Context更改以深灰色显示。
上下文更改在 Graphical Mapping 队列中以深灰色显示
因此,当我们谈论消息的 Context 时,它总是基于某个父节点。XML 元素可以具有不同的 Context 队列,具体取决于与其相关的父节点。
让我们使用下面的 Message Type 来了解上下文更改和 Node Functions。
表示学生成绩详细信息的消息类型
XML 可以有多个学生的多个考试成绩。
-
元素 'Grade' Context根据直接父节点 'Grades' 进行更改。
每个考试的成绩值都分配给单独的 Contexts。
Grade”元素相对于父节点“Grades”的上下文更改
-
元素 'Grade' 上下文根据更高级别的父节点 'StudentDetail' 进行更改。
将元素的 Context 更改为 'StudentDetail' 级别。
现在,每个学生的所有年级都位于一个 Context 中。
Grade”元素相对于父节点“Grades”的上下文更改
折叠上下文 vs 删除上下文。
尽管这两个节点函数的行为不同,但 Collapse Context (折叠上下文) 和 Remove Context (删除上下文) 都会从输入队列中删除上下文更改。
1. 如何在 Collapse Context 和 Remove Context 中复制上下文值。
这两个函数之间的主要区别在于它们如何将 input Context 值复制到输出。Collapse Context 仅从输入中复制每个 Context 的第一个值,而 Remove Context 会将输入中的所有值复制到输出。
Collapse Context | Remove Context |
仅将每个上下文的第一个值复制到输出中。 | 输入上下文中的所有值都将复制到输出中。 |
2. 禁用“保留 SUPPRESS 值”时,折叠上下文和删除上下文如何解释 SUPPRESS 值。
让我们看看当 IF-THEN 函数的 “keep SUPPRESS values” 属性被禁用时,每个函数是如何工作的。
在 IF-THEN 函数中禁用了 Keep SUPPRESS values 属性
另一个区别是这些节点函数如何处理队列中的 SUPPRESS 值。Remove Context 会忽略 SUPPRESS 值并且不会将其复制到输出,而 Collapse Context 会将它们作为 null [] 值复制到输出。
折叠上下文将 SUPPRESS 值复制为 []。
Collapse Context 将 SUPPRESS 值作为 null [] 值复制到输出
Remove Context 将忽略 SUPPRESS 值。
Collapse Context 函数忽略 SUPPRESS 值
3. 激活“Keep SUPPRESS values”时,Collapse Context 和 Remove Context 如何解释 SUPPRESS 值。
保持 IF 函数的 SUPPRESS 值处于活动状态
在这种情况下,两个函数都以相同的方式处理 SUPPRESS 值。SUPPRESS 值被视为与同一上下文中的任何其他值相似。
这两个函数都会删除 Context Changes。Collapse Context 函数从每个 Context 中复制第一个值,Remove Context 将每个上下文的所有值复制到输出
激活 “Keep SUPPRESS values” 时折叠上下文
禁用 “Keep SUPPRESS values”(保留 SUPPRESS 值)时删除队列里面的 Context
您只能使用 UDF 删除这些 SUPPRESSED 值。