Saltar al contenido principal

Qué es

Una colección de IBatchItem. Nota. 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: Este método se llama 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

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

Ejemplo del método Move

El script ejecuta varios escenarios consecutivos, cuyo resultado es un script para ensamblar conjuntos a partir de listas desordenadas de documentos:
  • Desensambla conjuntos
  • Agrupa documentos por tipo en el orden especificado
  • Agrupa documentos por el campo clave especificado
  • Ensambla documentos en conjuntos 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
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 en el orden en que deben estar en el conjunto
// (es decir, el propio conjunto 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);
}
// Buscar todos los valores posibles de los 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);
}
}
// Ensamblar 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 solo si los campos clave coinciden
// (primero las secciones del conjunto, después los documentos hijo)
int ind = 0;
while (ind < batch.Count)
{
    if (batch[ind].Type == TBatchItemType.BIT_Document)
// Buscar el inicio del conjunto
        if (batch[ind].AsDocument.DefinitionName == docDefs[0])
            // Si un documento posterior al conjunto no es un conjunto y los campos clave coinciden,
            // lo añadimos a este conjunto
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++;
}
Descargue el ejemplo aquí: Sample_IBatchItems_Move.zip