Skip to content

Architekturübersicht

Technische Architektur der Flexible Team Share-Lösung.

Dieses Dokument bietet eine detaillierte technische Beschreibung der Flexible Team Share-Lösung, einschließlich Systemarchitektur, Datenfluss und Verarbeitungsebenen.

Systemarchitektur

UI-EBENE objectTeamMemberTeammitgliederliste & -verwaltung objectTeamMemberWizardAdmin-Konfiguration ftsLabelsCustom-Labels-Utility CONTROLLER-EBENE ObjectTeamMemberControllerCRUD-Operationen für Teammitglieder TeamMemberWizardControllerOperationen des Konfigurationsassistenten DATENEBENE ObjectTeamMember__cTeammitgliederzuweisungen Team_Sharing_Config__cFreigabekonfiguration pro Objekt FlexiTeamShare_Config__mdtApp-Konfiguration Trigger:ObjectTeamMemberTrigger ASYNCHRONE VERARBEITUNGSEBENE ShareRecordQueueableFreigaben erstellen/aktualisieren/löschen SharingRecalculationBatchBulk-Neuberechnung ExpiredTeamMemberCleanupBatchTägliche Bereinigungabgelaufener Mitglieder SALESFORCE-FREIGABEMODELL Standard-Share-ObjekteAccountShare, ContactShare,CaseShare, LeadShare,OpportunityShare, … Custom-Object-Shares[CustomObject]__Share ObjectTeamMember__ShareSichtbarkeit der Teammitglieder

Ebenen

UI-Ebene

Drei Lightning Web Components:

KomponenteZweck
objectTeamMemberZeigt Teammitglieder auf Datensatzseiten an. Unterstützt Hinzufügen/Bearbeiten/Löschen, einklappbare Liste und konfigurierbares Anzeigelimit.
objectTeamMemberWizardAdmin-Schnittstelle zur Konfiguration von Objekten, Verwaltung von Einstellungen und Planung von Jobs.
ftsLabelsUtility-Komponente, die Custom Labels für i18n-Unterstützung bereitstellt (35 Sprachen).

Controller-Ebene

ControllerMethoden
ObjectTeamMemberControllergetTeamMembers(), addTeamMember(), updateTeamMember(), removeTeamMember(), isCurrentUserManager(), isSharingConfigured(), getAccessLevelOptions()
TeamMemberWizardControllergetExistingConfigs(), getAvailableObjects(), createConfig(), toggleConfigStatus(), deleteConfig(), getScheduledJobInfo(), scheduleCleanupJob()
SyncOwnerInvocablesyncOwners() — Invocable Action zur Synchronisierung des Owner-Teammitglieds, wenn sich der übergeordnete Owner ändert. Aufrufbar aus Flow oder Apex, vollständig bulkifiziert.

Datenebene

Benutzerdefinierte Objekte und ein Trigger, der bei Änderungen an Teammitgliedern ausgelöst wird:

  • ObjectTeamMember__c — speichert Teammitgliederzuweisungen
  • Team_Sharing_Config__c — Freigabekonfiguration pro Objekt
  • FlexiTeamShare_Config__mdt — Konfiguration auf App-Ebene (Custom Metadata)
  • ObjectTeamMemberTriggerObjectTeamMemberTriggerHandler — behandelt Before Insert, Before Update, Before Delete

Asynchrone Verarbeitungsebene

KomponenteTypZweck
ShareRecordQueueableQueueableErstellt, aktualisiert und löscht Freigabedatensätze für übergeordnete Objekte und Teammitglieder
SharingRecalculationBatchBatchableNeuberechnung aller Freigaben bei Konfigurationsänderungen im Bulk-Modus
ExpiredTeamMemberCleanupBatchBatchableLöscht abgelaufene Teammitglieder (täglich geplanter Job)
ExpiredTeamMemberCleanupSchedulerSchedulablePlant den Cleanup-Batch (läuft täglich um 2:00 Uhr)

Datenfluss: Teammitglied hinzufügen

Benutzer objectTeamMemberLWC ObjectTeamMemberController Datenbank ShareRecordQueueable Klick auf "Add Team Member" Eingaben erfassen (Benutzer,Zugriffsebene, Rolle, Enddatum) addTeamMember(recordId, userId,accessLevel, role, endDate) INSERT ObjectTeamMember__c Erfolg Trigger feuert nach Insert System.enqueueJob() Erfolg zurückgeben Teammitgliederlisteaktualisieren Asynchrone Verarbeitung INSERT [Object]Share INSERT ObjectTeamMember__Share

Datenfluss: Owner-Änderungs-Synchronisierung

alt [Owner geändert] Admin Datensatz-ausgelöster Flow SyncOwnerInvocable Datenbank ShareRecordQueueable Ändert Datensatz-eigentümer UPDATE Account SET OwnerId = :newOwner Trigger: OwnerId geändert syncOwners([recordId]) SELECT FROM ObjectTeamMember__cWHERE Role__c = 'Owner' Owner-Teammitglied SELECT OwnerId FROM Account Neue Owner-ID UPDATE ObjectTeamMember__cSET User_Id__c = :newOwner Erfolg System.enqueueJob() Asynchrone Verarbeitung DELETE alten AccountShare(falls kein Mitglied) INSERT new AccountShare [Owner unverändert] success=true, "Owner unverändert" SyncOwnerResult

Datenfluss: Bereinigung abgelaufener Mitglieder

Salesforce-Scheduler(täglich um 2:00 Uhr) ExpiredTeamMemberCleanupScheduler ExpiredTeamMemberCleanupBatch Abfrage:SELECT FROM ObjectTeamMember__cWHERE End_Date__c < TODAY() DELETE abgelaufene Datensätze(Trigger entfernen Freigaben)

Fehlerbehandlung

Controller-Ebene

  • Alle öffentlichen Methoden in try-catch verpackt
  • Benutzerfreundliche Fehlermeldungen über Custom Labels
  • AuraHandledException für LWC-Fehleranzeige

Asynchrone Verarbeitung

  • Database.insert/update/delete(records, false) — Teilerfolg
  • Einzelne Fehler werden protokolliert, lassen nicht den gesamten Batch fehlschlagen
  • Fehlerstatistiken werden in Batch-Jobs verfolgt

Trigger-Ebene

  • Trigger-Handler-Muster verhindert Rekursion
  • Fehler werden an den Aufrufer der DML-Operation weitergegeben

Leistungsaspekte

Asynchrone Verarbeitung

  • Freigabedatensatzoperationen verwenden Queueable (nicht blockierend)
  • Bulk-Operationen verwenden Batchable mit konfigurierbarer Batch-Größe
  • Keine synchronen DML-Operationen auf Freigabedatensätzen in Triggern

Abfrageoptimierung

  • Indizierte Felder in WHERE-Klauseln verwendet
  • Record_Id__c-Format ermöglicht effiziente LIKE-Abfragen
  • Begrenzte Ergebnismengen mit LIMIT-Klauseln

Caching

  • @AuraEnabled(cacheable=true) für Leseoperationen
  • App-Konfiguration in der Transaktion gecacht

Integrationsarchitektur

Keine externen Integrationen — dieses Paket arbeitet vollständig innerhalb von Salesforce:

  • Keine HTTP-Callouts
  • Keine externen APIs
  • Keine Named Credentials
  • Keine External Objects
  • Keine Connected Apps

Plattformabhängigkeiten

KomponenteVerwendung
Apex SharingErstellt/verwaltet Freigabedatensätze
Queueable ApexAsynchrone Freigabedatensatzoperationen
Batchable ApexBulk-Freigabeneuberechnung, Bereinigung
Schedulable ApexTäglicher Bereinigungsjob
Custom MetadataApp-Konfiguration
Lightning Web ComponentsBenutzeroberfläche
Custom LabelsInternationalisierung