Zum Hauptinhalt springen

Beschreibung

Eine Sammlung von IBatchItem. Hinweis. 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: Diese Methode wird für die Sammlung aufgerufen, in der das Element verschoben werden soll.

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

Eigenschaften

NameTypZugriffName
CountintSchreibgeschütztDie Anzahl der Elemente in der Sammlung

Beispiel für die Move-Methode

Das Skript führt mehrere aufeinanderfolgende Szenarien aus, aus denen ein Skript zum Zusammenstellen von Sets aus unsortierten Dokumentlisten entsteht:
  • Zerlegt Sets
  • Gruppiert Dokumente nach Typ in der angegebenen Reihenfolge
  • Gruppiert Dokumente nach dem angegebenen Schlüsselfeld
  • Stellt Dokumente mit demselben Schlüsselfeld zu Sets zusammen
using System.Collections.Generic;
IBatchItems batch = Batch.AsBatchItem.ChildItems;
List<string> docDefs = new List<string> {"DocSet","Doc1","Doc2"}; // Reihenfolge der Dokumentzusammenstellung
// Name des Schlüsselfelds
// (das Feld sollte in allen Dokumenten indiziert sein und denselben Namen haben)
string keyFieldName = "SSN"; 
List<string> keyFields = new List<string>();
// Zerlegen von Sets
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 die Reihenfolge sortieren, in der sie im Set stehen sollen
// (d. h. zuerst das Set selbst, gefolgt von allen zugehörigen Unterdokumenten)
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);
}
// Nach allen Werten der Schlüsselfelder 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 Schlüsselfeld 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);
}
// Unterdokumente nur dann in Sets verschieben, wenn die Schlüsselfelder übereinstimmen
// (zuerst die Set-Abschnitte, dann die untergeordneten Dokumente)
int ind = 0;
while (ind < batch.Count)
{
    if (batch[ind].Type == TBatchItemType.BIT_Document)
// Nach dem Anfang des Sets suchen
        if (batch[ind].AsDocument.DefinitionName == docDefs[0])
            // Wenn ein Dokument nach dem Set selbst kein Set ist und die Schlüsselfelder übereinstimmen,
            // fügen wir es diesem Set hinzu
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++;
}
Laden Sie das Beispiel hier herunter: Sample_IBatchItems_Move.zip