Я пишу сериализацию через ST, и он должен поместить несколько переменных / узлов в один тег XML.
Введите ABAP itab, который должен быть сериализован:
ROW_ID ROW
VAL INDEX
1 val55 X
val32 Y
val46 X
2 val8 X
val16
val789
3 val78 Y
val53 Y
val98 Y
, где каждый ROW
значение - это itab, который состоит из VAL
и INDEX
полей
Ожидаемый образец вывода для первой строки:
<rows>
<row r="1">
<c r="1_xcell1">
<v>val55</v>
</c>
<c r="1_ycell2">
<v>val32</v>
</c>
<c r="1_xcell3">
<v>val46</v>
</c>
<row>
</rows>
Здесь
1 в <row r="1">
соответствует номеру строки из ROW_ID
1_xcell1 в <c r="1_xcell1">
является конкатенацией ROW_ID
из текущей строки of root table, INDEX
field of current ROW
line, literal cell
and l oop counter of ROW
table
Преобразование, которое я получил, это:
<?sap.transform simple?>
<tt:transform xmlns:tt="http://www.sap.com/transformation-templates" template="main">
<tt:root name="root"/>
<tt:variable name="range" val="11"/>
<tt:template name="main">
<rows>
<tt:loop name="row" ref="root">
<row>
<tt:attribute name="r" value-ref="row_id"/>
<tt:assign to-var="range" ref="row_id"/>
<tt:loop name="cells" ref="$row.ROW">
<tt:serialize>
<c>
<tt:attribute name="r"><tt:write var="range" map="val(I(1)) = xml('1_xcell1'), val(I(2)) = xml('2_xcell2'), val(I(3)) = xml('3_xcell3)"/></tt:attribute>
<v><tt:value ref="value"/></v>
</c>
</tt:serialize>
</tt:loop>
</row>
</tt:loop>
</rows>
</tt:template>
</tt:transform>
, где я поместил ROW_ID
в var для использования при отображении на нижнем рычаге в теге <c>
.
Как видите, этот подход не будет работать, потому что я понятия не имею, как поставить счетчик l oop и как связать его с другими значениями.
Я нашел пару старых тем на answers.sap.com ( 1, 2 , 3 ), но они остаются без ответа.
Есть ли в ST конкатенация, как в XSLT:
`<xsl:element name="{concat($segment2, '_', $tail2)}">`?
Is есть встроенная переменная для циклов, например SY-TABIX
в ABAP?