في التطبيقات المختلفة ، غالبًا ما تكون هناك حاجة لتطبيق تمثيل هرمي للكائنات. عادةً ما يتم استخدامه لتصنيفها عن طريق تحديد مجموعات. تشكل هذه المجموعات شجرة ذات عمق ديناميكي ، يتم استخدامها بعد ذلك للتنقل وتجميع البيانات وإعداد المعلمات.
في هذه المقالة ،
سأظهر كيف يمكن تنفيذ هذا المنطق في النظام الأساسي المفتوح والمجاني
lsFusion .
كمثال ، دعنا نأخذ منطقًا بسيطًا تحتاج فيه إلى تنفيذ منطق المنتجات المجمعة في مجموعات محددة تشكل تسلسلًا هرميًا للعمق الديناميكي. في هذه الحالة ، يمكن ربط البضائع بعقدة وسيطة من الشجرة.
أولاً ، وفقًا للمخطط القياسي ، قم بتعريف كيان
مجموعة المنتج كفئة مسطحة بسيطة مع تحرير النماذج وقائمة:
الآن لنجعل التسلسل الهرمي خارج المجموعات. للقيام بذلك ، نقدم خاصية تحتوي على رابط للمجموعة الأصل:
بعد ذلك ، نجعل خاصية ستحدد العلاقة بين المجموعتين بشكل متكرر:
على أي مبدأ
يعمل مشغل
RECURSION ، لن أصف في هذه المقالة ، لكن خاصية
المستوى ستُرجع 2 إلى درجة "طول المسار بين
الطفل والوالد في شجرة الاتجاه المقابلة". يشير
MATERIALIZED إلى أن النظام الأساسي يجب أن يخزنه في جدول منفصل ، حيث سيكون لكل سجل من العقد المتصلة سجل منفصل مع قيمة
المستوى في العمود المقابل. مع أي تغيير في بنية الشجرة ، سيتم إعادة حساب هذا الجدول تلقائيًا.
على سبيل المثال ، لمثل هذه الشجرة:
سيبدو الجدول كالتالي:
في ذلك ،
key0 هو
الكود التنازلي ، و
key1 هو الكود الأصلي. سيكون عدد الإدخالات في هذا الجدول مساويًا تقريبًا لعدد المجموعات التي يبلغ متوسط عمق الشجرة فيها. سيكون نظام التخزين هذا مفيدًا إذا كنت بحاجة إلى حساب جميع أحفاد المجموعة ، فلن تضطر إلى اللجوء إلى طلبات CTE ، ولكن يمكنك استخدام JOIN المعتاد لهذا الجدول.
علاوة على ذلك ، بناءً على الخاصية التي تم إنشاؤها ، يمكن حساب الاسم الأساسي للمجموعة:
على سبيل المثال ، بالنسبة لمجموعة
Milk في الصورة أعلاه ، سيكون الاسم الأساسي
هو All / Groceries / Dairy / Milk .
يتم تحديد
CHARWIDTH لإخبار النظام الأساسي عن العرض المطلوب استخدامه لهذه الخاصية (بالأحرف) عند إنشاء الواجهة.
الآن سنقوم بتوسيع النموذج لعرض وتحرير المجموعات مع الخصائص التي تم إنشاؤها حديثا:
سيبدو النموذج مع قائمة المجموعات في نموذج مسطح كما يلي:

بعد اكتمال منطق المجموعات ، أضف
منتج الكيان:
قم بإنشاء رابط منتج لمجموعة المنتجات التي ينتمي إليها:
أخيرًا ، سنقوم بإنشاء نموذج لإدخال البضائع ، حيث سيكون هناك عنصرين: شجرة المجموعات وقائمة البضائع. بالنسبة للمجموعة الشجرية المحددة ، سيتم عرض المنتجات التي تنتمي إلى أي سليل للعقدة المحددة فقط في القائمة. أولاً ، قم بتعريف نموذج وإضافة شجرة إليه مع قائمة بالمجموعات:
باستخدام الأمر
TREE ، يتم إنشاء شجرة من كائنات فئة
المجموعة ، والتي يتم تحديد تسلسلها الهرمي بواسطة الخاصية
الأصل التي تم إنشاؤها مسبقًا.
أضف النموذج إلى المستكشف:
في هذا المثال ، لن يتم إدخال البضائع وتحريرها من خلال مربعات حوار منفصلة ، ولكن مباشرةً في النموذج نفسه. للقيام بذلك ، قم بإنشاء إجراء لإنشاء منتج مع الإشارة إلى المجموعة المحددة:
الآن ، في النموذج الذي تم إنشاؤه مسبقًا ، أضف قائمة المنتجات ذات الأعمدة القابلة للتعديل:
رمي على أزرار النموذج لإضافة وإزالة البضائع:
نظرًا لأن الإجراء
newProduct محدد لمجموعة من المنتجات ، فيجب الإشارة بوضوح إلى أنه يجب إضافته إلى شريط الأدوات مع قائمة المنتجات (ع).
يبقى تكوين التصميم بحيث يتم عرض الشجرة على اليسار ، وقائمة المنتجات على اليمين ، وهناك فاصل بينهما ، يمكنك تغيير حجم الكائنات به:
الشكل النهائي سيبدو كما يلي:

بعد إنشاء التسلسل الهرمي للمنتجات والمجموعات ، غالبًا ما تكون هناك حاجة لتعيين بعض المعلمات في أي من المستويات. علاوة على ذلك ، كلما تم تحديد التسلسل الهرمي ، زادت قيمته. على سبيل المثال ، إذا تم تعيين
Dairy group على 30 ، وتم تعيين
Milk Milk على 20 ، فيجب تحديد المجموعة الأخيرة.
لنفترض أنك تريد تحديد الخيار
المتميز بهذه الطريقة. للقيام بذلك ، قم أولاً بإنشاء الخاصية المناسبة للمجموعة:
من أجل العثور على القيمة المطلوبة ، ما عليك سوى استخدام المجموعة مع اختيار القيمة الأخيرة:
يترجم هذا التعبير إلى لغة عادية ، ويجد (
GROUP ) آخر علامة (
LAST ) في المجموعة العليا (
المجموعة الأم ) ، بترتيب تنازلي للمسافة التي تصل إليها (
ORDER DESC level ( التابع
، الوالد) ) ، وهذا الترميز له معين (
أين العلامات (الوالد) ). هنا أود أن أشير إلى كيفية توافق lsFusion مع اللغة الطبيعية.
أضف الخصائص التي تم إنشاؤها أعلاه إلى نموذج المنتج في شجرة المجموعة:
افترض أن هناك حاجة لتعيين علاوة مباشرة للمنتج ، وأنه يجب أن يكون أعلى من علاوة المجموعة. للقيام بذلك ، قم أولاً بإنشاء الخاصية الأساسية للمنتج:
ثم نعلن عن خاصية تعيد القسط من المنتج ، إذا تم تحديده ، أو القسط من المجموعة:
بعد ذلك ، قم بإضافة كلا الخصائص إلى النموذج:
ستبدو آلية تحديد العلاوات للمجموعات والمنتجات كما يلي:

استنتاج
في المقالة أعلاه ، تمكنا من إنشاء منطق للبضائع ، ودمجها في مجموعات ذات تسلسل هرمي بعمق ديناميكي ، وكذلك تزويد المستخدم بالقدرة على تعيين أقساط التأمين على أي مستوى. كل هذا استغرق حوالي 70 سطرًا كبيرًا من الكود. يمكنك تجربة كيفية عمله عبر الإنترنت ، وكذلك إجراء تغييراتك على الكود في
القسم المناسب
من الموقع (علامة تبويب النظام الأساسي). إليك شفرة المصدر الكاملة التي تحتاج إلى لصقها في الحقل المناسب:
يمكن تعديل القالب الموصوف أعلاه واستخدامه بطرق مختلفة عن طريق إضافة معلمات إضافية إلى الخصائص. على سبيل المثال ، في أحد عمليات تنفيذ
نظام ERP ، يتم تعيين أقساط المجموعات والسلع بهذه الطريقة ليس على المستوى العالمي ، ولكن بشكل منفصل لكل نوع من أنواع الأسعار. علاوة على ذلك ، فإن التنفيذ في التعقيد لا يختلف عن المثال الموصوف أعلاه.