Skip to content

نظرة عامة على البنية

البنية التقنية لحل Flexible Team Share.

يوفر هذا المستند وصفًا تقنيًا مفصلاً لحل Flexible Team Share، بما في ذلك بنية النظام، تدفق البيانات، وطبقات المعالجة.

بنية النظام

طبقة واجهة المستخدم objectTeamMemberقائمة أعضاء الفريق وإدارتهم objectTeamMemberWizardتكوين المسؤول ftsLabelsأداة Custom Labels طبقة التحكم ObjectTeamMemberControllerعمليات CRUD لأعضاء الفريق TeamMemberWizardControllerعمليات معالج التكوين طبقة البيانات ObjectTeamMember__cتعيينات أعضاء الفريق Team_Sharing_Config__cتكوين المشاركة لكل كائن FlexiTeamShare_Config__mdtتكوين التطبيق Triggers:ObjectTeamMemberTrigger طبقة المعالجة غير المتزامنة ShareRecordQueueableإنشاء/تحديث/حذف المشاركات SharingRecalculationBatchإعادة حساب جماعية ExpiredTeamMemberCleanupBatchتنظيف يومي للأعضاء منتهي الصلاحية نموذج مشاركة Salesforce كائنات المشاركة القياسيةAccountShare, ContactShare,CaseShare, LeadShare,OpportunityShare, … مشاركات الكائنات المخصصة[CustomObject]__Share ObjectTeamMember__Shareرؤية أعضاء الفريق

الطبقات

طبقة واجهة المستخدم

ثلاثة Lightning Web Components:

المكونالغرض
objectTeamMemberيعرض أعضاء الفريق على صفحات السجلات. يدعم الإضافة/التحرير/الحذف، قائمة قابلة للطي، وحد عرض قابل للتكوين.
objectTeamMemberWizardواجهة المسؤول لتكوين الكائنات، إدارة الإعدادات، وجدولة المهام.
ftsLabelsمكون أداة يوفر Custom Labels لدعم i18n (35 لغة).

طبقة التحكم

وحدة التحكمالطرق
ObjectTeamMemberControllergetTeamMembers()، addTeamMember()، updateTeamMember()، removeTeamMember()، isCurrentUserManager()، isSharingConfigured()، getAccessLevelOptions()
TeamMemberWizardControllergetExistingConfigs()، getAvailableObjects()، createConfig()، toggleConfigStatus()، deleteConfig()، getScheduledJobInfo()، scheduleCleanupJob()
SyncOwnerInvocablesyncOwners() — Invocable Action لمزامنة عضو فريق Owner عند تغيير المالك الأصلي. قابل للاستدعاء من Flow أو Apex، مجمّع بالكامل.

طبقة البيانات

كائنات مخصصة و trigger يعمل عند تغيير أعضاء الفريق:

  • ObjectTeamMember__c — يخزن تعيينات أعضاء الفريق
  • Team_Sharing_Config__c — تكوين المشاركة لكل كائن
  • FlexiTeamShare_Config__mdt — تكوين على مستوى التطبيق (Custom Metadata)
  • ObjectTeamMemberTriggerObjectTeamMemberTriggerHandler — يعالج Before Insert، Before Update، Before Delete

طبقة المعالجة غير المتزامنة

المكونالنوعالغرض
ShareRecordQueueableQueueableينشئ ويحدث ويحذف سجلات المشاركة للكائنات الأصلية وأعضاء الفريق
SharingRecalculationBatchBatchableإعادة حساب جميع المشاركات بشكل جماعي عند تغيير التكوين
ExpiredTeamMemberCleanupBatchBatchableيحذف أعضاء الفريق منتهي الصلاحية (مهمة مجدولة يوميًا)
ExpiredTeamMemberCleanupSchedulerSchedulableيجدول batch التنظيف (يعمل في الساعة 2:00 صباحًا يوميًا)

تدفق البيانات: إضافة عضو فريق

المستخدم objectTeamMemberLWC ObjectTeamMemberController قاعدة البيانات ShareRecordQueueable النقر على "Add Team Member" جمع المدخلات (المستخدم، مستوىالوصول، الدور، تاريخ الانتهاء) addTeamMember(recordId, userId,accessLevel, role, endDate) INSERT ObjectTeamMember__c نجاح يعمل المشغّل بعد الإدراج System.enqueueJob() إرجاع النجاح تحديث قائمة أعضاء الفريق معالجة غير متزامنة INSERT [Object]Share INSERT ObjectTeamMember__Share

تدفق البيانات: مزامنة تغيير المالك

alt [تغيّر المالك] المسؤول Flow مُشغَّل بالسجل SyncOwnerInvocable قاعدة البيانات ShareRecordQueueable يغيّر مالك السجل UPDATE Account SET OwnerId = :newOwner Trigger: تغيّر OwnerId syncOwners([recordId]) SELECT FROM ObjectTeamMember__cWHERE Role__c = 'Owner' عضو فريق Owner SELECT OwnerId FROM Account معرّف المالك الجديد UPDATE ObjectTeamMember__cSET User_Id__c = :newOwner نجاح System.enqueueJob() معالجة غير متزامنة DELETE AccountShare القديم(إن لم يكن عضوًا) INSERT new AccountShare [المالك دون تغيير] success=true,"المالك دون تغيير" SyncOwnerResult

تدفق البيانات: تنظيف الأعضاء منتهي الصلاحية

مجدول Salesforce(يوميًا الساعة 2:00 صباحًا) ExpiredTeamMemberCleanupScheduler ExpiredTeamMemberCleanupBatch استعلام:SELECT FROM ObjectTeamMember__cWHERE End_Date__c < TODAY() DELETE السجلات منتهية الصلاحية(المشغّلات تزيل المشاركات)

معالجة الأخطاء

طبقة التحكم

  • جميع الطرق العامة ملفوفة في try-catch
  • رسائل خطأ سهلة الاستخدام عبر Custom Labels
  • AuraHandledException لعرض الأخطاء في LWC

المعالجة غير المتزامنة

  • Database.insert/update/delete(records, false) — نجاح جزئي
  • يتم تسجيل الأخطاء الفردية، ولا تفشل الدفعة بأكملها
  • يتم تتبع إحصائيات الأخطاء في مهام batch

طبقة Trigger

  • نمط معالج trigger يمنع التكرار
  • تظهر الأخطاء للمستدعي لعملية DML

اعتبارات الأداء

المعالجة غير المتزامنة

  • تستخدم عمليات سجل المشاركة Queueable (غير محظورة)
  • تستخدم العمليات الجماعية Batchable مع حجم batch قابل للتكوين
  • لا توجد DML متزامنة على سجلات المشاركة في triggers

تحسين الاستعلامات

  • يتم استخدام الحقول المفهرسة في جمل WHERE
  • تنسيق Record_Id__c يمكّن استعلامات LIKE فعالة
  • مجموعات نتائج محدودة مع جمل LIMIT

التخزين المؤقت

  • @AuraEnabled(cacheable=true) لعمليات القراءة
  • يتم تخزين تكوين التطبيق مؤقتًا في المعاملة

بنية التكامل

لا توجد تكاملات خارجية — هذه الحزمة تعمل بالكامل داخل Salesforce:

  • لا توجد استدعاءات HTTP
  • لا توجد واجهات برمجة تطبيقات خارجية
  • لا توجد Named Credentials
  • لا توجد External Objects
  • لا توجد Connected Apps

تبعيات المنصة

المكونالاستخدام
Apex Sharingينشئ/يدير سجلات المشاركة
Queueable Apexعمليات سجل المشاركة غير المتزامنة
Batchable Apexإعادة حساب المشاركة الجماعية، التنظيف
Schedulable Apexمهمة التنظيف اليومية
Custom Metadataتكوين التطبيق
Lightning Web Componentsواجهة المستخدم
Custom Labelsالترجمة الدولية