Skip to content

Vue d'ensemble de l'architecture

Architecture technique de la solution Flexible Team Share.

Ce document fournit une description technique détaillée de la solution Flexible Team Share, incluant l’architecture système, le flux de données et les couches de traitement.

Architecture système

COUCHE UI objectTeamMemberListe et gestion des membres d’équipe objectTeamMemberWizardConfiguration admin ftsLabelsUtilitaire Custom Labels COUCHE CONTRÔLEUR ObjectTeamMemberControllerOpérations CRUD pour les membres d’équipe TeamMemberWizardControllerOpérations de l’assistant de configuration COUCHE DE DONNÉES ObjectTeamMember__cAffectations des membres d’équipe Team_Sharing_Config__cConfiguration de partage par objet FlexiTeamShare_Config__mdtConfiguration de l’application Déclencheurs :ObjectTeamMemberTrigger COUCHE DE TRAITEMENT ASYNCHRONE ShareRecordQueueableCréer/mettre à jour/supprimer les partages SharingRecalculationBatchRecalcul en masse ExpiredTeamMemberCleanupBatchNettoyage quotidiendes membres expirés MODÈLE DE PARTAGE SALESFORCE Objets de partage standardAccountShare, ContactShare,CaseShare, LeadShare,OpportunityShare, … Partages d’objets personnalisés[CustomObject]__Share ObjectTeamMember__ShareVisibilité des membres d’équipe

Couches

Couche UI

Trois Lightning Web Components :

ComposantObjectif
objectTeamMemberAffiche les membres d’équipe sur les pages d’enregistrement. Prend en charge l’ajout/modification/suppression, la liste réductible et la limite d’affichage configurable.
objectTeamMemberWizardInterface administrateur pour configurer les objets, gérer les paramètres et planifier les tâches.
ftsLabelsComposant utilitaire fournissant des Custom Labels pour la prise en charge i18n (35 langues).

Couche contrôleur

ContrôleurMéthodes
ObjectTeamMemberControllergetTeamMembers(), addTeamMember(), updateTeamMember(), removeTeamMember(), isCurrentUserManager(), isSharingConfigured(), getAccessLevelOptions()
TeamMemberWizardControllergetExistingConfigs(), getAvailableObjects(), createConfig(), toggleConfigStatus(), deleteConfig(), getScheduledJobInfo(), scheduleCleanupJob()
SyncOwnerInvocablesyncOwners() — Invocable Action pour synchroniser le membre d’équipe Owner lorsque le propriétaire parent change. Appelable depuis Flow ou Apex, entièrement bulkifié.

Couche de données

Objets personnalisés et un déclencheur qui se déclenche lors des changements de membre d’équipe :

  • ObjectTeamMember__c — stocke les affectations de membres d’équipe
  • Team_Sharing_Config__c — configuration de partage par objet
  • FlexiTeamShare_Config__mdt — configuration au niveau de l’application (Custom Metadata)
  • ObjectTeamMemberTriggerObjectTeamMemberTriggerHandler — gère Before Insert, Before Update, Before Delete

Couche de traitement asynchrone

ComposantTypeObjectif
ShareRecordQueueableQueueableCrée, met à jour et supprime des enregistrements de partage pour les objets parents et les membres d’équipe
SharingRecalculationBatchBatchableRecalcule en masse tous les partages lorsque la configuration change
ExpiredTeamMemberCleanupBatchBatchableSupprime les membres d’équipe expirés (tâche planifiée quotidienne)
ExpiredTeamMemberCleanupSchedulerSchedulablePlanifie le batch de nettoyage (s’exécute à 2h00 du matin quotidiennement)

Flux de données : Ajout d’un membre d’équipe

Utilisateur objectTeamMemberLWC ObjectTeamMemberController Base de données ShareRecordQueueable Clic sur "Add Team Member" Saisie des entrées (utilisateur,niveau d’accès, rôle, date de fin) addTeamMember(recordId, userId,accessLevel, role, endDate) INSERT ObjectTeamMember__c Succès Le trigger se déclenche après insert System.enqueueJob() Renvoie le succès Actualiser la liste des membres Traitement asynchrone INSERT [Object]Share INSERT ObjectTeamMember__Share

Flux de données : Synchronisation du changement de propriétaire

alt [Propriétaire modifié] Admin Flow déclenché parenregistrement SyncOwnerInvocable Base de données ShareRecordQueueable Change lepropriétaire del’enregistrement UPDATE Account SET OwnerId = :newOwner Trigger : OwnerId modifié syncOwners([recordId]) SELECT FROM ObjectTeamMember__cWHERE Role__c = 'Owner' Membre d’équipe Owner SELECT OwnerId FROM Account Nouvel ID de propriétaire UPDATE ObjectTeamMember__cSET User_Id__c = :newOwner Succès System.enqueueJob() Traitement asynchrone DELETE ancien AccountShare(si non membre) INSERT new AccountShare [Propriétaire inchangé] success=true,"Propriétaire inchangé" SyncOwnerResult

Flux de données : Nettoyage des membres expirés

Planificateur Salesforce(tous les jours à 2h00) ExpiredTeamMemberCleanupScheduler ExpiredTeamMemberCleanupBatch Requête :SELECT FROM ObjectTeamMember__cWHERE End_Date__c < TODAY() DELETE des enregistrements expirés(les triggers suppriment les partages)

Gestion des erreurs

Couche contrôleur

  • Toutes les méthodes publiques enveloppées dans try-catch
  • Messages d’erreur conviviaux via Custom Labels
  • AuraHandledException pour l’affichage des erreurs LWC

Traitement asynchrone

  • Database.insert/update/delete(records, false) — succès partiel
  • Les erreurs individuelles sont enregistrées, n’échouent pas tout le batch
  • Statistiques d’erreur suivies dans les tâches batch

Couche déclencheur

  • Le modèle de gestionnaire de déclencheur prévient la récursion
  • Les erreurs remontent à l’appelant de l’opération DML

Considérations de performance

Traitement asynchrone

  • Les opérations d’enregistrement de partage utilisent Queueable (non bloquant)
  • Les opérations en masse utilisent Batchable avec une taille de batch configurable
  • Aucun DML synchrone sur les enregistrements de partage dans les déclencheurs

Optimisation des requêtes

  • Champs indexés utilisés dans les clauses WHERE
  • Le format Record_Id__c permet des requêtes LIKE efficaces
  • Ensembles de résultats limités avec des clauses LIMIT

Mise en cache

  • @AuraEnabled(cacheable=true) pour les opérations de lecture
  • Configuration de l’application mise en cache dans la transaction

Architecture d’intégration

Aucune intégration externe — ce package fonctionne entièrement dans Salesforce :

  • Aucun HTTP callout
  • Aucune API externe
  • Aucun Named Credentials
  • Aucun External Objects
  • Aucune Connected Apps

Dépendances de plateforme

ComposantUtilisation
Apex SharingCrée/gère les enregistrements de partage
Queueable ApexOpérations asynchrones d’enregistrement de partage
Batchable ApexRecalcul en masse du partage, nettoyage
Schedulable ApexTâche de nettoyage quotidienne
Custom MetadataConfiguration de l’application
Lightning Web ComponentsInterface utilisateur
Custom LabelsInternationalisation