Some forms should not be displayed at all, but instead should immediately update a value in onOffice when called and redirect the user. Other forms redirect to different subsequent pages depending on the selected value.
Both patterns are possible in propform with minimal setup.
_calculate(IF(...))## Auto-submit forms for switching values
Pattern: Click on a link → Form is called → Value in onOffice is changed → User is immediately redirected to the thank-you page. The user never sees the form.
https://formular.deine-domain.de/bewertung-sehr-gut?address[ID]=<UUID>
→ Form recognises the address, sets the value “Rating = very good” in the address, and redirects.
> 💡 Tip: URL parameters on single-select fields must contain the exact key value (not the plain label). You can find key values via Browser DevTools → Inspect → <option> tags.
_calculate(IF(...))The thank-you page URL in propform is macro-resolved — i.e. you can use a formula that returns different URLs depending on the value of a field.
_calculate(IF([feldname]=schluesselwert;"URL-1";"URL-2"))
Nested for multiple options:
_calculate(IF([bewertung]=sehrgut;"https://google.de/review?...";IF([bewertung]=mittel;"https://formular.deine-domain.de/feedback-mittel";"https://formular.deine-domain.de/feedback-schlecht")))
[feldname] = field name from the form (or a field ID such as [bewertung])=schluesselwert = exact key value for single-select comparison"URL-1", "URL-2" = strings in quotation marksBefore using the formula on the thank-you page, test it in a description field in the form — this way you can see live which URL is output for which value:
Test: _calculate(IF([bewertung]=sehrgut;"google_link";IF([bewertung]=mittel;"mittel_link";"schlecht_link")))
Full workflow “Collect customer reviews with conditional redirection”:
3 auto-submit forms (one per review rating) + 1 overview form (which redirects to the 3):
| Form | Function |
|---|---|
bewertung-uebersicht |
Displays 3 buttons: 🙂 very good / 😐 average / 😞 poor |
bewertung-sehr-gut |
Auto-submit, sets rating=very-good, thank-you-page = Google Review link |
bewertung-mittel |
Auto-submit, sets rating=average, thank-you page = feedback form |
bewertung-schlecht |
Auto-submit, sets rating=poor, thank-you page = detailed feedback form |
Instead of 4 forms, 1 form with auto-submit + conditional thank-you page is sufficient:
_calculate(IF([bewertung]=sehrgut;"https://google.de/review?placeid=...";IF([bewertung]=mittel;"https://formular.deine-domain.de/feedback-mittel?address[ID]=_Uuidaddress";"https://formular.deine-domain.de/feedback-schlecht?address[ID]=_Uuidaddress")))
→ User clicks button in email link → Form sets value → Thank-you page URL is calculated via IF → User lands on Google / Feedback / in-depth feedback.
In the activity configuration, you can set different action types per form (e.g. “Rating: very good”, “Rating: average”, “Rating: poor”) → Statistical analysis possible in the onOffice dashboard.
Some onOffice integrations — in particular the PriceHubble valuation — take 10–30 seconds after submission for the result to appear in the record. If the thank-you page is supposed to display the result immediately, it is typically still empty at this point.
> 💡 Background: Until 2024, Sprengnetter provided the valuation fields in onOffice. After ImmoScout24 acquired Sprengnetter, onOffice switched to PriceHubble. The standard valuation fields are now named:
>
> | Field | Meaning |
> |---|---|
> | MPPricehubblePrice | estimated market value |
> | MPPricehubbleMin | lower limit of the estimate |
> | MPPricehubbleMax | upper limit of the estimate |
> | MPPricehubbleConfidence | Confidence score |
>
> The old Sprengnetter fields continue to work in some versions if a custom Sprengnetter payment model is active — for standard customers without an additional licence, PriceHubble applies.
Submit → Danke-Seite zeigt _MPPricehubblePrice → ist leer → User verwirrt
Two-stage: Thank-you page redirects to a second form, which checks the value and requests a manual refresh if necessary.
Setup:
?estate[Id]=...&address[ID]=..._ifEmpty(_MPPricehubblePrice;
"Die Berechnung läuft noch. Bitte aktualisiere diese Seite in 10–20 Sekunden.";
"Ihr geschätzter Marktwert: _MPPricehubblePrice € (Spanne: _MPPricehubbleMin – _MPPricehubbleMax)")
_pfButton("Aktualisieren";"https://formular.deine-domain.de/ergebnis?estate[Id]=_Uuidestate";"rounded";"_self")
An automatic refresh using JavaScript polling would be more elegant, but is currently not possible in propform forms (would require custom code in the form). The refresh button is robust, mobile-friendly and sufficient in practice.
> 💡 Also works for other slow third-party APIs — e.g. credit checks, external evaluation tools, AI-powered text generation with long processing times. The pattern is generic.
_calculate, IF, field references