MSCRM 4.0: Workflow activity para formatear fechas

20 11 2010

Un problema que nos encontramos habitualmente al crear correos electrónicos u otras actividades en workflow es que, al insertar una fecha en un campo de text (por ejemplo, en el cuerpo del mensaje), no podemos dar formato a esa fecha. Para resolverlo hemos desarrollado una actividad de workflow personalizada que nos permite formatear las fechas antes de insertarlas en el mensaje. A continuación os mostramos como utilizar esta actividad personalizada.

Tras instalar la nueva actividad de workflow personalizada con PluginRegistration, se añade una nueva actividad en el interface de definición de workflows (Dar formato a fecha):

En este ejemplo hemos insertado una actividad de Dar formato a fecha para formatear la fecha de creación de un contacto. Al establecer las propiedades de la nueva actividad debemos seleccionar los siguientes valores:

  • Fecha: Atributo de fecha a formatear
  • Formato: Formato de la fecha que queremos aplicar (podéis usar cualquier formato de fecha igual que en el Parse de C#). Por ejemplo, dd-MM-yyyy, dd MMMM yy…
  • Idioma: Idioma que se aplicará al formato para temas de puntuación y literales (por ejemplo, si usáis MMMM en el formato). El idioma debe especificarse en el formato Language Code como es-ES, ca-ES, en-EN…

En el mismo workflow hemos creado un nuevo paso que genera un correo electrónico. En este correo electrónico mostraremos al fecha de creación sin formato y la fecha formateada mediante la actividad personalizada:

Para seleccionar la fecha formateada debéis seleccionar en Buscar la sección de Valores locales donde aparecerá el nombre del paso anterior del tipo Dar formato a fecha. Esta actividad devuelve una variable result que contiene el resultado de la fecha formateada:

Una vez, configurado el workflow y publicado, hemos ejecutado una prueba lanzando el workflow manualmente desde un contacto. Tras generarse el correo electrónico observamos que en el cuerpo del mensaje se han insertado la fecha de creación sin formato y la fecha de creación con el formato que hemos especificado.

Esperamos que os sea de utilidad. Si alguien está interesado en el código de la actividad personalizada de workflow Dar formato a fecha, escribidnos.

Anuncios

Acciones

Information

5 responses

3 05 2011
Jairon

buenos dias, fiate que estoy entrando a la programacion de visual studio 2010 y crm2011, me podrias hacer la campaña de enviarme el codigo para poder tener una referencia, entiendo que si hubieron cambios entre el crm4 y el crm2011 pero considero que me puede ayudar bastante.

gracias

3 05 2011
Albert Pòrrà

A continuación te envío el código de la clase para que puedas crear la actividad personalizada de workflow. Espero que con esto tengas suficiente sino, puedes darme tu e-mail y te envio el proyecto por e-mail.

FormatDate.cs

using System;
using System.Collections.Generic;
using System.Text;
using System.Workflow.Activities;
using Microsoft.Crm.Workflow;
using System.Workflow.ComponentModel;
using Microsoft.Crm.Sdk;
using Microsoft.Crm.Sdk.Query;
using Microsoft.Crm.SdkTypeProxy;
using System.Web.Services.Protocols;
using System.Globalization;

namespace Qurius.MsCrm.WFActivity
{
[CrmWorkflowActivity(“Dar formato a una fecha”)]
public class FormatDate : SequenceActivity
{
protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
{
try
{
IFormatProvider culture = new CultureInfo(“es-ES”, true);

if (Idioma != null && Idioma != “”)
culture = new CultureInfo(Idioma, true);

if (Fecha != null)
result = DateTime.Parse(Fecha.Value).ToString((Formato != “” ? Formato : “dd-MM-yyyy”), culture);
else
result = “”;

}
catch (Exception ex)
{
result = “”;
}
return base.Execute(executionContext);
}

public static DependencyProperty FechaProperty = DependencyProperty.Register(“Fecha”, typeof(CrmDateTime), typeof(FormatDate));
[CrmInput(“Fecha”)]
public CrmDateTime Fecha
{
get
{
return (CrmDateTime)base.GetValue(FechaProperty);
}
set
{
base.SetValue(FechaProperty, value);
}
}

public static DependencyProperty FormatoProperty = DependencyProperty.Register(“Formato”, typeof(string), typeof(FormatDate));
[CrmInput(“Formato”)]
public string Formato
{
get
{
return (string)base.GetValue(FormatoProperty);
}
set
{
base.SetValue(FormatoProperty, value);
}
}

public static DependencyProperty IdiomaProperty = DependencyProperty.Register(“Idioma”, typeof(string), typeof(FormatDate));
[CrmInput(“Idioma”)]
public string Idioma
{
get
{
return (string)base.GetValue(IdiomaProperty);
}
set
{
base.SetValue(IdiomaProperty, value);
}
}

public static DependencyProperty resultProperty = DependencyProperty.Register(“result”, typeof(string), typeof(FormatDate));
[CrmOutput(“result”)]
public string result
{
get
{
return (string)base.GetValue(resultProperty);
}
set
{
base.SetValue(resultProperty, value);
}
}
}
}

3 05 2011
Jairon

gracias Albert, te cuento como me va. saludos

9 05 2011
Jairon

Albert buenos dias, gracias por tu ejemplo este me sirvio para crear la actividad y pasarle un parametro donde obtengo el contexto para poder grabar datos, el problema que tengo es que a la actividad que estoy creando tengo que acceder a una entidad x1 obtener los valores de todos los registros que están guardados los cuales me serviran para realizar otras instrucciones, si le ejecucion de estas es exitosa tengo que grabar los datos en otra entidad x2, entre tu repertorio no tenes algun ejemplo de como reccorrer una entidad?,

ya que como actualmente lo tengo me tira un error de que no se puede crear array vacio.

gracias por tu ayuda mi correo es arauzh@gmail.com
saludos

15 05 2011
Albert Pòrrà

Jairon,
Disculpa el retraso en contestar, he estado muy liado. No he entendido demasiado bien el problema que me planteas. Por favor, enviame el codigo que no te funciona o bien concreta una poco más tu problema y seguro que le encontramos una solucióin!. Puedes contestar a través del blog o enviarme directamente lo que creas conveniente a a.porra@qurius.com.
Saludos

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s




A %d blogueros les gusta esto: