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.
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:
?estate[Id]=...)Das ist das einfachere der beiden Formulare. Es enthält:
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.
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:
_ifEmpty(_Name;"Kein X verbunden";"...") — falls noch kein Datensatz verknüpft ist, eine sinnvolle Meldung anzeigen_buyerbrek_1_ (Buyer-Begin-Recursion) bzw. _ownerbrek_1_ (Owner-Begin-Recursion)_BuyerVorname, _BuyerName, _BuyerStrasse, plus ein „Adresse bearbeiten"-Link mit der UUID_buyererek_1_ bzw. _ownererek_1__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_OwnerUuidaddress (UUID des aktuellen Eigentümers in der 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>
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.
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.
_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";"...");"...")
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.
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.
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_.
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.
_Buyer*, _Owner*, _Eigent*, _Kaeufer*