2016-10-18 21 views
0

我正试图在Salesforce中创建订单。我在工作流程中创建了一个订单,现在正在尝试分配与订单相关的产品,所以我尝试使用Mule 3.7.3将订单项插入到Salesforce中。在salesforce中创建订单项目时骡子类型不匹配错误

我的工作流程正在返回以下错误:

******************************************************************************** 
Message    : Exception while executing: 
payload.OrderItems.records map ((record , indexOfRecord) -> { 
     ^
Type mismatch 
    found :name, :string 
    required :name, :object 
Type     : com.mulesoft.weave.mule.exception.WeaveExecutionException 
Code     : MULE_ERROR--2 
******************************************************************************** 
Exception stack is: 
1. Type mismatch 
    found :name, :string 
    required :name, :object (com.mulesoft.weave.engine.ast.dynamic.DynamicDispatchException) 
    com.mulesoft.weave.engine.ast.dynamic.DynamicDispatchNode:65 (null) 
2. Exception while executing: 
payload.OrderItems.records map ((record , indexOfRecord) -> { 
     ^
Type mismatch 
    found :name, :string 
    required :name, :object (com.mulesoft.weave.mule.exception.WeaveExecutionException) 
    com.mulesoft.weave.mule.WeaveMessageProcessor:124 (null) 
******************************************************************************** 
Root Exception stack trace: 
com.mulesoft.weave.engine.ast.dynamic.DynamicDispatchException: Type mismatch 
    found :name, :string 
    required :name, :object 

工作流的有效载荷从Salesforce的网站在这里拍摄: https://developer.salesforce.com/docs/atlas.en-us.api_placeorder.meta/api_placeorder/sforce_placeorder_rest_api_place_order_account.htm 和变换消息显示没有错误预览结果,但随后失败当我运行工作流程时。

谁能帮助?

有效载荷:

{ 
    "order": { 
     "attributes": { 
      "type": "Order" 
     }, 
     "EffectiveDate": "2016-10-18", 
     "Status": "Draft", 
     "billingCity": "SFO-Inside-OrderEntity-1", 
     "accountId": "0012400000LKPfzAAH", 
     "Pricebook2Id": "01s24000002JoD1AAK", 
     "OrderItems": { 
      "records": [{ 
       "attributes": { 
        "type": "OrderItem" 
       }, 
       "PricebookEntryId": "01u24000001rauFAAQ", 
       "quantity": "1", 
       "UnitPrice": "15.99" 
      }] 
     } 
    } 
} 

骡子XML的处理流程:

<?xml version="1.0" encoding="UTF-8"?> 
<mule xmlns:dw="http://www.mulesoft.org/schema/mule/ee/dw" xmlns:metadata="http://www.mulesoft.org/schema/mule/metadata" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:sfdc="http://www.mulesoft.org/schema/mule/sfdc" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:apikit="http://www.mulesoft.org/schema/mule/apikit" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:spring="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd 
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd 
http://www.mulesoft.org/schema/mule/apikit http://www.mulesoft.org/schema/mule/apikit/current/mule-apikit.xsd 
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
http://www.mulesoft.org/schema/mule/sfdc http://www.mulesoft.org/schema/mule/sfdc/current/mule-sfdc.xsd 
http://www.mulesoft.org/schema/mule/ee/dw http://www.mulesoft.org/schema/mule/ee/dw/current/dw.xsd"> 
    <http:listener-config name="order-flow-httpListenerConfig" host="0.0.0.0" port="8081" doc:name="HTTP Listener Configuration" basePath="/api"/> 
    <apikit:config name="order-flow-config" raml="order-flow.raml" consoleEnabled="true" consolePath="console" doc:name="Router"/> 
    <sfdc:config name="Salesforce__Basic_Authentication" username="${sf.username}" password="${sf.password}" securityToken="${sf.token}" doc:name="Salesforce: Basic Authentication"/> 
    <apikit:config name="Router" raml="order-flow.raml" consoleEnabled="true" consolePath="console" doc:name="Router"> 
     <apikit:flow-mapping resource="/orders/order" action="post" content-type="application/json" flow-ref="post:/orders/order:order-flow-config"/> 
    </apikit:config> 
    <flow name="order-flow-main"> 
     <http:listener config-ref="order-flow-httpListenerConfig" path="/*" doc:name="HTTP"/> 
     <apikit:router config-ref="Router" doc:name="APIkit Router"/> 
     <exception-strategy ref="order-flow-apiKitGlobalExceptionMapping" doc:name="Reference Exception Strategy"/> 
    </flow> 

    <flow name="post:/orders/order:order-flow-config"> 
     <set-payload value="{&quot;order&quot;:{&quot;attributes&quot;:{&quot;type&quot;:&quot;Order&quot;},&quot;EffectiveDate&quot;:&quot;2016-10-18&quot;,&quot;Status&quot;:&quot;Draft&quot;,&quot;billingCity&quot;:&quot;SFO-Inside-OrderEntity-1&quot;,&quot;accountId&quot;:&quot;0012400000LKPfzAAH&quot;,&quot;Pricebook2Id&quot;:&quot;01s24000002JoD1AAK&quot;,&quot;OrderItems&quot;:{&quot;records&quot;:[{&quot;attributes&quot;:{&quot;type&quot;:&quot;OrderItem&quot;},&quot;PricebookEntryId&quot;:&quot;01u24000001rauFAAQ&quot;,&quot;quantity&quot;:&quot;1&quot;,&quot;UnitPrice&quot;:&quot;15.99&quot;}]}}}" mimeType="application/json" doc:name="Set Payload"/> 
     <dw:transform-message metadata:id="054c5e6b-272f-4970-8c1c-d97cd802e792" doc:name="Transform Message"> 
      <dw:set-payload><![CDATA[%dw 1.0 
%output application/java 
--- 
{ 
    ContractId: "80024000000OhfWAAS", 
    AccountId: payload.order.accountId, 
    Pricebook2Id: payload.order.Pricebook2Id, 
    EffectiveDate: payload.order.EffectiveDate as :date, 
    Status: payload.order.Status, 
    Type: payload.order.attributes.type, 
    BillingCity: payload.order.billingCity 
}]]></dw:set-payload> 
     </dw:transform-message> 
     <sfdc:create-single config-ref="Salesforce__Basic_Authentication" doc:name="Salesforce" type="Order"> 
      <sfdc:object ref="#[payload]"/> 
     </sfdc:create-single> 
     <set-variable variableName="varOrderId" value="#[payload.id]" doc:name="Set Order Id"/> 
     <object-to-string-transformer doc:name="Object to String"/> 
     <logger message="#[payload]" level="INFO" doc:name="Logger"/> 
     <set-payload value="{&quot;OrderItems&quot;:{&quot;records&quot;:[{&quot;attributes&quot;:{&quot;type&quot;:&quot;OrderItem&quot;},&quot;PricebookEntryId&quot;:&quot;01u24000001rauFAAQ&quot;,&quot;quantity&quot;:&quot;1&quot;,&quot;UnitPrice&quot;:&quot;15.99&quot;}]}}}" doc:name="Set Payload"/> 
     <dw:transform-message metadata:id="a38edabd-4deb-413f-8bcb-5691e64bc230" doc:name="Transform Message"> 
      <dw:set-payload><![CDATA[%dw 1.0 
%output application/java 
--- 
payload.OrderItems.records map ((record , indexOfRecord) -> { 
    OrderId: flowVars.varOrderId, 
    UnitPrice: record.UnitPrice 
})]]></dw:set-payload> 
     </dw:transform-message> 
     <sfdc:create config-ref="Salesforce__Basic_Authentication" type="OrderItem" doc:name="Salesforce"> 
      <sfdc:objects ref="#[payload]"/> 
     </sfdc:create> 
     <object-to-string-transformer doc:name="Object to String"/> 
     <logger level="INFO" doc:name="Logger"/> 

    </flow> 
    <apikit:mapping-exception-strategy name="order-flow-apiKitGlobalExceptionMapping"> 
     <apikit:mapping statusCode="404"> 
      <apikit:exception value="org.mule.module.apikit.exception.NotFoundException" /> 
      <set-property propertyName="Content-Type" value="application/json" doc:name="Property"/> 
      <set-payload value="{ &quot;message&quot;: &quot;Resource not found&quot; }" doc:name="Set Payload"/> 
     </apikit:mapping> 
     <apikit:mapping statusCode="405"> 
      <apikit:exception value="org.mule.module.apikit.exception.MethodNotAllowedException" /> 
      <set-property propertyName="Content-Type" value="application/json" doc:name="Property"/> 
      <set-payload value="{ &quot;message&quot;: &quot;Method not allowed&quot; }" doc:name="Set Payload"/> 
     </apikit:mapping> 
     <apikit:mapping statusCode="415"> 
      <apikit:exception value="org.mule.module.apikit.exception.UnsupportedMediaTypeException" /> 
      <set-property propertyName="Content-Type" value="application/json" doc:name="Property"/> 
      <set-payload value="{ &quot;message&quot;: &quot;Unsupported media type&quot; }" doc:name="Set Payload"/> 
     </apikit:mapping> 
     <apikit:mapping statusCode="406"> 
      <apikit:exception value="org.mule.module.apikit.exception.NotAcceptableException" /> 
      <set-property propertyName="Content-Type" value="application/json" doc:name="Property"/> 
      <set-payload value="{ &quot;message&quot;: &quot;Not acceptable&quot; }" doc:name="Set Payload"/> 
     </apikit:mapping> 
     <apikit:mapping statusCode="400"> 
      <apikit:exception value="org.mule.module.apikit.exception.BadRequestException" /> 
      <set-property propertyName="Content-Type" value="application/json" doc:name="Property"/> 
      <set-payload value="{ &quot;message&quot;: &quot;Bad request&quot; }" doc:name="Set Payload"/> 
     </apikit:mapping> 
    </apikit:mapping-exception-strategy> 
</mule> 

感谢

回答

0

为您正在设置的有效载荷为字符串,并试图访问的JSON你得到这个错误。无论是在集有效载荷或设置MIME类型dataweave像

试试这个

<set-payload mimeType="application/json" value="{&quot;OrderItems&quot;:{&quot;records&quot;:[{&quot;attributes&quot;:{&quot;type&quot;:&quot;OrderItem&quot;},&quot;PricebookEntryId&quot;:&quot;01u24000001rauFAAQ&quot;,&quot;quantity&quot;:&quot;1&quot;,&quot;UnitPrice&quot;:&quot;15.99&quot;}]}}}" doc:name="Set Payload" /> 

或者

<dw:transform-message doc:name="Transform Message"> 
       <dw:input-payload mimeType="application/json" /> 
       <dw:set-payload><![CDATA[%dw 1.0 
    %output application/json 
    %var timeZone = now as :datetime as :string {format:"z"} 
    --- 
    payload.OrderItems.records map ((record , indexOfRecord) -> { 
     OrderId: flowVars.varOrderId, 
     UnitPrice: record.UnitPrice 
    }) ]]></dw:set-payload> 
</dw:transform-message> 

希望这有助于。

+0

非常感谢。错过了设置那一个。 – user3165854