Passer au contenu principal

Description

Une collection de IBatchItem. Remarque. Cet objet n’est pas disponible dans la Web Verification Station pour vérifier les règles en local.

Méthodes

Définition

Description

Move(item : IBatchItem, position : int)

Déplace l’élément à la position spécifiée dans la collection.

Remarque : Cette méthode est appelée 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.

Propriétés

NomTypeAccèsNom
CountintLecture seuleLe nombre d’éléments de la collection

Exemple d’utilisation de la méthode Move

Le script exécute plusieurs scénarios consécutifs, qui aboutissent à un script permettant d’assembler des jeux à partir de listes de documents non triées :
  • Désassembler les jeux
  • Regrouper les documents par type dans l’ordre spécifié
  • Regrouper les documents par champ clé spécifié
  • Assembler les documents en jeux ayant le même champ clé
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 clé
// (le champ doit être indexé dans tous les documents et avoir 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 dans le jeu
// (c.-à-d. 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 possibles des champs clés 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 clé
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 clés correspondent
// (documents de jeu d’abord, documents enfants ensuite)
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 un document situé après le jeu n’est pas un jeu et que les champs clés correspondent,
            // nous l’ajoutons à 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++;
}
Téléchargez l’exemple ici : Sample_IBatchItems_Move.zip