Salesforce и apache Camel upsert операции - PullRequest
2 голосов
/ 06 марта 2020
in this example, i am getting body as null but before there is a log which prints body.please help thank u in advance

Camel- 2.15.1.redhat-621084
fuse-6.2.1
IDE-codeready studio

salesforce.xml 
-----------

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
    xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0 https://aries.apache.org/schemas/blueprint-cm/blueprint-cm-1.0.0.xsd              http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd              http://camel.apache.org/schema/blueprint https://camel.apache.org/schema/blueprint/camel-blueprint.xsd">
    <!-- OSGi blueprint property placeholder -->
    <cm:property-placeholder id="placeholder" persistent-id="org.jboss.quickstarts.fuse.salesforce"/>
    <bean
        class="org.apache.camel.component.salesforce.SalesforceComponent" id="salesforce">
        <property name="loginConfig">
            <bean class="org.apache.camel.component.salesforce.SalesforceLoginConfig">
                <property name="loginUrl" value="${loginUrl}"/>
                <property name="clientId" value="${clientId}"/>
                <property name="clientSecret" value="${clientSecret}"/>
                <property name="userName" value="${userName}"/>
                <property name="password" value="${password}"/>
            </bean>
        </property>
        <property name="packages">
            <array>
                <value>com.cg.Pojos</value>
            </array>
        </property>
    </bean>
    <bean class="org.jboss.quickstarts.fuse.salesforce.RouteXml" id="data"/>
    <camelContext id="salesforce-example-context" xmlns="http://camel.apache.org/schema/blueprint">
        <routeBuilder ref="data"/>
    </camelContext>
</blueprint>

Route
-------

from("direct:sale").log("============Received Request from User To get XML===========")
                .pollEnrich("file:C:/jboss-fuse-6.2.1.redhat-084/work/camel-salesforce/input")
                .doTry()
                .unmarshal(xmlDataFormat).log("${body}")
                .bean(JobCardBean.class,"WriteFile")//just for make json
                .bean(JobCardBean.class,"readFile")//just for json to object
                .log("${body}")//till here i got object in body
                .to("salesforce:upsertSObject?sObjectIdName=Name")
                .choice() 
                .when() 
                .simple("${body} != null")
                .log("Created job with result success=${body.success} and errors=${body.errors}")
                .otherwise() 
                .log("Updated job in salesforce") 
                .end();

logs

[route56] [to63] [direct: sale] [1842] n | [route58] [log162] [log] [0] n | [route58] [pollEnrich23] [pollEnrich [файл: C: / jboss-fuse-6.2.1.redhat-084 / work / camel-salesforce / input]] [1011] n | [route58] [doTry20] [doTry] [830] n | [route58] [unmarshal20] [unmarshal [org. apache .camel.model. DataFormatDefinition@1b5fd83]] [3] n | [route58] [log163] [log] [30] n | [route58] [bean35] [bean [com.capgemini.beans. JobCardBean@461fb6bd]] [8] n | [route58] [bean36] [bean [com.capgemini.beans. JobCardBean@5afe909b]] [4] n | [route58] [setHeader33] [setHeader [CamelHttpQuery]] [0] n | [route58] [setHeader34] [setHeader [CamelHttpMethod]] [0] n | [route58] [log164] [log] [1] n | [route58] [to66] [salesforce: upsertSObject? sObjectIdName = Name] [783] n | п | Обменять | -------------------------------------------------- -------------------------------------------------- ----------------------------------- n | Обмен [п | ID ID-DIN17000356-51667-1583407046067-12-2 n | ExchangePattern InOut n | Заголовки {CamelFileAbsolute = true, CamelFileAbsolutePath = C: \ jboss-fuse-6.2.1.redhat-084 \ work \ camel-salesforce \ input \ job. xml, CamelFileContentType = text / xml, CamelFileLastModified = 1583217 , CamelFileLength = 330, CamelFileName = job. xml, CamelFileNameConsumed = job. xml, CamelFileNameOnly = job. xml, CamelFileParent = C: \ jboss-fuse-6.2.1.redhat-084 \ work \ camel-salesforce \ input, CamelFilePath = C: \ jboss-fuse-6.2.1.redhat-084 \ work \ camel-salesforce \ input \ job. xml, CamelFileRelativePath = job. xml, CamelHttpMethod = POST , CamelHttpQuery = _HTTPMethod = PATCH, CamelRedelivered = false, CamelRedeliveryCounter = 0, CamelToEndpoint = file: // C: /jboss-fuse-6.2.1.redhat-084/work/camel-salesforce/input} n | BodyType null n | Тело [Тело нулевое] n | ] n | п | Stacktracen | -------------------------------------------------- -------------------------------------------------- ----------------------------------- {сообщение: 'Ошибка {400: неверный запрос} при выполнении {PATCH: /services/data/v33.0/sobjects/PSA_Job_Master__c/Name/temp automotive',statusCode:400} atg. apache .camel.component.salesforce.internal.client.AbstractClientBase $ 1.onResponseComplete (AbstractClient. 10B). : 140) [314: орг * * .camel.camel тысячи двадцать-три-Salesforce:. 2.15.1.redhat-+621084]

1 Ответ

0 голосов
/ 06 марта 2020

Я думаю, что это так: PATCH /services/data/v33.0/sobjects/PSA_Job_Master__c/Name/temp. Операция Upsert должна использовать настраиваемое внешнее поле ID. Вы не можете пометить стандартное поле Имя как ext id, флажок отсутствует в пользовательском интерфейсе.

Попробуйте создать настраиваемое поле (возможно, type = text? Все, что вам подходит), пометив его как внешний идентификатор и (необязательно, но рекомендуется) уникальный. Может быть, даже заполнить ваши старые данные (скопировать значения из имени в новое поле?), А затем что-то вроде

PATCH /services/data/v33.0/sobjects/PSA_Job_Master__c/ExternalID__c/temp

Вы можете поэкспериментировать в Workbench (Утилиты -> REST Explorer), Почтальон или SoapUI перед изменением вашей работы

https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_upsert.htm


Редактировать - отправить (и при желании ожидать ответ как) XML вам нужно отправить правильные заголовки HTTP. См. https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/intro_usage_rest_resources.htm

POST to 
    /services/data/v48.0/sobjects/Account

With headers
    Content-Type: application/xml
    Accept: application/xml
    Authorization: Bearer {session id goes here}

With body    
    <records>
        <Name>Hi Stack</Name>
        <Description>Lorem ipsum...</Description>
    </records>

Должно появиться что-то вроде этого (у вас будут необходимые поля, правила проверки и т. Д. c, о которых нужно беспокоиться, но все же)

<?xml version="1.0" encoding="UTF-8"?>
<Result>
    <id>0013s00000xJsS9AAK</id>
    <success>true</success>
</Result>

Сравните это с JSON примером и вы должны иметь хорошее представление о том, как должно выглядеть сообщение для upsert?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...