Una colección de IBatchItem.
Este objeto no está disponible en la estación web de verificación para verificar reglas localmente.
Definición | Descripción |
|---|
Move(item : IBatchItem, position : int) | Mueve el elemento a la posición especificada de la colección. Nota: Llame a este método en la colección en la que debe moverse el elemento. Nota: El parámetro position puede tomar valores desde 0 hasta el tamaño de la colección. |
| Name | Tipo | Acceso | Descripción |
|---|
| Count | int | De solo lectura | Número de elementos de la colección |
Este script ejecuta varios escenarios consecutivos para crear conjuntos de documentos a partir de listas de documentos sin clasificar:
- Desagrupa los conjuntos de documentos
- Agrupa los documentos por tipo en el orden especificado
- Agrupa los documentos por el campo clave especificado
- Agrupa los documentos en conjuntos de documentos con el mismo campo clave
using System.Collections.Generic;
IBatchItems batch = Batch.AsBatchItem.ChildItems;
List<string> docDefs = new List<string> {"DocSet","Doc1","Doc2"}; // Orden de ensamblaje de documentos
// Nombre del campo clave
// (el campo debe estar indexado en todos los documentos y tener el mismo nombre)
string keyFieldName = "SSN";
List<string> keyFields = new List<string>();
// Desensamblaje de conjuntos de documentos
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);
// Ordenar los documentos según deben aparecer en el conjunto de documentos
// (es decir, el conjunto de documentos en sí seguido de todos sus subdocumentos)
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);
}
// Búsqueda de todos los valores posibles de campos clave en el lote
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);
}
}
// Ensamblaje de documentos con el mismo campo clave
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);
}
// Mover subdocumentos a conjuntos de documentos solo si los campos clave coinciden
// (primero las secciones del conjunto de documentos, luego los documentos hijo)
int ind = 0;
while (ind < batch.Count)
{
if (batch[ind].Type == TBatchItemType.BIT_Document)
// Búsqueda del inicio del conjunto de documentos
if (batch[ind].AsDocument.DefinitionName == docDefs[0])
// Si el documento que sigue al conjunto de documentos no es un conjunto de documentos y los campos clave coinciden,
// se agrega a este conjunto de documentos
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++;
}