...
cancelOperation: cancelación de operaciones realizadas a través de SCDE.
createCertificate: creación de documentos certificados firmados con sello de órgano (obsoleto, se recomienda el uso de createCertificate1).
createCertificate1: creación de documentos certificados firmados con sello de órgano (evolución del createCertificate).
getStatus: control del proceso de creación de los documentos.
sendDocAuth: envío de un documento de autorización firmado (obsoleto, se recomienda el uso de sendDocAuth1).
sendDocAuth1: envío de un documento de autorización firmado (evolución del sendDocAuth).
sendDocAuthByCSV (obsoleto)
getDocByCSV
signDocs: firma de documentos creados por otras aplicaciones (obsoleto, se recomienda el uso de signDocs1).
signDocs1: firma de documentos creados por otras aplicaciones (evolución del signDocs)
getDcmi: consulta los datos de los campos de un documento PDF.
cancelOperation: cancela una operación.
signDocsWithoutDocAuth: firma de documentos con sello de órgano sin documento de autorización.
signDocsWithExternalDocAuth: firma de documentos con sello de órgano a partir del CSV del documento de autorización.
...
Antes de empezar a describir cada servicio, cabe destacar una serie de elementos comunes a los mismos.
Elementos comunes
Códigos de estado
Los códigos indicativos de los diferentes estados en los que puede estar la aplicación son:
Código | Descripción |
---|
CREATING_DOCS | Creando documentos. |
WAITING_DOC_AUT | Se han creado y guardado en Documentum los documentos solicitados en el método createCertificate, y se está esperando recibir la firma del documento de autorización mediante el método sendDocAuth. |
SIGNING_DOCS | Firmando documentos y archivando en Documentum |
END_OPERATION | La operación de firma ha sido realizada con éxito. |
OPERATION_TIMEOUT | La operación ha excedido el tiempo previsto para ser realizada. |
ERROR_GENERAL | Se ha producido un error general no especificado. |
ERROR_ID_OPERATION | Se ha enviado un identificador de operación no válido. |
ERROR_CREATING_DOCS | Se ha producido un error al crear documentos. |
ERROR_DOC_AUT | Se ha producido un error al firmar el documento de autorización. |
ERROR_SIGN_DOCS | Error al firmar y/o almacenar los documentos que debían ser firmados. |
CANCELLING_OPERATION | La operación está siendo cancelada y los documentos relacionados están siendo anulados. |
OPERATION_CANCELED | Se ha terminado de cancelar una operación. |
ParamBase
En las llamadas a los distintos servicios forma parte fundamental el ParamBase ya que se utiliza como contenedor de algunos de los valores clave en la autorización necesaria para utilizar los servicios proporcionados por el CORE y en la autorización para la consulta o modificación de los distintos estados de la aplicación Por ello todos los servicios son llamados con un parámetro que extiende de un ParamBase o incluye dentro del prototipo dicho parámetro.
...
Salvo que se indique lo contrario en el campo applicationId deberá ir el identificador de aplicación que quiera utilizar los servicios y en el campo nif el identificador fiscal del empleado público que realiza la petición. Las particularidades de los parámetros y de los tipos de resultados se especificarán al describir los servicios web con sus correspondientes métodos.
ResultGetStatus
Todos los métodos del servicio (excepto getMetadata) devuelven un objeto de clase ResultGetStatus, que contiene los siguientes atributos:
Nombre | Tipo | Descripción |
---|
idOperation | String | Código de operación |
statusCode | String | Código del estado de la operación |
statusDescription | String | Descripción del estado de la operación |
docAuthCsv | String | CSV del documento de autorización |
docResumeCsv | String | CSV del documento resumen |
docCancelCsv | String | CSV del documento de cancelación |
signedCsvList | String[] | Lista de CSVs de documentos firmados |
signedBeforeCsvList | String[] | Lista de CSVs de documentos firmados en una petición anterior |
noSignedCsvList | String[] | Lista de CSVs de documentos no firmados |
extraInfo | FieldType[] | Información extra |
docCancelCsv | String | CSV del documento autorizando la cancelación |
Excepciones
Todos los métodos están configurados para lanzar excepciones de clase ScdeCoreException, que tiene los siguientes atributos:
Nombre | Tipo | Descripción |
---|
Code | Long | Código que describe el tipo de error |
Msg | String | Mensaje asociado al tipo de error indicado en el código |
ExtraInfo | String | Posible información extra que se haya considerado oportuno indicar para localizar la causa del error |
Añadir códigos de error
Método ‘createCertificate’ (obsoleto)
Se recomienda la integración con el método createCertificate1. Método del servicio que permite crear documentos certificados y firmarlos con el sello de órgano enviado, y también permite solicitar que se cree un documento certificado de autorización de los documentos anteriormente creados. Los documentos a crear pueden ser enviados agrupados, y se les puede añadir metadatos simples, tanto a nivel individual, como comunes al grupo en el que se hallen incluidos, además de incluir los datos de cada documento para rellenar la plantilla seleccionada. Los metadatos enviados deberán estar incluidos en los metadatos asociados a un documento electrónico cuando se almacena en el sistema de gestión documental corporativo del Gobierno de Aragón.
...
Signatura ResultGetStatus createCertificate(ParamCreateCertificate paramCreateCertificate) throws ScdeCoreException; Parámetros de invocación Los parámetros de entrada al servicio se encapsulan en un objeto ParamCreateCertificate, que extiende ParamBase y tiene los siguientes atributos: TABLA Parámetros de respuesta Los datos de salida del servicio se encapsulan en el objeto ResultGetStatus Códigos error Las excepciones del servicio son de tipo ScdeCoreException. Ejemplos de invocación En este ejemplo vamos a utilizar el servicio enviando los datos de 2 documentos agrupados en dos grupos, con unos metadatos comunes para los dos grupos, la plantilla utilizada tiene 3 campos para el nombre y los dos apellidos. En los tres primeros documentos enviaremos metadatos individuales. Le indicaremos que es necesario generar el documento de autorización. Encapsulamos los datos del usuario firmante de los documentos. Generamos los datos a rellenar en la plantilla elegida y metadatos especiales que queramos enviar para cada documento o grupo de ellos.
Code Block |
---|
User user = new User();
user.setName("Álvaro");
user.setSurname1("Savater");
user.setSurname2("Mora");
user.setNif("12345678A");
user.setOrganismCode("Aragonesa de Servicios Telemáticos");
user.setPosition("Jefe de Servicio"); |
2.1. Datos documento 1 Code Block |
---|
FieldType ft;
FieldType[] ftdoc1 = new FieldType[3];
ft = new FieldType("NOMBRE", "Pedro");
ftsdoc1[0] = ft;
ft = new FieldType("APELLIDO1", "Delgado");
ftdoc1[1] = ft;
ft = new FieldType("APELLIDO2", "Ruiz"); |
2.2. Metadatos documento 1 Code Block |
---|
FieldType mft;
FieldType[] mftdoc1 = new FieldType[2];
mft = new FieldType("dea_desc_descripcion","Diploma del IAAP");
mftdoc1[0] = mft; |
2.3. Datos documento 2 Code Block |
---|
FieldType ft;
FieldType[] ftdoc2 = new FieldType[3];
ft = new FieldType("NOMBRE", "Antonio");
ftdoc2[0] = ft;
ft = new FieldType("APELLIDO1", "Fernández");
ftdoc2[1] = ft;
ft = new FieldType("APELLIDO2", "Hernández");
ftdoc2[2] = ft; |
2.4. Metadatos documento 2 Code Block |
---|
FieldType mft;
FieldType[] mftdoc2 = new FieldType[2];
mft = new FieldType("dea_desc_descripcion","Diploma del IAAP");
mftdoc2[0] = mft; |
2.5. Metadatos comunes Code Block |
---|
FieldType cmft;
FieldType[] comunmfts = new FieldType[2];
cmft = new FieldType("dea_desc_descripcion", "Diploma del IAAP");
comunmfts[0] = cmft; |
2.6. Encapsulamos los documentos Code Block |
---|
CertificateItem certificateDoc1 = new CertificateItem();
CertificateItem certificateDoc2 = new CertificateItem();
certificateDoc1.setData(ftdoc1);
certificateDoc1.setMetadata(mftdoc1);
certificateDoc2.setData(ftdoc2);
certificateDoc2.setMetadata(mftdoc2); |
3.1. Agrupamos los documentos y añadimos los metadatos especiales comunes en cada grupo Code Block |
---|
CertificateGroup certificateGroupA = new CertificateGroup();
CertificateGroup certificateGroupB = new CertificateGroup();
CertificateItem[] certificateItemsA = new CertificateItem[1];
CertificateItem[] certificateItemsB = new CertificateItem[1];
certificateItemsA[0] = certificateDoc1;
certificateItemsB[0] = certificateDoc2;
certificateGroupA.setCertificateItems(certificateItemsA);
certificateGroupA.setCommonMetadata(comunmfts);
certificateGroupB.setCertificateItems(certificateItemsB);
certificateGroupB.setCommonMetadata(comunmfts); |
3.2. Agrupamos en un array los grupos creados en el punto anterior Code Block |
---|
CertificateGroup[] certificateGroups = new CertificateGroup[2];
certificateGroups[0] = certificateGroupA;
certificateGroups[1] = certificateGroupB; |
Cargamos la plantilla empleada
Code Block |
---|
CertificateTemplate certificateTemplate = new CertificateTemplate();
File file = new File("NombrePlantilla.pdf");
DataHandler dataHandler = new DataHandler(new FileDataSource(file));
byte[] template = IOUtils.toByteArray(dataHandler.getInputStream());
certificateTemplate.setTemplateData(template); |
Si por el contrario usamos una plantilla existente en documentum (se indica el CSV): Code Block |
---|
certificateTemplate.setTemplateCsv("CSV1234567890ABCSCDE"); |
Se encapsulan los datos de la firma.
Code Block |
---|
String invokingApp = "nombreAplicacion";
String certificateAlias = "aliasCertificado";
String signAlias = "aliasOperacionfirma";
AsfAppData asfAppData = new AsfAppData(invokingApp, certificateAlias, signAlias);
--Indicamos que es necesario crear documento de autorización y el id de la aplicación.
Boolean generateDocAut= true;
String applicationID = "codigoAplicacion";
--Indicamos aclName y folderId de Documentum si fuera necesario.
String aclName = "dga_acl_paega_web";
String folderId = "1111111111";
--Encapsulamos los datos del agente de Organismo Productor necesarios
String agente_ident_tipo_identif = "S";
String agente_ident_identificacion = "org900002";
String agente_desc_nombre = "Aragón servicios telemáticos";
Agente agenteOrganismoProductor = new Agente();
agenteOrganismoProductor.setAgente_ident_tipo_identif(agente_ident_tipo_identif);
agenteOrganismoProductor.setAgente_ident_identificacion(“agente_ident_identificacion”);
agenteOrganismoProductor.setAgente_desc_nombre(“agente_desc_nombre”);
--Encapsulamos en el parámetro de entrada al servicio y lo utilizamos.
ParamCreateCertificate paramCreateCertificate = new ParamCreateCertificate();
paramCreateCertificate.setCertificateGroups(certificateGroups);
paramCreateCertificate.setNif(“12345678A”);
paramCreateCertificate.setApplicationId(applicationID);
paramCreateCertificate.setCertificateTemplate(certificateTemplate);
paramCreateCertificate.setAsfAppData(asfAppData);
paramCreateCertificate.setCertificateSigner(user);
paramCreateCertificate.setGenerateDocAut(generateDocAut);
ResultGetStatus result = certificateService.createCertificate(paramCreateCertificate); |
Recibimos el resultado
Code Block |
---|
LOG.debug("CreateCertificate - ID_OPERATION: "+ result.getIdOperation());
LOG.debug("CreateCertificate - STATUS_CODE: "+ result.getStatusCode());
LOG.debug("CreateCertificate - STATUS_DESCRIPTION: "+ result.getStatusDescription());
--Capturamos si se ha recibido una excepción tipo ScdeCoreException.
} catch (ScdeCoreException sce) {
LOG.error("ScdeCoreException", sce);
LOG.error("EXCEPCION código: " + sce.getCode());
LOG.error("EXCEPCION mensaje: " + sce.getMsg());
LOG.error("EXCEPCION traza: " + sce.getExtraInfo());
} |
Si todo ha ido correcto, el valor de STATUS_CODE será CREATING_DOCS. |
Método ‘createCertificate1’
Ofrece la misma funcionalidad que el createCertificate, y además, permite informar el agente aportador y el organismo productor para cada uno de los documentos a firmar. También permite que el documento de resumen de la operación se firme con el sello de órgano informado (en lugar del que tiene configurado SCDE por defecto). Se recomienda su uso en lugar del createCertificate.
Signatura ResultGetStatus createCertificate1(ParamCreateCertificate1 paramCreateCertificate1) throws ScdeCoreException; Parámetros de invocación Los parámetros de entrada al servicio se encapsulan en un objeto ParamCreateCertificate1, que extiende ParamBase y tiene los siguientes atributos: TABLA Parámetros de respuesta Los datos de salida del servicio se encapsulan en el objeto ResultGetStatus Códigos error Las excepciones del servicio son de tipo ScdeCoreException. Ejemplos de invocación En este ejemplo vamos a utilizar el servicio enviando los datos de 2 documentos agrupados en dos grupos, con unos metadatos comunes para los dos grupos, la plantilla utilizada tiene 3 campos para el nombre y los dos apellidos. En los tres primeros documentos enviaremos metadatos individuales. Le indicaremos que es necesario generar el documento de autorización. Encapsulamos los datos del usuario firmante de los documentos. Generamos los datos a rellenar en la plantilla elegida y metadatos especiales que queramos enviar para cada documento o grupo de ellos.
Code Block |
---|
User user = new User();
user.setName("Álvaro");
user.setSurname1("Savater");
user.setSurname2("Mora");
user.setNif("12345678A");
user.setOrganismCode("Aragonesa de Servicios Telemáticos");
user.setPosition("Jefe de Servicio"); |
2.1. Datos documento 1 Code Block |
---|
FieldType ft;
FieldType[] ftdoc1 = new FieldType[3];
ft = new FieldType("NOMBRE", "Pedro");
ftsdoc1[0] = ft;
ft = new FieldType("APELLIDO1", "Delgado");
ftdoc1[1] = ft;
ft = new FieldType("APELLIDO2", "Ruiz"); |
2.2. Metadatos documento 1 Code Block |
---|
FieldType mft;
FieldType[] mftdoc1 = new FieldType[2];
mft = new FieldType("dea_desc_descripcion","Diploma del IAAP");
mftdoc1[0] = mft; |
2.3. Datos documento 2 Code Block |
---|
FieldType ft;
FieldType[] ftdoc2 = new FieldType[3];
ft = new FieldType("NOMBRE", "Antonio");
ftdoc2[0] = ft;
ft = new FieldType("APELLIDO1", "Fernández");
ftdoc2[1] = ft;
ft = new FieldType("APELLIDO2", "Hernández");
ftdoc2[2] = ft; |
2.4. Metadatos documento 2 Code Block |
---|
FieldType mft;
FieldType[] mftdoc2 = new FieldType[2];
mft = new FieldType("dea_desc_descripcion","Diploma del IAAP");
mftdoc2[0] = mft; |
2.5. Metadatos comunes Code Block |
---|
FieldType cmft;
FieldType[] comunmfts = new FieldType[2];
cmft = new FieldType("dea_desc_descripcion", "Diploma del IAAP");
comunmfts[0] = cmft; |
2.6. Encapsulamos los documentos Code Block |
---|
CertificateItem certificateDoc1 = new CertificateItem();
CertificateItem certificateDoc2 = new CertificateItem();
certificateDoc1.setData(ftdoc1);
certificateDoc1.setMetadata(mftdoc1);
certificateDoc2.setData(ftdoc2);
certificateDoc2.setMetadata(mftdoc2); |
3.1. Agrupamos los documentos y añadimos los metadatos especiales comunes en cada grupo Code Block |
---|
CertificateGroup certificateGroupA = new CertificateGroup();
CertificateGroup certificateGroupB = new CertificateGroup();
CertificateItem[] certificateItemsA = new CertificateItem[1];
CertificateItem[] certificateItemsB = new CertificateItem[1];
certificateItemsA[0] = certificateDoc1;
certificateItemsB[0] = certificateDoc2;
certificateGroupA.setCertificateItems(certificateItemsA);
certificateGroupA.setCommonMetadata(comunmfts);
certificateGroupB.setCertificateItems(certificateItemsB);
certificateGroupB.setCommonMetadata(comunmfts); |
3.2. Agrupamos en un array los grupos creados en el punto anterior Code Block |
---|
CertificateGroup[] certificateGroups = new CertificateGroup[2];
certificateGroups[0] = certificateGroupA;
certificateGroups[1] = certificateGroupB; |
Cargamos la plantilla empleada
Code Block |
---|
CertificateTemplate certificateTemplate = new CertificateTemplate();
File file = new File("NombrePlantilla.pdf");
DataHandler dataHandler = new DataHandler(new FileDataSource(file));
byte[] template = IOUtils.toByteArray(dataHandler.getInputStream());
certificateTemplate.setTemplateData(template); |
Si por el contrario usamos una plantilla existente en documentum (se indica el CSV): Code Block |
---|
certificateTemplate.setTemplateCsv("CSV1234567890ABCSCDE"); |
Se encapsulan los datos de la firma.
Code Block |
---|
String invokingApp = "nombreAplicacion";
String certificateAlias = "aliasCertificado";
String signAlias = "aliasOperacionfirma";
AsfAppData asfAppData = new AsfAppData(invokingApp, certificateAlias, signAlias);
--Indicamos que es necesario crear documento de autorización y el id de la aplicación.
Boolean generateDocAut= true;
String applicationID = "codigoAplicacion";
--Indicamos aclName y folderId de Documentum si fuera necesario.
String aclName = "dga_acl_paega_web";
String folderId = "1111111111";
--Encapsulamos los datos del agente de Organismo Productor necesarios
String agente_ident_tipo_identif = "S";
String agente_ident_identificacion = "org900002";
String agente_desc_nombre = "Aragón servicios telemáticos";
Agente agenteOrganismoProductor = new Agente();
agenteOrganismoProductor.setAgente_ident_tipo_identif(agente_ident_tipo_identif);
agenteOrganismoProductor.setAgente_ident_identificacion(“agente_ident_identificacion”);
agenteOrganismoProductor.setAgente_desc_nombre(“agente_desc_nombre”);
--Encapsulamos en el parámetro de entrada al servicio y lo utilizamos.
ParamCreateCertificate paramCreateCertificate = new ParamCreateCertificate();
paramCreateCertificate.setCertificateGroups(certificateGroups);
paramCreateCertificate.setNif(“12345678A”);
paramCreateCertificate.setApplicationId(applicationID);
paramCreateCertificate.setCertificateTemplate(certificateTemplate);
paramCreateCertificate.setAsfAppData(asfAppData);
paramCreateCertificate.setCertificateSigner(user);
paramCreateCertificate.setGenerateDocAut(generateDocAut);
ResultGetStatus result = certificateService.createCertificate(paramCreateCertificate); |
Recibimos el resultado
Code Block |
---|
LOG.debug("CreateCertificate - ID_OPERATION: "+ result.getIdOperation());
LOG.debug("CreateCertificate - STATUS_CODE: "+ result.getStatusCode());
LOG.debug("CreateCertificate - STATUS_DESCRIPTION: "+ result.getStatusDescription());
--Capturamos si se ha recibido una excepción tipo ScdeCoreException.
} catch (ScdeCoreException sce) {
LOG.error("ScdeCoreException", sce);
LOG.error("EXCEPCION código: " + sce.getCode());
LOG.error("EXCEPCION mensaje: " + sce.getMsg());
LOG.error("EXCEPCION traza: " + sce.getExtraInfo());
} |
Si todo ha ido correcto, el valor de STATUS_CODE será CREATING_DOCS. |
Método ‘getStatus’
Método del servicio que permite consultar el estado de ejecución de una petición creada con los métodos createCertificate, signDocs, sendDocAuth o cancelOperation. Devuelve el estado de la operación o una excepción si ha fallado.
...