Java 用于在映射 Informatica PowerCenter 中写入缺失值的代码
Java code to write a missing value in a mapping Informatica PowerCenter
我的任务是查看一个数据库 (SAP iDoc),该数据库中具有按段派生的特定值。我必须在映射的末尾导出一个 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 添加一行吗?
这里有一个table的要求:
+-------+-------+---------------+
| 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 |
+-------+-------+---------------+
您应该将两个 table 都加入到连接器转换中。
使用 Left(master) outer join 然后将其带入目标。然后将 BETRG 列从右侧 table 映射到目标,并将其余列从左侧 table 映射到目标。
发生的情况是,当没有匹配项时,BETRG 将为空。将其放入表达式中,查看该值是否为 null 或空,然后将其更改为 0 或您想要的值。
这是我创建的,但不幸的是现在它只适用于行级别,而不适用于整个数据。我正在努力使代码 运行 正确:
QUALF_out = QUALF;
BETRG_out= BETRG;
SegmentNumber_out= SegmentNumber;
if(QUALF.equals("001"))
{
segment_new=(SegmentNumber - 1);
}
int colCount=1;
myList.add(SegmentNumber);
System.out.println("SegmentNumber_out: " + segment_new);
if(Arrays.asList(myList).contains(segment_new)){
QUALF_out = QUALF;
BETRG_out= BETRG;
SegmentNumber_out= SegmentNumber;
QUALF_out="013";
BETRG_out="0";
SegmentNumber_out=segment_new;
generateRow();
} else {
QUALF_out = QUALF;
BETRG_out= BETRG;
SegmentNumber_out= SegmentNumber;
generateRow();
}
这是有效的:
import java.util.*;
private ArrayList<String> myList2 = new ArrayList<String>();
QUALF_out = QUALF;
BETRG_out = BETRG;
SegmentNumber_out = SegmentNumber;
DOCNUM = DOCNUM;
array_for_search = QUALF + ParentSegmentNumber + DOCNUM ;
myList2.add(array_for_search);
System.out.println("myList: " + myList2);
System.out.println("Array: " + myList2.contains("910" + ParentSegmentNumber + DOCNUM));
if(!myList2.contains("910" + ParentSegmentNumber + DOCNUM)){
QUALF_out="910";
BETRG_out="0";
}
generateRow();
我的任务是查看一个数据库 (SAP iDoc),该数据库中具有按段派生的特定值。我必须在映射的末尾导出一个 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 添加一行吗?
这里有一个table的要求:
+-------+-------+---------------+
| 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 |
+-------+-------+---------------+
您应该将两个 table 都加入到连接器转换中。 使用 Left(master) outer join 然后将其带入目标。然后将 BETRG 列从右侧 table 映射到目标,并将其余列从左侧 table 映射到目标。 发生的情况是,当没有匹配项时,BETRG 将为空。将其放入表达式中,查看该值是否为 null 或空,然后将其更改为 0 或您想要的值。
这是我创建的,但不幸的是现在它只适用于行级别,而不适用于整个数据。我正在努力使代码 运行 正确:
QUALF_out = QUALF;
BETRG_out= BETRG;
SegmentNumber_out= SegmentNumber;
if(QUALF.equals("001"))
{
segment_new=(SegmentNumber - 1);
}
int colCount=1;
myList.add(SegmentNumber);
System.out.println("SegmentNumber_out: " + segment_new);
if(Arrays.asList(myList).contains(segment_new)){
QUALF_out = QUALF;
BETRG_out= BETRG;
SegmentNumber_out= SegmentNumber;
QUALF_out="013";
BETRG_out="0";
SegmentNumber_out=segment_new;
generateRow();
} else {
QUALF_out = QUALF;
BETRG_out= BETRG;
SegmentNumber_out= SegmentNumber;
generateRow();
}
这是有效的:
import java.util.*;
private ArrayList<String> myList2 = new ArrayList<String>();
QUALF_out = QUALF;
BETRG_out = BETRG;
SegmentNumber_out = SegmentNumber;
DOCNUM = DOCNUM;
array_for_search = QUALF + ParentSegmentNumber + DOCNUM ;
myList2.add(array_for_search);
System.out.println("myList: " + myList2);
System.out.println("Array: " + myList2.contains("910" + ParentSegmentNumber + DOCNUM));
if(!myList2.contains("910" + ParentSegmentNumber + DOCNUM)){
QUALF_out="910";
BETRG_out="0";
}
generateRow();