From 316303253bbc66b33818ff1ea5aa7d50bbd3bca8 Mon Sep 17 00:00:00 2001 From: Floke Date: Tue, 24 Feb 2026 13:07:56 +0000 Subject: [PATCH] docs: update readme with api optimization and getAllRows lessons learned [31188f42] --- connector-superoffice/README.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/connector-superoffice/README.md b/connector-superoffice/README.md index 5e072a64..9aaf0bd6 100644 --- a/connector-superoffice/README.md +++ b/connector-superoffice/README.md @@ -185,6 +185,21 @@ Die Simulation von E-Mails via Terminen (Appointments) erforderte Workarounds f 3. **Rollen-Dynamik:** * Um zu verhindern, dass alte Rollen (z.B. "Infrastruktur") nach einer Beförderung/Änderung in SuperOffice "kleben" bleiben, führt das System nun bei jeder Namens- oder Funktionsänderung einen **Rollen-Reset** durch. +--- + +### 10. Lessons Learned: API Optimization & Certification (Feb 24, 2026) + +Um die Zertifizierung für den SuperOffice App Store zu erhalten, mussten kritische Performance-Optimierungen durchgeführt werden. + +1. **Die `getAllRows`-Falle:** + * **Problem:** SuperOffice monierte in der Validierung API-Calls wie `getAllRows` (implizit oft durch Abfragen ganzer Objekte ohne Filter), die unnötige Last verursachen. + * **Lösung:** Implementierung von **OData `$select`**. Wir fordern nun strikt nur die Felder an, die wir wirklich benötigen (z.B. `get_person(id, select=['JobTitle', 'UserDefinedFields'])`). + * **Wichtig:** Niemals pauschal `get_person()` aufrufen, wenn nur die Rolle geprüft werden soll. + +2. **NullReference bei `$select`:** + * **Problem:** Wenn `$select` genutzt wird, gibt SuperOffice nicht angeforderte komplexe Objekte (wie `Contact` in `Person`) als `null` zurück. Der Zugriff `person['Contact']['ContactId']` führt dann zum Crash. + * **Lösung:** Robuste Checks (`if contact_obj and isinstance(contact_obj, dict)`) und primäre Nutzung der IDs direkt aus dem Webhook-Payload (`FieldValues`), um API-Calls komplett zu vermeiden. + ## Appendix: The "First Sentence" Prompt This is the core logic used to generate the company-specific opener. @@ -202,4 +217,4 @@ Deine Aufgabe ist es, einen hochpersonalisierten, scharfsinnigen und wertschätz - Verbinde die **spezifische Tätigkeit** mit dem **Hebel** und den **geschäftlichen Konsequenzen**. - **WICHTIG:** Formuliere immer als positive Beobachtung über eine Kernkompetenz. Du implizierst die Herausforderung durch die Betonung der Wichtigkeit. - **VERMEIDE:** Konkrete Zahlen (z.B. "35 Rutschen"), da diese veraltet sein können. Nutze abstrakte Größen ("weitläufige Anlagen"). -``` +``` \ No newline at end of file