2014-02-20 76 views
0

我正在使用Mule ESB 3.4 CE。我有這個使用Salesforce連接器創建聯繫人的流程。我想分析錯誤並採取一些行動。解析Mule中Salesforce Connector的錯誤ESB

.... 
<sfdc:create config-ref="Salesforce" type="Contact" doc:name="Create Contacts"> 
    <sfdc:objects ref="#[payload]"/> 
</sfdc:create> 
<expression-component doc:name="Get Successful List">flowVars.listSuccess = ($ in payload if $.success=='true')</expression-component> 
<expression-component doc:name="Get Failed List">flowVars.listErrors = ($.errors in payload if $.success=='false')</expression-component> 

的結果如下:

[[SaveResult errors='{[1][Error fields='{[1]Email,}' 
    message='A contact with this email address already exists.' 
    statusCode='FIELD_CUSTOM_VALIDATION_EXCEPTION' 
] 
,}' 
id='null' 
success='false' 
] 
, [SaveResult errors='{[1][Error fields='{[1]Email,}' 
    message='A contact with this email address already exists.' 
    statusCode='FIELD_CUSTOM_VALIDATION_EXCEPTION' 
    ] 
,}' 
id='null' 
success='false' 
] 
] 

我能夠通過下面的表達式組件以獲取IDS:

<expression-component doc:name="Get Failed List">flowVars.listIds = (Id in payload)</expression-component> 

然而,我無法到狀態碼和錯誤信息。我嘗試了各種組合,但我無法得到它。對於例如#[(message in(error in flowVars.listErrors)]。當Salesforce返回錯誤時,如何獲取StatusCode和消息?

回答

1

您的flowVars.listErrors將包含錯誤數組的列表。啓示:

<logger message="#[flowVars.listErrors[0][0].message]" level="INFO" doc:name="Logger"/> 

<scripting:component doc:name="Groovy"> 
    <scripting:script engine="Groovy"><![CDATA[ 
     flowVars.listErrors.each{it->it.each{it2->println('message:'+it2.message)}} 
    ]]></scripting:script> 
</scripting:component> 
+0

我能看到控制檯輸出,但你怎麼能提取消息和狀態代碼放到一個變量,這樣我就可以登錄到數據庫 –

+0

我不知道是否可以?在MEL中展開這樣的嵌套列表,或者如果這是記錄錯誤的最佳方式,但您始終可以在Groovy中遵循我的示例,並使用該方法提取消息/狀態代碼並將它們分配給變量。 –