Mostrar Condicionalmente Registros Inactivos en un LOV
Los componentes de la Lista de Valores (LOV) son indispensables para presentar listas de selección amigables al usuario al crear aplicaciones en Oracle APEX. Sin embargo, puede haber escenarios en los que los registros inactivos solo deban aparecer en el LOV si son el valor seleccionado actualmente. En esta publicación, te mostraré cómo configurar esto con una simple consulta SQL.
¿Por Qué Querrías Hacer Esto?
A veces, los registros inactivos, como un producto descontinuado o un exempleado, no necesitan mostrarse en las listas. Pero si alguien ya lo seleccionó antes y aún está activo en el Popup LOV, querrás asegurarte de que siga apareciendo; de lo contrario, podría ser confuso.
En el ejemplo de la Lista de Valores (LOV) mostrado arriba, si un registro no se ha sido seleccionado previamente, solo se mostrarán los valores activos en la lista. Sin embargo, si un registro se seleccionó previamente y se volvió inactivo mientras sigue siendo el valor seleccionado, continuará mostrándose como seleccionado. En este ejemplo, he añadido la palabra "inactivo" para hacer que el usuario sepa que necesita actualizarse. Incluso podrías personalizar aún más tu página agregando una alerta.
Lógica de la Consulta SQL
Para lograr este comportamiento, puedes utilizar una consulta SQL que combine los registros activos con una condición adicional para incluir un registro inactivo específico si coincide con un valor preseleccionado. Aquí tienes un ejemplo de consulta:
select name as d, id as r from table_name where active = 'Y' or id = to_number(:PX_POPUP_LOV_ITEM);
¿Qué Hace Esta Consulta?
active = 'Y'
: Muestra todos los registros activos.id = to_number(:PX_POPUP_LOV_ITEM)
: Añade de nuevo a la lista el registro previamente seleccionado (incluso si está inactivo).
Mejoras Opcionales
Etiquetar Registros Inactivos: Para que sea más claro para los usuarios, puedes agregar un indicador como "(Inactivo)". Por ejemplo:
select name || case when active = 'N' then ' (Inactivo)' else '' end as d, id as r from table_name where active = 'Y' or id = to_number(:PX_POPUP_LOV_ITEM);
Personalizable para LOVs de Selección Múltiple: Este enfoque también se puede adaptar para los Popup LOVs de selección múltiple aplicando una lógica similar en el proceso de pre-renderizado para el elemento relevante.
Puntos Clave
Los usuarios solo ven lo que necesitan, con los registros inactivos ocultos a menos que sean relevantes.
Los usuarios no perderán el acceso a los registros que ya han seleccionado si estos se vuelven inactivos.
Puedes ajustar la lógica para adaptarla a tus necesidades específicas, incluso para valores de selección múltiple.
Este método es una excelente manera de mantener tus LOVs limpios y fáciles de usar, al tiempo que manejas casos especiales donde los registros inactivos son relevantes.