Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents

...

  • 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.

...

  • listCertificateOperations ¿PÚBLICO?

  • downloadCertificateDocument

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.

  1. 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;
  1. 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");
  1. 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);
  1. 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.

  1. 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;
  1. 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");
  1. 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);
  1. 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.

...