2017-07-24 1 views
0

J'interroge les données (10 à 20 enregistrements) à partir de l'objet de contact salesforce et à partir de cela, j'ai besoin de capturer la valeur d'id dans la variable. Pour ce faire, je mets la charge utile comme # [org.apache.commons.collections.IteratorUtils.toList (payload)] mais ne fonctionne pas.Comment faire pour convertir la réponse de requête de sélection de salesforce en format lisible dans mule?

PFB est l'exemple de code:

<flow name="SetFunctionRole-table"> 
     <sfdc:query config-ref="SFA_NOL_CLOUDHUB2" query="dsql:SELECT Id, AccountId,Account_BP_ID__c,Account_BT_Code__c,Birthdate,Department,Email,Fax,FirstName,LastName,MiddleName,MobilePhone,Name FROM Contact WHERE AccountId = '#[flowVars.varCustomer_Id]' ORDER BY AccountId ASC" doc:name="get contacts from AccountId"/> 
     <logger message="#[payload]" level="INFO" doc:name="Logger"/> 
     <set-payload value="#[org.apache.commons.collections.IteratorUtils.toList(payload)]" doc:name="Set Payload"/> 
     <foreach collection="#[payload]" doc:name="For Each"> 
      <logger message="#[payload]" level="INFO" doc:name="Logger"/> 
      <set-variable variableName="varContact_id" value="#[payload['Id']]" doc:name="Variable"/> 
      <sfdc:query-single config-ref="SFA_NOL_CLOUDHUB2" query="dsql:SELECT Function__c,Id FROM Contact_Function_Role__c WHERE Contact__c = '#[flowVars.varContact_id]'" doc:name="Salesforce"/> 
      <logger message="#['Inserting key:' + flowVars.varContact_id + ' and value: ' + payload.Id]" level="INFO" doc:name="Logger"/> 
      <objectstore:store config-ref="ObjectStore__Connector" key="#[flowVars.varContact_id]" value-ref="#[payload.Id]" overwrite="true" doc:name="ObjectStore"/> 
     </foreach> 
    </flow> 

Obtenir ci-dessous un message d'erreur à la charge utile de jeu:

ERROR 2017-07-24 20:05:50,333 [[ws21.2-prod].SetFunctionRole-table.stage1.02] org.mule.exception.DefaultMessagingExceptionStrategy: 
******************************************************************************** 
Message    : Execution of the expression "org.apache.commons.collections.IteratorUtils.toList(payload)" failed. (org.mule.api.expression.ExpressionRuntimeException). 
Payload    : [email protected] 
Payload Type   : org.mule.streaming.ConsumerIterator 
Element    : /SetFunctionRole-table/processors/2 @ ws21.2-prod:create-prospect.xml:177 (Set Payload) 
Element XML   : <set-payload value="#[org.apache.commons.collections.IteratorUtils.toList(payload)]" doc:name="Set Payload"></set-payload> 
-------------------------------------------------------------------------------- 
Root Exception stack trace: 
[UnexpectedErrorFault [ApiFault exceptionCode='INVALID_OPERATION_WITH_EXPIRED_PASSWORD' 
exceptionMessage='The users password has expired, you must call SetPassword before attempting any other API operations' 
extendedErrorDetails='{[0]}' 
] 
] 

    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 

Répondre

1

Pourquoi vous essayez de définir Payload est une telle façon 'créative', pas nécessaire et ne va pas travailler non plus.

La sortie du connecteur SalesForce est de type org.mule.streaming.ConsumerIterator qui peut être lu directement par une portée For Each, il s'agit donc déjà d'une collection.

Enlever le Set Payload et voir si cela fonctionne, si vous déboguez vous devriez voir le comportement, je viens de le tester et cela fonctionne.