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

# Création d’un ensemble de fonctions pour le traitement et la vérification de plusieurs documents

> Créez les fonctions Pega pour la capture de plusieurs documents : CreateNewBatch, AddDocumentToBatch, RunBatchProcessing et FetchingCapturedData.

Pour mettre en œuvre un scénario de traitement de plusieurs documents, créez les fonctions suivantes :

[CreateNewBatch](#createnewbatch)

[AddDocumentToBatch](#adddocumenttobatch)

[RunBatchProcessing](#runbatchprocessing)

[WaitFirstVerificationOrProcessedForMultiFileInvoice](#waitfirstverificationorprocessedformultifileinvoice)

[FetchingCapturedData](#fetchingcaptureddata)

[MultiDocumentBatchIsProcessed](#multidocumentbatchisprocessed)

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

La *fonction* *CreateNewBatch* crée un nouveau lot et renvoie son identifiant.

Cette fonction n’a pas de paramètre d’entrée.

**Type du paramètre de sortie** : *int* (identifiant du lot).

**Exceptions levées** : Exception.

**Source Java** :

```
// Création du client API Web Services FlexiCapture. 
// Veuillez fournir l'adresse du serveur d'applications FlexiCapture, le nom du tenant, le nom d'utilisateur et le mot de passe ici. 
try (TenantClient tenantClient = new TenantClient(new URI(baseUri), tenantName, userName, password)) {
  // Récupération de l'API de projet FlexiCapture. Veuillez fournir un nom de projet ici.
  try(ProjectApi projApi = tenantClient.getProjects().getProjectApi(multiFileProjectName)) {
    // Création du lot et du document FlexiCapture.
    Batch batch = new Batch();
    Document doc = new Document();
    // Ajout du lot dans le projet FlexiCapture.
    return projApi.getBatches().add(batch);
  }
} catch(Exception ex){
  // Concaténation des messages d'erreur. 
Throwable cause = ex.getCause();
String message = ex.getMessage();
while (cause != null) {
message += " " + cause.getMessage();
cause = cause.getCause();
}
// Levée du message concaténé.
throw new Exception(message);
}
```

## <a id="adddocumenttobatch" />AddDocumentToBatch

La fonction *AddDocumentToBatch* ajoute un document à un lot.

**Paramètres d'entrée** :

| **Name**      | **Type Java** | **Description**                     |
| ------------- | ------------- | ----------------------------------- |
| batchId       | int           | Identifiant du lot                  |
| fileName      | String        | Nom du fichier                      |
| base64Content | String        | Contenu du fichier au format Base64 |

Cette fonction n'a pas de paramètres de sortie.

**Exceptions levées** : Exception.

**Code source Java** :

```
// Création du client API Web Services FlexiCapture. 
// Veuillez indiquer l'adresse du serveur d'applications FlexiCapture, le nom du tenant, le nom d'utilisateur et le mot de passe ici. 
try (TenantClient tenantClient = new TenantClient(new URI(baseUri), tenantName, userName, password)) {
  // Récupération de l'API de projet FlexiCapture. Veuillez indiquer un nom de projet ici.
  try(ProjectApi projApi = tenantClient.getProjects().getProjectApi(multiFileProjectName)) {
    // Création du document FlexiCapture.
    Document doc = new Document();
    // Récupération de l'API de lot FlexiCapture. Veuillez indiquer un identifiant de lot ici.
    BatchApi batchApi = projApi.getBatches().getBatchApi(batchId);
    // Création d'une instance de fichier. 
    File file = new File(fileName, Base64.getDecoder().decode(base64Content.replace("\n", "").replace("\r", "")));
    // Ajout du document dans le lot FlexiCapture.
    // Le fichier représente le contenu du document.
    batchApi.getDocuments().add(doc, file);
  }
} catch(Exception ex){
  // Concaténation des messages d'erreur. 
Throwable cause = ex.getCause();
String message = ex.getMessage();
while (cause != null) {
message += " " + cause.getMessage();
cause = cause.getCause();
}
// Lever le message concaténé.
throw new Exception(message);
}
```

## <a id="runbatchprocessing" />RunBatchProcessing

La fonction *RunBatchProcessing* lance le traitement du lot.

**Paramètres d'entrée** :

| **Name** | **Type Java** | **Description**    |
| -------- | ------------- | ------------------ |
| batchId  | int           | Identifiant du lot |

Cette fonction n'a pas de paramètres de sortie.

**Exceptions levées** : Exception.

**Code source Java** :

```
// Création du client API Web Services FlexiCapture. 
// Veuillez indiquer l'adresse du serveur d'applications FlexiCapture, le nom du tenant, le nom d'utilisateur et le mot de passe ici. 
try (TenantClient tenantClient = new TenantClient(new URI(baseUri), tenantName, userName, password)) {
  // Récupération de l'API de projet FlexiCapture. Veuillez indiquer un nom de projet ici.
  try(ProjectApi projApi = tenantClient.getProjects().getProjectApi(multiFileProjectName)) {
    // Récupération de l'API de lot FlexiCapture. Veuillez indiquer un identifiant de lot ici.
    BatchApi batchApi = projApi.getBatches().getBatchApi(batchId);
    // Lancement du traitement du lot FlexiCapture.
    batchApi.start();
  }
} catch(Exception ex){
  // Concaténation des messages d'erreur. 
Throwable cause = ex.getCause();
String message = ex.getMessage();
while (cause != null) {
message += " " + cause.getMessage();
cause = cause.getCause();
}
// Lever le message concaténé.
throw new Exception(message);
}
```

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

La fonction *WaitFirstVerificationOrProcessedForMultiFileInvoice* renvoie une URL de vérification. Si le document n’a pas atteint l’étape de vérification, une chaîne vide est renvoyée.

**Paramètres d’entrée** :

| **Nom** | **Type Java** | **Description**    |
| ------- | ------------- | ------------------ |
| batchId | int           | Identifiant du lot |

**Type du paramètre de sortie** : *String* (URL de vérification).

**Exceptions levées** : Exception.

**Code source Java** :

```
// Création du client API Web Services FlexiCapture. 
// Veuillez indiquer l'adresse du serveur d'applications FlexiCapture, le nom du tenant, le nom d'utilisateur et le mot de passe ici. 
try (TenantClient tenantClient = new TenantClient(new URI(baseUri), tenantName, userName, password)) {
  // Récupération de l'API de projet FlexiCapture. Veuillez indiquer un nom de projet ici.
  try(ProjectApi projApi = tenantClient.getProjects().getProjectApi(multiFileProjectName)) {
    // Récupération de l'API de lot FlexiCapture. Veuillez indiquer un identifiant de lot ici.
    BatchApi batchApi = projApi.getBatches().getBatchApi(batchId);
    // Attente de l'arrêt du lot à l'étape de vérification et récupération du document FlexiCapture.
    Document doc = batchApi.getDocuments().waitFirstVerificationOrProcessed();
    // Vérification que l'étape du lot est Verification.
    if (doc.getStageType() == ProcessingStageType.Verification) {
      // Retour de la première URL de vérification pour le lot FlexiCapture.
      return batchApi.getVerificationUrls(WebPageMode.Mini).get(0).toString();
    } 
    //Retour d'une chaîne vide si le lot a été traité sans étape de vérification.
    return "";
  }
}catch(Exception ex){
  // Concaténation des messages d'erreur. 
Throwable cause = ex.getCause();
String message = ex.getMessage();
while (cause != null) {
message += " " + cause.getMessage();
cause = cause.getCause();
}
// Levée du message concaténé.
throw new Exception(message);
}
```

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

La fonction *FetchingCapturedData* renvoie une liste de champs de sortie au format JSON.

**Paramètres d'entrée** :

| **Nom**      | **Type Java** | **Description**                  |
| ------------ | ------------- | -------------------------------- |
| batchId      | int           | Identifiant du lot               |
| templateName | String        | Nom de la définition de document |

**Type du paramètre de sortie** : *String* (champs du document au format JSON).

**Exceptions levées** : Exception.

**Code source Java**:

```
// Création du client API Web Services FlexiCapture. 
// Veuillez indiquer l'adresse du serveur d'applications FlexiCapture, le nom du tenant, le nom d'utilisateur et le mot de passe ici. 
try (TenantClient tenantClient = new TenantClient(new URI(baseUri), tenantName, userName, password)) {
  // Récupération de l'API de projet FlexiCapture. Veuillez indiquer un nom de projet ici.
  try(ProjectApi projApi = tenantClient.getProjects().getProjectApi(multiFileProjectName)) {
    // Récupération de l'API de lot FlexiCapture. Veuillez indiquer un identifiant de lot ici.
    BatchApi batchApi = projApi.getBatches().getBatchApi(batchId);
    // Récupération de tous les documents du lot FlexiCapture.
    List<Document> documents = batchApi.getDocuments().getAll();
    for(Document document:
       documents){
      // Vérification du nom du modèle de document.
      if(document.getTemplateName().equals(templateName)){
        // Récupération de l'API de document FlexiCapture. Veuillez indiquer un identifiant de document ici.
        DocumentApi docApi = batchApi.getDocuments().getDocumentApi(document.getId());
        // Renvoi des champs capturés sous forme de chaîne JSON.
        return docApi.getExportedFields();
      }
    }
    //Renvoi d'une chaîne JSON vide si le nom du modèle de document est introuvable.
    return "{}";
  }
}catch(Exception ex){
  // Concaténation des messages d'erreur. 
Throwable cause = ex.getCause();
String message = ex.getMessage();
while (cause != null) {
message += " " + cause.getMessage();
cause = cause.getCause();
}
// Levée de l'exception avec le message concaténé.
throw new Exception(message);
}
```

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

La fonction *MultiDocumentBatchIsProcessed* renvoie une valeur indiquant si le lot a été traité ou non.

**Paramètres d’entrée** :

| **Nom** | **Type Java** | **Description**    |
| ------- | ------------- | ------------------ |
| batchId | int           | Identifiant du lot |

**Type du paramètre de sortie** : *boolean* (*true* si le document est à l’étape *Processed* et *false* sinon).

**Exceptions levées** : Exception.

**Code source Java** :

```
// Création du client API Web Services FlexiCapture. 
// Veuillez indiquer l'adresse du serveur d'applications FlexiCapture, le nom du tenant, le nom d'utilisateur et le mot de passe ici. 
try (TenantClient tenantClient = new TenantClient(new URI(baseUri), tenantName, userName, password)) {
  // Récupération de l'API de projet FlexiCapture. Veuillez indiquer un nom de projet ici.
  try(ProjectApi projApi = tenantClient.getProjects().getProjectApi(multiFileProjectName)) {
    // Récupération de l'API de lot FlexiCapture. Veuillez indiquer un identifiant de lot ici.
    BatchApi batchApi = projApi.getBatches().getBatchApi(batchId);
    // Attente de l'arrêt du lot à l'étape de vérification ou de traitement, et récupération du document FlexiCapture.
    Document doc = batchApi.getDocuments().waitFirstVerificationOrProcessed();
    // Vérification que l'étape du lot est Traité.
    return doc.getStageType() == ProcessingStageType.Processed;    
  }
}catch(Exception ex){
  // Concaténation des messages d'erreur. 
Throwable cause = ex.getCause();
String message = ex.getMessage();
while (cause != null) {
message += " " + cause.getMessage();
cause = cause.getCause();
}
// Levée du message concaténé.
throw new Exception(message);
}
```
