Seleccionar página

Estamos realizando un proyecto de integración para una empresa de automoción a nivel nacional en el que hay que integrar SAP, SalesForce y AS/400. Al fin y al cabo es un motor esb (enterprise service bus) desplegado sobre JBoss Fuse del fabricante Red Hat, una encapsulación del proyecto Apache ServiceMix.

Para realizar este post se ha tomado como referencia este tutorial:

http://maggiechu-jboss.blogspot.com.es/2015/02/jboss-fuse-connecting-to-salesforce.html

Para la invocación desde Apache Camel a Salesforce, lo primero de todo se necesita un usuario propio por lo que se debe crear un nuevo usuario en Salesforce Developer con los siguientes campos:

Create_User

Posteriormente, se debe crear una aplicación conectada, mediante la cual accederemos al contenido del CRM, tal y como se muestra:

Create_Connected_App

Una vez creada,se puede observar los credenciales de dicha app a continuación.

Connected_App_Authentication

 

Para facilitar su acceso remoto hay que modificar algunos parámetros de dicha app , como relajar las restricciones de ip.

Relax_Ip_Restrictions

 

Ya configurada la app conectada, se procede a crear un campo nuevo en Cuentas, por elcual se buscará posteriormente al realizar la consulta. Para ello, en Configuración->Personalizar->Cuentas->Campos->Nuevo.

Add_Field_to_Accounts

 

Finalmente creamos la nueva Cuenta, la cual posteriormente consultaremos, con el campo nuevo creado external_id=123456.

Create_new_Account

Ahora procedemos a acceder desde Camel, para ello se crea un nuevo Fuse Project, con el archetype de spring. Al crearlo saldrán algunos errores en el pom.xml, el cual es necesario cambiar. Todas las versiones que crea por defecto se deben cambiar a 2.12.0.redhat-610394. Así como se debe añadir la dependencia y el plugin del componente de Salesforce.

add_dependency add_plugin

Una vez aquí, debemos generar las clases de SalesForce a nuestro proyecto, para ello se necesita: username, password, clientId and clientSecret. Estas dos últimas se pueden ver en la imagen de autentificacion de la app conectada. Con estos parámetros ejecutamos:

mvn camel-salesforce:generate -DcamelSalesforce.clientId=<clientid> 
-DcamelSalesforce.clientSecret=<clientsecret> -DcamelSalesforce.userName=<username> 
-DcamelSalesforce.password=<password>
 Con este comando se generan en target/generated-sources todas las clases necesarias. Desde el folder org, se copia la carpeta a src/main/java.
Únicamente, se debe modificar una clase que aparece con errores de compilación, “ActivityTypeEnum.java” en la cual aparecen duplicados los elementos a enumerar, por lo tanto se elimina la duplicidad en los 4 parámetros y se guarda.
Ahora se debe crear el fichero salesforce.properties, tal y como se muestra, para posteriormente utilizar dichas properties en el camelContext.
salesforce_properties
Finalmente, abrimos camelContext.xml que está en  src/main/resources, donde hacemos botón derecho->Remove route. y,posteriormente, dejamos el fichero de esta forma.
camel-context
Se puede observar como en el route, se ha declarado un EndPoint que realizar la llamada a salesforce, donde se introduce la consulta que se quiere obtener:
salesforce:AccountQuery?sObjectQuery=Select Id, JBoss_Fuse_Integration_External_ID__c, Name, Phone From Account Where JBoss_Fuse_Integration_External_ID__c=12345
Finalmente, para comprobar que funciona correctamente, en la vista de camelContext hacemos botón derecho->Run as->Local Camel Context (without Test).
Se comprueba que en la salida por pantalla muestra el JSON con la respuesta esperada.