1. Umfassende Entitäten-Erstellung: Wir haben erfolgreich Methoden implementiert, um die Kern-SuperOffice-Entitäten per API zu erstellen:
* Firmen (`Contact`)
* Personen (`Person`)
* Verkäufe (`Sale`) (entspricht D365 Opportunity)
* Projekte (`Project`) (entspricht D365 Campaign), inklusive der Verknüpfung von Personen als Projektmitglieder.
2. Robuste UDF-Aktualisierung: Wir haben eine generische und fehlertolerante Methode (update_entity_udfs) implementiert, die benutzerdefinierte Felder (UDFs) für sowohl Contact- als
auch Person-Entitäten aktualisieren kann. Diese Methode ruft zuerst das bestehende Objekt ab, um die Konsistenz zu gewährleisten.
3. UDF-ID-Discovery: Durch eine iterative Inspektionsmethode haben wir erfolgreich alle internen SuperOffice-IDs für die Listenwerte deines MA Status-Feldes (Ready_to_Send, Sent_Week1,
Sent_Week2, Bounced, Soft_Denied, Interested, Out_of_Office, Unsubscribed) ermittelt und im Connector hinterlegt.
4. Vollständiger End-to-End Test-Workflow: Unser main.py-Skript demonstriert nun einen kompletten Ablauf, der alle diese Schritte von der Erstellung bis zur UDF-Aktualisierung umfasst.
5. Architekturplan für Marketing Automation: Wir haben einen detaillierten "Butler-Service"-Architekturplan für die Marketing-Automatisierung entworfen, der den Connector für die
Textgenerierung und SuperOffice für den Versand und das Status-Management nutzt.
6. Identifikation des E-Mail-Blockers: Wir haben festgestellt, dass das Erstellen von E-Mail-Aktivitäten per API in deiner aktuellen SuperOffice-Entwicklungsumgebung aufgrund fehlender
Lizenzierung/Konfiguration des E-Mail-Moduls blockiert ist (500 Internal Server Error).
41 lines
1.3 KiB
Python
41 lines
1.3 KiB
Python
import os
|
|
import logging
|
|
import json
|
|
from dotenv import load_dotenv
|
|
from auth_handler import AuthHandler
|
|
from superoffice_client import SuperOfficeClient
|
|
|
|
logging.basicConfig(level=logging.INFO)
|
|
logger = logging.getLogger(__name__)
|
|
|
|
def inspect_person(person_id):
|
|
load_dotenv(dotenv_path="../.env")
|
|
auth = AuthHandler()
|
|
client = SuperOfficeClient(auth)
|
|
|
|
logger.info(f"Fetching Person with ID {person_id} to inspect structure...")
|
|
|
|
url = client._get_url(f"v1/Person/{person_id}")
|
|
try:
|
|
resp = client.session.get(url, headers=client._get_headers())
|
|
resp.raise_for_status()
|
|
person_data = resp.json()
|
|
|
|
print(f"\n--- PERSON STRUCTURE (ID: {person_id}) ---")
|
|
print(json.dumps(person_data, indent=2))
|
|
print("\n--- USER DEFINED FIELDS FOR THIS PERSON ---")
|
|
if person_data.get("UserDefinedFields"):
|
|
print(json.dumps(person_data["UserDefinedFields"], indent=2))
|
|
else:
|
|
print("(No UserDefinedFields found)")
|
|
|
|
except Exception as e:
|
|
logger.error(f"Failed to fetch person data: {e}")
|
|
if hasattr(e, 'response') and e.response is not None:
|
|
print(f"Details: {e.response.text}")
|
|
|
|
if __name__ == "__main__":
|
|
# Use the specific person ID provided by the user
|
|
target_person_id = 9
|
|
inspect_person(target_person_id)
|