الانتقال إلى المحتوى الرئيسي
يجب أن يحتوي كل تطبيق على استدعاء واحد فقط لـ defineApplication. يحدّد ما يلي:
  • الهوية — المعرّف الشامل، واسم العرض، والوصف.
  • الأذونات — الدور الذي تعمل بموجبه دوال المنطق والمكوّنات الأمامية الخاصة به.
  • المتغيرات (اختياري) — أزواج مفتاح–قيمة تُتاح لكودك كمتغيرات بيئة.
  • خطافات ما قبل التثبيت/ما بعد التثبيت (اختياري) — راجع Logic Functions.
src/application-config.ts
الملاحظات:
  • حقول universalIdentifier هي معرّفات حتمية تملكها أنت. أنشِئها مرة واحدة واحتفظ بها ثابتة عبر عمليات المزامنة.
  • applicationVariables تصبح متغيرات بيئة لوظائفك ومكوّناتك الأمامية. في وظائف المنطق (على جانب الخادم)، تكون متاحة على شكل process.env.VARIABLE_NAME. في المكوّنات الأمامية، استخدم getApplicationVariable('VARIABLE_NAME') من twenty-sdk/front-component. يتم حقن المتغيّرات المعلَّمة بـ isSecret: true في وظائف المنطق فقط. المكوّنات الأمامية تتلقّى المتغيّرات غير السرّية فقط.
  • يتم اكتشاف الدور الافتراضي تلقائيًا من ملف الدور المميز بـ defineApplicationRole() — لست بحاجة إلى الإشارة إليه من defineApplication().
  • يتم اكتشاف دوال ما قبل التثبيت وما بعده تلقائيًا أثناء بناء البيان — لا حاجة للإشارة إليها في defineApplication().
  • لا يزال تمرير defaultRoleUniversalIdentifier بشكل صريح مدعومًا من أجل التوافق مع الإصدارات السابقة، ولكنه مُهمل لصالح defineApplicationRole().
  • serverVariables هي تكوينات وأسرار بنطاق المثيل (مثل مفاتيح واجهة برمجة التطبيقات). على عكس applicationVariables، فهي لا تصرح عن أي قيمة في ملف manifest — حيث يقوم مشغّل مساحة العمل بملئها من إعدادات التطبيق، ويتم حقنها في دوال المنطق فقط بعد تعيينها.

أنواع المتغيرات

كل من applicationVariables وserverVariables يقبلان حقل type اختياريًا (ولـ SELECT / MULTI_SELECT، قائمة options). الأنواع المدعومة: TEXT (افتراضي)، BOOLEAN، NUMBER، NUMERIC، DATE، DATE_TIME، SELECT، MULTI_SELECT، ARRAY، RAW_JSON، RICH_TEXT.
src/application-config.ts
إن type يؤثر فقط على العرض والتحقق — حيث يختار حقل الإدخال المطابق في واجهة إعدادات مساحة العمل (زر تبديل، حقل أرقام، قائمة منسدلة، منتقي تاريخ، محرر JSON، …) ويسمح لعملية البناء بالتحقق من صحة إعداداتك (على سبيل المثال، يجب أن يعلن SELECT / MULTI_SELECT عن options غير فارغة). وهو لا يغيّر كيفية وصول القيمة إلى الشيفرة الخاصة بك. تُحَقَن القيم دائمًا كسلاسل نصية — فهذا جزء جوهري من متغيرات البيئة (process.env.* نصية فقط). عند تشغيل دالة المنطق الخاصة بك، يقوم المنفّذ بتسلسل كل قيمة وفقًا لـ type المعلن أثناء بناء process.env، بحيث يكون تنسيق السلسلة النصية متّسقًا بغض النظر عن كيفية تعيين القيمة (قيمة افتراضية في manifest، من واجهة الإعدادات، أو من إصدار سابق): حوّل السلسلة النصية مرة أخرى إلى النوع الذي تتوقعه:
ينطبق الأمر نفسه على مكوّنات الواجهة الأمامية التي تقرأ القيم عبر getApplicationVariable('VARIABLE_NAME') — فالقيمة المعادة هي سلسلة نصية؛ قم بتحليلها حسب الحاجة.

الدور الافتراضي للوظيفة

يتحكم الدور المعلن باستخدام defineApplicationRole() في ما يمكن لوظائف منطق التطبيق ومكوّنات الواجهة الوصول إليه:
  • رمز وقت التشغيل المحقون باسم TWENTY_APP_ACCESS_TOKEN مستمد من هذا الدور.
  • يكون عميل واجهة برمجة التطبيقات مضبوط الأنواع مقيّدًا بالأذونات الممنوحة لذلك الدور.
  • اتبع مبدأ أقل امتياز: صرّح فقط عن الأذونات التي تحتاجها دوالك.
عند إنشاء هيكل لتطبيق جديد، ينشئ CLI ملف دور مبدئي في src/roles/default-role.ts. راجع Roles & Permissions للاطلاع على المرجع الكامل.

بيانات التعريف لسوق التطبيقات

إذا كنت تخطط لـ نشر تطبيقك، فإن هذه الحقول الاختيارية تتحكّم في كيفية ظهوره في السوق:
القيمتان logoUrl وscreenshots هما اسمَان مهملان بديلان لـlogo وgalleryImages. عناوين URLs المطلقة الخارجية (http:// أو https://) غير مدعومة لهذه الحقول: سيتم تجاهلها مع إظهار تحذير وقت البناء. بدلًا من ذلك، ضمِّن الصور في مجلد public/ الخاص بتطبيقك.