Verwaltung der Suchbehälter (Komplexe Suchen)
Einführung
Die Suchbehälter (früher bezeichnet als Komplexe Suchen) dienen der Selektion von Daten aus der Anwendung. Sie werden in vielen Bereichen eingesetzt, vor allem dienen sie dazu, den über Schnittstellen angebundenen Anwendungen Daten zu liefern: so erhalten Word-Dokumente, Excel-Sheets und Jasper-Report ihre Daten über solche Suchbehälter.
Der Aufbau der Suchbehälter in der Form "1 Hauptsuche ist verknüpft mit n Untersuchen" wurde aus folgenden Gründen gewählt:
Übersichtlichkeit: Jede der Teilsuchen kann unabhängig von den anderen Teilsuchen bereichsbezogen Daten selektieren.
Einfache Ausführung komplexer Suchanfragen: In einem Schritt werden mehrere Suchen sequentiell ausgeführt. Hierbei werden die Selektionsergebnisse einzelner Suchen in den nachfolgenden Suchen als Selektionskriterium verwendet. Das Ergebnis ist ein gemischter Datensatz, der sich aus den Selektionsergebnisfeldern aller Suchen zusammensetzt.
Abbildung eines 'OuterJoin' möglich: Auch wenn in einer der Teilsuchen keine Daten gefunden werden, wird ein Ergebnisdatensatz ermittelt. Die Selektionsergebnisfelder der erfolglosen Teilsuche bleiben einfach leer.
Die Konfiguration der Komplexen Suchen erfolgt im Knoten Verwaltung Suchbehälter.
Abbildung: Dokumentensuche QUOTE
Jeder Suchebehälter kann einer Kategorie zugeordnet werden. Eine solche Zuordnung bewirkt, dass in dem entsprechenden Administrationsbereich nur die Suchbehälter zur Auswahl stehen, die ihm über die passende Kategorie zugeordnet sind.
Struktur der Suchbehälter
Ein Suchbehälter kann aus beliebig vielen Teilsuchen bestehen. Eine solche Sammlung von Suchen muss natürlich in eine Ordnungsstruktur gebracht werden. Dazu dient der Eintrag in der Spalte "Typ". Je nach Kategorie des Suchbehälters stehen unterschiedliche Typen von Teilsuchen zur Verfügung.
Kategorie Suchtyp | Hauptsuche | Detailsuche | Tabellensuche | Union | Union All |
---|---|---|---|---|---|
EInzelbriefe | |||||
LETTER | x | x | x | ||
ILETTER | x | x | x | ||
QUOTE | x | x | x | ||
CONTRACT | x | x | x | ||
Serienaktionen | |||||
SERIALLETTER | x | x | |||
SERIALMAIL | x | x | |||
MASSDATA | x | x | |||
Sonstige | |||||
x | |||||
REPORT | x | x | |||
EXPORT* | x | x | x | ||
TAPI | x | x | |||
SYNCHRONISATION | x | x | x | x | |
? | x | x | x | x |
*Dies bezieht sich ausschließlich auf einen Export, welcher über das Menü Auswertungen\Excel-Export aufgerufen wird. Ein Export über das Maskenskript bzw. BPM ist nur bei Verwendung eines Suchbehälters mit einer Hauptsuche möglich.
Am Beispiel der Einzelbriefe werden im folgenden die drei wichtigsten Suchtypen vorgestellt.
Hier stehen die drei möglichen Suchtypen Hauptsuche, Detailsuche und Tabellensuche zur Verfügung. Dabei gilt eine grundsätzliche Vorgabe: die erste Suche in der Reihenfolge (und auch nur diese) erhält den Typ Hauptsuche.
Suchtyp Hauptsuche
Der Typ "Hauptsuche" erhebt die so eingestellte Suche über die anderen Suche. Mit ihr ist - im Standardfall - jede der anderen Teilsuche verknüpft. Daraus ergibt sich eine zweistufige Hierachie: die Hauptsuche steht in der oberen Ebene, die anderen Suchen gleichrangig in der unteren Ebene. Die Hauptsuche weist im Vergleich zu den anderen Suchen drei Besonderheiten auf:
Ihre Suchmaske wird dem Anwender bei Serienaktionen und Auswertungen angezeigt, damit er die Ergebnismenge einschränken kann. Dem Anwender stehen also nur die Felder dieser Suche als Eingabefelder zur Verfügung.
Die Hauptsuche ist die einzige Suche im Suchbehälter, die zum Zeitpunkt der Ausführung Informationen aus der Anwendung entgegennehmen kann. Diese Informationen werden als Parameter an die Suche übergeben. Die Suche kann sie dann zum Einschränken der Selektion verwenden oder auch als eigene Ausgabeparameter an die anderen Teilsuchen weiterreichen.
Die Hauptsuche kann als einzige Suche Werte für die anderen Suchen zur Verfügung stellen. Dies geschieht über die Ausgabeparameter. (Eine Ausnahme stellt hier nur der Fall dar, dass bei Suchbehältern vom Typ "QUOTE" eine Tabellensuche mit einer Detailsuche verknüpft wird, um zu einem Eintrag in der Angebotstabelle weitere Infos zu erhalten, etwa ein Bild des angebotenen Gegenstandes.)
Suchtyp Detailsuche
Eine Detailsuche ist eine erweiterte Suche, die über die Eingabe- / Ausgabeparameter mit der Hauptsuche (oder im oben beschriebenen Spezialfall auch mit einer Tabellensuche) verknüpft ist.
Detailsuchen werden meistens für die Selektion von Daten aus anderen Entitäten verwendet. Folgende Besonderheiten gelten bei Detailsuchen:
die Verknüpfung zur Hauptsuche erfolgt über eine OuterJoin-Verlinkung. Das bedeutet: auch wenn eine oder mehrere Detailsuchen keine Daten selektieren, wird ein Ergebnis auf Basis der anderen erfolgreichen Suchen ermittelt. Die Selektionsergebnisfelder der erfolglosen Detailsuchen bleiben in diesem Fall leer. Beispiel: Wird in einer Detailsuche der Ansprechpartner zu einem Kunden in der Hauptsuche selektiert, so wird das Selektionsergebnis immer erfolgreich sein, auch wenn kein Ansprechpartner zu dem Kunden existiert.
Wiederverwendbarkeit: Oft möchte man bei der Selektion von Daten aus einer Entität mehrfach die gleichen Felder verwenden. Das ist etwa der Fall, wenn man in einem Brief mehrere Mitarbeiter ausgeben möchte: den Mitarbeiter Inndendienst, den Mitarbeiter Aussendienst und den eingeloggten Mitarbeiter. Dazu kann eine Detailsuche "Mitarbeiter" mehrfach in den Suchbehälter aufgenommen werden. Sie wird dann über die Ausgabeparamter mit dem jeweils passenden Feld in der Hauptsuche verknüpft.
Übersichtlichkeit: Durch die Aufteilung einer Abfrage über viele Bereiche in mehrere Detailsuchen bleibt der Suchbehälter übersichtlich.
Suchtyp Tabellensuche
Die Tabellensuche dient der Selektion von Daten, die in einem Einzelbrief-Dokument (Angebot, Vertrag, Einzelbrief) oder in einem Report in Form einer Tabelle dargestellt werden. So lassen sich zum Beispiel alle Angebotspositionen in Form einer Tabelle in einem Angebotsdokument ausgeben. Im Standardfall wird die Tabellensuche mit der Hauptsuche über die Eingabe- und Ausgabeparameter verknüpft. Im Beispiel erhielte die Tabellensuche als Eingabeparameter die Angebotsnummer, zu der sie die Positionen liefern soll. (Im Falle, dass die Tabellensuche mit der Hauptsuche nicht verknüpft ist, werden alle selektierten Daten dieser Tabellensuche in dem Dokument ausgegeben. Eine solche Verknüpfung dürfte eher die Ausnahme sein.)
Vorgehen bei der Erstellung eines Suchbehälters
Als einfachsten Weg nimmt man als Grundlage für einen neuen Suchbehälter einen bereits vorliegenden und legt über den Schalter Kopieren in der oberen Symbolleiste eine Kopie an. Dabei wird der Suchbehälter mit allen Teilsuchen komplett kopiert. Änderungen an den so entstandenen neuen Teilsuchen wirken sich nicht auf die Originalsuche aus.
Soll ein Suchbehälter komplett neu erstellt werden, sind die folgenden Schritte durchzuführen:
In der Konzeptionsphase führt man eine gedankliche Gruppierung der gewünschten Suchergebnisse nach Entitäten oder inhaltlich eigenständigen Einheiten durch. Jeder dieser Gruppen entspricht hierbei einer Suche.
Neuanlage des Suchbehälters unter einem eindeutigen Namen über den gleichnamigen Schalter.
Erstellen oder Hinzufügen der Teilsuche(n). Der kleinste Suchbehälter besteht aus einer einzigen Suche, die den Typ "Hauptsuche erhält". Sie benötigt keine Ausgabeparameter, da es keine zu verknüpfenden Suchen gibt.
Hauptsuche mit der Sequenznummer 1 definieren. Diese Suche erhält den Typ Hauptsuche.
Wahlweise Definition von Detailsuchen. Es können beliebig viele Detailsuchen definiert werden.
Wahlweise Definition von Tabellensuchen. Es können beliebig viele Tabellensuchen definiert werden. Im Regelfall wird die Tabellensuche mit der Hauptsuche verknüpft, dies ist aber nicht unbedingt erforderlich.
Die hinzugefügten Suchen müssen über die Eingabe- /Ausgabeparameter miteinander verknüpft werden.
Speichern des neuen Suchbehälters mit automatischer Validierung.
Es besteht die Möglichkeit, die Teilsuchen manuell als XML-Beschreibung anzulegen und diese über die Administrationskonsole (Knoten Suche / Import von Komplexen Suchen) zu importieren. Siehe dazu die Hinweise zum Erzeugen von erweiterten Suchen.
Verknüpfung der Teilsuchen
Sobald der Suchbehälter aus mehr als einer Teilsuche besteht, stellt sich die Aufgabe, diese Suchen miteinander zu verknüpfen. Die Anwendung setzt solche Verknüpfungen voraus: Ein Suchbehälter, der eine unverknüpfte Detailsuche enthält, lässt sich nicht speichern. Folgende Verknüpfungen der Teilsuchen sind möglich:
Hauptsuche mit Detailsuche
Hauptsuche mit Tabellensuche
Tabellensuche mit Detailsuche (der oben beschriebene Ausnahmefall bei Suchbehältern vom Typ "QUOTE")
Eine Verknüpfung in der Form "Detailsuche mit Detailsuche" ist nicht möglich.
Bei einer Verknüpfung sprechen wir von einer führenden und einer abhängigen Suche. Die führende Suche gibt ihre Verknüpfungsinformation über einen Ausgabeparameter weiter, den die abhängige Suche über ihren Eingabeparameter entgegennimmt. In einem Suchbehälter ist die Hauptsuche immer die führende Suche. Sie liefert den Ausgabeparameter, den die Detailsuche als abhängige Suche entgegennimmt.
Der folgende Text beschreibt den Standardfall "Hauptsuche mit Detailsuche". (Aus den Erläuterungen kann man den Ausnahmefall entsprechend ableiten.) Als Beispiel legen wir folgendes fest: In der Hauptsuche wird ein Geschäftspartner selektiert. zu diesem soll in einer Detailsuche der Mitarbeiter Innendienst gefunden werden. Beide Suchen liegen als Teilsuchen vor. Somit ergibt sich für unser Beispiel folgende Vorgehensweise:
Das Feld "Mitarbeiter Innendienst" muss in unserer Hauptsuche vorhanden sein. Zudem muss in seinem Eigenschaftendialog der Haken bei "Aufnahme in die Selektionsergebnismenge" gesetzt sein.
Durch einen Doppelklick auf das Feld "Ausgabeparameter" in der Hautsuche öffnen man den entsprechenden Dialog. Man wählt dann nach dem Klick auf "Hinzufügen" aus der in der linken Spalte angezeigten Liste das Feld "Mitarbeiter Innendienst". In der rechten Spalte trägt man ein Namen für den neuen Ausgabeparameter ein. Im Beispiel nennen wir den neuen Parameter "MIT_ID". Anschließend schließt man den Dialog.
Nun wendet man sich der Detailsuche zum Mitarbeiter zu. hier muss man zwei Aktionen durchführen: ein Feld in der Suche für die Entgegennahme des Ausgabeparameters vorbereiten (Schritt 4) und dann die Verknüpfung in der Spalte "Eingabeparameter" eintragen (Schritt 4).
In unserem Beispiel erhalten wir ja den Mitarbeiter Innendienst als Ausgabeparameter. Allerdings: was genau erhalten wir? Das Kürzel des Mitarbeiters oder seinen Namen? Überraschenderweise ist es ein Wert, der in der Regel im Hintergrund bleibt: der Primärschlüssel. Dieser wird bei solchen Nachschlagefeldern eigentlich hinterlegt. Er wird automatisch auf der Maske durch ein besser verständliches Feld ersetzt (hier das Mitarbeiterkürzel). In der Detailsuche müssen wir hierauf nun Rücksicht nehmen. Wir tun dies, indem wir in diese Suche das Feld "Primärschlüssel" aufnehmen. Auch hier vergeben wir den Haken bei "Aufnahme in die Selektionsergebnismenge".
Nun müssen wir dieses Feld "Primärschlüssel" noch in einen Zustand bringen, in welchem es mit dem Ausgabeparameter "MIT_ID" verglichen werden kann.Dazu wählen wir die Bedingung "Ist einer von". Aus der angebotenen Liste der Parameterwerte wählen wir "Platzhalter (wird zur Laufzeit gesetzt)" und nehmen ihn durch Eingabe voon <RETURN> in die Liste auf. Danach schliessen wir den Dialog.Als letzten Schritt der Verknüpfung legen wir bei der Detailsuche nun einen Eingabeparameter an. Da klicken wir auf doppelt auf des Feld Eingabeparameter. Nach dem Klick auf "Hinzufügen" wählen wir auin der linken Spalte aus der Liste den einzig angebotenen Wert: das Feld "Primärschlüssel". Dies steht hier aufgrund der unter 4 vorgenommenen Einstellung "Ist einer von" - "Platzhalter (wird zur Lauftzeit gesetzt)".
In der rechten Spalte wählen wir aus der Liste den passenden Ausgabeparameter aus der Hauotsuche: hier den Wert "MIT_ID". Nach dem Schließen des Dialogs sind die notwendigen Aktionen durchgeführt. Die Suche kann nun gespeichert werden.
Es lässt sich also zusammenfassen: die Hauptsuche stellt die Ausgabeparameter zur Verfügung, die dann von den abhängigen Teilsuchen als Kriterien (Eingabeparameter) verwendet werden. (Gleiches gilt für die Verknüpfung zwischen Tabellensuche – Detailsuche.) Parametern sind also Variablen, in denen das Selektionsergebnis einzelner Felder einer Suche zwischengespeichert wird. In der führenden Suche werden in der Spalte Ausgabeparameter die Ausgabeparameter definiert. In der abhängigen Suche können diese Ausgabeparameter in der Spalte Eingabeparameter verwendet werden. Hier erfolgt die Zuordnung des Ausgabeparameters zu einem Feld der abhängigen Suche.
Eingabeparameter für die Hauptsuche
Das eben gesagte betrifft die Verknüpfung der Suchen untereinander. Das gleiche Verfahren wird aber auch verwendet, wenn es darum geht, welche Daten die Hauptsuche finden soll. Während bei Reports und Serienbriefe der Anwender ja direkt über die Suchmaske nach den Bedingungen für die Datenseletion gefragt wird, kommen bei Einzelbriefen die passenden Daten "automatisch" im Schreiben an. Hier wird also im Hintergrund das passende Selektionskriterium in einer bestimmten Form "durch die Anwendung eingegeben." Für diese Selektion werden ebenfalls Parameter genutzt, die an die Hauptsuche gereicht werden.
An einem Suchbehälter für Einzelbriefvorlagen lässt sich dies schön darstellen: bei solchen Einzelbriefsuchen basiert die Hauptsuche auf der Entität "Aktivitäten". Da nun diese Hauptsuche als abhängige Suche fungiert, muss man bei ihr die Schritte durchführen, die oben unter Schritt 4 und 5 für die Detailsuche aufgeführt wurden:
Man muss das Feld "Primärschlüssel" aus der Entität Aktivitäten aufnehmen, wieder mit dem Haken bei "Aufnahme in die Selektionsergebnismenge" und der Bedingung "Ist einer von" - "Platzhalter (wird zur Lauftzeit gesetzt)".
Danach geht man bei der Hauptsuche in die Spalte "Eingabeparameter" und wählt wie oben beschrieben in der linken Spalte dieses Feld aus. In der rechten Spalte nun erhält man eine Liste mit Parametern, die man nicht selbst hinterlegt hat, sondern die von der Anwendung zur Verfügung gestellt werden: diese lauten unter anderem PK, PARENTPK, PKCOPE, USERPK...Für unsere Suche ist der Eintrag PK der richtige Wert. Über ihn wird der Primärschlüssel der gerade geöffneten Entität übermittelt. Diese Entität ist die geöffnete Aktivität. Somit kann die Hauptsuche die Suchbedingung auf genau diese Aktivität einschränken.
Die verfügbaren Parameter haben den folgenden Inhalt:
PK: Der Wert des Primärschlüssels aus der aktuellen Entität.
Im Falle des Einzelbriefs in der Aktivität ist dies der Primärschlüssel der Aktivität.
Im Falle des Angebotsdokuments ist dies der Primärschlüssel des Angebots.
PKCOPE: Der Wert des Primärschlüssels des ausgewählten Ansprechpartners aus der Aktivität.
Hinweis
Dieser Parameter steht nur im Einzelbrief zur Verfügung.PARENTPK (Sonderfall entitätsspezifischer Einzelbrief): Der Wert des Primärschlüssels aus der übergeordneten Entität. In der Regel der Primärschlüssels der Entität, in der die Aktivität angelegt wurde, z.B. Kunde, Ansprechpartner usw. (siehe Sonderfall entitätsspezifischer Einzelbrief).
Bedingungen für die Verknüpfungen
Die Parameter PK, PARENTPK, PKCOPE sind reserviert und dürfen daher nicht als Ausgabeparameter verwendet werden.
Die Eingabeparameter müssen eindeutig sein. Das bedeutet: in der abhängigen Suche kann ein Eingabeparameter nur einmal einem Feld zugeordnet werden. Es ist also nicht möglich, ein weiteres Feld diesem Eingabeparameter ebenfalls zuzuordnen. Als Alternative hierzu könnte eine zweite Ausgabevariable mit gleichem Inhalt in der führenden Suche definiert werden.
Die Ausgabeparameter können in der Suche mehrfach verwendet werden. Das bedeutet: in der führenden Suche kann ein Ausgabeparameter mehreren Feldern gleichzeitig zugeordnet werden. Hierdurch ist es beispielsweise möglich, innerhalb des Suchbehälters mehrere Geschäftspartner zu selektieren und dem Anwender anzubieten.
Bei der Definition eines Eingabeparameters können als Variablen nur bestehende Ausgabeparameter verwendet werden (dies ist bereits in der Anwendung sichergestellt)
Bei der Definition eines Eingabeparameters können nur Felder verwendet werden, die als Platzhalter(wird zur Laufzeit gesetzt) definiert sind (dies ist bereits in der Anwendung sichergestellt)
Eingabeparameter der Hauptsuche (z.B.: PK, PARENTPK, PKCOPE) können nicht in anderen Teilsuchen verwendet werden. Ist dies gewünscht, müssen diese Eingabeparameter in der Hauptsuche als Ausgabeparameter bereitgestellt werden.
Beispiel:
Suche | Suchtyp | Ausgabeparameter | Eingabeparameter |
Suche zum Angebot | Hauptsuche | PKUnterzeichner1.Quote, PKSIGN1 | Pk.Quote, PK |
Suche zum Mitarbeiter | Detailsuche | Pk.Employee, PKSIGN1 |
Bedingungen für Suchbehälter
Es gibt genau eine Hauptsuche. Diese muss in der Liste der Suchen an erster Stelle stehen (Sequenznummer 1).
Es gibt keine oder beliebig viele Detailsuchen.
Es gibt keine oder beliebig viele Tabellensuchen.
Für jede Suche muss der Administrator einen eindeutigen Namen (Spalte Aliasname) innerhalb der Komplexen Suche vergeben.
Alle Detailsuchen müssen mit der Hauptsuche oder einer Tabellensuche verknüpft werden.
Eine Tabellensuche darf mit keiner weiteren Tabellensuche verknüpft werden. Sie kann mit der Hauptsuche verknüpft werden oder auch gar nicht verknüpft sein.
Pro Haupt- und Detailsuche sollte mind. ein Feld mit aktiviertem Attribut Anzeigen in Listen vorhanden sein. Hintergrund: Im Auswahldialog können Duplikate erscheinen, da die identifizierenden Detaildaten nicht angezeigt werden.
Die Verknüpfung der Teilsuchen erfüllt oben genannte Bedingungen.
Jedes Feld, welches das Argument Platzhalter (wird zur Laufzeit gesetzt) verwendet, muss als Eingabeparameter definiert sein.
In optionalen Suchzweigen dürfen keine Suchergebnisfelder verwendet werden.
Alle hier aufgeführten Bedingungen werden beim Speichern eines Suchbehälters im Hintergrund geprüft. Liegt ein Fehler vor, erfolgt eine Hinweismeldung. Der Suchbehälter kann erst gespeichert werden, wenn alle Kriterien erfüllt sind.
Hinweise zum Erzeugen von Suchbehältern
Abbildung: Suchfeldattribut 'Anzeigen in Listen'
Falls die erzeugte Ergebnismenge einer erweiterten Suche mehrere Datensätze enthält, wird eine Auswahlliste eingeblendet. Diese Liste enthält nur solche Felder aus der Suche, bei denen das Attribut 'Anzeigen in Listen' gesetzt wurde.
Beispiel: Serienbrief - Dialog zur Auswahl der Adressdaten.
Bei der Erzeugung einer erweiterten Suche sollte daher das Attribut Anzeigen in Auswahllisten bei jenen Feldern aktiviert werden, die das Selektionsergebnis identifizierbar machen. Dieses Attribut kann über den Button Suche bearbeiten für die betreffenden Felder gesetzt werden.
Abbildung: Problematik bei der Erzeugung von Erweiterten Suchen über die GUI
Bei der Verknüpfung von mehreren Suchen müssen die Eingabeparameter als Platzhalter zur Laufzeit definiert werden.
Hinweise zu den Standarddokumentensuchen
Einzelbrief in der Aktivität
Das Feld Aktivität mit muss mit einem Ansprechpartner gefüllt sein. Folgende Informationen sollten im Ansprechpartner vorhanden sein:
Adresse
Abteilung bzw. Abteilung Zusatz
Anrede
Briefanrede
Serienbrief
Folgende Bedingungen gelten für die Standard-Serienbriefsuche:
Es können nur Ansprechpartner angeschrieben werden.
Jeder Ansprechpartner ist einem Geschäftspartner zugeordnet.
Beim Ansprechpartner ist das Serienbriefhäkchen gesetzt.
Der Ansprechpartner hat eine Postadresse.
Serien-E-Mail
Folgende Bedingungen gelten für die Standard-Serienemailsuche:
Es können nur Ansprechpartner angeschrieben werden.
Jeder Ansprechpartner ist einem Geschäftspartner zugeordnet.
Beim Ansprechpartner ist das Serienemailhäkchen gesetzt.
Der Ansprechpartner hat eine Email-Adresse.
Angebotserstellung
Folgende Bedingungen müssen im Angebot erfüllt sein:
Im Angebot muss der Ansprechpartner gefüllt sein. Analog zum Einzelbrief zur Aktivität sollten die oben genannten Informationen zum Ansprechpartner vorhanden sein.
Das Angebot muss einer Anfrage zugeordnet sein.
In der Anfrage muss der Hauptgeschäftspartner gefüllt sein
Folgende Felder sollten idealerweise gefüllt sein, dies ist aber nicht unbedingt notwendig:
Angebotsdatum
Angebotswert (Summe der Positionen),
Angebotswährung
Nachtext3
Das Bild für das Angebotsdokument kann im Feld Nachtext3 auf Lasche Profil ausgewählt werden.Vortext1,
Nachtext1
Wahlweise kann in den Feldern Vortext1-3, Nachtext1-2, Lieferbedingung und Zahlungsbedingung ein Textbaustein ausgewählt werden.Unterzeichner1 und Unterzeichner2 (Mitarbeiter)
Felder im Mitarbeiter: Unterschrift, Abteilung, Telefondurchwahl.
Miniserienbrief
Bereits jetzt besteht die Möglichkeit, mehrere Adressaten auszuwählen. Entsprechend viele Einzelbriefe werden erstellt und der Entität zugeordnet. Es erfolgt aber keinerlei Synchronisation zwischen den erzeugten Dokumenten. Die Änderungen müssen in jedem einzelnen Dokument manuell durchgeführt werden.