utilisationSystem.Collections.Generic ;
IBatchItemslot=Batch.AsBatchItem.ChildItems ;
Liste<chaîne>docDefs=nouvelleListe<chaîne>{"DocSet","Doc1","Doc2"};// Ordre d'assemblage des documents
// Nom de champ clé
// (le champ doit être indexé dans tous les documents et porter le même nom)
chaînekeyFieldName="SSN";
Liste<chaîne>keyFields=nouvelleListe<chaîne>();
// Désassemblage d'ensembles
boolfoundChildren=faux;
do
{
foreach(IBatchItemitminbatch)
{
if(itm.ChildItems.Count>1)
{
intshift=0;
foreach(IBatchItemsubItminitm.ChildItems)
{
shift++;
batch.Move(subItm,itm.Index+shift);
}
}
}
foreach(IBatchItemitminbatch)
if(itm.ChildItems.Count>1)
foundChildren=vrai;
}tandis que(foundChildren);
// Tri des documents en fonction de comment ils devraient être dans l'ensemble
// (à savoir, l'ensemble lui-même suivi de tous ses sous-documents)
foreach(chaînedocDefNamedansdocDefs)
{
Liste<int>indexList=nouvelleListe<int>();
foreach(IBatchItemitminbatch)
if(itm.Type==TBatchItemType.BIT_Document)
if(itm.AsDocument.DefinitionName==docDefName)indexList.Add(itm.Index);
for(inti=0;i<indexList.Count;i++)
batch.Move(batch[indexList[i]-i],batch.Count);
}
// Recherche de toutes les options de champs clés dans le lot
foreach(IBatchItemitminbatch)
{
if(itm.Type==TBatchItemType.BIT_Document)
{
chaînekeyFieldValue=(chaîne)itm.AsDocument.IndexedItemValue(keyFieldName) ;
if(!keyFields.Contains(keyFieldValue))
keyFields.Add(keyFieldValue) ;
}
}
// Assemblage de documents avec le même champ clé
foreach(chaînekeyFieldValuedanskeyFields)
{
Liste<int>indexList=nouvelleListe<int>();
foreach(IBatchItemitminbatch)
if(itm.Type==TBatchItemType.BIT_Document)
if((chaîne)itm.AsDocument.IndexedItemValue(keyFieldName)==keyFieldValue)indexList.Add(itm.Index);
for(inti=0;i<indexList.Count;i++)
batch.Move(batch[indexList[i]-i],batch.Count);
}
// Déplacement de sous-documents dans des ensembles uniquement si les champs clés correspondent
// (définit les sections en premier, les documents enfants en second)
intind=0;
tandis que(ind<batch.Count)
{
if(batch[ind].Type==TBatchItemType.BIT_Document)
// Recherche du début de l'ensemble
if(lot[ind].AsDocument.DefinitionName==docDefs[0])
// Si un document après l'ensemble n'est pas un ensemble et que les champs clés correspondent,
// nous l'ajoutons à cet ensemble
while(ind+1<batch.Count&&
lot[ind+1].AsDocument.DefinitionName!=docDefs[0]&&
(string)lot[ind+1].AsDocument.IndexedItemValue(keyFieldName)==(chaîne)lot[ind].AsDocument.IndexedItemValue(keyFieldName))
lot[ind].ChildItems.Move(batch[ind+1],lot[ind].ChildItems.Count);
ind++;
}