Skip to content

Descripción General de Arquitectura

Arquitectura técnica de la solución Flexible Team Share.

Este documento proporciona una descripción técnica detallada de la solución Flexible Team Share, incluida la arquitectura del sistema, el flujo de datos y las capas de procesamiento.

Arquitectura del Sistema

CAPA DE UI objectTeamMemberLista y gestión de miembros del equipo objectTeamMemberWizardConfiguración de administrador ftsLabelsUtilidad de Custom Labels CAPA DE CONTROLADOR ObjectTeamMemberControllerOperaciones CRUD para miembros del equipo TeamMemberWizardControllerOperaciones del asistente de configuración CAPA DE DATOS ObjectTeamMember__cAsignaciones de miembros del equipo Team_Sharing_Config__cConfiguración de uso compartido por objeto FlexiTeamShare_Config__mdtConfiguración de la aplicación Triggers:ObjectTeamMemberTrigger CAPA DE PROCESAMIENTO ASÍNCRONO ShareRecordQueueableCrear/actualizar/eliminarusos compartidos SharingRecalculationBatchRecálculo masivo ExpiredTeamMemberCleanupBatchLimpieza diaria de miembros vencidos MODELO DE USO COMPARTIDO DE SALESFORCE Objetos Share estándarAccountShare, ContactShare,CaseShare, LeadShare,OpportunityShare, … Shares de objetos personalizados[CustomObject]__Share ObjectTeamMember__ShareVisibilidad de miembros del equipo

Capas

Capa de UI

Tres Lightning Web Components:

ComponentePropósito
objectTeamMemberMuestra miembros del equipo en páginas de registro. Soporta agregar/editar/eliminar, lista contraíble y límite de visualización configurable.
objectTeamMemberWizardInterfaz de administrador para configurar objetos, gestionar configuraciones y programar trabajos.
ftsLabelsComponente de utilidad que proporciona Custom Labels para soporte de i18n (35 idiomas).

Capa de Controlador

ControladorMétodos
ObjectTeamMemberControllergetTeamMembers(), addTeamMember(), updateTeamMember(), removeTeamMember(), isCurrentUserManager(), isSharingConfigured(), getAccessLevelOptions()
TeamMemberWizardControllergetExistingConfigs(), getAvailableObjects(), createConfig(), toggleConfigStatus(), deleteConfig(), getScheduledJobInfo(), scheduleCleanupJob()
SyncOwnerInvocablesyncOwners() — Invocable Action para sincronizar el miembro del equipo Owner cuando cambia el propietario padre. Llamable desde Flow o Apex, completamente bulkificado.

Capa de Datos

Objetos personalizados y un trigger que se dispara en cambios de miembros del equipo:

  • ObjectTeamMember__c — almacena asignaciones de miembros del equipo
  • Team_Sharing_Config__c — configuración de uso compartido por objeto
  • FlexiTeamShare_Config__mdt — configuración a nivel de aplicación (Custom Metadata)
  • ObjectTeamMemberTriggerObjectTeamMemberTriggerHandler — maneja Before Insert, Before Update, Before Delete

Capa de Procesamiento Asíncrono

ComponenteTipoPropósito
ShareRecordQueueableQueueableCrea, actualiza y elimina registros compartidos para objetos padre y miembros del equipo
SharingRecalculationBatchBatchableRecalcula de forma masiva todos los usos compartidos cuando cambia la configuración
ExpiredTeamMemberCleanupBatchBatchableElimina miembros del equipo vencidos (trabajo por lotes programado diariamente)
ExpiredTeamMemberCleanupSchedulerSchedulablePrograma el lote de limpieza (se ejecuta a las 2:00 AM diariamente)

Flujo de Datos: Agregar un Miembro del Equipo

Usuario objectTeamMemberLWC ObjectTeamMemberController Base de datos ShareRecordQueueable Clic en "Add Team Member" Recopilar entradas (usuario, nivelde acceso, rol, fecha de fin) addTeamMember(recordId, userId,accessLevel, role, endDate) INSERT ObjectTeamMember__c Éxito El trigger se dispara tras el insert System.enqueueJob() Devolver éxito Actualizar lista de miembros Procesamientoasíncrono INSERT [Object]Share INSERT ObjectTeamMember__Share

Flujo de Datos: Sincronización de Cambio de Propietario

alt [Propietario cambiado] Admin Flow activadopor registro SyncOwnerInvocable Base de datos ShareRecordQueueable Cambia el propietariodel registro UPDATE Account SET OwnerId = :newOwner Trigger: OwnerId cambiado syncOwners([recordId]) SELECT FROM ObjectTeamMember__cWHERE Role__c = 'Owner' Miembro del equipo Owner SELECT OwnerId FROM Account Nuevo ID de propietario UPDATE ObjectTeamMember__cSET User_Id__c = :newOwner Éxito System.enqueueJob() Procesamientoasíncrono DELETE AccountShare antiguo(si no es miembro) INSERT new AccountShare [Propietario sin cambios] success=true,"Propietario sin cambios" SyncOwnerResult

Flujo de Datos: Limpieza de Miembros Vencidos

Programador de Salesforce(2:00 AM diariamente) ExpiredTeamMemberCleanupScheduler ExpiredTeamMemberCleanupBatch Consulta:SELECT FROM ObjectTeamMember__cWHERE End_Date__c < TODAY() DELETE registros vencidos(los triggers eliminan los usos compartidos)

Manejo de Errores

Capa de Controlador

  • Todos los métodos públicos envueltos en try-catch
  • Mensajes de error amigables mediante Custom Labels
  • AuraHandledException para visualización de errores en LWC

Procesamiento Asíncrono

  • Database.insert/update/delete(records, false) — éxito parcial
  • Errores individuales registrados, no fallan todo el lote
  • Estadísticas de errores rastreadas en trabajos por lotes

Capa de Trigger

  • El patrón de manejador de trigger previene la recursión
  • Los errores afloran al llamador de la operación DML

Consideraciones de Rendimiento

Procesamiento Asíncrono

  • Las operaciones de registros compartidos usan Queueable (sin bloqueo)
  • Las operaciones masivas usan Batchable con tamaño de lote configurable
  • Sin DML síncrono en registros compartidos en triggers

Optimización de Consultas

  • Campos indexados usados en cláusulas WHERE
  • El formato Record_Id__c permite consultas LIKE eficientes
  • Conjuntos de resultados limitados con cláusulas LIMIT

Caché

  • @AuraEnabled(cacheable=true) para operaciones de lectura
  • Configuración de aplicación en caché en la transacción

Arquitectura de Integración

Sin integraciones externas — este paquete opera completamente dentro de Salesforce:

  • Sin llamadas HTTP
  • Sin APIs externas
  • Sin Named Credentials
  • Sin External Objects
  • Sin Connected Apps

Dependencias de Plataforma

ComponenteUso
Apex SharingCrea/gestiona registros compartidos
Queueable ApexOperaciones asíncronas de registros compartidos
Batchable ApexRecálculo masivo de uso compartido, limpieza
Schedulable ApexTrabajo de limpieza diaria
Custom MetadataConfiguración de aplicación
Lightning Web ComponentsInterfaz de usuario
Custom LabelsInternacionalización