Eine Sammlung von IBatchItem.
Dieses Objekt ist in der Web-Verifizierungsstation für die lokale Regelprüfung nicht verfügbar.
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. |
| Name | Typ | Zugriff | Beschreibung |
|---|
| Count | int | Schreibgeschützt | Die 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++;
}