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

# IBatchItems

> IBatchItems est une collection d’éléments IBatchItem dotée d’une méthode Move permettant de réorganiser les documents et les pages, ainsi que d’un script d’exemple pour l’assemblage de jeux de documents.

<div id="what-it-is">
  ## Description
</div>

Une collection de [IBatchItem](/fr/flexi-capture/appendix/scripts/i-batch-item).

<Note>
  Cet objet n’est pas disponible dans la Web Verification Station pour vérifier les règles en local.
</Note>

<div id="methods">
  ## Méthodes
</div>

<table width="100%"><thead><tr><th style={{textAlign: 'left'}}><p><strong>Définition</strong></p></th><th style={{textAlign: 'left'}}><p><strong>Description</strong></p></th></tr></thead><tbody><tr><td><p>Move(item : <a href="/fr/flexi-capture/appendix/scripts/i-batch-item">IBatchItem</a>, position : int)</p></td><td><p>Déplace l’élément à la position spécifiée dans la collection.</p><p><strong>Remarque : </strong>Appelez cette méthode sur la collection dans laquelle l’élément doit être déplacé.</p><p><strong>Remarque : </strong>Le paramètre <code>position</code> peut prendre des valeurs allant de 0 à la taille de la collection.</p></td></tr></tbody></table>

<div id="properties">
  ## Propriétés
</div>

| **Nom** | **Type** | **Accès**     | **Description**                       |
| ------- | -------- | ------------- | ------------------------------------- |
| Count   | int      | Lecture seule | Le nombre d’éléments de la collection |

<div id="example-of-the-move-method">
  ## Exemple de la méthode Move
</div>

Ce script exécute plusieurs scénarios consécutifs afin d’assembler des jeux à partir de listes non triées de documents :

* Désassembler les jeux
* Regrouper les documents par type dans l’ordre spécifié
* Regrouper les documents selon le champ principal spécifié
* Assembler les documents en jeux ayant le même champ principal

```csharp theme={null}
using System.Collections.Generic;
IBatchItems batch = Batch.AsBatchItem.ChildItems;
List<string> docDefs = new List<string> {"DocSet","Doc1","Doc2"}; // Ordre d'assemblage des documents
// Nom du champ principal
// (le champ doit être indexé dans tous les documents et porter le même nom)
string keyFieldName = "SSN";
List<string> keyFields = new List<string>();
// Désassemblage des jeux
bool foundChildren = false;
do
{
    foreach (IBatchItem itm in batch)
    {
        if (itm.ChildItems.Count > 1)
        {
            int shift = 0;
            foreach (IBatchItem subItm in itm.ChildItems)
            {
                shift++;
                batch.Move(subItm, itm.Index + shift);
            }
        }
    }
    foreach (IBatchItem itm in batch)
        if (itm.ChildItems.Count > 1)
            foundChildren = true;
} while (foundChildren);
// Tri des documents dans l'ordre attendu au sein du jeu
// (c'est-à-dire le jeu lui-même suivi de tous ses sous-documents)
foreach (string docDefName in docDefs)
{
    List<int> indexList = new List<int>();
    foreach (IBatchItem itm in batch)
        if (itm.Type == TBatchItemType.BIT_Document)
            if (itm.AsDocument.DefinitionName == docDefName) indexList.Add(itm.Index);
    for (int i = 0; i < indexList.Count; i++)
        batch.Move(batch[indexList[i]-i], batch.Count);
}
// Recherche de toutes les valeurs de champs principaux dans le lot
foreach (IBatchItem itm in batch)
{
    if (itm.Type == TBatchItemType.BIT_Document)
    {
        string keyFieldValue = (string)itm.AsDocument.IndexedItemValue(keyFieldName);
        if (!keyFields.Contains(keyFieldValue))
            keyFields.Add(keyFieldValue);
    }
}
// Assemblage des documents ayant le même champ principal
foreach (string keyFieldValue in keyFields)
{
    List<int> indexList = new List<int>();
    foreach (IBatchItem itm in batch)
        if (itm.Type == TBatchItemType.BIT_Document)
            if ((string)itm.AsDocument.IndexedItemValue(keyFieldName) == keyFieldValue) indexList.Add(itm.Index);
    for (int i = 0; i < indexList.Count; i++)
        batch.Move(batch[indexList[i]-i], batch.Count);
}
// Déplacement des sous-documents dans les jeux uniquement si les champs principaux correspondent
// (sections du jeu en premier, documents enfants en second)
int ind = 0;
while (ind < batch.Count)
{
    if (batch[ind].Type == TBatchItemType.BIT_Document)
        // Recherche du début du jeu
        if (batch[ind].AsDocument.DefinitionName == docDefs[0])
            // Si le document suivant le jeu n'est pas un jeu et que les champs principaux correspondent,
            // on l'ajoute à ce jeu
            while (ind+1 < batch.Count &&
                   batch[ind+1].AsDocument.DefinitionName != docDefs[0] &&
                   (string)batch[ind+1].AsDocument.IndexedItemValue(keyFieldName) == (string)batch[ind].AsDocument.IndexedItemValue(keyFieldName))
                batch[ind].ChildItems.Move(batch[ind+1], batch[ind].ChildItems.Count);
    ind++;
}
```
