Esta creación de datos, puede provenir en general por registros de configuración que ya están creados en DES y deben ser subidos a PRO, o incluso por el simple interés de mover estos datos.
Además a veces incluso queremos que los GUIDs de los registros sean los mismos, ya que se los creo manualmente los GUIDs internos de los registros se asignan automáticamente a nuevos valores.
Esta información además debe estar sincronizada, ya que si modifico datos en el entorno de origen, luego quiero ver ese dato actualizado en el resto.
Normalmente mucha gente mueve estos datos de forma manual exportando e importando desde ficheros Excel, pero es complicado mantenerlo sincronizado y además no se puede automatizar.
Para esto, hoy he preparado una solución MUY SENCILLA que mueve los datos entre entornos.
La idea es la siguiente:
El código .NET no puede ser mas simple, en la llamada lo único que quiero pasar es el código son los dos accesos (origen/destino), la entidad y los campos a sincronizar:
static OrganizationService service = GetCrmService();
Y el método lo he llamado “MoveData()”:static OrganizationService service2 = GetCrmService2(); MoveData(service, service2, "account", "name,emailaddress1,telephone1");
static void MoveData(OrganizationService sourceConnection, OrganizationService destConnection,
string entityName, string attributeNames)
{
//1) consulto todo en origen
string[] attributes=attributeNames.Split(",".ToCharArray());
QueryExpression consulta1 = new QueryExpression(entityName);
consulta1.ColumnSet = new ColumnSet(attributes);
EntityCollection registros = sourceConnection.RetrieveMultiple(consulta1);
foreach (Entity ent in registros.Entities)
{
//2) Consulto si ya existe el registro en destino
Entity dest = null;
try
{
dest = destConnection.Retrieve(entityName, ent.Id, new ColumnSet(attributes));
}
catch (SystemException ex)
{
dest = null;
}
bool existe = (dest == null) ? false : true;
if (!existe)
{
//3) Creacion en destino
destConnection.Create(ent);
Console.WriteLine("Registro Creado");
}
else
{
//4) Update en destino
destConnection.Update(ent);
Console.WriteLine("Registro Actualizado");
}
}
Console.ReadLine();
}
Finalmente si lo ejecuto me da el resultado:
Creo que esta solución es súper fácil pero a la vez útil, para mover datos de un entorno a otro, simplemente pasando las conexiones, y los nombres de entidades y campos.
Pensar cuanto tiempo tardarías en mover 10 entidades de configuración con sus registros manualmente con Excel desde un entorno de DES a PRE, UAT y PRO, y luego intentar pensar cuanto tardarías con algo así…
Happy Developing!
Espero les sirva…
abrazo!
No hay comentarios:
Publicar un comentario