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