通过 MuleSoft 使用 Salesforce REST 服务
Consume Salesforce REST Service through MuleSoft
我想使用 Salesforce 公开的 REST 服务,现在我正在使用 Sandbox 实例并使用 Anypoint Studio 创建我的流程,我想知道实现它的最佳实践是什么。现在我不确定 salesforce 连接器是否允许我使用该服务,因此,我正在使用以下组件:
这是整个流程。
<mule xmlns:sfdc="http://www.mulesoft.org/schema/mule/sfdc" xmlns:file="http://www.mulesoft.org/schema/mule/file" xmlns:json="http://www.mulesoft.org/schema/mule/json" xmlns:vm="http://www.mulesoft.org/schema/mule/vm" xmlns:oauth2="http://www.mulesoft.org/schema/mule/oauth2" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:spring="http://www.springframework.org/schema/beans" version="CE-3.6.1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
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/vm http://www.mulesoft.org/schema/mule/vm/current/mule-vm.xsd
http://www.mulesoft.org/schema/mule/json http://www.mulesoft.org/schema/mule/json/current/mule-json.xsd
http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd
http://www.mulesoft.org/schema/mule/sfdc http://www.mulesoft.org/schema/mule/sfdc/current/mule-sfdc.xsd">
<http:request-config name="HTTP_Request_Configuration" host="https://test.salesforce.com" port="80" doc:name="HTTP Request Configuration" protocol="HTTPS">
<oauth2:client-credentials-grant-type clientId="3xQYwWqsvZUYbwMRLHiXQy9A23XXXtxg1OMxdXh5p4eoev53q26CmN0Yx0EyLf_HTLW9X" clientSecret="710XXX1723685311">
<oauth2:token-request tokenUrl="https://test.salesforce.com/services/oauth2/token"/>
</oauth2:client-credentials-grant-type>
</http:request-config>
<file:connector name="File" writeToDirectory="/Users/emoran/Desktop" autoDelete="true" streaming="true" validateConnections="true" doc:name="File"/>
<flow name="outbrain_3wintegrationFlow1">
<poll doc:name="Poll">
<fixed-frequency-scheduler frequency="10" timeUnit="SECONDS"/>
<http:request config-ref="HTTP_Request_Configuration" path="services/apexrest/outbrain_integration_messages/" method="GET" requestStreamingMode="ALWAYS" sendBodyMode="ALWAYS" doc:name="Consume SFDC LOG Service" doc:description="prueba" parseResponse="false" source="#[message.payload]" target="#[message.payload]">
<http:request-builder>
</http:request-builder>
<http:success-status-code-validator values="0..599"/>
</http:request>
</poll>
<logger message=">>>> RESPONSE FROM SERVER: #[message.payload]" level="DEBUG" doc:name="Logger"/>
<echo-component doc:name="Echo"/>
<file:outbound-endpoint path="/" outputPattern="refacciones.json" connector-ref="File" responseTimeout="10000" doc:name="File"/>
</flow>
</mule>
使用此服务的最佳方法是什么?
埃德加,
Mule 中的 Salesforce 连接器允许您使用 Salesforce 公开的所有服务。您应该在轮询范围内使用 Salesforce 连接器从 Salesforce 获取数据。
下面显示了满足您要求的一个简单示例。
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:file="http://www.mulesoft.org/schema/mule/file" xmlns:context="http://www.springframework.org/schema/context" xmlns:sfdc="http://www.mulesoft.org/schema/mule/sfdc" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:spring="http://www.springframework.org/schema/beans" version="EE-3.5.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/sfdc http://www.mulesoft.org/schema/mule/sfdc/current/mule-sfdc.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-current.xsd
http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd">
<context:property-placeholder location="file:${mule_home}/conf/salesforce-config.properties"/>
<sfdc:config name="Salesforce" doc:name="Salesforce" password="${sf_password}" securityToken="${sf_security_token}" url="${sf_url}" username="${sf_username}">
<sfdc:connection-pooling-profile initialisationPolicy="INITIALISE_ONE" exhaustedAction="WHEN_EXHAUSTED_GROW"/>
</sfdc:config>
<flow name="sfdcpollerFlow1" doc:name="sfdcpollerFlow1">
<poll doc:name="Poll">
<sfdc:get-updated config-ref="Salesforce" doc:name="Salesforce" duration="10" type="Contract"/>
</poll>
<logger message="RESPONSE FROM SERVER: #[payload]" level="INFO" doc:name="Logger"/>
<echo-component doc:name="Echo"/>
<file:outbound-endpoint path="${file_path}" outputPattern="refacciones.json" responseTimeout="10000" doc:name="File"/>
</flow>
</mule>
在上面的示例中,我正在获取修改后的联系人并将其放置到一个文件夹中。您可以参考 mule 软文档了解更多关于 Salesforce 连接器的详细信息。
http://www.mulesoft.org/documentation/display/current/Salesforce+Connector
http://www.mulesoft.org/documentation/display/current/Connect+with+Salesforce+Example
使用 Mule 中的 HTTP 连接器与 Salsforce 的 Rest 交互 API 是完全有效的。然而,正如其他人提到的那样,Salesforce 连接器在处理 Salesforce API 包括身份验证和连接管理等时抽象了很多复杂性。
我注意到您的示例使用 OAuth,其他示例使用 basic/ws 安全性,但 Salesforce 连接器也支持 OAuth:http://www.mulesoft.org/documentation/display/current/Salesforce+Connector+Authentication
然而,在幕后,Salesforce 连接器主要使用 Salesforce SOAP API。因此,如果您特别需要使用 Rest API,那么连接器可能无济于事。
我想使用 Salesforce 公开的 REST 服务,现在我正在使用 Sandbox 实例并使用 Anypoint Studio 创建我的流程,我想知道实现它的最佳实践是什么。现在我不确定 salesforce 连接器是否允许我使用该服务,因此,我正在使用以下组件:
这是整个流程。
<mule xmlns:sfdc="http://www.mulesoft.org/schema/mule/sfdc" xmlns:file="http://www.mulesoft.org/schema/mule/file" xmlns:json="http://www.mulesoft.org/schema/mule/json" xmlns:vm="http://www.mulesoft.org/schema/mule/vm" xmlns:oauth2="http://www.mulesoft.org/schema/mule/oauth2" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:spring="http://www.springframework.org/schema/beans" version="CE-3.6.1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
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/vm http://www.mulesoft.org/schema/mule/vm/current/mule-vm.xsd
http://www.mulesoft.org/schema/mule/json http://www.mulesoft.org/schema/mule/json/current/mule-json.xsd
http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd
http://www.mulesoft.org/schema/mule/sfdc http://www.mulesoft.org/schema/mule/sfdc/current/mule-sfdc.xsd">
<http:request-config name="HTTP_Request_Configuration" host="https://test.salesforce.com" port="80" doc:name="HTTP Request Configuration" protocol="HTTPS">
<oauth2:client-credentials-grant-type clientId="3xQYwWqsvZUYbwMRLHiXQy9A23XXXtxg1OMxdXh5p4eoev53q26CmN0Yx0EyLf_HTLW9X" clientSecret="710XXX1723685311">
<oauth2:token-request tokenUrl="https://test.salesforce.com/services/oauth2/token"/>
</oauth2:client-credentials-grant-type>
</http:request-config>
<file:connector name="File" writeToDirectory="/Users/emoran/Desktop" autoDelete="true" streaming="true" validateConnections="true" doc:name="File"/>
<flow name="outbrain_3wintegrationFlow1">
<poll doc:name="Poll">
<fixed-frequency-scheduler frequency="10" timeUnit="SECONDS"/>
<http:request config-ref="HTTP_Request_Configuration" path="services/apexrest/outbrain_integration_messages/" method="GET" requestStreamingMode="ALWAYS" sendBodyMode="ALWAYS" doc:name="Consume SFDC LOG Service" doc:description="prueba" parseResponse="false" source="#[message.payload]" target="#[message.payload]">
<http:request-builder>
</http:request-builder>
<http:success-status-code-validator values="0..599"/>
</http:request>
</poll>
<logger message=">>>> RESPONSE FROM SERVER: #[message.payload]" level="DEBUG" doc:name="Logger"/>
<echo-component doc:name="Echo"/>
<file:outbound-endpoint path="/" outputPattern="refacciones.json" connector-ref="File" responseTimeout="10000" doc:name="File"/>
</flow>
</mule>
使用此服务的最佳方法是什么?
埃德加,
Mule 中的 Salesforce 连接器允许您使用 Salesforce 公开的所有服务。您应该在轮询范围内使用 Salesforce 连接器从 Salesforce 获取数据。
下面显示了满足您要求的一个简单示例。
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:file="http://www.mulesoft.org/schema/mule/file" xmlns:context="http://www.springframework.org/schema/context" xmlns:sfdc="http://www.mulesoft.org/schema/mule/sfdc" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:spring="http://www.springframework.org/schema/beans" version="EE-3.5.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/sfdc http://www.mulesoft.org/schema/mule/sfdc/current/mule-sfdc.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-current.xsd
http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd">
<context:property-placeholder location="file:${mule_home}/conf/salesforce-config.properties"/>
<sfdc:config name="Salesforce" doc:name="Salesforce" password="${sf_password}" securityToken="${sf_security_token}" url="${sf_url}" username="${sf_username}">
<sfdc:connection-pooling-profile initialisationPolicy="INITIALISE_ONE" exhaustedAction="WHEN_EXHAUSTED_GROW"/>
</sfdc:config>
<flow name="sfdcpollerFlow1" doc:name="sfdcpollerFlow1">
<poll doc:name="Poll">
<sfdc:get-updated config-ref="Salesforce" doc:name="Salesforce" duration="10" type="Contract"/>
</poll>
<logger message="RESPONSE FROM SERVER: #[payload]" level="INFO" doc:name="Logger"/>
<echo-component doc:name="Echo"/>
<file:outbound-endpoint path="${file_path}" outputPattern="refacciones.json" responseTimeout="10000" doc:name="File"/>
</flow>
</mule>
在上面的示例中,我正在获取修改后的联系人并将其放置到一个文件夹中。您可以参考 mule 软文档了解更多关于 Salesforce 连接器的详细信息。
http://www.mulesoft.org/documentation/display/current/Salesforce+Connector http://www.mulesoft.org/documentation/display/current/Connect+with+Salesforce+Example
使用 Mule 中的 HTTP 连接器与 Salsforce 的 Rest 交互 API 是完全有效的。然而,正如其他人提到的那样,Salesforce 连接器在处理 Salesforce API 包括身份验证和连接管理等时抽象了很多复杂性。
我注意到您的示例使用 OAuth,其他示例使用 basic/ws 安全性,但 Salesforce 连接器也支持 OAuth:http://www.mulesoft.org/documentation/display/current/Salesforce+Connector+Authentication
然而,在幕后,Salesforce 连接器主要使用 Salesforce SOAP API。因此,如果您特别需要使用 Rest API,那么连接器可能无济于事。