6.- Casos de uso de ejemplo de SGA

En este apartado se van a explicar diferentes casos de uso y cómo podría implementarlos una aplicación integradora.


Ejemplo 1: Crear un aviso por correo electrónico


En este ejemplo planteamos el caso en que una aplicación, PFI por ejemplo,  desea enviar un correo al firmante propuesto cuando se crea un documento para que lo firme.

1.1 Ejemplo utilizando el método createAdvice:

Para que PFI pueda realizar la petición a SGA debe cumplir los siguientes requisitos:

-Estar dado de alta en PAU

-Tener permiso sobre el método createAdvice de SGA

-Tener la IP dada de alta en PAU

-Estar dado de alta como aplicación en SGA

Ver invocación
// Se definen los objetos a usar
ParamCreateAdvice pca = new ParamCreateAdvice();
Advice advice = new Advice();
ResultError resultError;
 
// Aplicación que realizará la petición a SGA
paramCreateAdvice.setIdApplication("PFI");

// Se rellenan los datos del aviso
advice.setApplication("PFI"); // aplicación dada de alta en SGA
advice.setEntityId(0L); // si no se especifica entidad, la entidad por defecto será la del Gobierno de Aragón (0)

// Datos del correo
advice.setAnagrama("tucorreo@oesia.com"); // 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("Tipo de aviso"); // Las avisos se agrupan y titulan en función a este campo
advice.setSubject("Asunto del aviso"); // Título del aviso
advice.setDescription("Descripción del aviso"); // Descripción del aviso
 
// Asignar aviso a los parámetros
pca.setoAdvice(advice);
// Indicar el usuario que genera el aviso
pca.setUser("00000000T");
 
// Petición 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.- Ejemplo utilizando el método createAdviceSMS

Para que PFI pueda realizar la petición a SGA debe cumplir los siguientes requisitos:

-Estar dado de alta en PAU

-Tener permiso sobre el método createAdviceSMS de SGA

-Tener la IP dada de alta en PAU

-Estar dado de alta como aplicación en SGA

Ver invocación
// Se definen los objetos a usar
ParamCreateAdviceSMS paramCreateAdviceSMS = new ParamCreateAdviceSMS();
AdviceSMS adviceSMS = new AdviceSMS();

// Aplicación que realizará la petición a SGA
paramCreateAdviceSMS.setIdApplication("PFI");
         
// Se rellenan los datos del aviso
adviceSMS.setApplication("PFI"); // aplicación dada de alta en SGA
adviceSMS.setEntityId(0L); // si no se especifica entidad, la entidad por defecto será la del Gobierno de Aragón (0)

// Datos del correo
adviceSMS.setAnagrama("tucorreo@oesia.com"); // correo o NIF de usuario de SIU con correo asociado
adviceSMS.setMailSubject("Asunto del correo"); // Asunto del correo enviado
adviceSMS.setDate("11/12/2018"); // Fecha en la que será enviado
 
// Datos del aviso
adviceSMS.setType("Tipo de aviso"); // Las avisos se agrupan y titulan en función a este campo
adviceSMS.setSubject("Asunto del aviso"); // Título del aviso
adviceSMS.setDescription("Descripción del aviso"); // Descripción del aviso

// Indicamos que la petición es para enviar un correo
adviceSMS.setRequestType(AdviceSMS.RequestType.MAIL.toString());

// Asignar aviso a los parámetros
paramCreateAdviceSMS.setAdviceSMS(adviceSMS);
// Indicar el usuario que genera el aviso
paramCreateAdviceSMS.setUser("00000000T");

// Petición a SGA
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());
}



Ejemplo 2: Crear un aviso con adjunto


Envío del documento al creador del mismo en PFI que se acaba de firmar.

Ejemplo utilizando el método createAdviceWithAttachment:

Para que PFI pueda realizar la petición a SGA debe cumplir los siguientes requisitos:

-Estar dado de alta en PAU

-Tener permiso sobre el método createAdviceWithAttachment de SGA

-Tener la IP dada de alta en PAU

-Estar dado de alta como aplicación en SGA

Ver invocación
// Se definen los objetos a usar
ParamCreateAdviceWithAttachment pca = new ParamCreateAdviceWithAttachment();
Advice advice = new Advice();
ResultError resultError;

// Aplicación que realizará la petición a SGA
pca .setIdApplication("PFI");
         
 
// Se rellenan los datos del aviso
advice.setApplication("PFI"); // aplicación dada de alta en SGA
advice.setEntityId(0L); // si no se especifica entidad, la entidad por defecto será la del Gobierno de Aragón (0)
 
// Datos de correo
advice.setAnagrama("tucorreo@oesia.com"); // 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("Tipo de aviso"); // Las avisos se agrupan y titulan en función a este campo
advice.setSubject("Asunto del aviso"); // Título del aviso
advice.setDescription("Descripción del aviso"); // Descripción del aviso
 
// Asignar aviso a los parámetros
pca.setoAdvice(advice);
// Indicar el usuario que genera el aviso
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);
 
// Petición 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());
    }
}




Ejemplo 3: Crear un aviso por sms


En este ejemplo planteamos el caso en que una aplicación, por ejemplo SSS, quiere enviar un SMS al interesado cuando se abra un periodo de subsanación a su nombre.

Ejemplo utilizando el método createAdviceSMS:

Para que SSS pueda realizar la petición a SGA debe cumplir los siguientes requisitos:

-Estar dado de alta en PAU

-Tener permiso sobre el método createAdviceSMS de SGA

-Tener la IP dada de alta en PAU

-Estar dado de alta como aplicación en SGA


Ver invocación
// Se definen los objetos a usar
ParamCreateAdviceSMS paramCreateAdviceSMS = new ParamCreateAdviceSMS();
AdviceSMS adviceSMS = new AdviceSMS();

// Aplicación que realiza la petición a SGA
paramCreateAdviceSMS.setIdApplication("SSS");
         
adviceSMS.setPhoneNumber("6XXXXXXXX"); // Número de teléfono. Actualmente se permite envío a móviles españoles con 9 dígitos
adviceSMS.setTextSMS("SMS de prueba"); // Texto del SMS, máximo 160 caracteres
adviceSMS.setRequestType(AdviceSMS.RequestType.SMS.toString()); // Indicamos que es un SMS, ya que este método createAdviceSMS permite también enviar correos o ambos (correo y sms en una misma petición)

// Asignar aviso a los parámetros     
paramCreateAdviceSMS.setAdviceSMS(adviceSMS);
// Indicar el usuario que genera el aviso
paramCreateAdviceSMS.setUser("00000000T");

// Realizar petición a SGA
ResultErrorAdviceSMS resultErrorAdviceSMS = adviceServiceWS.createAdviceSMS(paramCreateAdviceSMS);

// Gestión de la respuesta
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());
}



Ejemplo 4:  Generar un evento


En este ejemplo planteamos el caso en que una aplicación, SNT por ejemplo,  quiere generar un evento cuando un ciudadano acepte o rechace una notificación electrónica, con el fin de que la aplicación que ha enviado la notificación tenga conocimiento de esto.

Para que SNT pueda enviar un evento debe cumplir los siguientes requisitos:

-Disponer de un método para enviar los eventos. Por ejemplo: sendEvent

-En SGA:

-En la sección de aplicaciones: Estar dada de alta como aplicación y tener añadido el método (sendEvent) para enviar los eventos

-En PAU:

-Tener permiso sobre el método sendNotification de SGA

-Tener dada de alta la IP


A continuación, se indica un ejemplo de envío de evento a través del método:

Ver método de invocación
public boolean sendEvent(NotificationData data){
    // Crea el objeto de la petición
    Map<String String> dataMap = new LinkedHashMap<String, String>();
    // Asignamos datos que queremos enviar en el evento. Clave y valor. La aplicación receptora sabrá las claves para obtener los valores
    dataMap.put(data.getKey1(), data.getVal1());
    
	// Crear evento (aplicación que envía, método que provoca el evento de la aplicación que envía, mapeo de datos) 
    Event event = new Event(data.getAppFrom(), data.getMethod(), dataMap);
    // Asignar evento a los parámetros e indicar la aplicación que va a recibir (si se quiere enviar a varias aplicaciones habrá que dejar el campo a null)
    ParamCreateEvent param = new ParamCreateEvent(event, data.getAppTo());
    // Aplicación que realiza la petición a SGA
    param.setIdApplication("SNT");
    
    // Realizar petición a SGA
	ResultError response = eventService.sendNotification(paramCreateEvent);
     
     if (response.getError().equals(Boolean.FALSE.toString().toLowerCase())) {
        System.out.println("Evento enviado correctamente.);			
		return Boolean.TRUE;
	} else {
		System.out.println("Error al enviar evento. Código error: " + response.getErrorCode() + ". Mensaje error: " + response.getErrorMsg());
		return Boolean.FALSE;	
	}
    
}


Ejemplo 5: Procesar un evento de una aplicación


SNT genera un evento cuando se acepta o rechaza una notificación. En este ejemplo planteamos el caso en que una aplicación 'APP_B' tiene un servicio REST publicado y está suscrito a estos eventos

Para que una aplicación pueda recibir un evento debe cumplir los siguientes requisitos:

-Debe tener un método en un servlet para recibir los eventos que implemente NotificationManager. Esta es la url rest que se configura en SGA

-En SGA:

- La aplicación debe tener configurada la URL Rest del Servlet en el cual recibe los eventos

- La aplicación APP debe estar suscrita el método sendEvent de SNT

-Si la APP_B utiliza PAU para restringir sus llamadas:

-Dar permiso en PAU a la aplicación receptora sobre el método de la aplicación emisora.

-Añadir método de recepción en la aplicación receptora en PAU.

-Dar permiso en PAU a SGA para que pueda enviar al método de recepción de la aplicación receptora.


A continuación, se indica un ejemplo de recepción de evento:

Ver código
@Controller
@Path("notification")
public class NotificationManagerImpl implements NotificationManager {
    
   // Método del servlet que recibe los eventos
    @Override
    public Map<Long, Boolean> processNotification(RestEvent eventData){
        // Obtener datos del evento
        Map<Long, Boolean> res = new HashMap<Long, Boolean>();
        for(Entry<Long, Map<String, String>> entry : eventData.getData().entrySet()) {
            boolean result = doSomething(entry.getValue());
            res.put(entry.getKey(), result);
        }
     
        return res;
    }
    // Procesar datos del evento
    private boolean doSomething(Map<String, String> data){
        //Procesa los datos aquí
        return true;
    }
 
}