En este apartado se explicarán los servicios de pfi y cómo inicializar su cliente java
ÍNDICE DEL CONTENIDO
Inicialización del cliente mediante CXF
Mediante sintaxis xml podemos definir fácilmente la configuración del cliente CXF para que acceda a los servicios de PFI. Inicialmente deberemos definir la referencia a la interfaz del servicio, que se encuentra dentro del cliente suministrado, así como a la dirección a la que apunta el wsdl levantado.
<simple:client id="pfiClient" serviceClass="es.aragon.pfi.core.ws.IDocumentIntegrationService" address="http://[entorno:puerto]/pfi_core/services/IDocumentIntegrationServiceWS" serviceName="s:IDocumentIntegrationService" xmlns:s="http://ws.core.pfi.aragon.es/ " endpointName="s:IDocumentIntegrationServiceWS" > <simple:outInterceptors> <ref bean="authorizeInterceptor" /> </simple:outInterceptors> </simple:client>
Como se puede observar en la definición XML del cliente CXF, se deberán configurar las urls donde se ubica el servicio IDocumentIntegrationServiceWS, para ello habrá que sustituir entorno y puerto por los valores correctos.
Las aplicaciones que se integran con PFI deben proporcionar en todas las peticiones el código de aplicación.
Para ello, utilizando los denominados interceptores, es posible rellenar este valor automáticamente en todas las peticiones. Como se ve en la definición del cliente se ha definido un interceptor de salida que entra en funcionamiento en el momento de construir la petición SOAP y que inserta el valor del código de aplicación en los parámetros de todos los métodos de PFI invocados.
<simple:outInterceptors> <ref bean="authorizeInterceptor" /> </simple:outInterceptors>
La definición al bean authotizeInterceptor que se incluye a continuación, permite indicarle el código de la aplicación, de esta manera el interceptor se encarga de establecer dicho valor en todos los parámetros de las llamadas a los servicios PFI. La clase con el interceptor de salida AuthorizeOutInterceptor se proporciona junto con el cliente de PFI.
<bean id="authorizeInterceptor" class="es.aragon.pfi.core.util.interceptors.AuthorizeOutInterceptor"> <property name="applicationId" value="[código aplicación llamante]"/> </bean>
-
Capturar notificaciones sobre cambios de estado en los documentos
Las aplicaciones integradoras deben definir un servlet al que invoque PFI cuando cambie el estado de un documento, no obstante, se puede consultar directamente al repositorio una vez que haya sido notificado el cambio para garantizar el último estado real.
No debe utilizarse la consulta directa al repositorio como mecanismo de control del estado de los documentos, ya que el número de llamadas recurrentes genera sobrecarga en los entornos, causando problemas tanto al propio integrador como al resto de los usuarios.
Dicho servlet se invocará con tres parámetros mediante querystring:
Parámetro | Descripción |
---|---|
idApp | PFI |
CSV | Identificador del documento que ha sufrido un cambio de estado |
estado | Estado en que se ha quedado el documento, borrador(1) u original(0) |
-
Para que PFI pueda invocar a dicha url, ésta debe estar asociada a la aplicación a través de la plataforma PAU, en el atributo responseUrl correspondiente a la aplicación. Para ello el integrador deberá completar primero el 4.- Servicios de PFI#Procedimiento de alta descrito previamente en este manual.
-
Servicios DocumentService
Servicios AdviceService
Método 'sendAdvice'
Método que manda un aviso utilizando el sistema de cola de sga para informar de algún cambio en un documento
Método 'sendMail'
Método que manda un correo electrónico de manera inmediata mediante sga para informar de algún cambio en un documento
Servicios DocumentIntegrationService
Método 'sendDocumentumDocument'
Cuando una aplicación que integra Porta-firmas almacena un documento en Documentum y desea que quede guardado en Porta-firmas, invoca este servicio para que posteriormente Porta-firmas pueda hacer uso de dicho documento.
Método 'updateQuorumAndLimitDateDocument'
Método que actualiza el número mínimo de firmantes que deben firmar un documento y fecha límite de firma en los documentos con más de un firmante
Suscripción a eventos
PFI se integra con SGA para el envío de eventos. Para que una aplicación pueda recibir los eventos de PFI, es necesario que esté dada de alta en SGA y que publique un servicio web para la recepción de los eventos. En el manual de SGA se explica cómo publicar el servicio web para poder recibir los eventos.
PFI envía eventos a través de los siguientes métodos:
- expiredDocument → Método que informa los documentos que han quedado expirados por no haber sido firmados antes de la fecha límite configurada. En los datos del evento llega el código CSV del documento y su estado. Los estados a recibir son los siguientes:
- Estado 0 (BORRADOR ) → Un documento queda expirado en estado 0 (BORRADOR) cuando no tiene ninguna firma realizada y no ha sido firmado antes de la fecha límite configurada
- Estado 2 (FIRMADO) → Un documento queda expirado en estado 2 (FIRMADO) cuando tiene todas las firmas necesarias realizadas pero por algún motivo ha quedado en el estado erróneo y no se ha cumplido la fecha límite configurada
Ejemplo de datos del evento que recibiría la aplicación destino:
La aplicación destino que desee recibir los eventos debe estar suscrita en SGA al método expiredDocument de PFI. Además, en PAU deberá tener permiso sobre el método expiredDocument de PFI.
- sendEvent → Método que informa sobre los cambios de estado de los documentos de PFI. Para poder recibir estos eventos de cambios de estado, los documentos deben tener asignado el alias de la aplicación receptora en el metadato dea_ident_codigo_aplicacion. De lo contrario, no se recibirán los eventos. El evento se compone de clave y valor. La clave es el CSV del documento y el valor es el estado del documento. Los cambios de estado que se notifican son los siguientes:
- Estado 3 (Firmando asíncronamente) → Estado al que se pasan los documentos al inicio del proceso de firma para indicar que se está realizando la firma del documento.
- Estado 6 (Firma paralela) → Se alcanza este estado cuando un documento tiene varios firmantes propuestos y alguno de ellos ya ha firmado pero todavía no se cumple el quorum.
- Estado 2 (Firmado) → Documento firmado.
- Estado 0 (Borrador) → Se recibe este evento cuando se rechaza un documento pendiente de firma.
- Estado 9 (Anulado) → Se recibe este evento cuando se anula un documento.
Ejemplo de datos del evento que recibiría la aplicación destino:
La aplicación destino que desee recibir los eventos debe estar suscrita en SGA al método sendEvent de PFI. Además, en PAU deberá tener permiso sobre el método sendEvent de PFI.
Anexos
Objectos Comunes
Objeto 'SignerSearch'
Nombre | Tipo | Descripción |
---|---|---|
auditorNif | String | Nif del auditor a buscar |
signerNif | String | Nif del firmante para el que se quieren buscar auditores |
fiscalAnagram | String | Nif del usuario identificado en la aplicación |
organismCode | String | Código de organismo del firmante |
name | String | Nombre del firmante |
surname1 | String | Primer apellido de firmante |
surname2 | String | Segundo apellido de firmante |
String | E-mail del firmante | |
roleCode | String | Código del rol del usuario |
userOrganismCode | String | Código de organismo de usuario |
prepararOtrasRamas | boolean | Indica si el usuario tiene acceso a ramas diferentes a la suya |
fromIndex | int | Índice a partir del que se quieren obtener los auditores |
toIndex | int | Índice hasta el que se permite devolver auditores |
maxResults | int | Máximo número de auditores que se devuelven |
sortColumn | String | Indica la ordenación de los resultados |
ascending | Boolean | Indica si la ordenación de los resultados es ascendente o descendente |
active | Boolean | Indica si han de ser activos los firmantes encontrados o no |
Objeto 'Signer'
Nombre | Tipo | Descripción |
---|---|---|
name | Long | Nombre del firmante |
surname1 | String | Primer apellido del firmante |
surname2 | String | Segundo apellido del firmante |
nif | String | Nif del firmante |
fiscalAnagram | String | Anagrama fiscal del auditor |
organism | String | Organismos en los que firma |
role | String | Nombre del rol del firmante |
roleCode | String | Código del rol del firmante |
organismCode | String | Nombre del organismo en el que firma |
Objeto 'ParamProposedSignerSearch'
Nombre | Tipo | Descripción |
---|---|---|
signerNif | String | Nif del firmante propuesto |
signerName | String | Nombre del firmante propuesto |
signerDateTo | Date | Indica el inicio del periodo para cotejar la fecha de firma |
signerDateFrom | Date | Indica el final del periodo para cotejar la fecha de firma |
signaturePosition | Integer | Tipo de posición de los pies de firma |
signerOrder | Integer | Orden de firma del firmante propuesto |
position | String | Coordenadas donde se ha colocado el pie de firma del firmante propuesto |
delegationText | String | Texto de delegación del firmante propuesto |
signed | Integer | Indica si el firmante propuesto ha firmando (1) o no (0) |
signerOrgCode | String | Código de organismo del firmante propuesto |
document | Document | Documento para el el cual se buscarán los firmantes propuestos |
signerStatus | String | Condición del firmante |
fromIndex | int | Índice a partir del que se quieren obtener los auditores |
toIndex | int | Índice hasta el que se permite devolver auditores |
maxResults | int | Máximo número de auditores que se devuelven |
sortColumn | String | Indica la ordenación de los resultados |
ascending | Boolean | Indica si la ordenación de los resultados es ascendente o descendente |
Objeto 'ParamProposedSigner'
Nombre | Tipo | Descripción |
---|---|---|
proposedSignerId | Long | Id del firmante propuesto |
signerNif | String | Nif del firmante propuesto |
signerName | String | Nombre del firmante propuesto |
signerDateFrom | String | Fecha de selección del firmante |
signerOrder | String | Orden de firma del firmante propuesto |
signaturePosition | String | Tipo de posición de los pies de firma |
position | String | Coordenadas donde se ha colocado el pie de firma del firmante propuesto |
delegationText | String | Texto de delegación del firmante propuesto |
signed | String | Indica si el firmante propuesto ha firmando (1) o no (0) |
signerOrgCode | String | Código de organismo del firmante propuesto |
signerOrganism | String | Nombre de organismo del firmante propuesto |
signerRole | String | Cargo del firmante propuesto |
signerStatus | String | Condición del firmante |
revised | String | Indica si el firmate propuesto ha sido revisado o no. Valores: S o N |
deleteSign | Boolean | Indica si se ha de borrar la firma al actualizar el firmante propuesto |
Objeto 'DocumentMetadata'
Nombre | Tipo | Descripción |
---|---|---|
signerName | String | Si se mostrará el documento (S), o no (N) |
signerSurname | String | Apellidos del firmante |
signerNif | String | Nif del firmante |
auditorName | String | Nombre de auditor |
auditorSurname | String | Apellidos de auditor |
auditorNif | String | Nif de auditor |
description | String | Descripción del metadato |
documentType | String | Tipo de documento |
procedure | String | Nombre de procedimiento |
metadataName | String | Nombre del metadato |
metadataValue | String | Valor del metadato |
Objeto 'DocumentMetadataSearch'
Nombre | Tipo | Descripción |
---|---|---|
documentMetadataId | Long | Id del registro en el historial |
signerName | String | Si se mostrará el documento (S), o no (N) |
signerSurname | String | Apellidos del firmante |
signerNif | String | Nif del firmante |
auditorName | String | Nombre de auditor |
auditorSurname | String | Apellidos de auditor |
auditorNif | String | Nif de auditor |
description | String | Descripción de metadato |
documentType | String | Tipo de documento |
procedure | String | Nombre del procedimiento |
metadataName | String | Nombre del metadato |
metadataValue | String | Valor del metadato |
Objeto 'DocumentSearch'
Nombre | Tipo | Descripción |
---|---|---|
documentId | Long | Id del documento a buscar |
documentIds | List<Long> | Lista de ids a buscar |
csv | String | Código seguro de verificación del documento |
lookUpDocumentumData | Boolean | Buscar datos en documentum |
lookUpStampSigned | Boolean | |
lookUpLetDocumentStamp | Boolean | |
lookUpProposedSigners | Boolean | Buscar firmantes propuestos |
lookUpFile | String | Buscar fichero |
state | Integer | Estado del documento |
csvAuthorized | String | Código seguro de verificación autorizado |
isDetail | Boolean | Indica si es detalle |
modifiedState | Boolean | Si el documento ha cambiado de estado |
esDocAnulacion | String | Si es un documento de anulación |
csvAnulacion | String | CSV del documento de anulación asociado |
csvSustitucion | String | CSV del documento de sustitución asociado |
Objeto 'ParamTraySearch'
Nombre | Tipo | Descripción |
---|---|---|
metadataId | Long | Id del documento a buscar |
metadataName | String | Lista de ids a buscar |
issuerName | String | Código seguro de verificación del documento |
signerName | String | Buscar datos en documentum |
signerNif | String | Nif del firmante |
issuerNif | String | Buscar firmantes propuestos |
recipient | String | Buscar fichero |
description | String | Estado del documento |
documentType | String | Código seguro de verificación autorizado |
documentCopyOriginal | String | Indica si es detalle |
folder | String | Si el documento ha cambiado de estado |
state | Integer | Si es un documento de anulación |
preparationDateFrom | Date | CSV del documento de anulación asociado |
preparationDateTo | Date | CSV del documento de sustitución asociado |
procedure | String | Nombre del procedimiento |
signed | Boolean | Documento firmado o no firmado |
draft | Boolean | Indica si el documento es un borrador |
pendingSignature | Boolean | Indica si el documento esta pendiente de firma |
auditor | Boolean | Es auditor |
generalAuditor | Boolean | Es auditor general |
fromIndex | int | Índice a partir del que se quieren obtener los documentos |
toIndex | int | Índice hasta el que se permite devolver los documentos coincidentes |
maxResults | int | Cantidad de documentos máxima que se devolverá |
sortColumn | String | Indica la ordenación de los resultados |
ascending | Boolean | Indica si la ordenación de los resultados es ascendente o descendente |
Objeto 'Document'
Nombre | Tipo | Descripción |
---|---|---|
applicationId | String | Aplicación que ejecuta el método |
userNif | String | Nif del usuario |
documentId | Long | Id del documento. |
csv | String | Csv generado por CCSV para el documento. |
state | Integer | Estado del documento en el sistema. Puede tomar los siguientes valores: 0:borrador, 1: pendiente de firma, 2: firmado, 3: firmando asíncrona-mente, 4: eliminado |
rejected | String | Indica que el documento ha sido rechazado “S” o que no ha sido rechazado “N”. Por defecto “N”. |
folder | String | Identificador de la carpeta a la que pertenece un documento. |
priority | Integer | Prioridad del documento, por defecto 1: 0: baja 1: media 2:alta |
csvAutorized | String | Csv de un documento de autorización. |
operationId | String | Id del proceso de firma que se realiza. |
operationState | String | Estado en el que se ha quedado el proceso de firma. |
signType | Integer | Tipo de firma del documento. |
limitDate | Date | Fecha límite para la firma del documento. |
prepateDateInit | Date | Fecha de inicio de la preparación del documento. |
prepareDateEnd | Date | Fecha de fin de la preparación del documento. |
creatorNif | String | Nif del creador del documento. |
quorum | Integer | Mínimo de firmas requeridas para pasar a firmar un documento. |
quorumOnly | Boolean | Indica, en el caso de multifirma, si se admiten más firmas que las mínimas requeridas (quorum). |
csvDocCancel | String | CSV del documento de cancelación de la operación. |
hashDocument | String | Indica el hash del documento. |
preloadedImageBase64 | byte[] | Array de bytes que contiene la imagen en base64 del documento. |
esDocAnulacion | String | Indica si el documento es de anulación “S”. |
obligatorioExpediente | String | Indica si el documento es obligatorio para el expediente, en caso de que lo haya, al que va asociado. |
asoaciadoAExpediente | Boolean | Indica si el documento está asociado a algún expediente. |
metadataCache | Map<ParamMetadataId, ParamMetadata> | Metadatos obtenidos de la tabla PFI_METADATA |
metadatas | Map<ParamMetadataId, ParamMetadata> | Mapa con los metadatos del documento ordenados |
proposedSigners | Map<String, ParamProposedSigner> | Mapa con todos los firmantes propuestos. |
documentumMetadata | Map<String, String> | Mapa con los metadatos que se obtienen de documentum. |
metadatosDocumento | List<ParamMetadata> | Lista de los metadatos para los JSP’s |
file | ParamFile | Archivo asociado al documento. |
oid | String | Número de operación de firma que se realiza |
letStamp | Integer | Resultado de la llamada al letDocumentStamp. |
showDocument | String | Indica si se ha de mostrar el documento. |
saveFile | Boolean | Indica si se tiene que guardar el fichero. |
signResult | String | Resultado de la firma del documento. |
hasSummaryDocument | Boolean | Indica si el documento tiene un sumario. |
modifyState | Integer | Estado al que se ha modificado un documento. |
modifyDate | Date | Fecha en la que se ha modificado un documento. |
Objeto 'ParamSignDocument'
Nombre | Tipo | Descripción |
---|---|---|
csv | Long | CSV del documento |
nif | String | Nif del firmante |
proposedSigner | Long | Identificador del firmante propuesto |
allSigned | Boolean | |
isAuthorization | Boolean | Indica si es un documento de autorización |
numberOfSigners | Integer | Indica la cantidad de firmantes |
simpleSign | Boolean | Indica si es una firma simple |
restoreDocument | Boolean | Si se restaurará el documento |
Objeto 'ParamGetDocumentState'
Nombre | Tipo | Descripción |
---|---|---|
csv | String | Código seguro de verificación del documento |
applicationId | String | Aplicación que ejecuta el método |
userNif | String | Nif de usuario |
Objeto 'ParamSetDocumentState'
Nombre | Tipo | Descripción |
---|---|---|
csv | String | Código seguro de verificación del documento |
state | Integer | Estado actual del documento |
modifyState | Integer | Estado al que cambiará el documento |
modifyDate | Date | Fecha del cambio de estado del documento |
Objeto 'ParamUpdateQuorumAndLimitDate'
Nombre | Tipo | Descripción |
---|---|---|
csv | String | CSV del documento |
quorum | Integer | Cantidad de firmas necesarias para firmar un documento |
quorumOnly | Boolean | Indica, en el caso de multifirma, si se admiten más firmas que las mínimas requeridas (quorum). |
date | Date | Fecha limite para firmar |
Objeto 'ResultUpdateQuorumAndLimitDate'
Nombre | Tipo | Descripción |
---|---|---|
errorCode | String | Código de error del servicio |
returnCode | String | Indica si la llamada ha finalizado correctamente (OK) o en error (ERROR) |
errorMessage | String | Descripción del mensaje de error |
Objeto 'ParamSendDocument'
Nombre | Tipo | Descripción |
---|---|---|
applicationId | String | Aplicación que ejecuta el método |
userNif | String | Nif del usuario |
csv | String | Código seguro de verificación del documento |
Objeto 'ResultSendDocument'
Nombre | Tipo | Descripción |
---|---|---|
returnCode | String | Indica si la llamada ha finalizado correctamente (OK) o en error (ERROR) |
errorCode | String | Código de error del servicio |
errorMessage | String | Mensaje de error del servicio |
exception | String | Excepción producida durante el proceso |
Objeto 'ParamGetOperation'
Nombre | Tipo | Descripción |
---|---|---|
documentId | Long | Identificador único del documento |
userNif | String | Nif del usuario que ejecuta el servicio web |
applicationId | String | Id de la aplicación que ejecuta al servicio web |
Objeto 'ResultGetOperation'
Nombre | Tipo | Descripción |
---|---|---|
operationId | Long | Identificador único de la operación |
operationState | String | Estado actual de la operación |
csvAutorized | String | |
csvDocCancel | String | |
documentList | List<Document> | Documentos asociados a la operación consultada |
-