En el artículo de hoy quiero compartir una forma de previsualizar contenido BLOB, en este caso archivos PDF almacenados en una tabla de nuestro esquema, utilizando RESTful Services.
Crear Tabla Books
Para esta demostración he creado una tabla de ejemplo que contiene las siguientes columnas:
Su DDL es:
CREATE TABLE "BOOKS"
( "BOOK_ID" NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY MINVALUE 1 MAXVALUE 9999999999999999999999999999
INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER NOCYCLE NOKEEP NOSCALE NOT NULL ENABLE,
"BOOK_TITLE" VARCHAR2(100 CHAR),
"BOOK_IMAGE" BLOB,
"FILENAME" VARCHAR2(255),
"MIMETYPE" VARCHAR2(255),
"IMG_LAST_UPDATED" DATE,
CONSTRAINT "BOOKS_PK" PRIMARY KEY ("BOOK_ID")
USING INDEX ENABLE
) ;
He cargado en esta tabla mis tres libros de APEX :), subiendo un PDF de una página con el nombre del libro, el subtitulo y la imagen de la portada.
Crear Página de Previsualización
Ahora que tenemos la tabla creada con datos, vamos a crear una página, en mi demostración tengo la página 4, con una región de informe clásico con la siguiente consulta SQL:
SELECT book_id,book_title FROM books
Creamos 2 elementos de página de tipo Campo de Texto para mostrar el código y la URL del libro, solo a modo demostrativo.
P4_BOOK_ID
P4_BOOK_URL
Expandimos la región del informe clásico y seleccionamos la columna BOOK_ID, ya que haremos que esta columna sea una columna de tipo enlace y que se muestre un icono de tipo ojito.
Configuramos las siguientes propiesdades de la columna:
Columna: BOOK_ID
Tipo: Enlace
Cabecera: Ver
Destino:
Tipo: Página en esta aplicación
Página: 4
Definir Elementos:
Nombre: P4_BOOK_ID
Valor: #BOOK_ID#
Texto de Enlace: <span class=”t-icon fa fa-eye”></span>
Añadimos una región de contenido dinámico con el siguiente código de PL/SQL:
DECLARE
Vurl varchar2(2000) := :P4_BOOK_URL;
BEGIN
htp.p('<embed src="'||Vurl||'" width="1000" height="900">');
END;
Agregamos en Condiciones del Servidor –> Cuerpo de la Función, ingresamos el siguiente código de PL/SQL:
declare
begin
if :P4_BOOK_URL is not null then
for c1 in (select nvl(dbms_lob.getlength(book_image),0) B
from books
where book_id = :P4_BOOK_ID)
loop
if c1.B > 0 then
return true;
end if;
end loop;
end if;
return false;
end;
Guardamos la página.
Habilitar los Servicios RESTful
Ahora necesitamos acceder al módulo de los Servicios RESTful en nuestro espacio de trabajo.
Hacemos clic en el módulo del Taller de SQL, luego en Servicios RESTful, si no tenemos activado en nuestro esquema lo habilitamos con el ORDS RESTful Data Services haciendo clic en el botón de registrar esquema con ORDS.
Ingresamos un alias del esquema, en mi caso he utilizado el alias lab_cursos y guardamos la configuración.
Crear Módulo
Hacemos clic en módulos y creeamos un nuevo módulo que lo llamaremos Ver BLOB.
Crear Plantilla
Seguidamente creamos una plantilla, en el cual ingresamos en la URI de la plantilla blob/{id}
Crear Manejador
A continuación vamos a crear el manejador GET para esta plantilla.
En el origen del manejador ingresamos la siguiente consulta SQL:
select mimetype, book_image from books where book_id = :id
Finalizar demo y ver los resultados
Regresamos a la página 4 y seleccionamos el elemento de página P4_BOOK_URL y en sus propiedades en el valor por defecto ingresamos la URL que hace referencia al manejador GET.
https://…………………………..-1.oraclecloudapps.com/ords/lab_cursos/get/blob/{id}
Al ejecutar la página podemos ver el PDF que se muestra en la región de contenido dinámico, y podemos navegar por los distintos registros y ver que se previsualiza el PDF segun su código de libro.
Nota importante
En este artículo no hemos visto nada del tema de asegurar los recursos, si quieres conocer más a fondo el uso de los servicios RESTful y como proteger tus servicios RESTful te invito a mi nuevo curso sobre este tema tan importante en el desarrollo de aplicaciones web con Oracle APEX.
Aquí te dejo el enlace del curso con un 20% de descuento!
Hasta pronto!
















