viernes, 17 de febrero de 2017

Cuando tu aplicación es multi-idioma

Estoy  es un proyecto que es .net 4.5 en  asp web forms, nada de mvc

Quiero que las propiedades de mis clase sean multi-idioma,  por ejemplo que  las validaciones sean multi-idioma.
Yo tengo mi clase :
    public class Foo
    {
        public Int32 Id { get; set; }
        [Display(ResourceType = typeof(PropertyNames), Name = "Descripcion")]     
        public string Descripcion { get; set; }
          
    }

Tengo una función

public static string GetDisplayName(Type type, string property)
        {
            var members = type.GetMember(property);
            if (members.Length == 0) throw new ArgumentException(String.Format("Propiedad  '{0}' no esta en el tipo '{1}'", property, type.Name));

            var member = members[0];
            var attributes = member.GetCustomAttributes(typeof(DisplayAttribute), false);
            if (attributes.Length == 0) throw new ArgumentException(String.Format("'{0}.{1}' no tiene display property", type.Name, property));
            var attribute = (DisplayAttribute)attributes[0];
            return attribute.GetName();
        }

Por supuesto tengo un resource PropertyNames.res donde tengo escrito el texto para los usuarios de la propiedad Descripcion
Y en la función   validar

private void Validar (Foo oFoo)
{

            if (String.IsNullOrWhiteSpace(oFoo.Descripcion))
                throw new Exception(Resource.msgCamposObligatorios + Comun.GetDisplayName(typeof(Foo), "Descripcion") )
               
}

Un pasito más. Tengo varios enum que por puesto también quiero sea multi-idioma y que si tengo que sacarlos en un combo o radiobuton list no tenga que llenar el código de id o case.


public static List<KeyValuePair<string, string>> ObtenerTextosEnum(Type tp)
        {
            List<KeyValuePair<string, string>> oret = new List<KeyValuePair<string, string>>();
            if (!tp.IsEnum)
                throw new Exception("No es un tipo Enum reconocible ");
            Array items = Enum.GetNames(tp);
            foreach (string item in items)
            {
                oret.Add(new KeyValuePair<string, string>((string)item, GetDisplayName(tp, item)));
            }
            return oret;
        }


Acepto que las validaciones de una web puede estar perfectamente por JavaScript, siempre que no sean validaciones complejas o funciones que en un futuro se vayan a llamar creando un sw o una app de móvil o escritorio.
Acepto también que se hacen muchas aplicaciones preparadas para el multiidioma con ficheros de recursos que nunca se traducen.


viernes, 9 de diciembre de 2016

Directorios utiles

Mi memoria cada dia va peor

Donde está la GAP  de .Net

C:\Windows\Microsoft.NET\assembly\GAC_32
C:\Windows\Microsoft.NET\assembly\GAC_64

Donde está el host.in

C:\Windows\System32\drivers\etc

viernes, 25 de noviembre de 2016

Oracle,

Consultas de Oracle para conocer la conexiones
http://deckerix.com/blog/consultas-sql-utiles-que-todo-dba-de-oracle-deberia-conocer/

viernes, 26 de agosto de 2016

Formateo de las salidas de un SW .net


Evitar enviar todas la propiedades en las llamadas soap ui.
Depende de cómo serializamos las clase
  •         Si usa [DataContract] para quitarlo hay basta con quietar [DataMember] de la propiedad
  •           Si usas Serializable, añadir NonSerialized en la propidad
  •           Si en la clase no tiene especificado ninguna forma debemos añadir IgnoreDataMember


Formatear las salida de atributo DateTime para que sea solo un date
¡ Ojo esto cambia el contrato y será necesario que los clientes que usan el sw actualicen la referencia al mismo!
Añadir  [XmlSerializerFormat] en la función

  [ServiceContract]
    public interface IMiservicio
    {

        [OperationContract]
        [XmlSerializerFormat]
        List<MiClase> Mifuncion(


Y luego en la propiedad

public class MiClase
{
 [XmlElement(DataType = "date")]

public DateTime Fecha { get; set; }

viernes, 6 de mayo de 2016

siteMapNode permisos

Importante

La restricción no se hace con el atributo roles del elemento siteMapNode en el web.sitemap, este atributo es tomado en cuenta solo para los nodos que no tienen una URL asociada
El atributo securityTrimmingEnabled con esto el XmlSiteMapProvider automáticamente oculta los paths no alcanzables para un usuario dado , tomando como referencia la configuración del web.config.
Definir en el Web.config los permisos:
<location path=“gestion/borrado.aspx”>
<system.web>
<authorization>
<allow roles=“administrador”/>
<deny users=“*”/>
</authorization>
</system.web>
</location>

Leer: https://ilopez.wordpress.com/2008/01/14/restriccion-de-accesos-en-aspnet-20/

viernes, 29 de enero de 2016

Gestión de proyectos


Muy visual y útil

Kanban  http://hipertextual.com/archivo/2013/11/que-es-kanban/

Si quieres algo gratis: https://taiga.io/

Con VS
http://www.alexandervanwynsberghe.be/implementing-kanban-with-tfs-introduction/
https://gregorybeamer.wordpress.com/2013/01/17/installing-the-kanban-process-template/

https://msdn.microsoft.com/Library/vs/alm/Work/kanban/kanban-basics