Генерация случайных чисел в mule dataweave

Мне нужно объединить случайно сгенерированное число с полем из запроса в dataweave.

NUMBR: "AA" ++ $.Load.Reference.*Reference ++ RandomNumber

Как этого добиться в Mule Dataweave


person thileep    schedule 23.10.2015    source источник


Ответы (5)


Не уверен, что вы можете сделать в Datawevae для этого, но вы можете установить случайное число в flowVariable и вызвать его из своего сценария Dataweave следующим образом:

<set-variable variableName="random"
    value="#[new java.util.Random().nextInt(100)]" doc:name="Variable" />

<dw:transform-message doc:name="Transform Message">
    <dw:input-variable doc:sample="unknown.dwl" variableName="random" />
    <dw:set-payload>
    <![CDATA[%dw 1.0
        %output application/dw
        ---
        {
            "data": ("22" as :number + flowVars.random)
        } ]]>
    </dw:set-payload>
</dw:transform-message>
person Ryan Carter    schedule 23.10.2015

Вы также можете использовать Expression Component, чтобы назначить его полезной нагрузке или переменным, а затем объединить

<flow name="random-numbersFlow">
    <http:listener config-ref="HTTP_Listener_Configuration" path="/random" allowedMethods="GET" doc:name="HTTP"/>
    <expression-component doc:name="Expression"><![CDATA[payload = new java.util.Random().nextInt(100)]]></expression-component>
    <dw:transform-message doc:name="Transform Message">
        <dw:set-payload><![CDATA[%dw 1.0
%output application/java
---
{
    data: payload
}]]></dw:set-payload>
    </dw:transform-message>
    <logger message="#[payload]" level="INFO" doc:name="Logger"/>
</flow>
person Utsav    schedule 24.10.2015

Вы не можете сделать это в чистом DataWeave, но вы можете использовать два метода для генерации числа в другом месте приложения:

  1. Вы можете вызвать глобальную MEL-функцию из DataWeave: https://docs.mulesoft.com/mule-user-guide/v/3.7/dataweave-reference-documentation#global-mel-functions
  2. Вы можете вызвать поток, который возвращает значение: https://docs.mulesoft.com/mule-user-guide/v/3.7/dataweave-reference-documentation#expressions-that-call-external-flows
person aled    schedule 30.12.2015

Просто установите случайное значение, сгенерированное Java, в переменную потока

<set-variable variableName="Random_Variable" value="#[java.util.Random().nextInt(10)]" doc:name="Random Variable"/>

Затем используйте эту переменную потока в преобразовании Dataweave.

<dw:transform-message doc:name="Transform Message" metadata:id="8098b24c-30c1-4e9e-a3ce-9e8aaaec7bd1">
            <dw:input-variable mimeType="application/java" variableName="Random_Variable"/>
            <dw:set-payload><![CDATA[%dw 2.0
%output application/json
---
{
    NUMBR: "AA" ++ $.Load.Reference.*Reference ++ flowVars.Random_Variable
}]]></dw:set-payload>
</dw:transform-message>
person Gurpreet Singh    schedule 06.02.2019

В Mule 4 Dataweave 2 функция radom ()

Возвращает псевдослучайное число, большее или равное 0,0, но меньшее 1,0.

MULE 4 DOC: https://docs.mulesoft.com/mule-runtime/4.3/dw-core-functions-random

Пример:% dw 2.0 output application / json

{цена: random () * 1000}

person Juan Carlos    schedule 17.06.2020
comment
Хотя эта ссылка может дать ответ на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если ссылка на страницу изменится. - Из отзыва - person Ryan M; 18.06.2020