Gracias daniel...
esta buena la idea...me va a llevar un tiempito cambiar las cosas pero a
futuro va a ser mejor!

Salu2,

On Fri, Sep 12, 2008 at 12:02 PM, Daniel Calvin <[EMAIL PROTECTED]>wrote:

> Hola Leandro
>
> Te digo comomanejo ese tipode cosas.
> Uso un campo que me dice la funciond el estado, su siginificado.
>
> Ejemplo
>
> 1 Activo                      00000001
> 2 Cara de Tomate        00000001
> 3 En curso                  00000010
> 4 Trabajando en ello     00000010
> 5 Esperando algo        00000100
> 5 Detenido                  00000100
> 6 Cancelado               00001000
>
> Esto me idendepndiza del ID y me permite tener mas de un estado, que
> aplique al mismo concepto o una conjuncion de ellos.
>
> De esa forma, mas alla de tener su ID y una leyenda, lo que se hardcodea es
> el valor que reopresenta.
> Puedo tener mas de une stado que significa la mismo, puedo tener enums que
> me permitan evaluar situaciones validas o necesarias para:
>
> en pseudocodigo:
>
> [Flag] // Esto par indicar que los valores deben ser potencia de 2
> public enum TareaEstadaEnum { Activo=1, EnCurso=2,Detenido=4,Cancelado=8 }
>
> Esto permite luego tener armadas las precondiciones como expresiones
> booleanas, un buen complemento de esto es armar algun enum para condiciones
> ante una posible acciones.
>
> [Flag] // Esto par indicar que los valores deben ser potencia de 2
> Public enum AccionesEnum { Cancelar=1, ReActivar=2, NoSeQueOtra=4 }
>
> Luego en alguna clase o helper podes establecer precondiciones para una
> tarea en base su estado, indpendientemente de como se llame en la base de
> datos o como se lo muestres al usuario.
>
> En Coop evaluamos algunas situaciones utlizando esta tecnica, aca no tengo
> nada a mano en C#, te pego algo vb6, que aplica el concepto.
>
> Ej:
>
> OPCAMHelper.Estado.Admite(enuOperaciones.Abrir, OEstado)
> Esto te dice si par el estado actual, OEstado,  se puede o no aplicar la
> operación abrir, (enuOperaciones.Abrir).
>
> OPCAMHelper.Estado.LogOperacionesAdmitidas( OEstado, enuOperaciones.Abrir )
> Esrto registra en un Log loque se intenta hacer y sus violaciones, si
> existen.
>
> OEstado = OPCAMHelper.Estado.ActualizaEstado(enuOperaciones.Abrir, OEstado)
> Esto actualiza al nuevo estado si la transicion es válida y lo retorna.
>
> ( Ojo esto s muy viejo y en modo Helper, es VB6, podes hacer algo parecido
> con OOP y mucho mas elgante. )
>
> Algunos enum de lo que utiliza esto y algunas constantes.
>
> Public Enum enuOperaciones
>     Ninguna = 0
>     Abrir = 1
>     Desdoblar = 2
>     Agrupar = 4
>     FiltroCrear = 8
>     FiltroAplicar = 16
>     Buscar = 32
>     Modificar = 64
>     Generar = 128
>     Validar = 256
>     Cerrar = 512
>     Revisar = 1024
>     Eliminar = 2048
>     Exportar = 4096
>     ExportarErrores = 8192
> End Enum
>
> Public Enum enuOperacionesEstado
>     Ninguno = 0
>     Abierto = 1
>     FiltroCreado = 2
>     FiltroAplicado = 4
>     OperacionSeleccionada = 8
>     Modificado = 16
>     generado = 32
>     validado = 64
>     Cerrado = 128
>     Revisado = 256
>     Todos = Ninguno Or Abierto Or FiltroCreado Or FiltroAplicado Or
> OperacionSeleccionada Or Modificado Or generado Or validado Or Cerrado Or
> Revisado
> End Enum
>
> Public Enum enuOperacionCondiciones
>     Abrir = enuOperacionesEstado.Ninguno Or enuOperacionesEstado.Cerrado
>     Desdoblar = enuOperacionesEstado.Abierto Or
> enuOperacionesEstado.OperacionSeleccionada
>     Agrupar = enuOperacionesEstado.Abierto Or
> enuOperacionesEstado.OperacionSeleccionada
>     FiltroCrear = enuOperacionesEstado.Abierto
>     FiltroAplicar = enuOperacionesEstado.Abierto Or
> enuOperacionesEstado.FiltroCreado
>     Buscar = enuOperacionesEstado.Abierto
>     Modificar = enuOperacionesEstado.Abierto
>     Generar = enuOperacionesEstado.Abierto Or enuOperacionesEstado.validado
>     Exportar = enuOperacionesEstado.Abierto
>     ExportarErrores = enuOperacionesEstado.Abierto Or
> enuOperacionesEstado.validado
>     Validar = enuOperacionesEstado.Abierto
>     Revisar = enuOperacionesEstado.Abierto
>     Cerrar = enuOperacionesEstado.Abierto
>     Eliminar = enuOperacionesEstado.Abierto Or
> enuOperacionesEstado.OperacionSeleccionada
> End Enum
>
>
> En Net lo podes armar mucho mejor y más dinámico.
>
> Bue, en este caso es para amnejar parte de los permisos sobre ciertos
> controladores de caso de uso.
>
> Saludos
>
> Daniel Calvin
>
>
>
>
>
> El 12 de septiembre de 2008 10:35, Leandro Halfon <[EMAIL PROTECTED]
> > escribió:
>
>> Lista..tengo un problema que supongo que muchos de ustedes habran tenido
>> en algun momento..a ver si me pueden ayudar
>>
>> Hace un tiempo tenia un sistema de tracking que era simplemente ABM'S
>> varios..
>> Por ej: una actividad tenia varios estados (nueva, en cola, terminada,
>> etc) pero sin logica alguna.
>>
>> A nivel de BD, la actividad tiene una FK a una tabla de estados...
>>
>> Esos estados, en la BD de produccion son diferentes a los de la BD de
>> testing ...
>>
>> El problema es que como ahora se agregaron varias validaciones, reglas de
>> negocios, etc en base a esos estado (porq fue un sistema que se fue haciendo
>> de a poco), si comparo los valores en base a un "id" dijo  al momento de
>> realizar prueba se me complica....y tampoco me gusta mucho eso ya que seria
>> harcodeo..
>>
>> alguna idea?
>>
>> Espero que se haya entendido...
>>
>> Gracias!
>>
>> Leandro
>>
>
>
>
> --
> Daniel A. Calvin
> Cooperator Team Member
> http://www.cooperator.com.ar
> Microsoft Certified Professional
>

Responder a