Table of Contents |
---|
A continuación vamos a ver ejemplos de implementación java de los casos de uso principales de la aplicación TTO. Para ubicarlos en el proceso general, vamos a mostrar de nuevo el esquema del inicio que muestra cómo integrarse con TTO.
Ejemplo 1: recibir evento de un trámite TTO por medio de SGA
El ciudadano habrá creado un trámite y TTO generará eventos para las aplicaciones integradoras. Para la recepción de los eventos a los que se haya suscrito la aplicación integradora, debe implementar un servicio rest, accesible por SGA, que implemente la interfaz NotificationManager
Code Block | ||||
---|---|---|---|---|
| ||||
/**
* Interfaz REST común para las aplicaciones que integren el sistema de eventos
*
*/
public interface NotificationManager{
@PUT
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
Map<Long, Boolean> processNotification(RestEvent eventData);
} |
La aplicación obtendrá un objeto JSON como el siguiente:
Code Block | ||||
---|---|---|---|---|
| ||||
{
number=10073;
requestCode=100737Q9AYWCNQ9;
signature=1774;
origin="SUBSANACION"; # Sólo en los eventos finishedProcedureWithOrigin
} |
Los datos que nos interesan son requestCode y signature. Con estos datos:
Comprobaremos si la signatura se corresponde con la de un trámite que sea de interés.
- En el caso de que la solicitud sea de interés, realizar una invocación al servicio get/getXml de TTO utilizando como parámetro de entrada requestCode.
Una vez terminado todo el proceso, el servicio tiene que devolver a SGA un mapa donde la clave sea ese id único y el valor el resultado de procesar los datos asociados (true → procesado con éxito; false → se ha producido algún error).
Info |
---|
Para más información acerca de los eventos, consulte la documentación de SGA. |
Ejemplo 2: consultar una solicitud finalizada
Una vez recibido un SGA-Evento de TTO, comprobaremos si el trámite es de interés para la aplicación. En el caso de que la solicitud sea de interés, realizar una invocación al servicio get/getXml de TTO utilizando como parámetro de entrada requestCode
Table of Contents |
---|
A continuación vamos a ver ejemplos de implementación java de los casos de uso principales de la aplicación TTO. Para ubicarlos en el proceso general, vamos a mostrar de nuevo el esquema del inicio que muestra cómo integrarse con TTO.
Ejemplo 1: recibir evento de un trámite TTO por medio de SGA
...
Info |
---|
Para poder recibir eventos de trámites se deberán realizar los pasos descritos en el apartado 2.- Permisos y consideraciones previas para integración con TTO y suscribirse al evento finishedProcedure de SGA-Eventos. |
El ciudadano habrá creado un trámite y TTO generará eventos para las aplicaciones integradoras. Para la recepción de los eventos a los que se haya suscrito la aplicación integradora, debe implementar un servicio rest, accesible por SGA, que implemente la interfaz NotificationManager
Code Block | ||||
---|---|---|---|---|
| ||||
/**
* Interfaz REST común para las aplicaciones que integren el sistema de eventos
*
*/
public interface NotificationManager{
@PUT
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
Map<Long, Boolean> processNotification(RestEvent eventData);
} |
La aplicación obtendrá un objeto JSON como el siguiente:
Code Block | ||||
---|---|---|---|---|
| ||||
{
number=10073;
requestCode=100737Q9AYWCNQ9;
signature=1774;
} |
Los datos que nos interesan son requestCode y signature. Con estos datos:
Comprobaremos si la signatura se corresponde con la de un trámite que sea de interés.
- En el caso de que la solicitud sea de interés, realizar una invocación al servicio get/getXml de TTO utilizando como parámetro de entrada requestCode. En el Ejemplo 3 se muestra cómo realizar esta invocación.
Una vez terminado todo el proceso, el servicio tiene que devolver a SGA un mapa donde la clave sea ese id único y el valor el resultado de procesar los datos asociados (true → procesado con éxito; false → se ha producido algún error).
Info |
---|
Para más información acerca de los eventos, consulte la documentación de SGA. |
Ejemplo 2: recibir evento de una subsanación o aportación de TTO por medio de SGA
...
Info |
---|
Para poder recibir eventos de trámites se deberán realizar los pasos descritos en el apartado 2.- Permisos y consideraciones previas para integración con TTO y suscribirse al evento finishedProcedureWithOrigin de SGA-Eventos. |
El ciudadano habrá realizado una subsanación o aportación y TTO generará eventos para las aplicaciones integradoras. Para la recepción de los eventos a los que se haya suscrito la aplicación integradora, debe implementar un servicio rest, accesible por SGA, que implemente la interfaz NotificationManager
Code Block | ||||
---|---|---|---|---|
| ||||
/**
* Interfaz REST común para las aplicaciones que integren el sistema de eventos
*
*/
public interface NotificationManager{
@PUT
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
Map<Long, Boolean> processNotification(RestEvent eventData);
} |
La aplicación obtendrá un objeto JSON como el siguiente:
Code Block | ||||
---|---|---|---|---|
| ||||
{
number=10073;
requestCode=100737Q9AYWCNQ9;
signature=1774;
origin="SUBSANACION"; // Puede tomar los valores APORTACION, RECURSO, SUBSANACION y TODOS
} |
Los datos que nos interesan son requestCode, signature y origin. Con estos datos:
Comprobaremos si la signatura se corresponde con la de un trámite que sea de interés.
- En el caso de que la solicitud sea de interés o se necesiten más datos para determinarlo, realizar una invocación al servicio get/getXml de TTO utilizando como parámetro de entrada requestCode. En el Ejemplo 3 se muestra cómo realizar esta invocación.
Una vez terminado todo el proceso, el servicio tiene que devolver a SGA un mapa donde la clave sea ese id único y el valor el resultado de procesar los datos asociados (true → procesado con éxito; false → se ha producido algún error).
Info |
---|
Para más información acerca de los eventos, consulte la documentación de SGA. |
Ejemplo 3: construcción de la URL para subsanar con parámetros adicionales
...
Cuando se necesite asociar solicitudes existentes con nuevos trámites de tipo subsanación o aportación se utilizará la siguiente URL:
Los parámetros para poder construir la URL correctamente son los siguientes:
- entorno: el entorno en el que se necesite asociar.
- alias-tramite: el tipo de trámite nuevo que se va a asociar. Los tipos de trámite existentes son "subsanaciones" y "aportaciones".
- requestSignature (opcional)1: signatura de la solicitud que se va a subsanar.
- requestCode (opcional)1: código de la solicitud que se va a subsanar.
- numExpediente (opcional): número de expediente de la solicitud a subsanar. Se indica en el caso en el que la solicitud a subsanar no haya sido tramitada por el tramitador.
- otros parámetros opcionales: otros parámetros adicionales personalizados que las aplicaciones integradoras deseen asociar a las solicitudes.
Info |
---|
1Los parámetros requestSignature y requestCode son excluyentes. Sólo se puede indicar uno de los dos parámetros. |
Tanto el número de expediente como otros parámetros adicionales se guardaran en el bloque queryParams:
Code Block | ||||
---|---|---|---|---|
| ||||
queryParams {numExpediente: "555",miCosa: "otroIdentificador"} |
Ejemplos de invocación
Asociar una subsanación en el entorno de DES a la solicitud con signatura 1774 y número de expediente 500027674637846764 y un identificador personalizado "unIdentificador" 123456789:
http://desaplicaciones.aragon.es/tramitar/subsanaciones/1774?numExpediente=500027674637846764&unIdentificador=123456789
Asociar una aportación en el entorno PRE a la solicitud con código 100737Q9AYWCNQ9 y número de expediente 50736786324876427836 y un identificador personalizado "otroIdentificador" AAAAAAAA:
http://preaplicaciones.aragon.es/tramitar/aportaciones/100737Q9AYWCNQ9?numExpediente=50736786324876427836&otroIdentificador=AAAAAAAA
Asociar una aportación en el entorno PRO a la solicitud con número de expediente 50736786324876424554 y un identificador personalizado "tercerIdentificador" BBBBBBB:
Ejemplo 4: consultar una solicitud, subsanación o aportación finalizada
...
Una vez recibido un SGA-Evento de TTO, comprobaremos si el trámite es de interés para la aplicación. En el caso de que la solicitud sea de interés, realizar una invocación al servicio get/getXml de TTO utilizando como parámetro de entrada requestCode.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
// PASO 1: Establecer los parámetros de búsqueda
// Id de la aplicación que está accediendo a TTO
String APPLICATION_ID = "XXX";
// identificador de la solicitud
String requestCode = "100737Q9AYWCNQ9";
// PASO 2: Establecer la conexión
URL url = new URL("https://aplicaciones.aragon.es/tto_core/rest/tramite/get?" +
"applicationId=" + APPLICATION_ID +
"&requestCode =" + requestCode);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Accept", "application/json");
// Gestionar respuesta incorrecta
if (connection.getResponseCode() != 202) {
System.out.println("Respuesta incorrecta");
}
// PASO 3: Convertir la respuesta del servicio en el objeto del trámite
StringBuilder responseStrBuilder = new StringBuilder();
BufferedReader streamReader = new BufferedReader(
new InputStreamReader(connection.getInputStream(), "UTF-8"));
String inputStr;
while ((inputStr = streamReader.readLine()) != null) {
responseStrBuilder.append(inputStr);
}
// Configurar GSON para recuperar las fechas con tiempo UNIX
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(Date.class, (JsonDeserializer<Date>) (json, typeOfT, context) ->
new Date(json.getAsJsonPrimitive().getAsLong()));
Gson gson = builder.create();
// Convertir la respuesta a ResultTramiteBean
ResultTramiteBean tramite = gson.fromJson(responseStrBuilder.toString(),
ResultTramiteBean.class);
// PASO 4: Desconectar
connection.disconnect(); |
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
// PASO 1: Establecer los parámetros de búsqueda
// Id de la aplicación que está accediendo a TTO
String APPLICATION_ID = "XXX";
// identificador de la solicitud
String requestCode = "100737Q9AYWCNQ9";
// PASO 2: Establecer la conexión
URL url = new URL("https://aplicaciones.aragon.es/tto_core/rest/tramite/get?" +
"applicationId=" + APPLICATION_ID +
"&requestCode =" + requestCode);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Accept", "application/json");
// Gestionar respuesta incorrecta
if (connection.getResponseCode() != 202) {
System.out.println("Respuesta incorrecta");
}
// PASO 3: Convertir la respuesta del servicio en el objeto del trámite
TransformXMLToObject transformer = new TransformXMLToObject();
ResultTramiteBean tramite = transformer.parseTramiteBeanFromFile(
connection.getInputStream());
// PASO 4: Desconectar
connection.disconnect(); |
Ejemplo 5: obtener la información de un listado de solicitudes de un día concreto
...
El servicio de consulta de un listado de solicitudes puede tener diversas aplicaciones puntuales.
El ejemplo de invocación que se muestra a continuación será de utilidad para consultar las solicitudes finalizadas en un día concreto. Así se podrá consultar si, por algún fallo técnico, la aplicación integradora no ha recibido alguna solicitud finalizada del trámite que nos interesa. Se va a tomar como ejemplo la signatura 1903 y el día 26/03/2020.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
// PASO 1: Establecer los parámetros de búsqueda // Id de la aplicación que está accediendo a TTO String APPLICATION_ID = "XXX"; // identificadorSignaturas de la solicitud String requestCode = "100737Q9AYWCNQ9"; // PASO 2: Establecer la conexión URL url = new URL("https://aplicaciones.aragon.es/tto_core/rest/tramite/get?" + "applicationId=" + APPLICATION_ID + "&requestCode =" + requestCode); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setRequestProperty("Accept", "application/json"); // Gestionar respuesta incorrecta if (connection.getResponseCode() != 202) { System.out.println("Respuesta incorrecta"); } // PASO 3: Convertir la respuesta del servicio en el objeto del trámite StringBuilder responseStrBuilder = new StringBuilder(); BufferedReader streamReader = new BufferedReader( new InputStreamReader(connection.getInputStream(), "UTF-8")); String inputStr; while ((inputStr = streamReader.readLine()) != null) { responseStrBuilder.append(inputStr); } // Configurar GSON para recuperar las fechas con tiempo UNIX GsonBuilder builder = new GsonBuilder(); builder.registerTypeAdapter(Date.class, (JsonDeserializer<Date>) (json, typeOfT, context) -> new Date(json.getAsJsonPrimitive().getAsLong())); Gson gson = builder.create(); // Convertir la respuesta a ResultTramiteBean ResultTramiteBean tramite = gson.fromJson(responseStrBuilder.toString(), ResultTramiteBean.class); // PASO 4: Desconectar connection.disconnect(); | ||||||
Code Block | ||||||
| ||||||
// PASO 1: Establecer los parámetros de búsqueda // Id de la aplicación que está accediendo a TTO String APPLICATION_ID = "XXX"; // identificador de la solicitud String requestCode = "100737Q9AYWCNQ9"; // PASO 2: Establecer la conexión URL url = new URL("https://aplicaciones.aragon.es/tto_core/rest/tramite/get?" + "applicationId=" + APPLICATION_ID + "&requestCode =" + requestCode); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setRequestProperty("Accept", "application/json"); // Gestionar respuesta incorrecta if (connection.getResponseCode() != 202) { System.out.println("Respuesta incorrecta"); } // PASO 3: Convertir la respuesta del servicio en el objeto del trámite TransformXMLToObject transformer = new TransformXMLToObject( los procedimientos a consultar int signature = 1903; // Se consultan las solicitudes registradas boolean isRegistered = true; // Se consultan únicamente la información básica de las solicitudes, no el formulario boolean isSummaryInfo = true; // Fecha inicio de registro de la solicitud String registerStartDate = "26/01/2021"; // Fecha fin de registro de la solicitud String registerEndDate = "26/01/2021"; // PASO 2: Preparar la conexión URL url = new URL("https://aplicaciones.aragon.es/tto_core/rest/tramite/list?" + "applicationId=" + APPLICATION_ID + "&signature=" + signature + "®istered=" + isRegistered + "&summaryInfo=" + isSummaryInfo + "®isterStartDate =" + registerStartDate + "®isterEndDate =" + registerEndDate ); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setRequestProperty("Accept", "application/json"); if (connection.getResponseCode() != 202) { System.out.println("Respuesta incorrecta"); } // PASO 3. Recuperamos la respuesta del servicio en formato String StringBuilder responseStrBuilder = new StringBuilder(); BufferedReader streamReader = new BufferedReader( new InputStreamReader(connection.getInputStream(), "UTF-8")); String inputStr; while ((inputStr = streamReader.readLine()) != null) { responseStrBuilder.append(inputStr); } // PASO 4. Configurar GSON para recuperar las fechas desde formato UNIX GsonBuilder builder = new GsonBuilder(); builder.registerTypeAdapter(Date.class, (JsonDeserializer<Date>) (json, typeOfT, context) -> new Date(json.getAsJsonPrimitive().getAsLong())); Gson gson = builder.create(); // PASO 5. Convertir la respuesta al objeto del trámite JsonArray json = gson.fromJson(responseStrBuilder.toString(), JsonArray.class); ResultTramiteBean tramite = transformer.parseTramiteBeanFromFile(gson.fromJson(responseStrBuilder.toString(), ResultTramiteBean.class); ResultTramiteBean tramiteList[] connection.getInputStream());= gson.fromJson(json, ResultTramiteBean[].class); // PASO 4:6. Desconectar connection.disconnect(); |
Ejemplo
...
6: obtener la información de un listado de
...
subsanaciones de un día concreto
...
El servicio de consulta de un listado de solicitudes puede tener diversas aplicaciones puntuales.
El ejemplo de invocación que se muestra a continuación será de utilidad para consultar las solicitudes subsanaciones finalizadas en un día concreto. Así se podrá consultar si, por algún fallo técnico, la aplicación integradora no ha recibido alguna solicitud subsanación finalizada del trámite que nos interesa. Se va a tomar como ejemplo la signatura 1903 y el día 26/0301/20202021.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
// PASO 1: Establecer los parámetros de búsqueda // Id de la aplicación que está accediendo a TTO String APPLICATION_ID = "XXX"; // Signaturas de los procedimientos a consultar int signature; // Signatura del procedimiento de subsanaciones int signature = ...; // Signatura del procedimiento efectivo del tramite a efectos de metadatado y registro. (opcional) int requestSignature = 1903; // Se consultan las solicitudes registradas boolean isRegistered = true; // Se consultan únicamente la información básica de las solicitudes, no el formulario boolean isSummaryInfo = true; // Fecha inicio de registro de la solicitud String registerStartDate = "26/0301/20202021"; // Fecha fin de registro de la solicitud solicitud String registerEndDate = "26/01/2021"; // Se indica que sea una subsanacion String registerEndDateorigin = "26/03/2020SUBSANACION"; // PASO 2: Preparar la conexión URL url = new URL("https://aplicaciones.aragon.es/tto_core/rest/tramite/list?" + "applicationId=" + APPLICATION_ID + "&signature=" + signature + "&requestSignature=" + signature1requestSignature + "®istered®istered=" + isRegistered + "&summaryInfo=" + isSummaryInfo + "®isterStartDate®isterStartDate =" + registerStartDate + "®isterEndDate®isterEndDate =" + registerEndDate "&origin=" + origin); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setRequestProperty("Accept", "application/json"); if (connection.getResponseCode() != 202) { System.out.println("Respuesta incorrecta"); } // PASO 3. Recuperamos la respuesta del servicio en formato String StringBuilder responseStrBuilder = new StringBuilder(); BufferedReader streamReader = new BufferedReader( new InputStreamReader(connection.getInputStream(), "UTF-8")); String inputStr; while ((inputStr = streamReader.readLine()) != null) { responseStrBuilder.append(inputStr); } // PASO 4. Configurar GSON para recuperar las fechas desde formato UNIX GsonBuilder builder = new GsonBuilder(); builder.registerTypeAdapter(Date.class, (JsonDeserializer<Date>) (json, typeOfT, context) -> new Date(json.getAsJsonPrimitive().getAsLong())); Gson gson = builder.create(); // PASO 5. Convertir la respuesta al objeto del trámite JsonArray json = gson.fromJson(responseStrBuilder.toString(), JsonArray.class); ResultTramiteBean tramite = gson.fromJson(responseStrBuilder.toString(), ResultTramiteBean.class); ResultTramiteBean tramiteList[] = gson.fromJson(json, ResultTramiteBean[].class); // PASO 6. Desconectar connection.disconnect(); |
...