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