Makros sind Platzhalter, die zur Laufzeit durch echte Werte ersetzt werden — z.B. den Vornamen einer geladenen Adresse, die UUID einer Immobilie oder das aktuelle Datum.
| Stelle | Makros aktiv? |
|---|---|
| Formular-Überschrift / -Unterüberschrift | ✅ |
| Feld-Beschriftung, -Hinweis, -Placeholder, -Tooltip | ✅ |
| Default-Wert, Erzwungener Wert | ✅ |
| Beschreibung-Felder (Sondertyp) | ✅ — inkl. propform-Makros wie _pfButton, _pfLink |
| Aktivitäts-Bemerkung | ✅ |
| Aufgaben-Betreff & -Beschreibung | ✅ |
| E-Mail-Empfänger, CC, BCC | ✅ |
| E-Mail-Betreff & -Body | ✅ |
| Dankeseite-URL | ✅ |
| „Werte schreiben"-Zielwerte | ✅ |
| Datei-Upload-Feldname | ✅ |
| Link-Button-URL | ✅ |
| Datei-Download-Custom-Name | ✅ |
Die komplette offizielle Makro-Liste findest du in der onOffice-Hilfe.
⚠️ Achtung Schreibweise: onOffice ist inkonsistent in der Groß-/Kleinschreibung. Adress-Makros sind in der Regel CamelCase (großer erster Buchstabe), Immobilien-Makros sind klein. Halte dich genau an die offizielle Schreibweise — sonst wird das Makro nicht aufgelöst.
| Makro | Bedeutung |
|---|---|
_Name |
Nachname |
_Vorname |
Vorname |
_Email |
Standard-E-Mail-Adresse |
_Email(Art,n) |
E-Mail nach Art (geschäftlich/privat) und Position |
_Strasse |
Straße |
_PLZ |
Postleitzahl |
_Ort |
Ort/Stadt |
_Telefon |
Standard-Telefonnummer |
_AdrDatensatznummer |
Datensatznummer der Adresse |
_Uuidaddress |
UUID der Adresse |
_Sonstige1 |
Inhalt des Sonstige1-Felds |
| Makro | Bedeutung |
|---|---|
_objektart |
Objektart (Haus, Wohnung etc.) |
_objekttyp |
Objekttyp (Einfamilienhaus, Reihenhaus etc.) |
_ort |
Ort der Immobilie |
_strasse |
Straße (nur wenn im Objekt „Adressfreigabe" aktiv) |
_hausnummer |
Hausnummer (nur wenn im Objekt „Adressfreigabe" aktiv) |
_Objstrasse |
Straße — umgeht „Adresse nicht freigeben" (Trick, nur für Straße + Hausnummer) |
_Objhausnummer |
Hausnummer — umgeht „Adresse nicht freigeben" |
_plz |
Postleitzahl |
_kaufpreis |
Kaufpreis |
_wohnflaeche |
Wohnfläche |
_flaeche |
Standardfläche je Objektart |
_ObjDatensatznummer |
Datensatznummer der Immobilie |
_Uuidestate |
UUID der Immobilie |
| Makro | Bedeutung |
|---|---|
_Datum(format) |
Variables Datumsformat — _Datum(DD.MM.YYYY) |
_KDatum |
Aktuelles Datum (z.B. 26.04.2026) |
_Uhrzeit(Länge, Format, Zone) |
Aktuelle Uhrzeit |
| Makro | Beispiel | Bedeutung |
|---|---|---|
_calculate(...) |
_calculate([kaufpreis]*3) |
Mathematische Berechnung |
_ifEmpty(_makro;"Text1";"Text2") |
_ifEmpty(_Sonstige1;"Standard";_Sonstige1) |
Wenn Makro leer → Text1, sonst Text2 (auch geschrieben als _if_empty(...)) |
_if(Bedingung;"Text1";"Text2") |
_if([objektart]="haus";"Haus-Anfrage";"Andere") |
Bedingte Ausgabe |
DATEADD([feld];n;"d") |
_calculate(DATEADD(TODAY();14;"d")) |
n Tage zum Datum addieren (d/w/y) |
TODAY() |
_calculate(TODAY()) |
Heute |
💡
_ifEmptymit Benutzer-Feldern — Multi-Büro-Pattern: Wenn jeder Standort/jedes Büro einen eigenen Bewertungs-Link, Telefon-Code o.ä. hat, leg ein Custom-Feld am Benutzer an (z.B.Benutzerzusatz1Name) und nutze:_ifEmpty(_OBJBetreuer_Benutzerzusatz1Name;"https://fallback-link.de";_OBJBetreuer_Benutzerzusatz1Name)— falls der Betreuer das Feld leer hat, greift der Fallback. Kürzer und lesbarer als_calculate(IF([feld]=null;"a";"b"))für reine Empty-Checks.
| Makro | Bedeutung |
|---|---|
_UserAdr* |
Platzhalter für beliebiges Adressmakro des aktuellen Benutzers — z.B. _UserAdrName, _UserAdrEmail, _UserAdrTelefon |
_Benutzervorname / _Uservorname |
Vorname des Benutzers |
_Benutzername / _Username |
Nachname des Benutzers |
_Benutzeremail / _Useremail |
E-Mail des Benutzers |
Diese Makros gibt es nur in propform.io — nicht im normalen onOffice. Sie funktionieren in Formularen sowie in Aktivitäten, Aufgaben und E-Mails, die über propform geschrieben werden (Makro-Auflösungs-Modus „alternativ" in onOffice).
| Makro | Beschreibung |
|---|---|
_pfButton("Label", "URL", "Style", "Target") |
Voll gestylter Button im propform-Design. Styles: rounded, rounded-0, rounded-pill. Target: _parent oder _blank. |
_pfLink("URL", "Label", "Target") |
Einfacher Hyperlink. Wenn keine Beschriftung angegeben, wird die URL als Linktext verwendet. |
Beispiele:
_pfButton("Weiter zum Formular", "https://example.com", "rounded-pill", "_blank")
_pfLink("https://example.com", "Hier klicken", "_blank")
| Makro | Beschreibung |
|---|---|
_pfGetSearchCriteriaInformation |
Gibt das komplette Suchkriterium tabellarisch aus. |
_pfGetSearchCriteriaField(Feldname) |
Gibt einen einzelnen Wert aus dem Suchkriterium aus, z.B. _pfGetSearchCriteriaField(objektart) |
_pfGetSearchCriteriaUUID |
Verschlüsselte UUID des Suchkriteriums (für sichere Cross-Form-Links — z.B. in „Bearbeiten"- und „Deaktivieren"-Buttons in Übersichts-Mails) |
💡 Self-Service-Pattern für Suchprofile: Die drei Makros zusammen mit
_pfButton(...)und der Schleife_bScRek_("status:1")ergeben einen kompletten Self-Service-Workflow: Übersichts-Mail listet alle aktiven Suchprofile + 1-Klick-Buttons zum Bearbeiten/Deaktivieren. Komplettes Setup unter Suchprofile bearbeiten / deaktivieren.
| Makro | Beschreibung |
|---|---|
_dateipfadAdressfeld(<Feldname>;<Breite>;<Höhe>;<Einheit>;<Typ>) |
Bindet das Bild aus einem Adress-Datei-Feld in die PDF-Vorlage ein (typisch für Unterschriften, Ausweis-Scans) |
_dateipfadObjektfeld(<Feldname>;<Breite>;<Höhe>;<Einheit>;<Typ>) |
Analog für Immobilien-Datei-Felder |
Parameter:
unterschrift_kaeufer)400 — Standardwert für Unterschriften)variabel für Auto-Höhepx oder mmmail oder htmlBeispiel — Käufer-Unterschrift einbinden:
_dateipfadAdressfeld(unterschrift_kaeufer;400;variabel;mail;html)
Multi-Sig-Pattern für mehrere Käufer/Eigentümer:
Innerhalb der Adress-Loop-Schleife (_buyerbrek_1_ … _buyererek_1_, siehe unten) kannst du pro Käufer ein eigenes Datei-Feld mit Unterschrift einbinden. Wenn nicht alle Käufer schon unterschrieben haben, immer mit _ifEmpty(...) wrappen — sonst entsteht eine Lücke im PDF:
_buyerbrek_1_
_BuyerVorname _BuyerName
_ifEmpty(unterschrift_kaeufer;"";"_dateipfadAdressfeld(unterschrift_kaeufer;400;variabel;mail;html)")
_buyererek_1_
💡 Datei-Felder-Verfügbarkeit: Datei-Pfad-Makros funktionieren nur, wenn die Datei in einem onOffice-Datei-Feld des Datensatzes liegt — nicht im allgemeinen Reiter „Dateien". Das Datei-Feld muss vor der Verwendung in der onOffice-Administration angelegt sein.
| Makro | Beschreibung |
|---|---|
_pfGetAgentslogInformation |
Gibt die gerade über propform geschriebene Aktivität tabellarisch aus (Aktionsart, Aktionstyp, Bemerkung) |
_pfGetSellingPriceOffer |
Gibt das vom Interessenten abgegebene Kaufpreisangebot aus |
_pfGetCalendarUUID |
Verschlüsselte UUID des aktuellen Termins (innerhalb des Calendar-Loops) |
| Makro | Beschreibung |
|---|---|
_getAddressLink |
Direkter Deep-Link zum Adressdatensatz in onOffice — funktioniert nur für eingeloggte Benutzer |
_getEstateLink |
Direkter Deep-Link zur Immobilie |
| Makro | Beschreibung |
|---|---|
_NewsletterDOILink |
Onoffice-Standard-Makro: Bestätigungs-Link für Newsletter-Double-Opt-In. Wenn das Newsletter-Feld auf 3 (DOI ausstehend) gesetzt ist und der User klickt, wird auf 1 (bestätigt) gesetzt. Verwendung in der Newsletter-Bestätigungsmail. |
_AgreementLink(Parameter1,Parameter2,...) |
propform-Makro für den Agreement-Link (Vertrag/Widerrufsbelehrung/Datenschutz). Parameter steuern, welche Inhalte beim Agreement-Aufruf angezeigt werden. Mögliche Parameter: URL, Vertrag, Belehrung, Musterwiderruf, Datenschutzerklärung, Beginn, Eigentum, Finanzierung, Newsletter. |
_NewsletterLink |
onOffice-Standard: An-/Abmeldungs-Link für Newsletter-Verteiler (Klick öffnet An-/Abmelde-Seite bei onOffice). |
💡 Agreement-Link-Tipp: Statt fester Parameter im Mail-Template kannst du ein Custom-Feld in der Immobilie pflegen (z.B.
agreement_link_parameter) und dort per Formel_calculate(IF([provisionsfrei]=null;"Vertrag,Belehrung,Musterwiderruf,Datenschutzerklärung,Beginn,Eigentum,Finanzierung,Newsletter,URL";"URL"))dynamisch unterschiedliche Parameter liefern — z.B. ohne Vertrag/Widerruf bei provisionsfreien Objekten. Die Mail-Vorlage ruft dann nur_AgreementLink(_agreement_link_parameter)auf.
In der propform-E-Mail-Konfiguration gibt es die Einstellung „Adress-Makro-Auflösung: normal vs. alternativ":
| Modus | Effekt |
|---|---|
| Normal (Standard) | _Vorname, _Name, _Email etc. lösen sich auf den Mail-Empfänger auf |
| Alternativ | Auflösung erfolgt auf die Formularadresse (= Adresse, die das Formular gerade bearbeitet hat) |
Wann „alternativ"? Immer wenn die Mail an jemanden geht, der nicht der Anfragende ist — z.B. interne Notification an Buchhaltung über eine neue Adresse. Sonst stehen Buchhaltungs-Daten in der Mail statt der Anfragenden-Daten.
Mit _bScRek_ und _eScRek_ lassen sich alle Suchkriterien einer Adresse durchlaufen und für jedes einzelne Suchkriterium Makros ausgeben — analog zu den bekannten Maklerbuch-Schleifen in onOffice.
_bScRek_("filter")
... beliebige Suchkriterien-Makros ...
_eScRek_
Mit dem Filter-Argument schränkst du ein, welche Suchkriterien berücksichtigt werden:
_bScRek_("status:1")
→ Nur aktive Suchkriterien (Status = 1).
_bScRek_("status:1")
Objektart: _pfGetSearchCriteriaField(objektart)
Ort: _pfGetSearchCriteriaField(ort)
Wohnfläche: _pfGetSearchCriteriaField(wohnflaeche)
Link: _pfLink("https://example.com?id=_pfGetSearchCriteriaUUID", "Suchkriterium öffnen")
_eScRek_
Mit _bCalendarRek_ und _eCalendarRek_ lassen sich Termine im angegebenen Zeitraum durchlaufen — z.B. um freie Slots in einem Buchungs-Formular auszugeben.
_bCalendarRek_("startDate:YYYY-MM-DD;endDate:YYYY-MM-DD;weitere:filter")
... beliebige onOffice-Termin-Makros + _pfGetCalendarUUID ...
_eCalendarRek_
_bCalendarRek_("startDate:2026-02-25;endDate:2026-12-31;subject:like:%TERMIN-SLOT%;estate.id:_Id")
→ Alle Termine im Zeitraum, deren Betreff „TERMIN-SLOT" enthält und die mit der aktuellen Immobilie verknüpft sind.
Eine ausführliche Anleitung mit Copy/Paste-Prompts findest du im Blog: Calendar-Loop Filter Guide.
Mit den Adress-Schleifen-Makros lassen sich alle mit der Immobilie verknüpften Käufer oder Eigentümer durchlaufen — typischer Anwendungsfall: ein Übersichts-Formular, das alle Personen einer Immobilie auflistet plus „Bearbeiten"-/„Weiteren verbinden"-Buttons.
| Schleife | Anfang | Ende |
|---|---|---|
| Käufer | _buyerbrek_1_ |
_buyererek_1_ |
| Eigentümer | _ownerbrek_1_ |
_ownererek_1_ |
Innerhalb der Schleife verwendest du die Pre-Makros
_Buyer*bzw._Owner*(siehe nächste Sektion). Die_1_ist ein interner Schleifen-Zähler — nur erhöhen, wenn du mehrere unabhängige Käufer-/Eigentümer-Schleifen im selben Beschreibungs-Feld brauchst.
_buyerbrek_1_
_BuyerVorname _BuyerName, _BuyerStrasse, _BuyerPLZ _BuyerOrt, _BuyerEmail
_buyererek_1_
📖 Vollständiges Tutorial mit Übersichts- + Bearbeitungs-Formular und Code-Beispielen: Mehrere Datensätze mit einem Formular verbinden
Pre-Makros greifen auf Adressdatensätze zu, die mit einer Immobilie verknüpft sind — typischerweise innerhalb von PDF-Vorlagen, E-Mails oder Adress-Schleifen.
| Makro | Bedeutung |
|---|---|
_BuyerVorname |
Vorname des Käufers |
_BuyerName |
Nachname des Käufers |
_BuyerTitel |
Titel (z.B. Dr.) |
_BuyerStrasse, _BuyerPLZ, _BuyerOrt |
Adresse |
_BuyerTelefon, _BuyerEmail |
Kontakt |
_BuyerName2, _BuyerVorname2, _BuyerStrasse2 etc. |
Stammdaten 2 (Zweit-Adresse innerhalb des Datensatzes — falls in onOffice aktiviert) |
_BuyerUuidaddress |
UUID des Käufer-Adressdatensatzes (für Cross-Form-Links) |
_Kaeufer / _Buyer |
Pre-Makro-Präfix in PDF-Vorlagen, z.B. _KaeuferVorname (ohne Unterstrich zwischen Präfix und Feldname) |
| Makro | Bedeutung |
|---|---|
_OwnerVorname |
Vorname des Eigentümers |
_OwnerName |
Nachname des Eigentümers |
_OwnerTitel |
Titel |
_OwnerStrasse, _OwnerPLZ, _OwnerOrt |
Adresse |
_OwnerTelefon, _OwnerEmail |
Kontakt |
_OwnerName2, _OwnerVorname2, _OwnerStrasse2 etc. |
Stammdaten 2 |
_OwnerUuidaddress |
UUID des Eigentümer-Adressdatensatzes |
_Eigent / _Owner |
Pre-Makro-Präfix in PDF-Vorlagen, z.B. _EigentVorname (ohne Unterstrich zwischen Präfix und Feldname) |
_Mieter / _Renter |
Pre-Makro-Präfix für Mieter, z.B. _MieterVorname |
💡 Buyer/Owner vs. Kaeufer/Eigent:
_Buyer*/_Owner*werden vor allem innerhalb von Adress-Loops und im Beschreibungs-Feld verwendet._Kaeufer*/_Eigent*(mit deutschen Namen) sind die klassischen Pre-Makros aus PDF-Vorlagen, die onOffice direkt versteht. Für PDF-Vorlagen → siehe Werte werden nicht ans PDF übergeben.
Statt alle verknüpften Adressen einer Immobilie zu durchlaufen, kannst du auch eine bestimmte Kontaktart direkt ansprechen — z.B. den Notar oder die Verwaltung dieser Immobilie:
_XAPKontaktart#NAME#FELD
| Beispiel | Bedeutung |
|---|---|
_XAPKontaktart#Notar#Name |
Nachname der mit der Kontaktart „Notar" verknüpften Adresse |
_XAPKontaktart#Notar#Email |
E-Mail des Notars |
_XAPKontaktart#Notar#Uuidaddress |
UUID des Notar-Adressdatensatzes |
_XAPKontaktart#Verwalter#Telefon |
Telefon der Verwaltung |
_XAPKontaktart#indMulti28075Select28075#Firma1 |
Firmenname der Adresse mit dem konkreten Schlüsselwert (bei eigenen Kontaktart-Optionen) |
💡 Schlüsselwert finden: Den exakten Namen der Kontaktart bekommst du in onOffice unter Extras → Einstellungen → Administration → Adressen → Feld „Kontaktart" → bei der jeweiligen Option steht der Schlüsselwert dabei (oft
indXXXX).
Auch wenn ein Formular keine Adress- oder Immobilien-Felder enthält, kannst du via URL-Parameter einen Datensatz „mitliefern" — die nach Submit geschriebene Aktivität ist dann mit diesem Datensatz verknüpft.
https://formular.deine-domain.de/dokumenten-upload?address[ID]=_Uuidaddress&estate[Id]=_Uuidestate
Use-Case: Ein Dokumenten-Upload-Formular für einen Mieter (Adresse), das aber Immobilien-Bezug behalten soll — die hochgeladene Datei und die Aktivität sind dann mit beiden Datensätzen verknüpft, auch wenn im Formular selbst nur Datei-Upload-Felder sind.
💡 Funktioniert auch für
_AgreementLink-Aufrufe und alle Stellen, an denen propform UUID-Parameter erwartet.