Azure App Service: Integraciones con Salesforce (4 de 4)

Hola a todos, aquí tenemos la segunda entrega de la serie de artículos invitados de Giovanni Modica, Software Architect, .Net Developer & Salesforce Consultant.

En el artículo anterior vimos cómo crear la Logic App, en el punto de sincronizar los registros de Salesforce a SQL Server. En el actual nos centraremos en el punto de la sincronización de SQL Server a Salesforce, la ejecución automática, y para finalizar tendremos las conclusiones y los recursos útiles.

Repasemos la estructura que vamos a tratar:

  • El escenario
  • Requisitos
  • Creación de la Aplicación en Salesforce
    • Probar la Aplicación creando algunos registros
  • Creación del Portal de Proveedores
    • Publicación del Portal como una Web App
  • Integración mediante un Logic App
    • Creación de API Apps
      • Salesforce API App
      • SQLServer API App
    • Creación del Logic App
      • Sincronización de Registros de Salesforce a SQL Server
      • Sincronización de Registros de SQL Server a Salesforce
      • Ejecución automática
  • Conclusiones
  • Recursos

Sincronización de Registros de SQL Server a Salesforce

Para la segunda parte de la solución procederemos a crear una nueva Logic App. Los pasos son los mismos mencionados anteriormente, por lo que simplemente diré que en mi caso llamaré esta aplicación “SalesforceLogic”. Recuerda asignarle el mismo plan de servicio. Para poder ejecutarlo bajo demanda mientras desarrollamos la lógica, marca la opción “Run this logic manually”.

Comencemos con el primer paso. Agrega el conector de SQL y selecciona la acción “Select From Asistencias (JSON)”. En el campo “Fields” déjalo en blanco para traer todos los campos. En el campo “Where” coloca la siguiente condición:

 Estado = ‘Completado’ and Sincronizado is null

El paso quedará así:

logic app 2 step 1

Ahora agrega un segundo paso pinchando el conector de Salesforce. Como esta es una nueva Logic App tendrás que volver a autorizar el conector contra la instancia de Salesforce. Selecciona la acción “Update Asistencia__c”. Queremos ejecutar la actualización en Salesforce para cada uno de los registros obtenidos en el paso anterior, por lo que configuraremos este paso para que se ejecute dentro de una lista: pincha el icono de engranaje y selecciona “Repeat over a list”. Para la lista usaremos el body del paso anterior con la expresión @body(‘microsoftsqlconnector’), y el “Record Id” es la expresión @repeatItem().Id. Actualizaremos los campos Proveedor__c y Estado__c del objeto de Salesforce, colocando la expresión @repeatItem().Proveedor y @repeatItem().Estado, respetivamente. El paso quedaría así:

logic app 2 step 2

Finalmente agregaremos un tercer paso con el conector de SQL para actualizar el campo Sincronizado y así indicar en la BD que dicho registro ya no debe ser tomado en cuenta en sucesivas ejecuciones. Para esto ejecutaremos el paso dentro de la misma lista del paso inicial @body(‘microsoftsqlconnector’), y fijaremos el campo Sincronizado en true. Este paso tiene un campo “Where” el cual debemos construir dinámicamente usando la siguiente expresión:

 @concat(’Id = %27’,repeatItem().Id,’%27’)

Aquí el truco está en usar la codificación de URL del carácter ’ (comilla simple) mediante el código %27. La razón de hacerlo así es que no podemos usar una comilla simple dentro de un texto (a pesar de probar diversos caracteres de escape). Esto producirá una condición como esta: Id = ‘xxxxxx’

logic app 2 step 3

Ya tenemos lista la lógica. Asegúrate de guardar los cambios si no lo has hecho ya y cierra el editor. En el portal de proveedores, selecciona algunas asistencias y márcalas como completadas llenando el campo de Proveedor y modificando el estado a Completado:

completar asistencia

Ejecuta la aplicación pinchando el icono de ejecución run now de la lógica. Si todo va bien deberías poder ver en Salesforce los registros actualizados:

asistencias completadas en salesforce

Adicionalmente deberías poder ver los registros marcadas como sincronizados en la BD del portal de proveedores:

bd asistencia

Ejecución Automática

recurrence

Hasta los momentos hemos ejecutado ambas aplicaciones de forma manual bajo demanda. En un escenario real configuraríamos estas aplicaciones para ejecutarse periódicamente de forma automática. Para esto debemos desmarcar la opción de “Run this logic manually” y usar una aplicación que tenga un trigger. El conector de Salesforce no provee ningún trigger, pero el de SQLServer sí.

En ambos casos lo mejor es usar la aplicación de “Recurrence”, la cual hará que la lógica se ejecute de forma recurrente en un intervalo predefinido. El único inconveniente es que al usar un plan de servicio basado en el hosting gratis el intervalo de ejecución no puede ser inferior a una hora (lo cual es mucho esperar para lo que hemos estado haciendo en este artículo, y por eso hemos optado por la ejecución manual).

Conclusiones

Como hemos visto, Azure App Services promete mucho. Con una gran cantidad de conectores que va en aumento, y con la posibilidad de escalamiento que tiene Azure, es posible crear soluciones como las que hemos desarrollado en este artículo. Definitivamente una herramienta que cualquier Arquitecto de Software debe tener a la hora de diseñar soluciones de integración.

Es cierto que hay áreas que se pueden mejorar. A la documentación le faltan algunos detalles, así como algunos errores que ocurren al diseñar la lógica de la aplicación (y que se solucionan reintentando las operaciones o realizando algún truco como el descrito en este artículo). También la lógica de la Logic App es bastante lineal, lo cual limita algunos escenarios complejos, pero seguro que en un futuro cercano se podrán crear lógicas más complejas. Lo que sí es seguro es que esto va a mejor, así que pendientes todos de la evolución de este servicio.

Recursos

· Prueba gratis de Azure: https://azure.microsoft.com/en-us/pricing/free-trial/

· Creación de un Salesforce Developer account: https://developer.salesforce.com/gettingstarted

· Documentación y videos de Azure App Service: https://azure.microsoft.com/en-us/documentation/services/app-service/

· Documentación del conector de Salesforce: https://azure.microsoft.com/en-us/documentation/articles/app-service-logic-connector-salesforce/

· Lista y documentación de los conectores de Azure App Service: https://azure.microsoft.com/en-us/documentation/articles/app-service-logic-connectors-list/

· Lista de funciones usadas en expresiones: https://msdn.microsoft.com/en-US/library/azure/dn948512.aspx

 

Muchas gracias a Giovanni Modica por esta serie de artículos uniendo Azure Apps con Salesforce.

Un saludo,

El equipo MSDN España