Acceso a web services desde Base de datos Versión 1.0 Área de Integración y Arquitectura de Aplicaciones Manual de Modelo de datos USU Hoja de Control Título Acceso a web services desde Base de datos Documento de Referencia Responsable Área de Integración y Arquitectura de Aplicaciones Versión 1.0 Fecha Versión 26/06/2013 Registro de Cambios Versión Causa del Cambio Responsable del Cambio Fecha del Cambio Área de Integración y Arquitectura de 1.0 Versión inicial del documento Aplicaciones 2 de 8 26/06/2013 Manual de Modelo de datos USU Índice 1. INTRODUCCIÓN ................................................................................................................................................................ 4 2. NORMATIVA ....................................................................................................................................................................... 4 3. EJEMPLO ............................................................................................................................................................................. 4 3 de 8 Manual de Modelo de datos USU 1. INTRODUCCIÓN Para acceder a webservices desde base de datos es necesario crear un package con la nomenclatura indicada en éste documento. Éste package utilizará los métodos de SIS_PACK_SOAP que es el que interface necesario para acceder al webservice. 2. NORMATIVA Crear un package con la siguiente nomenclatura: · Si no se accede a tablas de Aplicación (Puede acceder a tablas genéricas que existen en todas las bases de datos) : WS_PACK_[nombre] Ejemplo: WS_PACK_UPLOAD_0001 Los packages con ésta nomenclatura irán ubicados en todas las bases de datos donde exista el esquema DBA_WS · Si accede a tablas de Aplicación: XXXX_PACK_WS_[nombre] Ejemplo: MENT_PACK_WS_0001 3. EJEMPLO CREATE OR REPLACE PACKAGE WS_PACK_UPLOADDDD_0001 IS /******************************************************************************************* * FUNCTION: CARGAR_FICHERO_URL * * DESCRIPCIÓN: Llama al webservice del upload, que realiza carga de un fichero en base de datos, pasandole la url del fichero * * * PARÁMETROS: * w_aplicacion: Parámetro Obligatorio. nombre de la aplicación. Debe tener autorización. * w_instanciaOracle: Parámetro Obligatorio. Base de datos * w_usuario: Parámetro Obligatorio. Usuario. * w_clave: Parámetro Obligatorio. Clave única que va a identificar al registro en las tablas genericas upload * Por ejemplo:USER_YYYYMMDD_HH24MISS * w_nombreFichero: Parámetro Obligatorio * w_URL: Parámetro obligatorio. Url del Fichero a cargar en b.d. * w_plantilla. Si se utiliza plantilla , el nombre de la plantilla * w_comprimir. Parámetro Obligatorio. Valores: S * N * z_Cd_Mensaje_Err: Parámetro de salida. Codigo de Mensaje de Error * z_Ds_Mensaje_Err: Parámetro de Salida. Descripciòn de Mensaje de Error * * VALORES DE RETORNO DE LA FUNCIÓN: True 4 de 8 Manual de Modelo de datos USU * False * * CODIGOS Y DESCRIPCIONES DE ERROR: * Codigo de Error * --------------- * 1 Descripción ------------ Los parámetros w_aplicacion, w_instanciaOracle, w_usuario, w_clave, w_nombreFichero, w_URL, w_comprimir son obligatorios. * 2 * 3 * 100 El parámetro w_comprimir debe tener el valor S ó N Error controlado que devuelve el webservice: false : descripción del error Cualquier error o excepción de Oracle: SQLERRM * * NOTA: El webservice devolverá : true * false : descripción del error (si no existe la url del fichero devolverá ésta situación * ********************************************************************************************/ FUNCTION CARGAR_FICHERO_URL (w_aplicacion IN Varchar2, w_instanciaOracle IN Varchar2, w_usuario IN Varchar2, w_clave IN Varchar2, w_nombreFichero IN Varchar2, w_URL IN Varchar2, w_plantilla IN Varchar2, w_comprimir IN Varchar2, z_Cd_Mensaje_Err OUT Varchar2, z_Ds_Mensaje_Err OUT Varchar2) RETURN Boolean; END; / CREATE OR REPLACE PACKAGE BODY WS_PACK_UPLOADDDD_0001 IS ------------------------------------------------------------ Composición de Variables SOAP DESARROLLO -------------------------------------------------------------------------- b_Url_Request Varchar2(2000) := 'xmlns="'||'http://servicio.upload_ws'||'"'; --namespace -- b_Url_Response Varchar2(2000) := 'xmlns:ns1="'||'http://servicio.upload_ws'||'"'; --namespace -- b_Url_Wsdl Varchar2(2000) := 'http://desarrollo.madrid.org/upload_ws/services/ServicioUpload'||'?WSDL'; ------------------------------------------------------------ Composición de Variables SOAP PRODUCCION ------------------------------------------------------------------------b_Url_Request Varchar2(2000) := 'xmlns="'||'http://servicio.upload_ws'||'"'; --namespace 5 de 8 Manual de Modelo de datos USU b_Url_Response Varchar2(2000) := 'xmlns:ns1="'||'http://servicio.upload_ws'||'"'; --namespace b_Url_Wsdl Varchar2(2000) := 'http://intranet.madrid.org/upload_ws/services/ServicioUpload'||'?WSDL'; /******************************************************************************************* * FUNCTION: CARGAR_FICHERO_URL * * DESCRIPCIÓN: Llama al webservice del upload, que realiza carga de un fichero en base de datos, pasandole la url del fichero * * * PARÁMETROS: * w_aplicacion: Parámetro Obligatorio. nombre de la aplicación. Debe tener autorización. * w_instanciaOracle: Parámetro Obligatorio. Base de datos * w_usuario: Parámetro Obligatorio. Usuario. * w_clave: Parámetro Obligatorio. Clave única que va a identificar al registro en las tablas genericas upload * Por ejemplo:USER_YYYYMMDD_HH24MISS * w_nombreFichero: Parámetro Obligatorio * w_URL: Parámetro obligatorio. Url del Fichero a cargar en b.d. * w_plantilla. Si se utiliza plantilla , el nombre de la plantilla * w_comprimir. Parámetro Obligatorio. Valores: S * N * z_Cd_Mensaje_Err: Parámetro de salida. Codigo de Mensaje de Error * z_Ds_Mensaje_Err: Parámetro de Salida. Descripciòn de Mensaje de Error * * VALORES DE RETORNO DE LA FUNCIÓN: True * False * * CODIGOS Y DESCRIPCIONES DE ERROR: * Codigo de Error * --------------- * 1 Descripción ------------ Los parámetros w_aplicacion, w_instanciaOracle, w_usuario, w_clave, w_nombreFichero, w_URL, w_comprimir son obligatorios. * 2 * 3 * 100 El parámetro w_comprimir debe tener el valor S ó N Error controlado que devuelve el webservice: false : descripción del error Cualquier error o excepción de Oracle: SQLERRM * * * NOTA: El webservice devolverá : true * false : descripción del error (si no existe la url del fichero devolverá ésta situación * * ********************************************************************************************/ FUNCTION CARGAR_FICHERO_URL (w_aplicacion IN Varchar2, 6 de 8 Manual de Modelo de datos USU w_instanciaOracle IN Varchar2, w_usuario IN Varchar2, w_clave IN Varchar2, w_nombreFichero IN Varchar2, w_URL IN Varchar2, w_plantilla IN Varchar2, w_comprimir IN Varchar2, z_Cd_Mensaje_Err OUT Varchar2, z_Ds_Mensaje_Err OUT Varchar2) RETURN Boolean IS req SIS_PACK_SOAP.request; resp clob; -v_Respuesta varchar2(2000); BEGIN --------------------------------------------- Validaciones ------------------------------------------------------------------------ Validación de parámetros obligatorios IF (w_aplicacion IS NULL OR w_instanciaOracle IS NULL OR w_usuario IS NULL OR w_clave IS NULL OR w_nombreFichero IS NULL OR w_URL IS NULL OR w_comprimir IS NULL) THEN z_Cd_Mensaje_Err := 1; z_Ds_Mensaje_Err := 'Los parámetros w_aplicacion, w_instanciaOracle, w_usuario, w_clave, w_nombreFichero, w_URL, w_comprimir son obligatorios.'; RETURN (False); END IF; -- Validación de parametro comprimir S/N IF w_comprimir NOT IN ('S','N') THEN z_Cd_Mensaje_Err := 2; z_Ds_Mensaje_Err := 'El parámetro w_comprimir debe tener el valor S ó N'; RETURN (False); END IF; utl_http.set_persistent_conn_support(TRUE); -------------------------------------------------------------- Llamar a webservice mediante SOAP -----------------------------------------------------------------------------------req := SIS_PACK_SOAP.new_request('subirFicheroForms', b_Url_Request); 7 de 8 Manual de Modelo de datos USU SIS_PACK_SOAP.add_parameter(req, 'aplicacion', 'xsd:string', w_aplicacion); SIS_PACK_SOAP.add_parameter(req, 'clave', 'xsd:string', w_clave); SIS_PACK_SOAP.add_parameter(req, 'comprimir', 'xsd:string', w_comprimir); SIS_PACK_SOAP.add_parameter(req, 'instanciaOracle', 'xsd:string', w_instanciaOracle); SIS_PACK_SOAP.add_parameter(req, 'nombreFichero', 'xsd:string', w_nombreFichero); SIS_PACK_SOAP.add_parameter(req, 'plantilla', 'xsd:string', w_plantilla); SIS_PACK_SOAP.add_parameter(req, 'URL', 'xsd:string', w_URL); SIS_PACK_SOAP.add_parameter(req, 'usuario', 'xsd:string', w_usuario); -- Invocar al método del websercie resp := SIS_PACK_SOAP.invoke(req, b_Url_Wsdl, ''); -- string de respuesta del webservice v_Respuesta := SIS_PACK_SOAP.get_return_value(resp, 'subirFicheroFormsReturn', b_Url_Response); -IF UPPER(v_Respuesta) = 'TRUE' THEN RETURN(True); -- si hay error devuvelve: false : descripción del error ELSE z_Cd_Mensaje_Err := 3; z_Ds_Mensaje_Err := SUBSTR(v_Respuesta, 9); RETURN(False); END IF; EXCEPTION WHEN OTHERS THEN z_Cd_Mensaje_Err := 100; z_Ds_Mensaje_Err := SQLERRM; RETURN (False); END; END; 8 de 8