Bueno, he preparado un plugin, que registra en una entidad de CRM, lo que ocurre cuando se dispara el plugin y nos deja el XML de esos parametros que "pasan" por el plugin.
Para esto los pasos son:
1) hacer un plugin con el siguiente código:
El código como ven es bastante sencillo, lo único que hace es serializar los objetos a mostrar, y crear un registro de "Log" con la información.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Crm.Sdk;
using Microsoft.Crm.SdkTypeProxy;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
namespace Logger
{
public class Log : IPlugin
{
public void Execute(IPluginExecutionContext context)
{
string sInputParameters = serializar(context.InputParameters);
string sOutputParameters = serializar(context.OutputParameters);
string sPreEntityImages = serializar(context.PreEntityImages);
string sPostEntityImages = serializar(context.PostEntityImages);
StringProperty strname = new StringProperty("new_name", context.PrimaryEntityName);
StringProperty strmensaje = new StringProperty("new_mensaje", context.MessageName);
StringProperty strinputparameter = new StringProperty("new_inputparameter", sInputParameters);
StringProperty stroutputparameter = new StringProperty("new_outputparameter", sOutputParameters);
StringProperty strpreimages = new StringProperty("new_preentityimages", sPreEntityImages);
StringProperty strpostimages = new StringProperty("new_postentityimages", sPostEntityImages);
DynamicEntity dyn = new DynamicEntity();
dyn.Name = "new_log";
dyn.Properties.Add(strname);
dyn.Properties.Add(strmensaje);
dyn.Properties.Add(strinputparameter);
dyn.Properties.Add(stroutputparameter);
dyn.Properties.Add(strpreimages);
dyn.Properties.Add(strpostimages);
ICrmService serv=context.CreateCrmService(true);
serv.Create(dyn);
}
public string serializar(PropertyBag obj)
{
string sreturn = "";
XmlSerializer serializer = new XmlSerializer(typeof(PropertyBag));
if (obj != null)
{
using (MemoryStream xmlInputParameters = new MemoryStream())
{
serializer.Serialize(xmlInputParameters, obj);
byte[] buffer = new Byte[xmlInputParameters.Length];
xmlInputParameters.Seek(0, 0);
xmlInputParameters.Read(buffer, 0, Convert.ToInt32(xmlInputParameters.Length));
sreturn = System.Text.Encoding.ASCII.GetString(buffer, 0, Convert.ToInt32(xmlInputParameters.Length));
}
}
if (sreturn.Length > 100000) //el crm no deja campos ntext mas grandes de 100.000 caracteres
{
sreturn = sreturn.Substring(0, 100000);
}
return sreturn;
}
}
}
2) Importar las personalizaciones de la entidad donde se registrarán los datos. Descargar la misma desde aquí. (es una sola entidad, con el nombre "Log")
3) Registrar la dll y añadirla al mensaje que deseamos "depurar" (se debe registrar en tantos eventos como deseemos):
Los datos se irán registrando de la siguiente forma (nos deja quien diparó el evento, la entidad, el tipo, la hora y los parametros e imágenes):
Los recursos para esto pueden ser descargados desde aquí:
Espero pueda servirles en su vida con los "plugins".
un abrazo
No hay comentarios:
Publicar un comentario