我有一个任务要看一下数据库(SAP iDoc),该数据库具有按段派生的特定值。我必须在映射的末尾导出一个xml,该xml的子组件可以包含多行。我的问题是我们有一个组件,该组件具有两个由限定符分隔的值。
每笔交易看起来像这样:
+----------+-----------+--------+
| QUALF_1 | BETRG_dc | DOCNUM |
+----------+-----------+--------+
| 001 | 20 | xxxxxx |
| 001 | 22 | xxxxxx |
+----------+-----------+--------+
+---------+-----------+-----------+
| QUALF_2 | BETRG_pr | DOCNUM |
+---------+-----------+-----------+
| 013 | 30 | xxxxxx |
| 013 | 40 | xxxxxx |
+---------+-----------+-----------+
我的问题是,当与内置转换结合时,我们的几何级数会像这样
+---------+-----------+-----------+
| DOCNUM | BETRG_dc | BETRG_pr |
+---------+-----------+-----------+
| xxxxxx | 20 | 30 |
| xxxxxx | 20 | 40 |
| xxxxxx | 22 | 30 |
| xxxxxx | 22 | 40 |
+---------+-----------+-----------+
如您所见,只有第一行和最后一行是正确的。
问题来自以下事实:如果BETRG_dc为0,则不会发送整个段,因此过滤器转换失败。
我发现的是QUALF_1和QUALF_2的段号是连续的。因此QUALF_1是例如48,而QUALF_2是49。
您能帮我创建一个JAVA转换,为缺少的QUALF_1添加一行。
这是要求表:
+-------+-------+---------------+
| QUALF | BETRG | SegmentNumber |
+-------+-------+---------------+
| 013 | 20 | 48 |
| 001 | 150 | 49 |
| 013 | 15 | 57 |
| 001 | 600 | 58 |
+-------+-------+---------------+
我想看看转换,如果我们有这样的来源:
+-------+-------+---------------+
| QUALF | BETRG | SegmentNumber |
+-------+-------+---------------+
| 001 | 150 | 49 |
| 013 | 15 | 57 |
| 001 | 600 | 58 |
+-------+-------+---------------+
继续并插入一个段ID为48且BETRG值为“ 0”的行。
我已经尽力了。
预期的输出应如下所示:
+-------+-------+---------------+
| QUALF | BETRG | SegmentNumber |
+-------+-------+---------------+
| 013 | 0 | 48 |
| 001 | 150 | 49 |
| 013 | 15 | 57 |
| 001 | 600 | 58 |
+-------+-------+---------------+
最佳答案
您应该在联接器转换中联接两个表。
使用Left(master)外连接,然后将其放入目标。然后将右表中的BETRG列映射到目标,左表中的其余列映射。
发生的情况是,一旦没有匹配项,BETRG将为空。将其带入表达式中,查看该值是否为null或为空,并将其更改为0或所需的值。