Blog de Francisco Velázquez

otro blog personal

Posts Tagged ‘.net

Exportar a csv desde c#

leave a comment »

Una pequeña utilidad para exportar listas genéricas a csv, usando expresiones lambda.

public class ExportExcel<T> where T : class
    {
        private StringBuilder sb;        

        public ExportExcel()
        {            
            sb = new StringBuilder();
            if (HttpContext.Current != null)
                Context = HttpContext.Current;
        }

        public string Filename { get; set; }
        public HttpContext Context { get; set; }

        public void Export(List<T> l, Expression<Func<T, object>> expression)
        {
            if (string.IsNullOrEmpty(Filename))
                return;

            build(l, expression);

            Context.Response.AddHeader("content-disposition", "attachment;filename=" + Filename);
            Context.Response.Charset = string.Empty;
            Context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
            Context.Response.ContentType = "application/CSV";            
            Context.Response.Write(sb.ToString());
            Context.Response.End();
        }

        public string ToString(List<T> l, Expression<Func<T, object>> expression)
        {            
            build(l, expression);
            return sb.ToString();
        }

        private void build(List<T> l, Expression<Func<T, object>> expression)
        {
            sb = new StringBuilder();
            List<string> propertiesName = new List<string>();
            NewArrayExpression array = expression.Body as NewArrayExpression;
            foreach (object obj in (IEnumerable<object>)(array.Expressions))
            {
                string propertyName = obj.ToString().Remove(0, obj.ToString().IndexOf(".") + 1);
                propertyName = propertyName.Replace(")", "");
                sb.Append(propertyName + ";");
                propertiesName.Add(propertyName);
            }
            sb.AppendLine();

            foreach (var i in l)
            {
                foreach (var propertyName in propertiesName)
                {
                    sb.Append(getPropertyValue(i, propertyName).ToString() + ";");
                }
                sb.AppendLine();
            }
        }

        internal static object getPropertyValue(object obj, string propertyName)
        {
            const System.Reflection.BindingFlags bindingFlags = System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance;

            var pi = typeof(T).GetProperties(bindingFlags).Where(prop => prop.Name == propertyName).SingleOrDefault();
            return pi.GetValue(obj, null);
        }
    }

Written by fravelgue

September 27, 2012 at 7:36 pm

Posted in .net

Tagged with , ,

Helper para ConfigurationElementCollection

leave a comment »

Interesante utilidad que ayuda muchísimo para trabajar con colecciones en archivos de configuración.

    [ConfigurationCollection(typeof(ConfigurationElement))]
    public class ConfigurationElementCollection<T> :
        ConfigurationElementCollection, IEnumerable<T> where T : ConfigurationElement, new()
    {
        protected override ConfigurationElement CreateNewElement()
        {
            return new T();
        }
        protected override object GetElementKey(ConfigurationElement element)
        {
            return ((T)(element)).ToString();
        }
        public T this[int idx]
        {
            get { return (T)BaseGet(idx); }
        }

        public new IEnumerator<T> GetEnumerator()
        {
            int count = base.Count;
            for (int i = 0; i < count; i++)
                yield return base.BaseGet(i) as T;
        }

Written by fravelgue

September 6, 2011 at 4:41 pm

Posted in development

Tagged with , , ,

Arquitectura CQRS y DDD

leave a comment »

Me pareció muy ilustrativa esta diapositiva.

via.

Written by fravelgue

March 17, 2011 at 7:04 pm

Posted in .net

Tagged with , ,

NuPack

leave a comment »

Sale a la luz NuPack, una nueva herramienta que viene a ayudar mucho en el desarrollo, sobre todo cuando se integran librerías o utilidades open source. Se añade funcionalidad similar a gems de ruby, y entra en competencia con nu-net, que precisamente hacía uso de ruby. La verdad es que la integración con visual studio y el uso de scaffold commands promete.

Esto refleja los cambios que está sufriendo Microsoft, la verdad es que me gusta la dirección en cuanto a herramientas y framework, así como la continua mejora de productos. Algo nuevo que probar 🙂

Update: Por ahora sólo hace falta que aumenten el número de paquetes disponibles. Aquí los existentes en nu.

Written by fravelgue

October 6, 2010 at 5:34 pm

Posted in development

Tagged with , , , ,

Consumir un WebService con autenticación básica desde .NET

leave a comment »

El título describe bastante bien lo que vamos a solucionar en este post.

public class SecureWebService : ThirdPartyWebService
{
    protected override WebRequest GetWebRequest(Uri uri)
    {
        HttpWebRequest webRequest = (HttpWebRequest)base.GetWebRequest(uri);
        NetworkCredential credentials = Credentials as NetworkCredential;
        if (credentials != null)
        {
            string authInfo =
            ((credentials.Domain != null) && (credentials.Domain.Length > 0) ?
            credentials.Domain + @"\" : string.Empty) +
            credentials.UserName + ":" + credentials.Password;
            authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
            webRequest.Headers["Authorization"] = "Basic " + authInfo;
        }
        return webRequest;
    }
}

via.

Written by fravelgue

October 5, 2010 at 12:38 pm

Posted in .net

Tagged with , , ,

Microsoft y el acceso a datos

with one comment

A través de Ayende, descubro otra nueva forma para realizar el acceso a datos.  Ayende critica no sin razón este nuevo método y parece que no es el único, porque desde microsoft llegan explicaciones, realmente algo positivo que se genere conversación.

Mi opinión es que este es un campo en el que Microsoft no lo ha estado haciendo bien, aunque parecía que iban por buen camino con EF, ahora de nuevo tenemos una nueva tecnología que sólo crea incertimbre.

En aplicaciones empresariales no podemos estar cambiando cada dos años de tecnología de acceso a datos; necesitamos tecnologías que perduren en el tiempo y que sigan manteniéndose y eso es lo que parece que Microsoft no ofrece. Creo que ahora mismo la única opción  es nHibernate, EF ha mejorado mucho situandolo al nivel de nHibernate, pero quién dice que seguirá haciéndolo.

Hay gente que defiende que tener opciones no es malo, de hecho es algo corriente en otras tecnologías, como Java. Pero creo que se debe explicar muy claramente cual es el ámbito de cada una, y no crear confusión con ellas. En este caso parece que va enfocado al desarrollo usando WebMatrix.

Para solucionar todos estos problemas, creo que es fundamental que se actualizen la documentación de p&p Data Guidance. Y por supuesto intentar aceptar soluciones externas sobre todo cuando éstas son mejores que las que se proponen.

Written by fravelgue

August 4, 2010 at 3:19 pm

Posted in development

Tagged with , , ,

Messaging y Service Bus

leave a comment »

Una muy interesante recopilación de apuntes para comenzar a entender como desarrollar aplicaciones usando mensajes. Tras esto pues a releer todos los post del siempre recomendado Ayende.

Y por último tenemos el código de MassTransit, NServiceBus, o la implementación de Ayende.

Un poco off-topic, pero que hablando de arquitectura y rendimiento no viene mal, por cierto ya es hora de una pequeña actualización.

Written by fravelgue

February 16, 2010 at 8:28 pm

Posted in development

Tagged with , ,