Skip to content

Visão Geral da Arquitetura

Arquitetura técnica da solução Flexible Team Share.

Este documento fornece uma descrição técnica detalhada da solução Flexible Team Share, incluindo arquitetura do sistema, fluxo de dados e camadas de processamento.

Arquitetura do Sistema

CAMADA UI objectTeamMemberLista e gestão de membros da equipe objectTeamMemberWizardConfiguração de admin ftsLabelsUtilitário de custom labels CAMADA CONTROLLER ObjectTeamMemberControllerOperações CRUD para membros da equipe TeamMemberWizardControllerOperações do assistente de configuração CAMADA DE DADOS ObjectTeamMember__cAtribuições de membros da equipe Team_Sharing_Config__cConfiguração de compartilhamento por objeto FlexiTeamShare_Config__mdtConfiguração do aplicativo Triggers:ObjectTeamMemberTrigger CAMADA DE PROCESSAMENTO ASSÍNCRONO ShareRecordQueueableCriar/atualizar/excluircompartilhamentos SharingRecalculationBatchRecálculo em massa ExpiredTeamMemberCleanupBatchLimpeza diária de membros expirados MODELO DE COMPARTILHAMENTO SALESFORCE Objetos Share padrãoAccountShare, ContactShare,CaseShare, LeadShare,OpportunityShare, … Shares de objetos customizados[CustomObject]__Share ObjectTeamMember__ShareVisibilidade de membros da equipe

Camadas

Camada UI

Três Lightning Web Components:

ComponentePropósito
objectTeamMemberExibe membros da equipe em páginas de registro. Suporta adicionar/editar/excluir, lista colapsável e limite de exibição configurável.
objectTeamMemberWizardInterface de administração para configurar objetos, gerenciar configurações e agendar jobs.
ftsLabelsComponente utilitário fornecendo custom labels para suporte i18n (35 idiomas).

Camada Controller

ControllerMétodos
ObjectTeamMemberControllergetTeamMembers(), addTeamMember(), updateTeamMember(), removeTeamMember(), isCurrentUserManager(), isSharingConfigured(), getAccessLevelOptions()
TeamMemberWizardControllergetExistingConfigs(), getAvailableObjects(), createConfig(), toggleConfigStatus(), deleteConfig(), getScheduledJobInfo(), scheduleCleanupJob()
SyncOwnerInvocablesyncOwners() — Invocable Action para sincronizar membro da equipe Owner quando o owner pai muda. Chamável de Flow ou Apex, totalmente bulkificado.

Camada Data

Objetos personalizados e um trigger que dispara em mudanças de membros da equipe:

  • ObjectTeamMember__c — armazena atribuições de membros da equipe
  • Team_Sharing_Config__c — configuração de compartilhamento por objeto
  • FlexiTeamShare_Config__mdt — configuração em nível de aplicativo (Custom Metadata)
  • ObjectTeamMemberTriggerObjectTeamMemberTriggerHandler — trata Before Insert, Before Update, Before Delete

Camada Async Processing

ComponenteTipoPropósito
ShareRecordQueueableQueueableCria, atualiza e exclui registros de compartilhamento para objetos pai e membros da equipe
SharingRecalculationBatchBatchableRecalcula em massa todos os compartilhamentos quando a configuração muda
ExpiredTeamMemberCleanupBatchBatchableExclui membros da equipe expirados (scheduled job diário)
ExpiredTeamMemberCleanupSchedulerSchedulableAgenda o cleanup batch (executa às 2:00 AM diariamente)

Fluxo de Dados: Adicionando um Membro da Equipe

Usuário objectTeamMemberLWC ObjectTeamMemberController Banco de dados ShareRecordQueueable Clique em "Add Team Member" Coletar entradas (usuário, nível deacesso, papel, data de término) addTeamMember(recordId, userId,accessLevel, role, endDate) INSERT ObjectTeamMember__c Sucesso Trigger dispara após o insert System.enqueueJob() Retornar sucesso Atualizar lista de membros Processamentoassíncrono INSERT [Object]Share INSERT ObjectTeamMember__Share

Fluxo de Dados: Sincronização de Mudança de Owner

alt [Owner alterado] Admin Flow acionadopor registro SyncOwnerInvocable Banco de dados ShareRecordQueueable Altera o donodo registro UPDATE Account SET OwnerId = :newOwner Trigger: OwnerId alterado syncOwners([recordId]) SELECT FROM ObjectTeamMember__cWHERE Role__c = 'Owner' Membro da equipe Owner SELECT OwnerId FROM Account Novo ID do owner UPDATE ObjectTeamMember__cSET User_Id__c = :newOwner Sucesso System.enqueueJob() Processamentoassíncrono DELETE AccountShare antigo(se não for membro) INSERT new AccountShare [Owner inalterado] success=true, "Owner inalterado" SyncOwnerResult

Fluxo de Dados: Limpeza de Membros Expirados

Agendador Salesforce(2:00 AM diariamente) ExpiredTeamMemberCleanupScheduler ExpiredTeamMemberCleanupBatch Consulta:SELECT FROM ObjectTeamMember__cWHERE End_Date__c < TODAY() DELETE registros expirados(triggers removem compartilhamentos)

Tratamento de Erros

Camada Controller

  • Todos os métodos públicos envolvidos em try-catch
  • Mensagens de erro amigáveis via Custom Labels
  • AuraHandledException para exibição de erro LWC

Async Processing

  • Database.insert/update/delete(records, false) — sucesso parcial
  • Erros individuais registrados, não falham o batch inteiro
  • Estatísticas de erro rastreadas em batch jobs

Camada Trigger

  • Padrão de trigger handler previne recursão
  • Erros surgem para o chamador da operação DML

Considerações de Performance

Async Processing

  • Operações de registro de compartilhamento usam Queueable (não bloqueante)
  • Operações em massa usam Batchable com tamanho de batch configurável
  • Sem DML síncrono em registros de compartilhamento em triggers

Otimização de Query

  • Campos indexados usados em cláusulas WHERE
  • Formato Record_Id__c permite queries LIKE eficientes
  • Conjuntos de resultados limitados com cláusulas LIMIT

Caching

  • @AuraEnabled(cacheable=true) para operações de leitura
  • Configuração de aplicativo em cache na transação

Arquitetura de Integração

Sem integrações externas — este pacote opera inteiramente dentro do Salesforce:

  • Sem HTTP callouts
  • Sem APIs externas
  • Sem Named Credentials
  • Sem External Objects
  • Sem Connected Apps

Dependências da Plataforma

ComponenteUso
Apex SharingCria/gerencia registros de compartilhamento
Queueable ApexOperações assíncronas de registro de compartilhamento
Batchable ApexRecálculo em massa de compartilhamento, limpeza
Schedulable ApexJob de limpeza diário
Custom MetadataConfiguração do aplicativo
Lightning Web ComponentsInterface do usuário
Custom LabelsInternacionalização