Office Address

  • 123/A, Miranda City Prikano
  • +0989 7876 9865 9
  • info@example.com

Social List

¿Lo usas bien? El poder oculto de !RAW en Oracle APEX

Lectura: 2 minutos

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>

🔒 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

Post a Comment

Your email address will not be published. Required fields are marked *