Значение приращения на основе проверки поля в Dataweave

<tXML>
  <Header>
    <Source>J1_RETAIL</Source>
    <Action_Type>Update</Action_Type>
    <Sequence_Number>0</Sequence_Number>
    <Batch_ID>4383352</Batch_ID>
    <Reference_ID>04381645</Reference_ID>
    <User_ID>SAP</User_ID>
    <Password>password</Password>
    <Message_Type>SAP_DO</Message_Type>
    <Company_ID>J1</Company_ID>
    <Msg_Locale>English (United States)</Msg_Locale>
    <Msg_Time_Zone>Eastern Standard Time</Msg_Time_Zone>
    <Version></Version>
    <Internal_Reference_ID></Internal_Reference_ID>
    <Internal_Date_Time_Stamp></Internal_Date_Time_Stamp>
    <External_Reference_ID></External_Reference_ID>
    <External_Date_Time_Stamp></External_Date_Time_Stamp>
  </Header>
  <Message>
    <DistributionOrder>
        <ProcessInfo>
            <RefTextField1></RefTextField1>
            <RefTextField2></RefTextField2>
            <RefTextField3>S082</RefTextField3>
            <RefTextField4></RefTextField4>
            <RefTextField5></RefTextField5>
            <RefTextField6></RefTextField6>
            <RefTextField7>J1</RefTextField7>
            <RefTextField8>[0001333006_SAPTOMIF]</RefTextField8>
            <RefTextField9></RefTextField9>
            <RefTextField10>[ _20191223]</RefTextField10>
            <RefNumberField1>20191220</RefNumberField1>
            <RefNumberField2>34621</RefNumberField2>
            <RefNumberField3></RefNumberField3>
            <RefNumberField4>53</RefNumberField4>
            <RefNumberField5>13</RefNumberField5>
        </ProcessInfo>
        <Comment>
            <NoteType>MB</NoteType>
            <NoteCode>05</NoteCode>
            <CommentText>[00000_8769_741_82_093_965_987_456]</CommentText>
            <Visibility>0</Visibility>
          </Comment>
          <CustomFieldList>
            <CustomField>
              <Name>SiteID</Name>
              <Value></Value>
            </CustomField>
        <LineItem>
            <DoLineNbr>1</DoLineNbr>
            <ItemName>135465</ItemName>
            <Description>A</Description>
            <UpdateActionType></UpdateActionType>
            <PackageType></PackageType>
            <DoLineStatus>Released</DoLineStatus>
            <InventoryAttributes>
              <InventoryType>F</InventoryType>
              <ProductStatus></ProductStatus>
              <BatchNbr></BatchNbr>
              <CountryOfOrigin></CountryOfOrigin>
              <ItemAttribute1>R</ItemAttribute1>
              <ItemAttribute2></ItemAttribute2>
              <ItemAttribute3></ItemAttribute3>
              <ItemAttribute4></ItemAttribute4>
              <ItemAttribute5></ItemAttribute5>
            </InventoryAttributes>
        </LineItem>
    </DistributionOrder>
  </Message>
</tXML>

Мой код выглядит так

output application/csv header = false , separator = "|" , quoteValues = false
---
payload.tXML.Message.*DistributionOrder map ((DistributionOrder , indexofDistributionOrder) ->  {
    column_1: "000000001",
    column_2: "0",
    column_3: "0",
    column_4: (LineItem.LineProcessInfo.LineRefTextField2 splitBy "_")[0] replace "[" with "" default "",
    column_5: (LineItem.LineProcessInfo.LineRefTextField2 splitBy "_")[1] replace "[" with "" default "",
    column_6: ????
    column_7: "",
    column_8: "",
    column_9: "",
    column_10: "",
})

for column_6 условие, если if NoteType = MB и NoteCode =05 и мне нужно перебирать каждый текст комментария и под DistributionOrder [00000_8769_741_82_093_965_987_456] и есть 8 [от 0 до 7] значений, разделенных подчеркиванием. Мне нужно проверить, прибывают ли значения от 1 до 7, тогда, если значение не пустое, назначьте инкрементное значение от 01 до 07. Если одно из значений становится пустым, пропустите этот номер, назначьте следующий номер (например, если 5-е значение становится пустым затем пропустите 05 и назначьте 06).


person Nag    schedule 14.01.2020    source источник
comment
Можете ли вы добавить один или несколько примеров вывода с использованием тех же данных, чтобы лучше понять, чего вам нужно достичь? Я не понимаю, где заканчиваются восемь упомянутых вами ценностей.   -  person Jorge Garcia    schedule 14.01.2020
comment
‹Comment› ‹NoteType› MB ‹/NoteType› ‹NoteCode› 05 ‹/NoteCode› ‹CommentText› [00000_8769_741_82_ _ _987_456] ‹/CommentText› ‹Visibility› 0 ‹/Visibility›/Comment› 00000000 ‹0 | 0 || | 01 |||| 000000001 | 0 | 0 ||| 02 |||| 000000001 | 0 | 0 ||| 03 |||| 000000001 | 0 | 0 ||| 06 |||| 000000001 | 0 | 0 ||| 07 |||| в приведенном выше примере 4-й элемент и 5-й отсутствуют, тогда мне нужно пропустить эти числа, как указано выше   -  person Nag    schedule 14.01.2020


Ответы (1)


Ваш запрос, похоже, заключается в увеличении счетчика на основе строки. Это немного сбивает с толку. Я бы переопределил его как подсчет непустых значений, разделенных символом '_' в элементе CommentText, который является строкой.

Тогда я бы выразил столбец 6 как:

column_6: sizeOf( (DistributionOrder.Comment.CommentText splitBy  ('_')) filter (not isBlank($) ))

Для ввода:

<CommentText>[00000_8769_741_82_ _ _987_456]</CommentText>

выход 6.

person aled    schedule 18.01.2020