Zum Hauptinhalt springen

Beschreibung

Eine Sammlung von IBatchItem.
Dieses Objekt ist in der Web-Verifizierungsstation für die lokale Regelprüfung nicht verfügbar.

Methoden

Definition

Beschreibung

Move(item : IBatchItem, position : int)

Verschiebt das Element an die angegebene Position in der Sammlung.

Hinweis: Rufen Sie diese Methode für die Sammlung auf, in der das Element verschoben werden soll.

Hinweis: Der Parameter position kann Werte von 0 bis zur Größe der Sammlung annehmen.

Eigenschaften

NameTypZugriffBeschreibung
CountintSchreibgeschütztDie Anzahl der Elemente in der Sammlung

Beispiel für die Methode Move

Dieses Skript führt mehrere aufeinanderfolgende Szenarien aus, um aus unsortierten Dokumentlisten Dokumentensätze zu bilden:
  • Zerlegt Dokumentensätze
  • Gruppiert Dokumente in der angegebenen Reihenfolge nach Typ
  • Gruppiert Dokumente nach dem angegebenen wichtigen Feld
  • Fasst Dokumente mit demselben wichtigen Feld zu Dokumentensätzen zusammen
using System.Collections.Generic;
IBatchItems batch = Batch.AsBatchItem.ChildItems;
List<string> docDefs = new List<string> {"DocSet","Doc1","Doc2"}; // Reihenfolge der Dokumentenzusammenstellung
// Name des wichtigen Felds
// (das Feld muss in allen Dokumenten indiziert sein und denselben Namen haben)
string keyFieldName = "SSN";
List<string> keyFields = new List<string>();
// Dokumentensätze auflösen
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);
// Dokumente in der Reihenfolge sortieren, in der sie im Dokumentensatz erscheinen sollen
// (d. h. zuerst der Dokumentensatz selbst, dann alle untergeordneten Dokumente)
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);
}
// Alle Ausprägungen der wichtigen Felder im Batch suchen
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);
    }
}
// Dokumente mit demselben wichtigen Feld zusammenstellen
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);
}
// Untergeordnete Dokumente nur dann in Dokumentensätze verschieben, wenn die wichtigen Felder übereinstimmen
// (zuerst die Abschnitte des Dokumentensatzes, dann die untergeordneten Dokumente)
int ind = 0;
while (ind < batch.Count)
{
    if (batch[ind].Type == TBatchItemType.BIT_Document)
        // Anfang des Dokumentensatzes suchen
        if (batch[ind].AsDocument.DefinitionName == docDefs[0])
            // Wenn das auf den Dokumentensatz folgende Dokument kein Dokumentensatz ist und die wichtigen Felder übereinstimmen,
            // wird es diesem Dokumentensatz hinzugefügt
            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++;
}