DataWeave "as Number" 产生一个对象
DataWeave "as Number" yields an Object
我正在解决 Mulesoft DIY 13-1 培训。我看过解决方案,但希望我的方法。
我在访问数据库之前使用 Retrieve
,然后转换消息和 Store
。
我在 Store
值字段中的 DataWeave 表达式是:payload.lastTransactionID as Number
,它在调试器中生成此表达式:
TypedValue[value: '[B@d98305a', dataType: 'SimpleDataType{type=java.io.Serializable, mimeType='application/json; charset=UTF-8'}']
使用 Logger
我可以获得一个号码。
我的配置 XML:
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:ee="htt... blabla">
<db:config name="Database_Config" doc:name="Database Config" doc:id="27b11761-5ac9-4336-a944-14fadd9edf47" >
<db:my-sql-connection host="${db.host}" port="${db.port}" user="${db.user}" password="${db.password}" database="${db.database}" />
</db:config>
<flow name="flights_transactionFlow" doc:id="e70fff51-5a87-45ec-945d-6dbdf1bf6bcf" >
<scheduler doc:name="Scheduler" doc:id="3ccd1b4f-bf48-4329-9e7f-03e36144c0ed" >
<scheduling-strategy >
<fixed-frequency frequency="10000"/>
</scheduling-strategy>
</scheduler>
<os:retrieve doc:name="Retrieve" doc:id="9d0e9ee4-b86a-424a-8dad-1baee9f8f73a" key="transactionID">
<os:default-value ><![CDATA[0]]></os:default-value> // Set 0 or value of 'transactionID'
</os:retrieve>
<db:select doc:name="Select" doc:id="5f82613b-ca5c-494f-ad7a-3b4ea1b17325" config-ref="Database_Config">
<db:sql >SELECT *
FROM flights_transactions
WHERE transactionID > :transactionID // Select > transactionID
LIMIT 10</db:sql>
<db:input-parameters ><![CDATA[#[{'transactionID': vars.transactionID default 0}]]]></db:input-parameters>
</db:select>
<ee:transform doc:name="Transform Message" doc:id="ce008827-a25b-4c38-b494-00c5e388c3db">
<ee:message>
<ee:set-payload><![CDATA[%dw 2.0
output application/json
---
{
records: payload,
lastTransactionID: payload[sizeOf(payload) - 1].transactionID
}]]></ee:set-payload>
</ee:message>
</ee:transform> // Yields json with payload.records (10 items) and payload.lastTransactionID (highest fetched value)
<os:store doc:name="Store transactionID" doc:id="b99c313b-d672-4c19-9726-bd3d1371f065" key="transactionID">
<os:value><![CDATA[#[payload.lastTransactionID as Number]]]></os:value> // Give me the number
</os:store>
<logger level="INFO" doc:name="Logger" doc:id="74c44c47-70dd-4a31-ac8d-3df1444e5cd0" message='#[payload]'/>
</flow>
</mule>
视觉辅助:
如何获取最后一个transactionID的编号并设置成功?
看起来结果是一个json(因为输入的payload是一个json),你需要指定application/java
作为表达式
的输出
output application/java --- payload.lastTransactionID as Number
问题是我没有在 Retrieve
步骤
中设置输出变量
我正在解决 Mulesoft DIY 13-1 培训。我看过解决方案,但希望我的方法。
我在访问数据库之前使用 Retrieve
,然后转换消息和 Store
。
我在 Store
值字段中的 DataWeave 表达式是:payload.lastTransactionID as Number
,它在调试器中生成此表达式:
TypedValue[value: '[B@d98305a', dataType: 'SimpleDataType{type=java.io.Serializable, mimeType='application/json; charset=UTF-8'}']
使用 Logger
我可以获得一个号码。
我的配置 XML:
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:ee="htt... blabla">
<db:config name="Database_Config" doc:name="Database Config" doc:id="27b11761-5ac9-4336-a944-14fadd9edf47" >
<db:my-sql-connection host="${db.host}" port="${db.port}" user="${db.user}" password="${db.password}" database="${db.database}" />
</db:config>
<flow name="flights_transactionFlow" doc:id="e70fff51-5a87-45ec-945d-6dbdf1bf6bcf" >
<scheduler doc:name="Scheduler" doc:id="3ccd1b4f-bf48-4329-9e7f-03e36144c0ed" >
<scheduling-strategy >
<fixed-frequency frequency="10000"/>
</scheduling-strategy>
</scheduler>
<os:retrieve doc:name="Retrieve" doc:id="9d0e9ee4-b86a-424a-8dad-1baee9f8f73a" key="transactionID">
<os:default-value ><![CDATA[0]]></os:default-value> // Set 0 or value of 'transactionID'
</os:retrieve>
<db:select doc:name="Select" doc:id="5f82613b-ca5c-494f-ad7a-3b4ea1b17325" config-ref="Database_Config">
<db:sql >SELECT *
FROM flights_transactions
WHERE transactionID > :transactionID // Select > transactionID
LIMIT 10</db:sql>
<db:input-parameters ><![CDATA[#[{'transactionID': vars.transactionID default 0}]]]></db:input-parameters>
</db:select>
<ee:transform doc:name="Transform Message" doc:id="ce008827-a25b-4c38-b494-00c5e388c3db">
<ee:message>
<ee:set-payload><![CDATA[%dw 2.0
output application/json
---
{
records: payload,
lastTransactionID: payload[sizeOf(payload) - 1].transactionID
}]]></ee:set-payload>
</ee:message>
</ee:transform> // Yields json with payload.records (10 items) and payload.lastTransactionID (highest fetched value)
<os:store doc:name="Store transactionID" doc:id="b99c313b-d672-4c19-9726-bd3d1371f065" key="transactionID">
<os:value><![CDATA[#[payload.lastTransactionID as Number]]]></os:value> // Give me the number
</os:store>
<logger level="INFO" doc:name="Logger" doc:id="74c44c47-70dd-4a31-ac8d-3df1444e5cd0" message='#[payload]'/>
</flow>
</mule>
视觉辅助:
如何获取最后一个transactionID的编号并设置成功?
看起来结果是一个json(因为输入的payload是一个json),你需要指定application/java
作为表达式
output application/java --- payload.lastTransactionID as Number
问题是我没有在 Retrieve
步骤