2014-07-21 10 views
0

我有一個變量名= 「A#[車票]」 VALUE = 「0」是否有可能使用MEL來創建一個動態變量名稱或其他內容?

的名稱將是a123456789和值爲0

但如何訪問此值,如果我只是打印了一個# [票]我將有a123456789和我需要的是#[a123456789]所以它會給我0.1

迄今代碼:

<set-session-variable variableName="ticketId" value="a#[message.inboundProperties['ticket']]" doc:name="Variable"/> 
<set-session-variable variableName="#[ticketId]" value="0" doc:name="Variable"/> 

<logger message="#[#[ticketId]]" level="INFO" doc:name="messageID2"/> 

和最後一行會失敗,但我不知道如何調用該動態變量...

- >騾子版本3.4

+1

對於這個問題的未來讀者和接受的答案,如果你想要一個非Groovy MEL唯一的解決方案,我的答案在下面的測試工作。 –

回答

0

要設置一個動態變量的名稱,並表達或記錄儀使用它,你需要做如下:

<set-session-variable variableName="a#[message.inboundProperties['ticket']]" value="0" doc:name="Variable"/> 

這將基於在入站發出的票變量設置一個動態域名消息

他們,我已經使用腳本來把它裏面的msgId:

<scripting:component doc:name="Groovy"> 
     <scripting:script engine="Groovy"> 
      def String ticket = 'a' + message.getProperty('ticket', org.mule.api.transport.PropertyScope.INBOUND); 
      return ["msgId":this[ticket]] 
     </scripting:script> 
    </scripting:component> 

而且這樣我可以訪問變量值:

<logger message="#[msgId]" level="INFO" doc:name="variableValue"/> 
+0

我不明白在Groovy組件中如何返回[「msgId」:this [ticket]]'可以設置流var。這沒有意義。 –

+0

我不知道我已經測試過,它的工作原理是完美的,它將打印名爲'a#[message.inboundProperties ['ticket']]' –

+0

'變量的任何有價值的位置但是Groovy組件不會將當前消息負載更改爲Map包含'「msgId」:這[ticket]'?另外爲什麼'這個[ticket]'?爲什麼不只是'ticket'來引用你剛剛用'def String ticket'創建的變量?這裏有太多的魔法/神祕... –

1

你應該能夠做到以下幾點:

<expression-component>t=message.inboundProperties['ticket'];flowVars['a'+t]='0'</expression-component> 

設置從串聯命名的流變種「一」和「票」的價值入站屬性。

要讀它,使用:

#[t=message.inboundProperties['ticket'];flowVars['a'+t]] 

請注意,如果您複製ticket入境財產在flowVar有:

<set-variable variableName="ticket" value="#[message.inboundProperties['ticket']]" /> 

然後分配的語法簡單地變爲:

<expression-component>flowVars['a'+ticket]='0'</expression-component> 

和閱讀:

#[flowVars['a'+ticket]] 
+0

那麼,我得到了該表達式的錯誤: 執行表達式「flowVars ['a'+ message.inboundProperties ['ticket']] ='0'」失敗。 (org.mule.api.expression.ExpressionRuntimeException)。消息有效負載是類型:NullPayload 任何想法? –

+0

,如果我這樣做: '<設定變量VARIABLENAME = 「一個#[message.inboundProperties [ '票']]」 的值= 「0」 DOC:名稱= 「可變」/> \t \t <記錄器的消息= '#[flowVars ['a'+ message.inboundProperties ['ticket']]「level =」INFO「doc:name =」messageID2「/>' 我只接收字符串:'#[flowVars ['a' message.inboundProperties ['ticket']]'作爲結果,但不是0像它被設置... –

+0

我懷疑你可以在'set-variable'的'variableName'中使用MEL表達式。這就是爲什麼我建議你用代碼做。你確定'message.inboundProperties ['ticket']'包含了什麼嗎?同樣,對於上述例外情況,不要在這樣的評論中分享它的一小部分內容,而是全面地將其粘貼**並共享鏈接。 –

相關問題