Saltar al contenido principal

Qué es

Una colección de IBatchItem.
Este objeto no está disponible en la estación web de verificación para verificar reglas localmente.

Métodos

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.

Propiedades

NameTipoAccesoDescripción
CountintDe solo lecturaNúmero de elementos de la colección

Ejemplo del método Move

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++;
}