Installation 2.x

Follow these steps to install and configure the Remote Signature application in OpenKM v8.1:

  • Stop Tomcat
  • Download the application from the OpenKM download center
  • This application needs to share the database with OpenKM, so you don't need to create a new one
  • Copy the remote-signature.properties file into Tomcat and modify the configuration parameters

A mail account must be configured before proceeding

# OpenKM Hibernate configuration values
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/remote-signature?useUnicode=true&characterEncoding=UTF8
spring.datasource.username=openkm
spring.datasource.password=openkm

# JPA
spring.jpa.hibernate.ddl-auto=create
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDB103Dialect

# Base URL
base.url=http://localhost:8080/remote-signature

# OpenKM
openkm.url.preview=http://localhost:8080/openkm
openkm.url=http://localhost:8080/openkm

# OpenKM anonymous user
openkm.anonymous.user=okmAdmin
openkm.anonymous.password=admin

# OpenKM admin user
openkm.admin.user=okmAdmin
openkm.admin.password=admin

# Language
languages=es-ES#Espa\u00f1ol,en-GB#English
default.language=en-GB

During the initial setup, set the parameter spring.jpa.hibernate.ddl-auto to 'create-only' for the first deployment, then change it to 'update' for subsequent operations.

  • Start Tomcat
  • Log into OpenKM
  • Navigate to Administration > Utilities > Database query and execute the following SQL statements to create the required configuration properties:
INSERT INTO OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) VALUES ('rs.subject.es-ES', 'string', 'Un documento requiere de su firma');
INSERT INTO OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) VALUES ('rs.subject.en-GB', 'string', 'This document needs to be signed');
INSERT INTO OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) VALUES ('rs.body.en-GB', 'html', '<p>You have a pending document to be signed <a href="${docURL}">${docName}</a></p>');
INSERT INTO OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) VALUES ('rs.body.es-ES', 'html', '<p>Tiene un documento pendiente de firmar <a href="${docURL}">${docName}</a></p>');
INSERT INTO OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) VALUES ('rs.subject-signed.es-ES', 'string', 'El documento se ha firmado');
INSERT INTO OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) VALUES ('rs.body-signed.es-ES', 'html', '<p>El documento <a href="${docURL}">${docName}</a> se ha firmado </p>');
INSERT INTO OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) VALUES ('rs.subject-signed.en-GB', 'string', 'The document has been signed');
INSERT INTO OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) VALUES ('rs.body-signed.en-GB', 'html', '<p>The document <a href="${docURL}">${docName}</a> has been signed </p>');
INSERT INTO OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) VALUES ('rs.subject-verify.es-ES', 'string', 'Remote Signature: Código de verificación');
INSERT INTO OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) VALUES ('rs.body-verify.es-ES', 'html', '<p>Su pin de verificación para el documento ${docName} es ${pin}</p>');
INSERT INTO OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) VALUES ('rs.subject-verify.en-GB', 'string', 'Remote Signature: Verification pin');
INSERT INTO OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) VALUES ('rs.body-verify.en-GB', 'html', '<p>Your verification pin for the document ${docName} is ${pin} </p>');
  • Set the configuration properties according to their usage:
    • rs.subject.es-ES: Subject line for signature request emails (Spanish).
    • rs.subject.en-GB: Subject line for signature request emails (English).
    • rs.body.es-ES: Body content for signature request emails (Spanish).
    • rs.body.en-GB: Body content for signature request emails (English).
    • rs.subject-signed.es-ES: Subject line for signature confirmation emails (Spanish).
    • rs.subject-signed.en-GB: Subject line for signature confirmation emails (English).
    • rs.body-signed.es-ES: Body content for signature confirmation emails (Spanish).
    • rs.body-signed.en-GB: Body content for signature confirmation emails (English).
    • rs.subject-verify.es-ES: Subject line for PIN verification emails (Spanish).
    • rs.subject-verify.en-GB: Subject line for PIN verification emails (English).
    • rs.body-verify.es-ES: Body content for PIN verification emails (Spanish).
    • rs.body-verify.en-GB: Body content for PIN verification emails (English).

Configuration parameters

ParameterDescription

rs.subject.es-ES

Subject line for signature request email (Spanish)

rs.subject.en-GB

Subject line for signature request email (English)

rs.body.es-ES

Body content for signature request email (Spanish)

rs.body.en-GB

Body content for signature request email (English)

rs.subject-signed.es-ES

Subject line for signature confirmation email (Spanish)

rs.subject-signed.en-GB

Subject line for signature confirmation email (English)

rs.body-signed.es-ES

Body content for signature confirmation email (Spanish)

rs.body-signed.en-GB

Body content for signature confirmation email (English)

rs.subject-verify.es-ES

Subject line for PIN verification email (Spanish)

rs.body-verify.es-ES

Body content for PIN verification email (Spanish)

rs.subject-verify.en-GB

Subject line for PIN verification email (English)

rs.body-verify.en-GB

Body content for PIN verification email (English)

rs.subject-error.es-ES

Subject line for error notification email (Spanish)

rs.subject-error.en-GB

Subject line for error notification email (English)

rs.body-error.es-ES

Body content for error notification email (Spanish)

rs.body-error.en-GB

Body content for error notification email (English)

Configuration parameters that can be used in the body

The following notification parameters can be used in email body messages:

ParameterDescription

${docURL}

Link to the document to be signed

${docName}

Name of the document to be signed

${pin}

Verification PIN code

Create role ROLE_REMOTE_SIGNATURE

Navigate to Administration > Roles > New Role. Set the ID parameter to ROLE_REMOTE_SIGNATURE and enable the Active checkbox.

This role must be assigned to any user who requires access to the Remote Signature administration.

Add translations

Navigate to Administration > Utilities > Database query. Select the JDBC option at the bottom right, copy the appropriate SQL script, and click the Execute button.

DELETE FROM OKM_TRANSLATION WHERE TR_LANGUAGE='en-GB' and TR_MODULE='rs';
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'send.emails', 'Send e-mails', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'emails.sent', 'E-mails sent', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'home', 'Home', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'admin', 'Admin', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'logout', 'Logout', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'login', 'Login', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'sign', 'Sign', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'undo', 'Undo', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'clear', 'Clear', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'document.signed', 'Document signed successfully!', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'no.signature', 'There is no signature', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'take.home', 'Take me home.', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'no.exist', 'This page does not exist.', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'no.lost', 'You are lost.', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'signature.needed', 'This document needs to be signed', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'title', 'Remote Signature', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'close', 'Close', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'document.is.signed', '"<strong>{name}</strong>" has already been signed', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'error.occurred', 'An error has occurred', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'back', 'Back', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'next', 'Next', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'enter.pin', 'Enter pin', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'enter.valid.pin', 'Please enter a 6-digit pin.', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'submit', 'Submit', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'request', 'Request pin', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'pin.sent', 'Requested pin sent!', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'invalid.pin', 'Invalid Pin!', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'no.pdf.subject', 'Document cannot be signed - Invalid format', 'en-GB');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'no.pdf.body', 'The document "${docName}" cannot be signed because it is not a PDF file. Please convert the document to PDF format and try again.', 'en-GB');
INSERT INTO OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) VALUES ('rs.subject-error.en-GB', 'string', 'Error signing a document');
INSERT INTO OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) VALUES ('rs.body-error.en-GB', 'html', '<p>Error in the process of signing the document document <a href="${docURL}">${docName}</a></p>');
DELETE FROM OKM_TRANSLATION WHERE TR_LANGUAGE='es-ES' and TR_MODULE='rs';
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'send.emails', 'Enviar correos', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'emails.sent', 'Correos enviados', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'home', 'Inicio', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'admin', 'Administración', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'logout', 'Salir', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'login', 'Login', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'sign', 'Firma', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'undo', 'Deshacer', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'clear', 'Limpiar', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'document.signed', 'Documento firmado correctamente', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'no.signature', 'Es necesario dibujar la firma', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'take.home', 'Llévame al inicio', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'no.exist', 'Esta página no existe.', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'no.lost', 'Usted está perdido', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'signature.needed', 'Un documento requiere de su firma', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'title', 'Remote Signature', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'close', 'Cerrar', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'document.is.signed', '"<strong>{name}</strong>" ya ha sido firmado', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'error.occurred', 'Se ha producido un error', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'back', 'Atrás', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'next', 'Siguiente', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'enter.pin', 'Introducir pin', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'enter.valid.pin', 'Por favor introduzca un numero de 6 cifras', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'submit', 'Enviar', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'request', 'Solicitar código', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'request.sent', 'El código de verificación ha sido enviado!', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'invalid.pin', 'Pin incorrecto!', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'no.pdf.subject', 'El documento no se puede firmar - Formato inválido', 'es-ES');
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs', 'no.pdf.body', 'El documento "${docName}" no se puede firmar porque no es un archivo PDF. Por favor, convierta el documento a formato PDF e inténtelo de nuevo.', 'es-ES');
INSERT INTO OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) VALUES ('rs.subject-error.es-ES', 'string', 'Error firmando un documento');
INSERT INTO OKM_CONFIG (CFG_KEY, CFG_TYPE, CFG_VALUE) VALUES ('rs.body-error.es-ES', 'html', '<p>Error en el proceso de firmar el documento <a href="${docURL}">${docName}</a></p>');

Translations by tenant

If multiple remote signature modules are configured to work with your OpenKM instance, you can configure different translations for each tenant.

Set a new translation module name in openkm.properties:

translation.module=rs2

Register translations by renaming the module as shown in the sample below:

-- Take the original translations and update the module from rs to rsX
DELETE FROM OKM_TRANSLATION WHERE TR_LANGUAGE='en-GB' and TR_MODULE='rs2';
INSERT INTO OKM_TRANSLATION (TR_MODULE, TR_KEY, TR_TEXT, TR_LANGUAGE) VALUES ('rs2', 'send.emails', 'Send e-mails', 'en-GB');
...

From mail parameter by tenant

To configure the sender address for outgoing emails, modify the mail-from configuration parameter in your openkm.properties file with an existing email account.

mail.from=sample@example.com

Enable stamp extension

Ensure the stamp extension is enabled in your OpenKM instance. For instructions on enabling extensions, refer to Enable extensions

  • Create the image stamps that will be used to stamp signatures on documents. The ID of each stamp will correspond to the option values in the okp:remote_signature.location parameter. Use the dummy.png file as an image template.

  • The following examples demonstrate how to configure stamp locations:
    • NorthEast Location 
      • Image: dummy.png
      • Expr. X: PAGE_WIDTH
      • Expr. Y: PAGE_HEIGHT
    • North Location
      • Image: dummy.png
      • Expr. X: PAGE_CENTER - IMAGE_WIDTH / 2
      • Expr. Y: PAGE_HEIGHT
    • NorthWest Location
      • Image: dummy.png
      • Expr. X: 0
      • Expr. Y: PAGE_HEIGHT
    • East Location 
      • Image: dummy.png
      • Expr. X: PAGE_WIDTH
      • Expr. Y:PAGE_MIDDLE  - IMAGE_HEIGHT / 2
    • Center Location
      • Image: dummy.png
      • Expr. X: PAGE_CENTER - IMAGE_WIDTH / 2
      • Expr. Y: PAGE_MIDDLE - IMAGE_HEIGHT / 2
    • West Location
      • Image: dummy.png
      • Expr. X: 0
      • Expr. Y: PAGE_MIDDLE - IMAGE_HEIGHT / 2
    • SouthEast Location 
      • Image: dummy.png
      • Expr. X: PAGE_WIDTH
      • Expr. Y: 0
    • South Location
      • Image: dummy.png
      • Expr. X: PAGE_CENTER - IMAGE_WIDTH / 2
      • Expr. Y: 0
    • SouthWest Location
      • Image: dummy.png
      • Expr. X: 0
      • Expr. Y: 0

Add extra metadata fields

Input-type metadata fields can be added to collect additional information from users when signing documents. These input fields must be added at the end of the metadata group. Below is an example of two text metadata fields:

<input label="DNI" type="text" name="okp:remote_signature.dni" readonly="true" />
<input label="Name" type="text" name="okp:remote_signature.name" readonly="true" />

Additionally, you must add one option in the Extra select element for each input field created, using the input name followed by the desired display order as the value. Example:

<select label="Extra" name="okp:remote_signature.extra" type="multiple">
<option label="DNI" value="okp:remote_signature.dni.1"/>
<option label="Name" value="okp:remote_signature.name.2"/>
</select>

Configuration

Create this property group

Create a new metadata group and assign it to PDF documents that require signing.

After creating the property group, it must be enabled in the user profiles.

Before creating the property group, ensure the option select values of okp:remote_signature.location are updated with the corresponding stamp IDs.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE property-groups PUBLIC "-//OpenKM//DTD Property Groups 3.10//EN"
"http://www.openkm.com/dtd/property-groups-3.10.dtd">
<property-groups>
<property-group label="Remote Signature" name="okg:remote_signature">
<select label="Status" name="okp:remote_signature.status" type="simple" readonly="true">
<option label="Pending to send" value="pendingToSend" selected="true"/>
<option label="Pending to sign" value="pendingToSign"/>
<option label="Signed" value="signed" />
<option label="Error" value="error" />
</select>
<input label="Mail to notify" type="text" name="okp:remote_signature.mail">
<validator type="req"/>
</input>
<checkbox label="Request Pin" name="okp:remote_signature.pin" />
<select label="Sign Location" name="okp:remote_signature.location" type="simple">
<option label="NorthWest" value="1"/>
<option label="North" value="2"/>
<option label="NorthEast" value="3" />
<option label="West" value="4"/>
<option label="Center" value="5"/>
<option label="East" value="6" />
<option label="SouthWest" value="7"/>
<option label="South" value="8"/>
<option label="SouthEast" value="9" />
<validator type="req"/>
</select>
<select label="Language" name="okp:remote_signature.lang" type="simple">
<option label="English" value="en-GB"/>
<option label="Español" value="es-ES"/>
<validator type="req"/>
</select>
<select label="Extra" name="okp:remote_signature.extra" type="multiple">
<option label="DNI" value="okp:remote_signature.dni.1"/>
<option label="Name" value="okp:remote_signature.name.2"/>
<option label="Checkbox" value="okp:remote_signature.checkbox.3"/>
<option label="Select" value="okp:remote_signature.select.4"/>
<option label="Select Multiple" value="okp:remote_signature.select_multiple.2"/>
</select>
<input label="DNI" type="text" name="okp:remote_signature.dni" readonly="true" />
<input label="Name" type="text" name="okp:remote_signature.name" readonly="true" />
<input label="Page" type="text" name="okp:remote_signature.page" />
<input label="Send Date" type="date" name="okp:remote_signature.send_date" timeFormat="hm" readonly="true"/>
<input label="Sign Date" type="date" name="okp:remote_signature.sign_date" timeFormat="hm" readonly="true"/>
<input label="Signature Device IP" type="text" name="okp:remote_signature.ip" readonly="true"/>
<textarea label="Error Message" name="okp:remote_signature.error_message" width="200px" readonly="true" dbColumnSize="512"/>
</property-group>
</property-groups>