> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Crear un conjunto de funciones para procesar y verificar un solo documento

> Cree las funciones de la biblioteca de Pega para la captura de un solo documento: SendForProcessing, WaitFirstVerificationOrProcessed y FetchingCapturedData.

Para implementar un escenario de procesamiento de un solo documento, cree las siguientes funciones:

[SendForProcessing](#sendforprocessing)

[WaitFirstVerificationOrProcessed](#waitfirstverificationorprocessed)

[FetchingCapturedData](#fetchingcaptureddata)

[SingleDocumentBatchIsProcessed](#singledocumentbatchisprocessed)

## <a id="sendforprocessing" />SendForProcessing

La *función* *SendForProcessing* envía un archivo a FC para su reconocimiento y devuelve un identificador de lote.

**Parámetros de entrada**:

| **Name**      | **Tipo de Java** | **Descripción**                         |
| ------------- | ---------------- | --------------------------------------- |
| fileName      | String           | Nombre del archivo                      |
| base64Content | String           | Contenido del archivo en formato Base64 |

**Tipo del parámetro de salida**: *int* (identificador de lote).

**Excepciones lanzadas**: Exception.

**Código fuente de Java**:

```
// Creación del cliente de API de servicios web de FlexiCapture. 
// Proporcione aquí la dirección del Servidor de aplicaciones de FlexiCapture, el nombre del tenant, el nombre de usuario y la contraseña. 
try (TenantClient tenantClient = new TenantClient(new URI(baseUri), tenantName, userName, password)) {
  // Obtención de la API del proyecto de FlexiCapture. Proporcione aquí el nombre del proyecto.
  try(ProjectApi projApi = tenantClient.getProjects().getProjectApi(singleFileProjectName)) {
    // Creación del lote y el documento de FlexiCapture.
    Batch batch = new Batch();
    Document doc = new Document();
    // Incorporación del lote al proyecto de FlexiCapture.
    int batchId = projApi.getBatches().add(batch);
    // Obtención de la API del lote de FlexiCapture. Proporcione aquí el identificador del lote.
    BatchApi batchApi = projApi.getBatches().getBatchApi(batchId);
    // Creación de la instancia del archivo. 
    File file = new File(fileName, Base64.getDecoder().decode(base64Content.replace("\n", "").replace("\r", "")));
    // Incorporación del documento al lote de FlexiCapture.
    // El archivo es el contenido del documento.
    int docId = batchApi.getDocuments().add(doc, file);
    // Ejecución del lote de FlexiCapture para su procesamiento.
    batchApi.start();
    //Devolución del identificador del lote.
    return batchId;
  }
} catch(Exception ex){
  // Encadenamiento de mensajes de error. 
Throwable cause = ex.getCause();
String message = ex.getMessage();
while (cause != null) {
message += " " + cause.getMessage();
cause = cause.getCause();
}
// Lanzamiento del mensaje encadenado.
throw new Exception(message);
}
```

## <a id="waitfirstverificationorprocessed" />WaitFirstVerificationOrProcessed

La función *WaitFirstVerificationOrProcessed* devuelve una URL de verificación. Si el documento no ha alcanzado la etapa de verificación, se devuelve una cadena vacía.

**Parámetros de entrada**:

| **Nombre** | **Tipo de Java** | **Descripción**        |
| ---------- | ---------------- | ---------------------- |
| batchId    | int              | Identificador del lote |

**Tipo del parámetro de salida**: *String* (URL de verificación).

**Excepciones lanzadas**: Exception.

**Código fuente de Java**:

```
// Creación del cliente de API de servicios web de FlexiCapture. 
// Proporcione aquí la dirección del Servidor de aplicaciones de FlexiCapture, el nombre del tenant, el nombre de usuario y la contraseña. 
try (TenantClient tenantClient = new TenantClient(new URI(baseUri), tenantName, userName, password)) {
  // Obtención de la API del proyecto de FlexiCapture. Proporcione aquí el nombre del proyecto.
  try(ProjectApi projApi = tenantClient.getProjects().getProjectApi(singleFileProjectName)) {
    // Obtención de la API del lote de FlexiCapture. Proporcione aquí el identificador del lote.
    BatchApi batchApi = projApi.getBatches().getBatchApi(batchId);
    // Espera a que el lote se detenga en la etapa de verificación y obtiene el documento de FlexiCapture.
    Document doc = batchApi.getDocuments().waitFirstVerificationOrProcessed();
    // Comprueba si la etapa del lote es Verificación.
    if (doc.getStageType() == ProcessingStageType.Verification) {
      // Devuelve la primera cadena de url de verificación para el lote de FlexiCapture.
      return batchApi.getVerificationUrls(WebPageMode.Mini).get(0).toString();
    } 
    //Devuelve una cadena vacía si el lote se procesó sin etapa de verificación.
    return "";
  }
}catch(Exception ex){
  // Encadenamiento de mensajes de error. 
Throwable cause = ex.getCause();
String message = ex.getMessage();
while (cause != null) {
message += " " + cause.getMessage();
cause = cause.getCause();
}
// Lanza el mensaje encadenado.
throw new Exception(message);
}
```

## <a id="fetchingcaptureddata" />FetchingCapturedData

La función *FetchingCapturedData* devuelve una lista de campos de salida en formato JSON.

**Parámetros de entrada**:

| **Name** | **Tipo de Java** | **Description**        |
| -------- | ---------------- | ---------------------- |
| batchId  | int              | Identificador del lote |

**Tipo del parámetro de salida**: *String* (campos del documento en formato JSON).

**Excepciones lanzadas**: Exception.

**Código fuente Java**:

```
// Creación del cliente de API de servicios web de FlexiCapture. 
// Proporcione aquí la dirección del Servidor de aplicaciones de FlexiCapture, el nombre del tenant, el nombre de usuario y la contraseña. 
try (TenantClient tenantClient = new TenantClient(new URI(baseUri), tenantName, userName, password)) {
  // Obtención de la API del proyecto de FlexiCapture. Proporcione aquí el nombre del proyecto.
  try(ProjectApi projApi = tenantClient.getProjects().getProjectApi(singleFileProjectName)) {
    // Obtención de la API del lote de FlexiCapture. Proporcione aquí el identificador del lote.
    BatchApi batchApi = projApi.getBatches().getBatchApi(batchId);
    // Espera a que el lote se procese y obtención del documento de FlexiCapture.
    Document doc = batchApi.getDocuments().waitFirstVerificationOrProcessed();
    // Obtención de la API del documento de FlexiCapture. Proporcione aquí el identificador del documento.
    DocumentApi docApi = batchApi.getDocuments().getDocumentApi(doc.getId());
    // Devolución de los campos capturados como una cadena JSON.
    return docApi.getExportedFields();
  }
}catch(Exception ex){
  // Encadenamiento de mensajes de error. 
Throwable cause = ex.getCause();
String message = ex.getMessage();
while (cause != null) {
message += " " + cause.getMessage();
cause = cause.getCause();
}
// Lanzamiento del mensaje encadenado.
throw new Exception(message);
}
```

## <a id="singledocumentbatchisprocessed" />SingleDocumentBatchIsProcessed

La función *SingleDocumentBatchIsProcessed* devuelve un valor que indica si un lote se ha procesado o no.

**Parámetros de entrada**:

| **Name** | **Tipo de Java** | **Description**        |
| -------- | ---------------- | ---------------------- |
| batchId  | int              | Identificador del lote |

**Tipo del parámetro de salida**: *boolean* (*true* si el documento está en la etapa *Processed* y *false* en caso contrario).

**Excepciones generadas**: Exception.

**Código fuente de Java**:

```
// Creación del cliente de API de servicios web de FlexiCapture. 
// Proporcione aquí la dirección del Servidor de aplicaciones de FlexiCapture, el nombre del tenant, el nombre de usuario y la contraseña. 
try (TenantClient tenantClient = new TenantClient(new URI(baseUri), tenantName, userName, password)) {
  // Obtención de la API del proyecto de FlexiCapture. Proporcione aquí el nombre del proyecto.
  try(ProjectApi projApi = tenantClient.getProjects().getProjectApi(singleFileProjectName)) {
    // Obtención de la API del lote de FlexiCapture. Proporcione aquí el identificador del lote.
    BatchApi batchApi = projApi.getBatches().getBatchApi(batchId);
    // Espera a que el lote se detenga en la etapa de verificación o procesamiento y obtiene el documento de FlexiCapture.
    Document doc = batchApi.getDocuments().waitFirstVerificationOrProcessed();
    // Comprueba si la etapa del lote es Procesado.
    return doc.getStageType() == ProcessingStageType.Processed;    
  }
}catch(Exception ex){
  // Encadenamiento de mensajes de error. 
Throwable cause = ex.getCause();
String message = ex.getMessage();
while (cause != null) {
message += " " + cause.getMessage();
cause = cause.getCause();
}
// Lanza el mensaje encadenado.
throw new Exception(message);
}
```
