شكراً جزيلاً، جميع الأجزاء!
لذا، أتوقع تشغيل مثيلات متعددة من Discourse، بالإضافة إلى نظام إشراف/تنسيق شامل (غير Discourse) في الخلفية. سيتم إضافة المواضيع إلى Discourse بإحدى طريقتين - إما بواسطة المستخدمين عبر آلية إنشاء المواضيع المعتادة في Discourse، أو بواسطة نظام الإشراف/التنسيق عبر واجهة برمجة التطبيقات (API).
عند إنشاء الموضوع عبر واجهة برمجة التطبيقات (API)، فإنه يمثل عادةً مهمة أو عنصر سير عمل مشابه سيكون له بالفعل معرف غير Discourse الخاص به.. لنسميه “المعرف الخارجي”.
عند إنشاء الموضوع بواسطة المستخدم داخل Discourse، سنستخدم خطافات الويب (webhooks) لتشغيل دالة Azure لإنشاء نسخة مبدئية في النظام المركزي (بحيث يتم ربط رسائل Discourse بتيار أوسع من المحتوى والمهام وما إلى ذلك). لذلك، مرة أخرى، سيكون للموضوع في Discourse بشكل غير مباشر “معرف خارجي” فريد - نقترح تحديث الموضوع به، عبر واجهة برمجة التطبيقات (API).
لدينا مكون سمة Discourse مخصص، والذي عند تحميل كل موضوع، سيستخدم Ajax لاسترداد معلومات غير مركزية لـ Discourse من النظام المركزي وعرضها على شاشة الموضوع.
بينما يمكننا استخدام معرف موضوع Discourse لمعلمة استدعاء Ajax والعثور على البيانات المطابقة، إلا أنه أكثر كفاءة استخدام “المعرف الخارجي” للقيام بذلك (إنه ببساطة أنظف، لأسباب متعددة - يتجنب عمليات البحث وما إلى ذلك).
يمكننا بسهولة تخزين “المعرف الخارجي” في حقل مخصص - لدينا بالفعل واحد لبيانات أخرى - لكننا لاحظنا أن واجهة برمجة تطبيقات المواضيع (Topics API) تحتوي على حقل “external_id” يبدو تمامًا كما نحتاج، وأفضل استخدامها لأسباب مختلفة .. إنها تجعل هذا الحقل المحوري إلى حد ما أسهل في دمجه في التقارير والتصديرات، وربما عمليات البحث المستقبلية وما إلى ذلك.
انظر لقطة الشاشة من Discourse API Docs
أعتقد أن هذا حقل جديد إلى حد ما - معظم النصائح في المنتدى تبدو متعلقة بحقل المعرف الخارجي للمستخدم (User external_id)، وهو ليس ما أحتاجه الآن. كما ذكرنا أعلاه، أقوم باسترداد نموذج Ember للموضوع (ضمن مكون السمة المخصص الخاص بي) ويمكنني الحصول على كل المعلومات تقريبًا حول الموضوع من خلاله … ولكن ليس حقل external_id.
(كما هو مذكور أعلاه - أنا أحصل على الموضوع باستخدام هذا الكود، الذي تم اقتراضه من مكان ما في هذا الموقع، لا أعرف أين في هذه المرحلة:
const topicController = api.container.lookup("controller:topic");
if (topicController) {
const thisTopic = topicController.get("model");
لذا، الطلب - هل حقل المعرف الخارجي الخاص بالموضوع مدفون في النموذج (“thisTopic”) في مكان ما، أم أنني أساء فهم هذه المفاهيم ويجب عليّ فقط استخدام الحقل المخصص لتخزين هذا المعرف الخارجي (أعرف أنني أستطيع جعل هذا النهج يعمل، وكيف! .. أنا فقط أفضل النظافة والاستعداد للمستقبل لاستخدام المعرف الخارجي المميز، إذا كان متاحًا بالفعل).
مرة أخرى، شكراً على المساعدة، أقدر ذلك!