• 14 julio 2025
  • Enrique Flores
  • 0

Introducción

¿Alguna vez en Oracle APEX el HTML se veía como texto plano? ¿Has visto que los valores sustituidos pierden símbolos, comillas o se escapan automáticamente?

Oracle APEX incluye una forma poderosa de mantener los valores originales sin que se escapen o modifiquen automáticamente: el uso de !RAW.

Esta notación permite mantener los valores tal cual fueron generados, lo cual es clave en URLs dinámicas, JavaScript, redirecciones y cuando trabajas con firmas digitales o tokens.

En este artículo:

  • Te explico qué hace y cómo funciona !RAW en sustituciones de Oracle APEX.
  • Verás un ejemplo empresarial real con enlaces de aprobación firmados.
  • Te mostraré errores comunes y cómo evitarlos.

Este artículo es útil para desarrolladores APEX, especialistas en seguridad, y arquitectos de soluciones que crean apps dinámicas donde el valor exacto sí importa.


Tabla de Contenido

  1. ¿Qué es !RAW en Oracle APEX?
  2. Sintaxis y contexto de uso
  3. Ejemplo real: enlace firmado con token de aprobación
  4. Consideraciones de seguridad y formato
  5. Buenas prácticas
  6. Conclusión y recurso extra

1. ¿Qué es !RAW en Oracle APEX?

Oracle APEX, por defecto, escapa caracteres especiales en sustituciones tipo &ITEM. para evitar problemas en HTML, JavaScript y otros contextos.

Cuando necesitas que el valor se mantenga exactamente igual —sin comillas, sin codificación HTML, sin backslashes— debes usar &ITEM!RAW. o #COLUMN_NAME!RAW#.

Esto es crítico cuando:

  • Construyes URLs con tokens o firmas.
  • Insertas valores en scripts JavaScript.
  • Insertas datos en JSON o XML sin codificación.

2. Sintaxis y contexto de uso

Sustitución de ítems:

 &MY_ITEM. -- escapado &MY_ITEM!RAW. -- sin escape 

Sustitución de columnas:

 #NOMBRE_COLUMNA# -- escapado #NOMBRE_COLUMNA!RAW# -- sin escape 

Contextos típicos:

  • En HTML: etiquetas <a href="...">
  • En JavaScript: construcción de objetos dinámicos
  • En URLs: paso de parámetros firmados o codificados

3. Ejemplo real: enlace firmado con token de aprobación

Supón que generas un enlace con firma SHA-256 para aprobación de solicitudes. El link contiene ID, TIMESTAMP y un TOKEN generado en backend.

 SELECT 'f?p=APP:PAGE::' || :APP_SESSION || '::NO::P1_ID,P1_TOKEN:' || id || ',' || token AS enlace FROM solicitudes 

En tu reporte APEX, creas una columna con el enlace generado, usando:

 <a href="#ENLACE!RAW#">Aprobar solicitud</a> 

Importante: Si usas #ENLACE# sin !RAW, los símbolos como &, =, % o : se codifican y el link se rompe.

Resultado: el link funciona, se mantiene exacto, y lleva al usuario directamente al flujo de aprobación con seguridad.


4. Consideraciones de seguridad y formato

  • !RAW no valida ni escapa nada, así que no debes usarlo con datos provenientes del usuario sin sanitizar.
  • Idealmente, sólo se usa con valores generados por PL/SQL backend o consultas controladas.
  • Siempre valida el token o firma en la página de destino para evitar manipulación.

5. Buenas prácticas

  • ✅ Usa !RAW sólo cuando sepas que el valor no necesita escape.
  • ✅ Aplica validación del lado servidor si el valor contiene firmas, tokens o identificadores sensibles.
  • ✅ Documenta en tu equipo cuándo usar !RAW y cuándo no.
  • ✅ Para JavaScript, considera envolver con APEX_ESCAPE.JAVASCRIPT_LITERAL si el valor puede venir del usuario.
  • ✅ En links generados, audita que no se generen XSS al permitir ejecución de código arbitrario.

6. Conclusión

El uso de !RAW en Oracle APEX te permite construir aplicaciones más dinámicas y seguras, siempre que entiendas bien su propósito.

No es una función mágica, pero usada correctamente te permite:

  • Construir enlaces firmados
  • Insertar scripts dinámicos sin errores
  • Evitar escapes HTML automáticos que rompen tu lógica

Es una herramienta más en tu arsenal como desarrollador profesional de APEX.


¿Quieres aprender más?
Ver cursos en Aprendiz Academy:
https://app.aprendiz.academy/ords/r/aprendiz/aprendiz-academy/home

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.