Java-код для записи отсутствующего значения в картографическом Informatica PowerCenter - PullRequest
1 голос
/ 24 июня 2019

У меня есть задача просмотреть базу данных (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.

Вот таблица требований:

+-------+-------+---------------+
| 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 |
+-------+-------+---------------+

Для продолжения вставьте строку с идентификатором сегмента 48 и значением для BETRG «0».

Я перепробовал каждое преобразование, которое смогу.

Ожидаемый результат должен быть таким:

+-------+-------+---------------+
| QUALF | BETRG | SegmentNumber |
+-------+-------+---------------+
|   013 |     0 |            48 |
|   001 |   150 |            49 |
|   013 |    15 |            57 |
|   001 |   600 |            58 |
+-------+-------+---------------+

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

Вот то, что я создал, но, к сожалению, пока он работает только на уровне строк, а не на всех данных. Я работаю над тем, чтобы код работал правильно:

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();
}
0 голосов
/ 25 июня 2019

Вы должны объединить обе таблицы в преобразовании столяра. используйте левое (главное) внешнее соединение, а затем перенесите его в цель. затем сопоставьте столбец BETRG из правой таблицы с целью, а остальные столбцы из левой таблицы. что происходит, когда нет совпадения, BETRG будет пустым. возьмите его в выражение и посмотрите, является ли значение нулевым или пустым, и измените его на 0 или какое значение вы хотите.

...