👥 Mehrere Datensätze mit einem Formular verbinden

Manchmal reicht ein einzelnes Käufer-/Eigentümer-Feld nicht: Notarbeauftragungen brauchen mehrere Käufer, Erbengemeinschaften haben mehrere Eigentümer, beim Notar gibt es noch eine Verwaltung dazu. propform hat dafür ein Pattern aus zwei Formularen plus rekursiven Adress-Schleifen-Makros.


Inhalt


Konzept: Übersicht + Bearbeitung

Du baust zwei Formulare, die zusammenspielen:

Formular Zweck
Übersichts-Formular Zeigt aktuell verknüpfte Käufer/Eigentümer/Notare einer Immobilie an, mit „Bearbeiten"- und „Weiteren verbinden"-Buttons
Bearbeitungs-Formular Pro Personen-Typ ein Formular mit den Adressfeldern; speichert die Adresse und verknüpft sie automatisch mit der Immobilie

Workflow für den User:

  1. Übersichts-Formular wird geöffnet (mit ?estate[Id]=...)
  2. Aktuelle Verknüpfungen werden über die Schleifen-Makros aufgelistet
  3. Klick auf „(Weiteren) Käufer verbinden" → öffnet das Bearbeitungs-Formular ohne Adress-ID → neue Adresse wird angelegt und verknüpft
  4. Klick auf „Adresse bearbeiten" → öffnet das Bearbeitungs-Formular mit Adress-ID → bestehende Adresse wird editiert
  5. Bearbeitungs-Formular hat das Übersichts-Formular als Danke-Seite → User kommt automatisch zur aktualisierten Übersicht zurück

Schritt 1: Bearbeitungs-Formular bauen

Das ist das einfachere der beiden Formulare. Es enthält:

  • Adressfelder (Anrede, Vorname, Name, Straße, PLZ, Ort, Telefon, E-Mail …)
  • Formulareinstellung: „Immobilie und Adresse verbinden" als Käufer, Eigentümer oder über eine Kontaktart (z.B. Notar, Verwaltung)
  • Danke-Seite = URL des Übersichts-Formulars (z.B. https://formular.deine-domain.de/notarbeauftragung-uebersicht?estate[Id]=_Uuidestate)

💡 Tipp: Du brauchst pro Personen-Typ ein eigenes Bearbeitungs-Formular (also je eines für Käufer, Eigentümer, Notar, Verwaltung), weil jedes eine andere Verknüpfungs-Logik hat.

💡 Vereinfachung: Wenn die Bearbeitungs-Formulare alle das gleiche Layout haben, kannst du sie über die „Formular kopieren"-Funktion erzeugen und nur die Verknüpfungseinstellung anpassen.


Schritt 2: Übersichts-Formular bauen

Das Übersichts-Formular besteht aus einem einzigen Beschreibungs-Feld, in dem die Schleifen-Makros stehen. Die Felder werden komplett über Makros aus onOffice befüllt.

Wichtige Bestandteile pro Schleife:

  1. _ifEmpty(_Name;"Kein X verbunden";"...") — falls noch kein Datensatz verknüpft ist, eine sinnvolle Meldung anzeigen
  2. Schleifen-Anfang _buyerbrek_1_ (Buyer-Begin-Recursion) bzw. _ownerbrek_1_ (Owner-Begin-Recursion)
  3. Inhalt der Schleife — Pre-Makros wie _BuyerVorname, _BuyerName, _BuyerStrasse, plus ein „Adresse bearbeiten"-Link mit der UUID
  4. Schleifen-Ende _buyererek_1_ bzw. _ownererek_1_
  5. „Weiteren verbinden"-Link außerhalb der Schleife (öffnet das Bearbeitungs-Formular ohne Adress-ID)

Code-Beispiel: Eigentümer-Schleife

_ifEmpty(_EigentName;"Kein Eigentümer verbunden";"_ownerbrek_1_
_OwnerTitel _OwnerVorname _OwnerName _ifEmpty(_OwnerName2;"";", _OwnerTitel2 _OwnerVorname2 _OwnerName2")
_OwnerStrasse
_OwnerPLZ _OwnerOrt
_OwnerTelefon, _OwnerEmail
<a href='https://formular.deine-domain.de/eigentuemer-bearbeiten?address[ID]=_OwnerUuidaddress&estate[Id]=_Uuidestate'>Adresse bearbeiten</a>

_ownererek_1_")
<a href="https://formular.deine-domain.de/eigentuemer-bearbeiten?estate[Id]=_Uuidestate">(Weiteren) Eigentümer verbinden</a>

Was passiert:

  • _EigentName (Standard-onOffice-Makro) prüft, ob überhaupt ein Eigentümer verknüpft ist
  • _ownerbrek_1_ ... _ownererek_1_ durchläuft alle verknüpften Eigentümer
  • Pro Eigentümer werden Titel/Vorname/Name/Adresse/Kontakt ausgegeben + ein „Adresse bearbeiten"-Link mit _OwnerUuidaddress (UUID des aktuellen Eigentümers in der Schleife)
  • Außerhalb der Schleife steht ein „(Weiteren) Eigentümer verbinden"-Link ohne Adress-ID → legt eine neue Adresse an

Code-Beispiel: Käufer-Schleife

Genau dasselbe Muster wie bei Eigentümern, nur mit buyer statt owner und _Buyer*-Pre-Makros statt _Owner*:

_ifEmpty(_KaeuferName;"Kein Käufer verbunden";"_buyerbrek_1_
_BuyerTitel _BuyerVorname _BuyerName _ifEmpty(_BuyerName2;"";", _BuyerTitel2 _BuyerVorname2 _BuyerName2")
_BuyerStrasse
_BuyerPLZ _BuyerOrt
_BuyerTelefon, _BuyerEmail
<a href='https://formular.deine-domain.de/kaeufer-bearbeiten?address[ID]=_BuyerUuidaddress&estate[Id]=_Uuidestate'>Adresse bearbeiten</a>

_buyererek_1_")
<a href="https://formular.deine-domain.de/kaeufer-bearbeiten?estate[Id]=_Uuidestate">(Weiteren) Käufer verbinden</a>

Code-Beispiel: Bestimmte Kontaktart (Notar, Verwaltung etc.)

Wenn du nicht alle verknüpften Adressen einer Kontaktart durchlaufen, sondern direkt eine bestimmte Kontaktart ausgeben willst (z.B. „den Notar dieser Immobilie"), nutzt du das _XAPKontaktart#NAME#-Makro:

_ifEmpty(_XAPKontaktart#Notar#Name;"Kein Notariat verbunden
<a href='https://formular.deine-domain.de/notar-verbinden?estate[Id]=_Uuidestate'>Jetzt Notar verbinden</a>";"
_XAPKontaktart#Notar#Firma1
_XAPKontaktart#Notar#Vorname _XAPKontaktart#Notar#Name
_XAPKontaktart#Notar#Strasse, _XAPKontaktart#Notar#PLZ _XAPKontaktart#Notar#Ort
_XAPKontaktart#Notar#Telefon
_XAPKontaktart#Notar#Email
<a href='https://formular.deine-domain.de/notar-bearbeiten?address[ID]=_XAPKontaktart#Notar#Uuidaddress&estate[Id]=_Uuidestate'>Adresse bearbeiten</a>")

Notar ist hier der Name der Kontaktart-Option in onOffice. Bei eigenen Kontaktart-Werten musst du den exakten Schlüsselwert verwenden, z.B.:

_XAPKontaktart#indMulti28075Select28075#Name

💡 Den Schlüsselwert findest du in onOffice unter Extras → Einstellungen → Administration → Adressen → Feld „Kontaktart" → bei der jeweiligen Option.


Vollständiges Notarbeauftragungs-Beispiel

Ein typisches Notarbeauftragungs-Übersichts-Formular kombiniert alle Schleifen + Kontaktarten in einem Beschreibungs-Feld:

**Eigentümer**

_ifEmpty(_EigentName;"Kein Eigentümer verbunden";"_ownerbrek_1_
_OwnerTitel _OwnerVorname _OwnerName _ifEmpty(_OwnerName2;"";", _OwnerTitel2 _OwnerVorname2 _OwnerName2")
_OwnerStrasse
_OwnerPLZ _OwnerOrt
_OwnerTelefon, _OwnerEmail
<a href='https://formular.deine-domain.de/notarbeauftragung-adresse-bearbeiten?address[ID]=_OwnerUuidaddress&estate[Id]=_Uuidestate'>Adresse bearbeiten</a>

_ownererek_1_")
<a href="https://formular.deine-domain.de/notarbeauftragung-eigentuemer-verbinden?estate[Id]=_Uuidestate">(Weiteren) Eigentümer verbinden</a>

---

**Käufer**

_ifEmpty(_KaeuferName;"Kein Käufer verbunden";"_buyerbrek_1_
_BuyerTitel _BuyerVorname _BuyerName _ifEmpty(_BuyerName2;"";", _BuyerTitel2 _BuyerVorname2 _BuyerName2")
_BuyerStrasse
_BuyerPLZ _BuyerOrt
_BuyerTelefon, _BuyerEmail
<a href='https://formular.deine-domain.de/notarbeauftragung-adresse-bearbeiten?address[ID]=_BuyerUuidaddress&estate[Id]=_Uuidestate'>Adresse bearbeiten</a>

_buyererek_1_")
<a href="https://formular.deine-domain.de/notarbeauftragung-kaeufer-verbinden?estate[Id]=_Uuidestate">(Weiteren) Käufer verbinden</a>

---

**Notariat**

_ifEmpty(_XAPKontaktart#Notar#Name;"Kein Notariat verbunden
<a href='https://formular.deine-domain.de/notarbeauftragung-notar-verbinden?estate[Id]=_Uuidestate'>Jetzt Notar verbinden</a>";"
_XAPKontaktart#Notar#Firma1
_XAPKontaktart#Notar#Vorname _XAPKontaktart#Notar#Name
_XAPKontaktart#Notar#Strasse, _XAPKontaktart#Notar#PLZ _XAPKontaktart#Notar#Ort
_XAPKontaktart#Notar#Telefon
_XAPKontaktart#Notar#Email
<a href='https://formular.deine-domain.de/notarbeauftragung-adresse-bearbeiten?address[ID]=_XAPKontaktart#Notar#Uuidaddress&estate[Id]=_Uuidestate'>Adresse bearbeiten</a>")

→ Der User sieht nach dem Aufruf eine saubere Übersicht aller verknüpften Personen + jeweils Buttons zum Bearbeiten oder zum Hinzufügen weiterer Personen.


Häufige Stolperfallen

Firma als Eigentümer/Käufer wird als „leer" erkannt

_ifEmpty(_EigentName;...) prüft nur den Nachnamen. Bei Firmen-Datensätzen ist _EigentName häufig leer und nur _EigentZusatz1 (Firmenname) ist gefüllt. Lösung: Prüfung um Zusatz1 ergänzen, z.B.:

_ifEmpty(_EigentName;_ifEmpty(_EigentZusatz1;"Kein Eigentümer verbunden";"...");"...")

Stammdaten 2 nicht aktiviert

Die Felder _OwnerName2, _OwnerStrasse2, _OwnerPLZ2 etc. (Zweit-Adresse innerhalb eines Datensatzes) sind in vielen onOffice-Versionen nicht standardmäßig aktiviert. Wenn deine Schleife darauf zugreift und es nichts anzeigt, prüfe in onOffice unter Extras → Einstellungen → Administration → Adressen, ob die Stammdaten-2-Felder aktiviert sind.

Link wird nicht aufgelöst

HTML-Links im Beschreibungs-Feld funktionieren, aber die Anführungszeichen müssen entweder einfache ' ODER doppelte " sein — nicht gemischt im selben Element. Das verschachtelte _ifEmpty(...; ""; "...") zwingt dich oft, die HTML-Attribute mit ' zu schreiben.

Mehrere Schleifen gleichzeitig

Du kannst die _buyerbrek_1_/_buyererek_1_ und _ownerbrek_1_/_ownererek_1_-Schleifen problemlos im selben Beschreibungs-Feld kombinieren. Die _1_ ist ein interner Zähler — wenn du mehrere Buyer-Schleifen in einem Feld brauchst (selten), erhöhst du die Zahl: _buyerbrek_2_, _buyererek_2_.

Bearbeitungs-Formular legt Adresse zweimal an

Wenn die Adresse beim zweiten Submit dupliziert wird statt aktualisiert: Der address[ID]-Parameter ist nicht angekommen oder das Formular ist nicht auf „Adresse vorausfüllen" konfiguriert. Prüfe die Vorausfüllungs-Einstellungen.


Verwandt