lunes, 6 de septiembre de 2010

Como funciona la eliminación de un valor de un Picklist

En este post intentaré explicar lo que ocurre cuando se elimina un valor de un atributo de tipo "Picklist" (desplegable).
Es un poco curioso el funcionamiento, incluso un poco incompleto para mi gusto.
Vamos a ver un ejemplo e iremos revisando como queda la información en el SQL Server.
Primero vamos a crear un atributo nuevo en la entidad de "Caso" y lo añadimos al formulario. Será un desplegable con el nombre "new_categoria" con los valores "Uno", "Dos", "Tres":
Atributo picklist

Creamos un registro de "Caso" con el valor de Categoría en "Dos" y luego hacemos un par de consultas en el SQL Server para ver que nos queda almacenado físicamente en la base de datos y en la FilteredView:

SELECT * FROM IncidentExtensionBase
SELECT incidentid,New_Categoria,New_Categorianame FROM FilteredIncident

Resultados consulta

Hasta ahora, todo normal, ahora bien, imaginemos que necesitamos eliminar el valor del desplegable "Dos". Al eliminarlo nos aparece el siguiente mensaje:
"Si algún registro usa el valor que va a eliminar, actualice el registro de modo que use otro valor para poder guardar este cambio. Una vez quitado este valor, no puede usarlo para buscar este registro en la aplicación. ¿Desea continuar?"

Al leerlo parecería ser que lo que va a hacer será reemplazar los registros con este valor y dejarlo en NULL, pero en realidad no es así.
Borramos el valor y volvemos a hacer la misma consulta que antes:
Resultados consulta 2

Como se ve, en realidad en la base de datos seguimos teniendo el mismo valor, pero lo que ocurre, es que no puede recoger el texto del valor en la FilteredView, cosa que es normal ya que el valor se ha eliminado.

Imagínense que pasado el tiempo, añadimos un nuevo valor en este desplegable con el mismo valor (2) como índice, pero con otro texto que significa otra cosa:
Atributo Picklist 2

Volvemos a hacer la consulta y obtenemos:
Resultados Consulta 3

Con esto sacamos como consecuencia, que al eliminar un valor de un desplegable, los registros relacionados con este valor, siguen teniendo el mismo, y no se eliminan, de hecho si hacemos una búsqueda avanzada por ese atributo filtrando por que "Contiene datos", lo encontrará ya que tiene datos, pero es un dato "inexistente". Además hay que tener en cuenta que si creamos nuevos elementos en el desplegable en índices ya existentes, podríamos estar reemplazando y modificando un valor antiguo que ya no nos interesaba.

La conclusión final y consejo que dejo es que se tenga mucho cuidado con los desplegables y en especial al eliminar los valores, creo que sería una buena práctica no permitir a usuarios finales gestionar este tipo de atributos.

Un abrazo

No hay comentarios:

Publicar un comentario