Normalmente, cuando creamos un formulario en Oracle APEX, sino realizamos una acción dinámica personalizada para la inserción de datos, este siempre nos brindará un mensaje de error cuando intentemos enviar el formulario y tenemos campos obligatorios que deben estar llenos, nos muestra un detalle de que campos llenar, y con un click al mensaje de error nos dirige a los campos necesarios respectivamente:

Lo que vamos a hacer en este laboratorio es implementar estos mismos mensajes de error de forma personalizada en un formulario que se inserte usando acciones dinámicas, ya que con el método por default de APEX no podemos editar los textos que se le presenta al usuario y simplemente indica que el campo debe tener algún valor.
Crearemos un formulario que realice la inserción de 2 campos como el siguiente:

Dentro de APEX tenemos el botón Crear, el cual utiliza una acción dinámica para insertar los datos del formulario a la base de datos, lo que haremos será crear una condición del lado del cliente en la acción dinámica para que con base a la respuesta devuelva un true o un false.
En el área de Client-Side Condition colocaremos el siguiente código Javascript, este valida si los campos poseen o no un valor, si ambos poseen un valor, nos devuelve un True, en caso contrario nos devuelve un False:
El texto en negrita es el nombre de los items a validar
$v('P52_ASUNTO') != '' && $v('P52_DESCRIPCION') != ''

Ahora en nuestra acción dinámica en True acción colocaremos el código necesario para ingresar los campos a nuestra base de datos.
Y en False acción crearemos una acción que ejecute un código Javascript, este nos mostrará el mensaje de error utilizando el paquete apex.message.showErrors, todo como en la siguiente imagen:
Los valores en negrita se deben cambiar por el nombre de los items y modificar el texto que se mostrará cuando se dispare el error.
// First clear the errors apex.message.clearErrors(); // Mostramos los nuevos mensajes de error if ($v('P52_ASUNTO') == ''){ apex.message.showErrors([ { type: "error", location: [ "page", "inline" ], pageItem: "P52_ASUNTO", message: "Debe ingresar un asunto", unsafe: false } ]); }//cierre if if ($v('P52_DESCRIPCION') == ''){ apex.message.showErrors([ { type: "error", location: [ "page", "inline" ], pageItem: "P52_DESCRIPCION", message: "Debe ingresar una descripción", unsafe: false } ]); }

Guardamos los cambios y realizamos la prueba del mensaje:

Cuando presionamos el botón Crear, nos aparecerá el mensaje de error personalizado tanto en los campos, como en el texto del mensaje de error.
De esta forma podemos realizar validaciones de nuestros campos antes de enviar el formulario y así hacer más amigable nuestra aplicación con los usuarios.
hola que interesante solucion, tengo una situacion como puedo desplegar en un mensaje el valor de un item cuando le doy click a un boton quiero que aparezca en un mensaje.
Hola Douglas,
En la parte del mensaje puedes concatenar el valor del item que requieras o bien sustituir el mensaje por solo el valor del item, por ejemplo así:
type: ‘error’,
location: [ ‘page’, ‘inline’ ],
pageItem: ‘P52_ASUNTO’,
message: ‘Debe ingresar una descripción ‘ + $v(‘ITEM NAME’),
unsafe: false
De esta manera aparecerá el valor del item que coloques.
Recuerde que puede utilizar las siguiente funciones en los bloques de código javascript:
$v(‘ITEM NAME’) Devuelve el valor del item
$s(‘ITEM NAME’,’valor’) Setea un valor al item
Hola Douglas, como podria hacer que una vez exhibido el mensaje en la parte superior de la pagina(en amarrillo en tu ejemplo) que una vez ingresado un primer valor pueda borrar el mensaje.
Hola Francisco, en ese caso deberías hacer un evento para que luego de ingresado un valor ejecute un código javascript con el siguiente comando: apex.message.clearErrors(); de esta manera limpias los mensajes de error ya corregidos.
O bien, también podrías contener todo el false action en una función global javascript y solo la vuelves a llamar luego de haber ingresado un valor al campo usando un evento para que revalide todos los campos, en ese caso, los que ya estén llenos no presentarán el mensaje de error.