Atlassian uses cookies to improve your browsing experience, perform analytics and research, and conduct advertising. Accept all cookies to indicate that you agree to our use of cookies on your device.
Atlassian uses cookies to improve your browsing experience, perform analytics and research, and conduct advertising. Accept all cookies to indicate that you agree to our use of cookies on your device. Atlassian cookies and tracking notice, (opens new window)
El servicio de avisos y alertas proporciona un sistema centralizado de envío de notificaciones.
1.1 - Método 'createAdvice'
Servicio para la creación de avisos vía correo electrónico. SGA enviará un correo electrónico, cuyo remitente será sga. El cuerpo de estos correos dependerán de la entidad indicada (entity_id). Además, SGA agrupa todos los correos de un mismo usuario y tipo de correo en uno solo.
La frecuencia de tiempo por la que SGA enviará correos de la aplicación integradora vendrá dada en el alta de la aplicación en SGA.
Dirección de correo electrónico o NIF del usuario al que se le quiere enviar el aviso. En el caso de informarse el NIF, el usuario deberá estar dado de alta en SIU con un correo electrónico asociado.
SI
application
String (Max:50)
Código de la aplicación dada de alta en la plataforma SGA
SI
date
String
Fecha en la que se enviará el aviso en uno de los siguientes formatos: dd/MM/yy, dd/MM/yy HH:mm, dd/MM/yyyy, dd/MM/yyyy HH:mm Si no se especifica se creará con la fecha de la petición.
NO
description
String (Clob)
Descripción. Se permite el uso de HTML.
SI
subject
String (Max:100)
Asunto del aviso. Si por error se envían más de 100 caracteres, SGA recortará el subject para que se quede en 100 caracteres (97 caracteres + 3 puntos suspensivos)
SI
type
String (Max:100)
Tipo de aviso utilizado para agrupar avisos dentro de una misma categoría.
SI
entity_id
Long
Identificador de la entidad de envío, por defecto 0 (Gobierno de Aragón)
SI
mailSubject
String (Máx:200)
Asunto del correo. Si se deja en blanco, el aviso se enviará con el asunto del correo creado por defecto en base de datos
Descritos en la sección "Tipificación, codificación y descripción de errores"
1.1.5.- Ejemplo de invocación
// Se definen los objetos a usar
ParamCreateAdvice pca =newParamCreateAdvice();
Advice advice =newAdvice();
ResultError resultError;
// Se rellenan los datos del aviso
advice.setApplication(CÓDIGO_APP);
advice.setEntityId(0L);
advice.setId(3);
// Datos de correo
advice.setAnagrama("amartinezj@oesia.com");// Remitente, correo o NIF de usuario de SIU con correo asociado
advice.setMailSubject("Asunto del correo");// Asunto del correo enviado
advice.setDate("11/12/2018");// Fecha en la que será enviado
// Datos del aviso
advice.setType("Grupo del aviso");// Los avisos se agrupan y titulan en función a esto
advice.setSubject("Asunto del aviso");// Título del aviso
advice.setDescription("Descripción del aviso");// Descripción del aviso
// Insertamos, en los parámetros, la aviso y el usuario que la genera
pca.setoAdvice(advice);
pca.setUser("00000000T");Usuario que ha solicitado el aviso
// Peticion a SGA
resultError = adviceServiceWS.createAdvice(pca);
// Gestión de la respuesta
if("false".equals(resultError.getError())) {
System.out.println("Se ha enviado el aviso");
}else{
System.out.println("Se ha producido un error en la petición");
if(resultError.getErrorCode() !=null) {
System.out.println("Error: "+ resultError.getErrorCode() +". Mensaje: "+ resultError.getErrorMsg());
}
}
1.2 - Método 'createAdviceWithAttachment'
Servicio para la creación de avisos vía correo electrónico y documentos adjuntos al correo. El integrador deberá de informar de estos documentos a través de código CCSV, con lo que la aplicación integradora también debe estar integrada con la aplicación CCSV - Servicio de Almacenamiento y Verificación de Documentos Electrónicos.
SGA enviará un correo electrónico, cuyo remitente será sga. El cuerpo de estos correos dependerán de la entidad indicada (entity_id). Además, SGA agrupa todos los correos de un mismo usuario y tipo de correo en uno solo. La frecuencia de tiempo por la que SGA enviará correos de la aplicación integradora vendrá dada en el alta de la aplicación en SGA.
Dirección de correo electrónico o NIF del usuario al que se le quiere enviar el aviso. En el caso de informarse el NIF, el usuario deberá estar dado de alta en SIU con un correo electrónico asociado.
SI
application
String (Max:50)
Código de la aplicación dada de alta en la plataforma SGA
SI
date
String
Fecha en la que se enviará el aviso en uno de los siguientes formatos: dd/MM/yy, dd/MM/yy HH:mm, dd/MM/yyyy, dd/MM/yyyy HH:mm Si no se especifica se creará con la fecha de la petición.
NO
description
String (Clob)
Descripción. Se permite el uso de HTML.
SI
subject
String (Max:100)
Asunto del aviso. Si por error se envían más de 100 caracteres, SGA recortará el subject para que se quede en 100 caracteres (97 caracteres + 3 puntos suspensivos)
SI
type
String (Max:100)
Tipo de aviso utilizado para agrupar avisos dentro de una misma categoría.
SI
entity_id
Long
Identificador de la entidad de envío, por defecto 0 (Gobierno de Aragón)
SI
mailSubject
String (Máx:200)
Asunto del correo. Si se deja en blanco, el aviso se enviará con el asunto del correo creado por defecto en base de datos
// Se definen los objetos a usar
ParamCreateAdviceWithAttachment pca = new ParamCreateAdviceWithAttachment();
Advice advice = new Advice();
ResultError resultError;
// Se rellenan los datos del aviso
advice.setApplication("PFI");
advice.setEntityId(0L);
advice.setId(3);
// Datos de correo
advice.setAnagrama("amascaso@oesia.com"); // Remitente, correo o NIF de usuario de SIU con correo asociado
advice.setMailSubject("Asunto del correo"); // Asunto del correo enviado
advice.setDate("11/12/2018"); // Fecha en la que será enviado
// Datos de la alerta
advice.setType("Grupo de la alerta"); // Las alertas se agrupan y titulan en función a esto
advice.setSubject("Asunto de la alerta"); // Título de la alerta
advice.setDescription("Descripción de la alerta"); // Descripción de la alerta
// Insertamos, en los parámetros, la alerta y el usuario que la genera
pca.setoAdvice(advice);
pca.setUser("00000000T");
// Insertamos, en los parámetros, los códigos CSV de los adjuntos
List<String> attachments = new ArrayList<>();
attachments.add("CSVL916KYX34D1601PFI");
attachments.add("CSVIW2QR9J65T1C01PFI");
pca.setAttachments(attachments);
// Peticion a SGA
resultError = adviceServiceWS.createAdviceWithAttachment(pca);
// Gestión de la respuesta
if ("false".equals(resultError.getError())) {
System.out.println("Se ha enviado el aviso");
} else {
System.out.println("Se ha producido un error en la petición");
if (resultError.getErrorCode() != null) {
System.out.println("Error: " + resultError.getErrorCode() + ". Mensaje: " + resultError.getErrorMsg());
}
}
1.3 - Método 'createAdviceSMS
Método que permite crear un aviso por varios canales: correo, SMS o ambos. El canal será escogido por el invocante.
NIF del usuario promotor/responsable de la alerta (a efectos de auditoría / estadísticas).
Por compatibilidad con versiones anteriores no es obligatorio, pero deberá indicarse en nuevas integraciones ya que en un futuro podría serlo.
No
AdviceSMS
Sí
anagrama
String
30
Dirección de correo electrónico o NIF del usuario al que se le quiere enviar el aviso. En el caso de informarse el NIF, el usuario deberá estar dado de alta en SIU con un correo electrónico asociado.
Sí (si se usa canal MAIL o canal AMBOS)
application
String
50
Código de la aplicación dada de alta en la plataforma SGA
Sí (si se usa canal MAIL o canal AMBOS)
date
String
-
Fecha en la que se enviará el aviso en uno de los siguientes formatos:
dd/MM/yy
dd/MM/yy HH:mm
dd/MM/yyyy
dd/MM/yyyy HH:mm
Si no se especifica se creará con la fecha de la petición.
No
description
String
-
Descripción. Se permite el uso de HTML.
Sí (si se usa canal MAIL o canal AMBOS)
subject
String
100
Asunto del aviso. Si por error se envían más de 100 caracteres, SGA recortará el subject para que se quede en 100 caracteres (97 caracteres + 3 puntos suspensivos)
Sí (si se usa canal MAIL o canal AMBOS)
type
String
100
Tipo de aviso utilizado para agrupar avisos dentro de una misma categoría
Sí
entityId
Long
Identificador de la entidad de envío, por defecto 0 (Gobierno de Aragón)
No
mailSubject
String
200
Asunto del correo. Si se deja en blanco, el aviso se enviará con el asunto del correo creado por defecto en base de datos
No
phoneNumber
String
9
Número de teléfono al que se enviará el SMS
Sí (si se usa canal SMS o canal AMBOS)
textSMS
String
160
Texto del SMS
Sí (si se usa canal SMS o canal AMBOS)
requestType
String
-
Tipo de canal por el cual se desea mandar el aviso: MAIL, SMS, AMBOS.
Sí (se debe indicar siempre el tipo de canal)
1.2.3 - Parámetros de respuesta
En la respuesta se devuelve siempre un objeto ResultErrorAdviceSMS.
Nombre
Tipo
Descripción
Nombre
Tipo
Descripción
error
String
Este campo siempre será rellenado con uno de los siguientes valores:
0 → No ha habido ningún error
1 → Indica que ha habido un error en el canal MAIL
2 → Indica que ha habido un error en el canal SMS
3 → Indica que ha habido un error en ambos canales
mailErrorCode
String
Este campo solamente se rellena si el campo "error" es 1 o 3
mailErrorMsg
String
Este campo solamente se rellena si el campo "error" es 1 o 3
smsErrorCode
String
Este campo solamente se rellena si el campo "error" es 2 o 3
smsErrorMsg
String
Este campo solamente se rellena si el campo "error" es 2 o 3
Ejemplos de utilización según el tipo de canal invocado:
Invocamos por el canal MAIL → El campo "error" será 0 (si todo ha ido bien) o 1 (si se ha producido un error). Si es 1, pasaremos a obtener mailErrorCode y mailErrorMsg.
Invocamos por el canal SMS → El campo "error" será 0 (si todo ha ido bien) o 2 (si se ha producido un error). Si es 2, pasaremos a obtener smsErrorCode y smsErrorMsg.
Invocamos por el canal AMBOS → El campo "error" será 0 (si todo ha ido bien) o 1 (si se ha producido un error con el MAIL) o 2 (si se ha producido un error con el SMS) o 3 (si ha fallado tanto el MAIL como el SMS)
Si es 1 → Obtener mailErrorCode y mailErrorMsg
Si es 2 → Obtener smsErrorCode y smsErrorMsg
Si es 3 → Obtener mailErrorCode, mailErrorMsg, smsErrorCode y smsErrorMsg
ParamCreateAdviceSMS paramCreateAdviceSMS = new ParamCreateAdviceSMS();
paramCreateAdviceSMS.setIdApplication("SGA");
AdviceSMS adviceSMS = new AdviceSMS();
adviceSMS.setAnagrama("correo@gmail.com");
adviceSMS.setApplication("SGA");
adviceSMS.setDate("18/12/19"); // si no se pone, la fecha será la de la petición
adviceSMS.setDescription("Correo de prueba");
adviceSMS.setEntityId(0L); //si no se pone, será 0 por defecto
adviceSMS.setMailSubject("Prueba createAdviceSMS");
adviceSMS.setSubject("Prueba");
adviceSMS.setType("SGA");
adviceSMS.setRequestType(AdviceSMS.RequestType.MAIL.toString());
paramCreateAdviceSMS.setAdviceSMS(adviceSMS);
ResultErrorAdviceSMS resultErrorAdviceSMS = adviceServiceWS.createAdviceSMS(paramCreateAdviceSMS);
if(resultErrorAdviceSMS.getError().equals(ResultErrorAdviceSMS.NO_ERROR)) {
System.out.println("Proceso por canal MAIL realizado correctamente");
} else {
System.out.println("Error al realizar el proceso por canal MAIL");
System.out.println("Código Error: " + resultErrorAdviceSMS.getMailErrorCode());
System.out.println("Mensaje Error: " + resultErrorAdviceSMS.getMailErrorMsg());
}
Invocación por canal SMS
ParamCreateAdviceSMS paramCreateAdviceSMS = new ParamCreateAdviceSMS();
paramCreateAdviceSMS.setIdApplication("SGA");
AdviceSMS adviceSMS = new AdviceSMS();
adviceSMS.setPhoneNumber("611223344");
adviceSMS.setTextSMS("SMS de prueba");
adviceSMS.setRequestType(AdviceSMS.RequestType.SMS.toString());
paramCreateAdviceSMS.setAdviceSMS(adviceSMS);
ResultErrorAdviceSMS resultErrorAdviceSMS = adviceServiceWS.createAdviceSMS(paramCreateAdviceSMS);
if(resultErrorAdviceSMS.getError().equals(ResultErrorAdviceSMS.NO_ERROR)) {
System.out.println("Proceso por canal SMS realizado correctamente");
} else {
System.out.println("Error al realizar el proceso por canal SMS");
System.out.println("Código Error: " + resultErrorAdviceSMS.getSmsErrorCode());
System.out.println("Mensaje Error: " + resultErrorAdviceSMS.getSmsErrorMsg());
}
Invocación por canal AMBOS
ParamCreateAdviceSMS paramCreateAdviceSMS = new ParamCreateAdviceSMS();
paramCreateAdviceSMS.setIdApplication("SGA");
AdviceSMS adviceSMS = new AdviceSMS();
adviceSMS.setAnagrama("correo@gmail.com");
adviceSMS.setApplication("SGA");
adviceSMS.setDate("18/12/19"); // si no se pone, la fecha será la de la petición
adviceSMS.setDescription("Correo de prueba");
adviceSMS.setEntityId(0L); //si no se pone, será 0 por defecto
adviceSMS.setMailSubject("Prueba createAdviceSMS");
adviceSMS.setSubject("Prueba");
adviceSMS.setType("SGA");
adviceSMS.setPhoneNumber("611223344");
adviceSMS.setTextSMS("SMS de prueba");
adviceSMS.setRequestType(AdviceSMS.RequestType.AMBOS.toString());
paramCreateAdviceSMS.setAdviceSMS(adviceSMS);
ResultErrorAdviceSMS resultErrorAdviceSMS = adviceServiceWS.createAdviceSMS(paramCreateAdviceSMS);
if(resultErrorAdviceSMS.getError().equals(ResultErrorAdviceSMS.NO_ERROR)) {
System.out.println("Proceso por canal AMBOS realizado correctamente");
} else if (resultErrorAdviceSMS.getError().equals(ResultErrorAdviceSMS.MAIL_ERROR)) {
System.out.println("Error al realizar el proceso MAIL por canal AMBOS");
System.out.println("Código Error: " + resultErrorAdviceSMS.getMailErrorCode());
System.out.println("Mensaje Error: " + resultErrorAdviceSMS.getMailErrorMsg());
} else if (resultErrorAdviceSMS.getError().equals(ResultErrorAdviceSMS.SMS_ERROR)) {
System.out.println("Error al realizar el proceso SMS por canal AMBOS");
System.out.println("Código Error: " + resultErrorAdviceSMS.getSmsErrorCode());
System.out.println("Mensaje Error: " + resultErrorAdviceSMS.getSmsErrorMsg());
} else {
System.out.println("Error al realizar el proceso MAIL y el proceso SMS por canal AMBOS");
System.out.println("Código Error MAIL: " + resultErrorAdviceSMS.getMailErrorCode());
System.out.println("Mensaje Error MAIL: " + resultErrorAdviceSMS.getMailErrorMsg());
System.out.println("Código Error SMS: " + resultErrorAdviceSMS.getSmsErrorCode());
System.out.println("Mensaje Error SMS: " + resultErrorAdviceSMS.getSmsErrorMsg());
}
2. - Servicio IEventsService
El servicio de gestión de eventos proporciona un sistema centralizado de envío de notificaciones entre aplicaciones a fin de disminuir el tráfico innecesario entre ellas y aumentar el control sobre el flujo de información.
2.1.- Método 'sendNotification'
Este método es utilizado por las aplicaciones emisoras de eventos para enviar sus eventos a las aplicaciones suscritas por medio de sga. Un evento es un listado genérico de datos, por lo que cada aplicación deberá de informar y explicar a los receptores los datos que envía en los eventos.
// DATOS - Evento
String identificadorAppOrigen = "SNT"; // (Obligatorio) Identificación de la app origen del evento
String method = "enviarNotificacion"; // (Obligatorio) Nombre del método origen del evento
// Se rellenan los datos del evento
Map<String, String> dataMap = new LinkedHashMap<String, String>();
dataMap.put("id", "test");
Event event = new Event(identificadorAppOrigen, method, dataMap);
// DATOS - ParamCreateEvent
String identificadorAppDestinataria = "PFI"; // (No obligatorio) Identificación de la app destinataria del evento
ParamCreateEvent paramCreateEvent = new ParamCreateEvent(event, identificadorAppDestinataria);
// Petición a SGA
ResultError resultError = eventsServiceWS.sendNotification(paramCreateEvent);
// Gestión de la respuesta
if ("true".equals(resultError.getError())) {
// gestión del error
System.out.println("Se ha producido un error en la petición");
if (resultError.getErrorCode() != null) {
System.out.println("Error: " + resultError.getErrorCode() + ". Mensaje: " + resultError.getErrorMsg());
}
}
ANEXO 1: Recepción de eventos
Para la recepción de los eventos a los que se haya suscrito, debe implementar un servicio rest, accesible por SGA, que implemente la interfaz NotificationManager
Interfaz NotificationManager
/**
* 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);
}
El objeto RestEvent contiene información sobre la aplicación y el método origen del evento. Además contiene un objeto tipo Map donde cada entrada tiene como clave un id único y como valor el mapa de los datos del evento propiamente dichos.
El servicio tiene que devolver 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).
ANEXO 2: Clases comunes a los servicios
A continuación enumeramos los tipos de datos utilizados para el intercambio de información con el sistema.