Skip to content

Przegląd architektury

Architektura techniczna rozwiązania Flexible Team Share.

Niniejszy dokument zawiera szczegółowy opis techniczny rozwiązania Flexible Team Share, w tym architekturę systemu, przepływ danych i warstwy przetwarzania.

Architektura systemu

UI LAYER objectTeamMemberLista członków zespołu i zarządzanie objectTeamMemberWizardKonfiguracja admin ftsLabelsNarzędzie Custom Labels CONTROLLER LAYER ObjectTeamMemberControllerOperacje CRUD dla członków zespołu TeamMemberWizardControllerOperacje kreatora konfiguracji DATA LAYER ObjectTeamMember__cPrzypisania członków zespołu Team_Sharing_Config__cKonfiguracja udostępniania per obiekt FlexiTeamShare_Config__mdtKonfiguracja aplikacji Triggers:ObjectTeamMemberTrigger ASYNC PROCESSING LAYER ShareRecordQueueableTworzenie/aktualizacja/usuwanie udostępnień SharingRecalculationBatchHurtowa rekalkulacja ExpiredTeamMemberCleanupBatchCodzienne czyszczeniewygasłych członków SALESFORCE SHARING MODEL Standard Share ObjectsAccountShare, ContactShare,CaseShare, LeadShare,OpportunityShare, … Custom Object Shares[CustomObject]__Share ObjectTeamMember__ShareWidoczność członków zespołu

Warstwy

Warstwa UI

Trzy Lightning Web Components:

KomponentPrzeznaczenie
objectTeamMemberWyświetla członków zespołu na stronach rekordów. Obsługuje dodawanie/edycję/usuwanie, zwijanie listy i konfigurowalny limit wyświetlania.
objectTeamMemberWizardInterfejs administracyjny do konfiguracji obiektów, zarządzania ustawieniami i planowania zadań.
ftsLabelsKomponent narzędziowy zapewniający Custom Labels dla obsługi i18n (35 języków).

Warstwa kontrolera

KontrolerMetody
ObjectTeamMemberControllergetTeamMembers(), addTeamMember(), updateTeamMember(), removeTeamMember(), isCurrentUserManager(), isSharingConfigured(), getAccessLevelOptions()
TeamMemberWizardControllergetExistingConfigs(), getAvailableObjects(), createConfig(), toggleConfigStatus(), deleteConfig(), getScheduledJobInfo(), scheduleCleanupJob()
SyncOwnerInvocablesyncOwners() — Invocable Action do synchronizacji członka zespołu Owner, gdy zmienia się właściciel nadrzędny. Wywoływalna z Flow lub Apex, w pełni zbulkowana.

Warstwa danych

Obiekty niestandardowe i trigger wyzwalany przy zmianach członków zespołu:

  • ObjectTeamMember__c — przechowuje przypisania członków zespołu
  • Team_Sharing_Config__c — konfiguracja udostępniania per obiekt
  • FlexiTeamShare_Config__mdt — konfiguracja na poziomie aplikacji (Custom Metadata)
  • ObjectTeamMemberTriggerObjectTeamMemberTriggerHandler — obsługuje Before Insert, Before Update, Before Delete

Warstwa przetwarzania asynchronicznego

KomponentTypPrzeznaczenie
ShareRecordQueueableQueueableTworzy, aktualizuje i usuwa rekordy udostępnień dla obiektów nadrzędnych i członków zespołu
SharingRecalculationBatchBatchableHurtowa rekalkulacja wszystkich udostępnień przy zmianie konfiguracji
ExpiredTeamMemberCleanupBatchBatchableUsuwa wygasłych członków zespołu (codzienne zaplanowane zadanie)
ExpiredTeamMemberCleanupSchedulerSchedulablePlanuje zadanie czyszczenia (uruchamia się codziennie o 2:00)

Przepływ danych: dodawanie członka zespołu

User objectTeamMemberLWC ObjectTeamMemberController Database ShareRecordQueueable Kliknij "Add Team Member" Zbierz dane wejściowe (User,Access Level, Role, End Date) addTeamMember(recordId, userId,accessLevel, role, endDate) INSERT ObjectTeamMember__c Sukces Trigger wyzwala się po insert System.enqueueJob() Zwróć sukces Odśwież listę członków zespołu Przetwarzanieasynchroniczne INSERT [Object]Share INSERT ObjectTeamMember__Share

Przepływ danych: synchronizacja zmiany właściciela

alt [Właściciel zmieniony] Admin Record-TriggeredFlow SyncOwnerInvocable Database ShareRecordQueueable Zmienia właścicielarekordu UPDATE Account SET OwnerId = :newOwner Trigger: OwnerId zmieniony syncOwners([recordId]) SELECT FROM ObjectTeamMember__cWHERE Role__c = 'Owner' Członek zespołu Owner SELECT OwnerId FROM Account Nowy owner ID UPDATE ObjectTeamMember__cSET User_Id__c = :newOwner Sukces System.enqueueJob() Przetwarzanieasynchroniczne DELETE stary AccountShare(jeśli nie jest członkiem) INSERT new AccountShare [Właściciel bez zmian] success=true, "Owner unchanged" SyncOwnerResult

Przepływ danych: czyszczenie wygasłych członków

Salesforce Scheduler(2:00 codziennie) ExpiredTeamMemberCleanupScheduler ExpiredTeamMemberCleanupBatch Query:SELECT FROM ObjectTeamMember__cWHERE End_Date__c < TODAY() DELETE wygasłe rekordy(triggery usuwają udostępnienia)

Obsługa błędów

Warstwa kontrolera

  • Wszystkie metody publiczne opakowane w try-catch
  • Przyjazne użytkownikowi komunikaty błędów za pomocą Custom Labels
  • AuraHandledException dla wyświetlania błędów LWC

Przetwarzanie asynchroniczne

  • Database.insert/update/delete(records, false) — częściowy sukces
  • Indywidualne błędy logowane, nie powodują niepowodzenia całej partii
  • Statystyki błędów śledzone w zadaniach wsadowych

Warstwa triggera

  • Wzorzec trigger handler zapobiega rekurencji
  • Błędy przekazywane do wywołującego operację DML

Zagadnienia wydajnościowe

Przetwarzanie asynchroniczne

  • Operacje na rekordach udostępnień wykorzystują Queueable (nieblokujące)
  • Operacje hurtowe wykorzystują Batchable z konfigurowalnym rozmiarem partii
  • Brak synchronicznych operacji DML na rekordach udostępnień w triggerach

Optymalizacja zapytań

  • Pola indeksowane używane w klauzulach WHERE
  • Format Record_Id__c umożliwia efektywne zapytania LIKE
  • Ograniczone zestawy wyników za pomocą klauzul LIMIT

Cachowanie

  • @AuraEnabled(cacheable=true) dla operacji odczytu
  • Konfiguracja aplikacji cachowana w transakcji

Architektura integracji

Brak integracji zewnętrznych — ten pakiet działa w całości w ramach Salesforce:

  • Brak wywołań HTTP
  • Brak zewnętrznych API
  • Brak Named Credentials
  • Brak External Objects
  • Brak Connected Apps

Zależności platformowe

KomponentUżycie
Apex SharingTworzy/zarządza rekordami udostępnień
Queueable ApexAsynchroniczne operacje na rekordach udostępnień
Batchable ApexHurtowa rekalkulacja udostępnień, czyszczenie
Schedulable ApexCodzienne zadanie czyszczenia
Custom MetadataKonfiguracja aplikacji
Lightning Web ComponentsInterfejs użytkownika
Custom LabelsInternacjonalizacja