InstallPayload ({ previousVersion?: string; newVersion: string } — تكون previousVersion بقيمة undefined في التثبيت الجديد)، ولكن يتم التصريح عنها بدوال تعريف خاصة بها وتعمل خارج نموذج المشغّل المعتاد (HTTP، وcron، وأحداث قاعدة البيانات).
يمكن لكل تطبيق تعريف دالة واحدة على الأكثر لما قبل التثبيت ودالة واحدة على الأكثر لما بعد التثبيت. سيُنتِج إنشاء ملف البيان خطأً إذا تم اكتشاف أكثر من واحدة من أيٍّ منهما.
لمحة سريعة
definePreInstallLogicFunction | definePostInstallLogicFunction | |
|---|---|---|
| عمليات التشغيل | قبل ترحيل البيانات الوصفية — لا يزال المخطط والبيانات السابقة سليمين | بعد الترحيل وإنشاء الـ SDK — أصبح المخطط الجديد في مكانه |
| التنفيذ | دائمًا متزامن؛ يحجب عملية التثبيت | غير متزامن بشكل افتراضي (يُوضَع في قائمة الانتظار، 3 محاولات إعادة)؛ تفعيل التزامن اختياري عبر shouldRunSynchronously: true |
| عند الفشل | يتم إحباط التثبيت قبل أي تغيير في المخطط | غير متزامن: تُعاد المحاولة حتى 3 مرات. متزامن: يتلقى المستدعي POST_INSTALL_ERROR (لن يتم التراجع عن تغييرات المخطط). |
| الاستخدام النموذجي | انسخ البيانات احتياطيًا أو أصلح بيانات قد يفقدها الترحيل؛ ارفض ترقية خطِرة بإلقاء استثناء. | بذر بيانات افتراضية، تهيئة مساحة العمل، تسجيل موارد خارجية |
| ترغب في… | استخدام |
|---|---|
| بذر البيانات، تهيئة مساحة العمل، تسجيل موارد خارجية | post-install |
| عمل طويل الأمد لا ينبغي أن يحجب استجابة التثبيت | post-install (الوضع غير المتزامن الافتراضي، مع محاولات إعادة من العامل) |
| إعداد سريع يعتمد عليه المستدعي مباشرةً بعد عودة التثبيت | post-install مع shouldRunSynchronously: true |
| قراءة البيانات أو نسخها احتياطيًا والتي قد يفقدها الترحيل القادم | pre-install |
| رفض ترقية قد تُفسد البيانات الحالية | pre-install (ارمِ من المعالج) |
| تنفيذ مواءمة في كل ترقية | أي من الخطافين مع shouldRunOnVersionUpgrade: true |
السلوك المشترك بين كلا الخطافين
- إعداد التهيئة هو إعداد
defineLogicFunctionنفسه مطروحًا منه إعدادات المشغّل، مضافًا إليهshouldRunOnVersionUpgrade. - موعد تشغيله: في عمليات التثبيت الجديدة فقط، افتراضيًا. عيِّن
shouldRunOnVersionUpgrade: trueلتشغيله أيضًا عند الترقيات. استخدمpreviousVersion/newVersionللتفرع حسب مسار الترقية. - أهمية اللاّتغيّر (Idempotency): قد يُعاد تشغيل post-install غير المتزامن، وأيٌّ من الخطافين يُعاد تشغيله عند الترقيات عندما يكون
shouldRunOnVersionUpgradeمفعّلًا. - يتم حقن بيئة دوال المنطق المعتادة (
APPLICATION_ID، وAPP_ACCESS_TOKEN، وAPI_URL)، لذا يمكنك استدعاء Twenty API باستخدام رمز التطبيق الخاص بك. - يُربَط الخطّاف تلقائيًا بملف بيان التطبيق وقت الإنشاء (
preInstallLogicFunction/postInstallLogicFunction) — لا حاجة للإشارة إليه فيdefineApplication(). - القيمة الافتراضية لـ
timeoutSecondsهي 300 للسماح بمهام إعداد أطول مثل بذر البيانات. - غير منفَّذ في نمط التطوير: يتخطى
yarn twenty devتدفق التثبيت ويزامن الملفات مباشرةً، لذا لا تعمل الخطافات هناك مطلقًا. بدلًا من ذلك، شغّلها يدويًا:
definePostInstallLogicFunction
تعمل بعد تطبيق ترحيل البيانات الوصفية لمساحة العمل
definePostInstallLogicFunction
تعمل بعد تطبيق ترحيل البيانات الوصفية لمساحة العمل
يعمل بعد انتهاء تثبيت تطبيقك: تمت مزامنة البيانات الوصفية، وتم إنشاء عميل SDK، وأصبح من الممكن الاستعلام عن المخطط الجديد. مثال — بذر سجل افتراضي في عمليات التثبيت الجديدة:تتحكم الشارة
src/logic-functions/post-install.ts
shouldRunSynchronously في نموذج التنفيذ:false(الإعداد الافتراضي) — يُوضَع في قائمة انتظار الرسائل (retryLimit: 3) ويُشغِّله عامل. تعود استجابة التثبيت بمجرد وضع المهمة في قائمة الانتظار. يُستخدم للأعمال طويلة الأمد — بذر مجموعات بيانات كبيرة، وواجهات برمجة تطبيقات بطيئة لأطراف ثالثة.true— يُنفَّذ مضمَّنًا أثناء تدفق التثبيت. يحجب طلب التثبيت حتى ينتهي المعالج؛ يظهر الخطأ الذي يتم رميه كـPOST_INSTALL_ERRORللمستدعي (بدون محاولات إعادة). يُستخدم للأعمال السريعة التي يجب إتمامها قبل الاستجابة. تم تطبيق الترحيل بالفعل في هذه المرحلة، لذا لا يؤدي الفشل إلى التراجع عن تغييرات المخطط — بل يُظهِر الخطأ فقط.
definePreInstallLogicFunction
تعمل قبل تطبيق ترحيل البيانات الوصفية لمساحة العمل
definePreInstallLogicFunction
تعمل قبل تطبيق ترحيل البيانات الوصفية لمساحة العمل
يعمل قبل ترحيل البيانات الوصفية، مقابل المخطط السابق — المكان المناسب لنسخ البيانات احتياطيًا التي قد يفقدها الترحيل، أو لرفض ترقية خطِرة. قبل التنفيذ، يُشغِّل الخادم مزامنة ذات طابع إضافي فقط “pared-down sync” تُسجِّل دالة ما قبل التثبيت للإصدار الجديد فقط؛ أما كل ما عدا ذلك — كائنات الإصدار السابق وحقوله وبياناته — فيبقى دون مساس عندما يعمل المعالج.ما قبل التثبيت دائمًا متزامن ويحجب عملية التثبيت. إذا رمى المعالج استثناءً، تُلغى عملية التثبيت قبل أي تغيير في المخطط — وتبقى مساحة العمل على الإصدار السابق بحالة متّسقة. هذا مقصود: ما قبل التثبيت هو فرصتك الأخيرة لرفض ترقية تنطوي على مخاطر.مثال — نسخ قيم حقل قديم قبل أن يُسقِطه الترحيل:
src/logic-functions/pre-install.ts