domingo, 20 de marzo de 2016

Trabajo con Strings desde workflows (Workflow Tools)

Buenas! hoy he añadido nuevas funcionalidades a mi componente de Workflows, que creo que puede ser muy útil. Como siempre lo publico en mi Codeplex: https://msdyncrmworkflowtools.codeplex.com/ con todo el código abierto y compartido.

Muchas gracias a “carltoncolter” (https://manipulationlibrary.codeplex.com/) ya que me he inspirado en una solución que hizo para CRM 4.0 para añadir esta funcionalidad en mi componente.

Muchas veces en la ejecución de los workflows necesitamos hacer operaciones con campos de tipo texto, y estas son las funcionalidades que he añadido:

  • Texto con palabras en mayúsculas
  • Longitud del texto
  • Padding (completar con un carácter hasta un tamaño fijo)
  • Reemplazar textos
  • Substring (recortar un trozo del string)
  • Trimmed (quitar espacios por delante y detrás)

Como siempre, para utilizar esta actividad, descargar la nueva versión y utilizar la acción “String Functions”:

SNAGHTML30d8ab5

Y luego los parámetros:

SNAGHTML30dc9c1

Los parámetros de entrada del workflow son:

  • Input Text: texto de entrada a ser procesado
  • Capitalize All Words: para definir se si podrá la mayúscula solo a la primera palabra o a todas 
  • Padding: Pad Character: Definir el caracter de relleno
  • Padding: Pad on the Left: definir si el relleno es por la derecha o izquierda
  • Padding: Final Length: Longitud final del texto con el relleno
  • Replace: Old Value: Texto original a ser buscado para reemplazados
  • Replace: New Value: nuevo texto de reemplazo
  • Replace: Case Sensitive: definir si será sensible a mayúsculas o no el reemplazo
  • Substring: From Left to Right: define si el recorte, empieza por la derecha o izquierda
  • Substring: Start Index: Índice de inicio del recorte
  • Substring: Length: longitud del recorte

Los resultados de la ejecución de esta acción, devuelve todos los resultados, para que podamos utilizar lo que queramos:

SNAGHTML30f6e69

Espero les haya gustado, sigo buscando ideas….y seguiré evolucionando el componente!!!

un abrazo!

@demian_rasko

sábado, 12 de marzo de 2016

Actualizando los UserSettings de forma automática (Workflow Tools)

Las experiencias del día a día de los proyectos son una fuente inagotable de ideas para publicar cosas en mi blog.
Hoy he añadido una nueva “Tool” a mi ya conocida “Workflow Tools”, que comparto en Codeplex: https://msdyncrmworkflowtools.codeplex.com/
Hoy he añadido una cosilla que todo necesitamos en especial en aquellos proyectos que tienen muchos usuarios. La utilidad de hoy se llama “Set User Settings” y nos permitirá predefinir desde un Workflow, ciertos valores de los settings de usuario.
La funcionalidad es bastante simple, primero añadimos la acción:
SNAGHTMLd367c61
Y luego en los parámetros, podemos ir seleccionado los valores a introducir:
SNAGHTMLd36ecfd
La explicación de cada uno de los parámetros es la siguiente:
  • User: El usuario que se actualizará
  • PagingLimit: Registros por página en las vistas de CRM. los valores pueden ser: 25,50,75,100,250
  • AdvancedFindStartupMode: Determina la visualizacion predeterminada de las búsquedas avanzadas: 1:simple, 2: detalle.
  • TimeZoneCode: Determina la zona horaria del usuario. Si se pasa un “0” se ignora el valor. un ejemplo de todos los valores a introducir se puede ver aquí: http://www.powerobjects.com/2014/07/25/importing-values-time-zone-fields-dynamics-crm/
  • HelpLanguageId: Específica el código de idioma de la ayuda de CRM para el usuario. “0” para ignorar el valor.
  • UILanguageId: Especifica el idioma de la interfaz de usuario (UI) de CRM. “0” para ignorar el valor.
  • DefaultCalendarView: determina el valor predeterminado de la vista del calendario.
    • 0 para “día”
    • 2 para “mes”
    • 1 para “semana”
Pensar, en todas las posibilidad que nos puede dar esto, por ejemplo para iniciar todos estos “settings” de forma masiva, incluso para dejar un Workflow preparado para que futuros nuevos usuarios se inicien con estos valores, o utilizar un “dialogo”, para actualizar estos datos de usuarios…etc…
Espero les guste y lo encuentren útil!
un abrazo!
@demian_rasko

domingo, 28 de febrero de 2016

Creación de un Worker Role de Azure conectado con Dynamics CRM Online

Hola, hoy voy a cambiar un poco la línea de mis últimos “posts”, para empezar a meterme un poco mas en el mundo de Azure.
Como todos saben, Azure es una de las áreas de mayor inversión por parte de Microsoft y semanalmente tenemos noticias de nuevas funcionalidades en el Cloud.
Hoy, quiero hablar de lo que se llaman “Worker Role” de Azure.
Para la descripción de los Worker Roles, cito la siguiente información:
<inicio de la cita>
La arquitectura de un servicio alojado en Windows Azure se basa en componentes auto-contenidos desarrollados típicamente con código .NET. Estos componentes son conocidos en Windows Azure como roles.
El siguiente diagrama explica su arquitectura:

Existen dos tipos de roles en Windows Azure:
  • Web rol: Un ‘web rol’ es una aplicación basada en web accesible mediante HTTP o HTTPS. Un web rol es alojado en un entorno de ejecución que soporta un subconjunto bastante amplio de ASP.NET y Windows Comunication Foundation.
  • Worker rol: Un ‘worker role’ es un proceso que corre en segundo plano. Sería el equivalente a un servicio de Windows en la plaforma Windows Azure. Un worker rol se puede comunicar con los servicios de almacenamiento y de colas de Windows Azure, incluso puede comunicarse directamente con otros roles.
(fuente de esta descripción: http://www.estoyenlanube.com/recursos/windows-azure/arquitectura-de-una-aplicacion-windows-azure/)
<fin de la cita>
En este caso, lo que voy a hacer, es crear un “Worker Role”, enfocado en la realización de tareas contra un Dynamics CRM Online, en este caso, la creación de una Cuenta, cada 10 segundos. Es algo simple, pero que puede enseñar fácilmente como funciona.
Los pasos a seguir para el desarrollo de este servicio en la nube son los siguientes:
Creación del proyecto “Servicio de nube Azure”:
SNAGHTML29446e52
Seleccionamos el tipo de Worker Role:
SNAGHTML29452aad
En el proyecto de tipo worker role (que es una dll), primero añadimos las librearías de la SDK de CRM que vamos a utilizar y luego desarrollamos dentro del método “RunAsync” la lógica de negocio que queremos que se ejecute. En este caso, nuestro código se conecta con un CRM Online, y crea una cuenta, luego espera 10 segundos, y se volverá a ejecutar, igual que como funciona un servicio de Windows.
SNAGHTML2946fde7
Una vez desarrollado, podemos depurarlo en local, o podemos publicarlo. Para publicar el servicio en Azure, hacemos click derecho en el proyecto de Cloud Service y le damos a publicar:
SNAGHTML294a1d95
Nos pedirá autenticarnos con nuestro usuario de Azure:
SNAGHTML294a85e4
Definimos una serie de parámetros en el segundo paso:
SNAGHTML294aef5c
y confirmamos y todo se despliega “mágicamente” en la nube:
SNAGHTML294b2939
En mi CRM Online, ya puedo ver que se empiezan a crear nuevas cuentas:
SNAGHTML294c8474
Dentro de mis servicios en la nube, además puedo ver como va de rendimiento, y consultar su uso mediante muchas métricas de CPU, red, disco, etc.:
SNAGHTML294ea223
Excelente! he tardado solo 5 minutos y ya he publicado un servicio en mi cuenta de Azure, que se ejecuta constantemente allí, de forma igual a la que funciona un servicio de Windows.
Este tipo de servicios, pueden ser muy útiles en implantaciones de CRM Online, para ejecutar procesos constantes por ejemplo de sincronización de información, o de comunicaciones.
Espero les haya gustado, y les pueda dar ideas para nuevas implementaciones en la nube Winking smile
un saludo
@demian_rasko

domingo, 21 de febrero de 2016

Añadiendo y quitando roles a usuarios y equipos (Workflow Tools)

Buenas, pasados unos días algo dificiles, vuelvo a mi blog.
Esta vez, he añadido 4 nuevas acciones a mis herramientas de Workflow. Las herramientas permiten:
  • Añadir Roles de seguridad a Usuarios
  • Añadir Roles de seguridad a Equipos
  • Quitar Roles de seguridad a Usuarios
  • Quitar Roles de seguridad a Equipos
Mi componente cada día crece mas, y ya tiene 21 funcionalidades, y sigue creciendo mes a mes.
Mediante estas nuevas funcionalidades, podemos “jugar” con los roles de los usuarios y de los equipos de forma dinámica y ágil, promoviendo que determinados procesos de negocio definidos en Dynamics CRM, tengan consecuencias en la asignación de los roles de seguridad.
La utilización es muy muy simple, y aqui os dejo ejemplo de usuarios y equipos:
SNAGHTML7cf60d
SNAGHTML7d1ca0
He pasado pruebas con diferentes usuarios y equipos, incluso con diferentes unidades de negocio. Solo un tema importante a tener en cuenta, es que al seleccionar el rol de seguridad, solamente se puede seleccionar el rol de seguridad de la unidade de negocio ráiz (la padre de todo).
Espero les guste!!
abrazo!
@demian_rasko

sábado, 30 de enero de 2016

Contando elementos que hay en una cola desde Workflows (Workflow Tools)

Buenas, hoy voy a acabar este mes de enero, con una nueva actualización de mi solución llamada Workflow Tools que tengo publicada en Codeplex: https://msdyncrmworkflowtools.codeplex.com
Hoy, voy a seguir añadiendo funcionalidad relacionada con lo que publique la semana pasada (http://www.demianrasko.com/2016/01/seleccionar-o-recoger-elementos-de.html) para recoger elementos de una cola.
La idea es, que si me encuentro en una situación en donde debo recoger automáticamente desde una Cola elementos, a lo mejor antes sería interesante saber cuantos elementos hay en esa cola, o incluso saber cuales de esos elementos aún no están siendo trabajados por ningún otro usuario.
Es por esto que se me ha ocurrido añadir la funcionalidad “Queue Item Count” que me permitirá saber:
  • Elementos que me quedan pendientes en mi cola personal
  • Elementos totales que hay en una cola pública
  • Elementos totales de una cola pública sin asignar
  • etc.
Encontrandome en este punto, he creado esta nueva funcionalidad que funciona como siempre, primero la seleccionamos:
SNAGHTML7c3004d
y luego actualizamos los parámetros que son solo dos:
SNAGHTML7c35a35
Los parámetros son:
  • Source Queue: cola origen de la que queremos “contar” los elementos
  • Count Only Unassigned Items: un booleano, para decirle si queremos que nos cuente solo los elementos no recogidos por nadie (campo “trabajado por” a vacío) o todos los elementos.
  • ItemsCount: campo de salida de tipo numérico que nos da el total de elementos encontrados.
Muy simple. Ahora vamos a ver una utilización de esto que comento, en la “vida real”:
SNAGHTML7c6c7c5
En este ejemplo, el primer paso hace la consulta de la cola que se llama “Test1” para saber cuantos elementos hay disponibles sin ser asignados. Y en el segundo paso, hay una condición de comprobación que pregunta si el valor devuelto de esa consulta es mayor que cero:
SNAGHTML7c847cd
Si eso es positivo, entonces ya puedo hacer el “Pick”.
Creo que esto puede ser el “germen”, de un gestor de asignaciones dinámicas de trabajo Winking smile
Espero les haya gustado.
un abrazo!
@demian_rasko

sábado, 23 de enero de 2016

Seleccionar o recoger elementos de Colas desde workflows (Workflow Tools)

Buenas, hoy voy a volver sobre lo que me está “entreteniendo” las últimas semanas.
Mi trabajo diario y dedicado a Dynamics CRM y a diferentes proyectos, así tambien como mis contactos constantes con gente en las comunidades, me da nuevas ideas para añadir funcionalidades a mi solución de workflows.
Esto se me está convirtiendo en una verdadera extensibilidad de Dynamics CRM, para hacer cada vez mas cosas. Ya no solo por cada una de las funcionalidades independientes que voy añadiendo, sino por la combinación de unas con otras. Estoy empezando a pensar que muchos de los temas que a lo mejor hoy se hacen con desarrollos de “plugins” (.NET), ya se podrían hacer de varias maneras combinando muchas de mis funcionalidades.
Hoy voy a añadir una funcionalidad que me ha llegado desde la “Familia” de CRM, una de los tantos grupos de usuarios de CRM en los que participo dentro de las comunidades de CRM.
La idea surge por el típico problema en el trabajo con Colas en Dynamics CRM. Si tenemos un escenario donde varios usuarios van recogiendo elementos de una Cola (casos, actividades, etc.) a veces ocurre que los usuarios no recogen los elementos en orden, sino que se recogen primero los que son mas sencillos, o los que “gusten” mas. Este comportamiento se conoce como “Cherry Picking”.
No hay manera de impedir esto de forma estándar o sencilla, y por esto se me ha ocurrido que si pudiésemos automatizar la recogida de elementos de una cola desde un Workflow, se podría solucionar este problema.
Por esto, he creado una actividad de Workflow que llamé “Pick From Queue”, que me permite automatizar este trabajo y lo he añadido a mi solución en Codeplex: https://msdyncrmworkflowtools.codeplex.com/
El funcionamiento, como siempre es muy simple. Primero seleccionamos la actividad de workflow “Pick From Queue”:
SNAGHTML1c50c7
Y luego definimos los parámetros necesarios:
SNAGHTML1ca2bf
La descripción de estos parámetros es:
  • Source Queue: Cola desde la cual quiero recoger los elementos
  • Remove Items From Source Queue: definimos si queremos que los elementos sean eliminados de la cola de origen o no. Así es como es la funcionalidad estandar de “Seleccionar” elementos de la cola de forma manual.
  • Quantity Items: para definir cuantos elementos queremos recoger a la vez.
Es importante destacar que le estoy aplicando un orden predeterminado a los elementos de la cola, que es el de la fecha de “Cola indicada” – enteredon es su nombre de esquema -  (de forma descendente).
Ahora pensemos escenarios donde aplicar esto. Imaginamos que tenemos que ir haciendo llamadas de teléfono, y a medida que vamos completando las mismas, disparamos un workflow con esta accion, para coger la/s siguiente/s llamadas. Automatizando esto, impedimos que los usuarios tengan que ir manualmente a “seleccionarse” el trabajo, sino que automáticamente se les irá asignando por orden.
Espero les haya gustado, y como siempre, estoy abierto a que me plantéis nuevas ideas Winking smile
@demian_rasko

sábado, 16 de enero de 2016

Añadir ficheros adjuntos en emails desde otras entidades (Workflow Tools)

Buenas a todos, yo sigo con lo mío….y lo mío es cada día explorar nuevas cosas que puedan hacer falta y añadirlas en mi solución de Workflows.
Cada día me pasa mas seguido que me entero de gente conocida que se descarga esta solución y usa alguna de las funcionalidades, incluso compañeros de trabajo. Esto me motiva a seguir mejorándola.
Además me voy dando cuenta, que a veces algunas de las funcionalidades es algo simple, pero si la utilizo con otra de las ya incluidas, empieza a tener muchas mas potencia.
Ya llevo 15 funcionalidades, y mas de 1300 descargas. Algunos me escriben comentarios, mejoras o incluso incidencias. Todo sirve para mejorar. Tengo compis que me van tirando ideas para ir mejorándolo, pero por favor sentiros libres de proponer.
Como siempre, está disponible para su descarga en Codeplex, y con todo el código abierto allí: https://msdyncrmworkflowtools.codeplex.com/
La nueva funcionalidad de hoy, nos permite añadir los adjuntos que tenga una entidad relacionadas, a un email.
La entidad puede ser cualquiera, podemos pasarle la URL de la misma. Los Ficheros a añadir, pueden ser varios e incluso utilizar el “*” para hacer una búsqueda difusa de ficheros. Luego se adjuntan en el email que debe estar previamente debe estar creado.
La utilización de esto es la siguiente, primero seleccionamos la acción:
SNAGHTML3aaef30
Una vez seleccionado, introducimos los parametros:
SNAGHTML3abcbd4
Los parámetros son:
  • Main Record URL: dirección URL del registro que contiene las notas de origen
  • File Name: campo con el nombre del fichero/s a añadir. puedes utilizar asteriscos “*” como comodín de búsqueda.
  • Email: es un campo Lookup, donde pasarle el email. En el ejemplo anterior, el email lo había creado en un paso anterior del workflow, y puede utilizarlo aquí.
Finalmente se me crea un email, con todos los adjuntos de una Cuenta, por ejemplo:
SNAGHTML3b38e86
Espero les guste, un abrazo!
@demian_rasko