Une collection de IBatchItem.
Cet objet n’est pas disponible dans la Web Verification Station pour vérifier les règles en local.
Définition | Description |
|---|
Move(item : IBatchItem, position : int) | Déplace l’élément à la position spécifiée dans la collection. Remarque : Appelez cette méthode sur la collection dans laquelle l’élément doit être déplacé. Remarque : Le paramètre position peut prendre des valeurs allant de 0 à la taille de la collection. |
| Nom | Type | Accès | Description |
|---|
| Count | int | Lecture seule | Le nombre d’éléments de la collection |
Exemple de la méthode Move
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
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++;
}