viernes, 13 de septiembre de 2013

CRM 4.0 - Convertir una entidad dynamica en texto


This method returns the value of a dynamic entity attribute.


 /// <summary>
 /// This method returns the value of a dynamic entity attribute.
 /// </summary>
 private static object GetAttribute(BusinessEntity entity, string attribute) {
  if (entity.GetType() == typeof(DynamicEntity)) {
   DynamicEntity de = (DynamicEntity)entity;
   foreach (Property prop in de.Properties) {
    if (prop.Name == attribute) {
     PropertyInfo propInfo = prop.GetType().GetProperty("Value");
     return propInfo.GetValue(prop, null);
    }
   }
   return null;
  }
  else {
   PropertyInfo propInfo = entity.GetType().GetProperty(attribute);
   return propInfo.GetValue(entity.ToString(), null);
  }
 }

GetStringValue



 private static string GetStringValue(DynamicEntity entity, string atributo) {
  object resultado;
  resultado = GetAttribute(entity, atributo);
  if (resultado != null) {
   string tipo = resultado.GetType().ToString();
   tipo = tipo.Substring(tipo.LastIndexOf('.') + 1, tipo.Length - tipo.LastIndexOf('.') - 1);
   switch (tipo) {
    case "String":
     return (string)resultado;
    case "Picklist":
     return ((Picklist)resultado).name;
    case "Lookup":
     return ((Lookup)resultado).Value.ToString();
    case "Customer":
     return ((Customer)resultado).Value.ToString();
    case "Key":
     return ((Key)resultado).Value.ToString();
    case "CrmDateTime":
     return ((CrmDateTime)resultado).date;
    case "CrmBoolean":
     return ((CrmBoolean)resultado).name;
    case "CrmMoney":
     return ((CrmMoney)resultado).formattedvalue;

    case "CrmNumber":
     return ((CrmNumber)resultado).Value.ToString();
    case "Owner":
     return ((Owner)resultado).Value.ToString();
   }

  }
  return "sin valor";
 }

ConvertToXml


 private static string ConvertToXml(DynamicEntity entity) {
  StringBuilder xml = new StringBuilder();
  //  open root element
  xml.Append(string.Format("<{0}>\r\n", entity.Name));
  //  loop through properties and write out elements
  foreach (Property prop in entity.Properties) {
   string propName = prop.Name;
   //string propVal = entity.Properties[prop.Name].ToString();
   string propVal = GetStringValue(entity, propName);
   xml.Append(string.Format("<{0}>{1}</{0}>\r\n", propName, propVal));
  }
  //  close root element
  xml.Append(string.Format("</{0}>\r\n", entity.Name));
  //  return results
  return xml.ToString();
 }

No hay comentarios:

Publicar un comentario