Как отличить после разделения по MuleSoft Dataweave - PullRequest
0 голосов
/ 05 декабря 2018

Я разделил одно из моих полей и хотел бы выделить его, показав только 1 запись на дубликат.например, если иметь 5 id = 'abc', то в результате будет показан только 1 id = 'abc'.

На основании приведенного ниже примера вывода я могу различить его, чтобы он показывал только 1 ABC123 вместо2 ABC123?

Введенные мной данные полностью удаляют поле FruitTypeCode на моем выходе, могу ли я узнать причину его возникновения?

Пример ввода

<GetListOfCategoriesDetailResponse xmlns="" xmlns:s="">
    <GetListOfCategoriesDetailResult xmlns:a="" xmlns:i="">
        <a:CategoryDetail>
            <a:Category>ABC123 Kook</a:Category>
            <a:CategoryClass>Apple</a:CategoryClass>
            <a:FruitTypeGrouping/>
        </a:CategoryDetail>
        <a:CategoryDetail>
            <a:Category>ABC123 Loop</a:Category>
            <a:CategoryClass>Apple</a:CategoryClass>
            <a:FruitTypeGrouping/>
        </a:CategoryDetail>
        <a:CategoryDetail>
            <a:Category>BCD344 78JL</a:Category>
            <a:CategoryClass>Apple</a:CategoryClass>
            <a:FruitTypeGrouping/>
        </a:CategoryDetail>
    </GetListOfCategoriesDetailResult>
</GetListOfCategoriesDetailResponse>

Текущий вывод

 <ns0:FoodProducts>
     <ns0:FoodProduct>
         <ns0:FruitTypes>
             <ns0:FruitType FruitTypeCode="ABC123" FruitTypeName="Apple" FruitTypeGroup="">
                 <ns0:Descriptions>
                     <ns0:Description>
                         <ns0:Text>This is sweet</ns0:Text>
                     </ns0:Description>
                 </ns0:Descriptions>
             </ns0:FruitType>
             <ns0:FruitType FruitTypeCode="ABC123" FruitTypeName="Apple" FruitTypeGroup="">
                 <ns0:Descriptions>
                     <ns0:Description>
                         <ns0:Text>This is not sweet</ns0:Text>
                     </ns0:Description>
                 </ns0:Descriptions>
             </ns0:FruitType>
             <ns0:FruitType FruitTypeCode="BCD344" FruitTypeName="Apple" FruitTypeGroup="">
                 <ns0:Descriptions>
                     <ns0:Description>
                         <ns0:Text></ns0:Text>
                     </ns0:Description>
                 </ns0:Descriptions>
             </ns0:FruitType>
     </ns0:FoodProduct>
 </ns0:FoodProducts>

Ожидаемый результат

 <ns0:FoodProducts>
     <ns0:FoodProduct>
         <ns0:FruitTypes>
             <ns0:FruitType FruitTypeCode="ABC123" FruitTypeName="Apple" FruitTypeGroup="">
                 <ns0:Descriptions>
                     <ns0:Description>
                         <ns0:Text>This is sweet</ns0:Text>
                     </ns0:Description>
                 </ns0:Descriptions>
             </ns0:FruitType>
             <ns0:FruitType FruitTypeCode="BCD344" FruitTypeName="Apple" FruitTypeGroup="">
                 <ns0:Descriptions>
                     <ns0:Description>
                         <ns0:Text></ns0:Text>
                     </ns0:Description>
                 </ns0:Descriptions>
             </ns0:FruitType>
     </ns0:FoodProduct>
 </ns0:FoodProducts>

Мой до сих пор код данных dataweave

%output application/xml
 %namespace ns0 
 %namespace ns01 
 %namespace ns1 
 ---
 {
     ns0#FoodProductRS: {
         ns0#FoodProducts: {
             ns0#FoodProduct: {
                 ns0#FruitTypes: {         
  ((payload.ns01#GetListOfCategoriesDetailResponse.ns01#GetListOfCategoriesDetailResult.*ns1#CategoryDetail filter $.ns1#CategoryClass == "Apple" map ((categoryDetail , indexOfCategoryDetail) -> {
                         ns0#FruitType @(FruitTypeCode: (categoryDetail.ns1#Category splitBy " ")[0], FruitTypeName: categoryDetail.ns1#CategoryClass , FruitTypeGroup: categoryDetail.ns1#FruitTypeGrouping): {
                             ns0#Descriptions: {
                                 ns0#Description: {
                                     ns0#Text: categoryDetail.ns1#LongDescription
                                 }
                             }

                         }
                     })) distinctBy $.ns0#FruitType.@FruitTypeCode)
                 }
             }
         }
     }
 } 

1 Ответ

0 голосов
/ 06 декабря 2018

Я попробовал ваш скрипт в mule 3.9.2, и он должен работать, но, к сожалению, вы столкнулись с проблемой (она будет присутствовать в 3.9.3).Чтобы обойти это, вы должны сначала разобраться.

%output application/xml
     %namespace ns0 a
     %namespace ns01 a
     %namespace ns1 a
     ---
     {
         ns0#FoodProductRS: {
             ns0#FoodProducts: {
                 ns0#FoodProduct: {
                     ns0#FruitTypes: {         
                        (
                            (payload.ns01#GetListOfCategoriesDetailResponse.ns01#GetListOfCategoriesDetailResult.*ns1#CategoryDetail 
                                filter $.ns1#CategoryClass == "Apple" 
                                distinctBy ($.ns1#Category splitBy " ")[0]
                                map ((categoryDetail , indexOfCategoryDetail) -> {
                                     ns0#FruitType @(FruitTypeCode: (categoryDetail.ns1#Category splitBy " ")[0], FruitTypeName: categoryDetail.ns1#CategoryClass , FruitTypeGroup: categoryDetail.ns1#FruitTypeGrouping): {
                                         ns0#Descriptions: {
                                             ns0#Description: {
                                                 ns0#Text: categoryDetail.ns1#LongDescription
                                             }
                                         }

                                     }
                                })
                             ) 
                        )
                     }
                 }

Какую версию мула вы используете?

...