> ## 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 varios documentos

> Cree las funciones de Pega para la captura multidocumento: CreateNewBatch, AddDocumentToBatch, RunBatchProcessing y FetchingCapturedData.

Para implementar un escenario de procesamiento de varios documentos, cree las siguientes funciones:

[CreateNewBatch](#createnewbatch)

[AddDocumentToBatch](#adddocumenttobatch)

[RunBatchProcessing](#runbatchprocessing)

[WaitFirstVerificationOrProcessedForMultiFileInvoice](#waitfirstverificationorprocessedformultifileinvoice)

[FetchingCapturedData](#fetchingcaptureddata)

[MultiDocumentBatchIsProcessed](#multidocumentbatchisprocessed)

## <a id="createnewbatch" />CreateNewBatch

La *función* *CreateNewBatch* crea un nuevo lote y devuelve su identificador.

No hay parámetros de entrada para esta función.

**Tipo del parámetro de salida**: *int* (identificador del 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(multiFileProjectName)) {
    // 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.
    return projApi.getBatches().add(batch);
  }
} 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="adddocumenttobatch" />AddDocumentToBatch

La función *AddDocumentToBatch* añade un documento a un lote.

**Parámetros de entrada**:

| **Name**      | **Tipo de Java** | **Description**                         |
| ------------- | ---------------- | --------------------------------------- |
| batchId       | int              | Identificador del lote                  |
| fileName      | String           | Nombre del archivo                      |
| base64Content | String           | Contenido del archivo en formato Base64 |

No hay parámetros de salida para esta funció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(multiFileProjectName)) {
    // Creación del documento de FlexiCapture.
    Document doc = new Document();
    // Obtención de la API de 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", "")));
    // Adición del documento al lote de FlexiCapture.
    // El archivo es el contenido del documento.
    batchApi.getDocuments().add(doc, file);
  }
} 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="runbatchprocessing" />RunBatchProcessing

La *función* *RunBatchProcessing* inicializa el procesamiento por lotes.

**Parámetros de entrada**:

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

No hay parámetros de salida para esta función.

**Excepciones generadas**: Exception.

**Código fuente en 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(multiFileProjectName)) {
    // Obtención de la API del lote de FlexiCapture. Proporcione aquí el identificador del lote.
    BatchApi batchApi = projApi.getBatches().getBatchApi(batchId);
    // Ejecución del lote de FlexiCapture para su procesamiento.
    batchApi.start();
  }
} 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();
}
// Lanzar el mensaje encadenado.
throw new Exception(message);
}
```

## <a id="waitfirstverificationorprocessedformultifileinvoice" />WaitFirstVerificationOrProcessedForMultiFileInvoice

La función *WaitFirstVerificationOrProcessedForMultiFileInvoice* devuelve una URL de verificación. Si el documento no ha llegado a la fase de verificación, devuelve una cadena vacía.

**Parámetros de entrada**:

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

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

**Excepciones generadas**: 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(multiFileProjectName)) {
    // 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 Verification.
    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              |
| templateName | String           | Nombre de la Definición de Document |

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

**Excepciones lanzadas**: Exception.

**Código fuente en 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(multiFileProjectName)) {
    // Obtención de la API del lote de FlexiCapture. Proporcione aquí el identificador del lote.
    BatchApi batchApi = projApi.getBatches().getBatchApi(batchId);
    // Obtención de todos los documentos del lote de FlexiCapture.
    List<Document> documents = batchApi.getDocuments().getAll();
    for(Document document:
       documents){
      // Comprobación del nombre de la plantilla del documento.
      if(document.getTemplateName().equals(templateName)){
        // Obtención de la API del documento de FlexiCapture. Proporcione aquí el identificador del documento.
        DocumentApi docApi = batchApi.getDocuments().getDocumentApi(document.getId());
        // Retorno de los campos capturados como cadena JSON.
        return docApi.getExportedFields();
      }
    }
    //Retorno de cadena JSON vacía si no se encuentra el nombre de la plantilla del documento.
    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();
}
// Lanzamiento del mensaje encadenado.
throw new Exception(message);
}
```

## <a id="multidocumentbatchisprocessed" />MultiDocumentBatchIsProcessed

La *función* *MultiDocumentBatchIsProcessed* devuelve un valor que especifica si el 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(multiFileProjectName)) {
    // 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);
}
```
