تمرين - العمل مع البيانات الارتباطية
ستتعلم فِي هذا التمرين كيفية الوصول إلى البيانات ذات الصلة وكيفية إنشاء السجلات ذات الصلة فِي جداول متعددة. في هذا المثال، نستخدم المجموعات التي تخزن بياناتك بشكل مؤقت فقط. إذا كنت تريد حلاً يقوم بالحفظ فِي Dataverse أو SharePoint، فاستخدم الدالة Patch.
سنقوم بإنشاء Shopping Cart. نستخدم الجدول الأصلي (رأس الإيصال)، والجدول الفرعي (عناصر سطر الإيصال)، وجدول المنتجات (الجدول المرجعي). تبدو العلاقات كما يلي:
يعرض الرسم التخطيطي أعلاه ثلاثة جداول تحتوي على مفاتيح أساسية، ولكن جدول ReceiptLineItems (على اليمين) يحتوي على مفتاحين خارجيين يشيران إلى معرف ReceiptHeader ومعرف المنتجات، على التوالي. تشير رموز الرسم التخطيطي للأسطر التي تنتقل من جدولي ReceiptHeader وProducts إلى جدول ReceiptLineItems إلى علاقة رأس بأطراف. لذلك يمكن إدخال حقل معرف واحد (من كل منهما) للعديد من العناصر المختلفة فِي ReceiptLineItems.
ابدأ التمرين
انتقل إلى make.powerapps.com.
حدّد + إنشاء
حدّد تطبيق فارغ، ثم تطبيق لوحة فارغة.
قم بتسمية التطبيق Shopping Cart، وتأكد من أن الكمبيوتر اللوحي هو التنسيق، ثم حدّد إنشاء.
حدّد الآن إدراج من القائمة العلوية وحدّد زر.
في خاصية OnSelect لهذا الزر، أدخل التعليمات البرمجية التالية (يمكنك النسخ واللصق):
ClearCollect(Products, {ID:1, Name:"T-Shirt", Category: "Clothing"}, {ID:2, Name:"Sweatshirt", Category: "Clothing"}, {ID:3, Name:"Socks", Category: "Clothing"}, {ID:4, Name:"Necklace", Category: "Jewelry"}, {ID:5, Name:"Ring", Category: "Jewelry"}, {ID:6, Name:"Coffee Mug", Category: "Misc."}, {ID:7, Name:"Keychain", Category: "Misc."} )
اضغط مع الاستمرار على مفتاح Alt وحدّد الزر. لديك الآن مجموعة فِي الذاكرة بعنوان Products وهي البيانات الخاصة بمعرضنا الأول. يمكنك إبعاد هذا الزر.
أضف معرضاً عمودياً إلى الشاشة وحدّد مجموعة المنتجات كمصدر للبيانات. يؤدي القيام بذلك إلى استبدال CustomGallerySample بـ المنتجات فِي الخاصية Items.
قم بتغيير التخطيط إلى العنوان والعنوان الفرعي.
انقل معرضك الجديد إلى أقصى الجانب الأيسر من الشاشة وعيّن الخاصية OnSelect الخاصة بالمعرض لتساوي:
Collect(colCart, ThisItem)
أضف الآن معرضاً عمودياً ثانياً (Gallery2)، مع تعيين مصدر البيانات باعتباره colCart وتعيين التخطيط إلى العنوان والعنوان الفرعي. احذف رمز الشارة التي تشير إلى اليمين من المعرض.
ضع هذا المعرض على الجانب الأيمن من الشاشة بحيث يبدو مماثلاً للشاشة أدناه، مع Gallery1 على اليسار وGallery2 على اليمين:
اضغط على مفتاح Alt وحدّد رمز التأشير إلى اليمين فِي الصف العلوي من Gallery1. يجب أن يحتوي Gallery2 الآن على عنصر بداخله. يمكنك الاستمرار فِي الضغط على المفتاح Alt لتحديد عناصر من Gallery1 لتعبئة Gallery2.
أضف الآن زراً ثانياً إلى الشاشة. قم بإنشاء خاصية Text للزر "سحب"، وقم بتعيين خاصية OnSelect الخاصة بالزر على المعادلة التالية (يمكنك النسخ واللصق):
Collect( ReceiptHeader, { ID: If( IsEmpty(ReceiptHeader), 1, Last(ReceiptHeader).ID + 1 ), Name: User().FullName, Date: Today() } ); ForAll( colCart, Collect( ReceiptLineItems, { ID: If( IsEmpty(ReceiptLineItems), 1, Last(ReceiptLineItems).ID + 1 ), ProductID: ThisRecord.ID, ReceiptHeaderID: Last(ReceiptHeader).ID } ) ); Clear(colCart)
يقوم هذا الرمز بإنشاء مجموعة ReceiptHeader المكونة من عنصر واحد والتي تتضمن معلومات حول المستخدم الحالي والتاريخ الحالي وتعيين معرف للمستخدم. ثم لكل عنصر فِي colCart، فإنه يضيف عنصر سطر إلى ReceiptLineItems. يتضمن هذا العنصر حقل معرف مرقم تلقائيًا، ومعرف سجل ReceiptHeader الذي تم إنشاؤه حديثًا (الذي يربط العنصر بحدث الشراء)، ومعرف المنتج فِي colCart. ثم يقوم بمسح colCart، منذ أن تم إرساله. لذلك تريد ملء سلة التسوق الخاصة بك قبل الاختيار!
اضغط على المفتاح Alt وحدّد زر "إتمام البيع" لتحميل هذه المجموعة.
أنشئ شاشة جديدة (Screen2) حتى نتمكن من الحصول على لوحة جديدة لنرى كيف تبدو البيانات التي تم إنشاؤها حديثاً.
انتقل إلى شاشتك الجديدة وأضف معرضين عموديين منسّقين بنفس طريقة تنسيق المعرضين فِي صفحتنا الأخيرة. عيّن مصدر البيانات أو خاصية Items للمعرض على اليسار (Gallery3) إلى ReceiptHeader، وحدّد ReceiptLineItems كمصدر للمعرض الثاني (Gallery4).
على المعرض الموجود على اليسار (Gallery3)، غيّر الخاصية Text للعنوان الفرعي إلى ThisItem.Date.
انتقل إلى المعرض الموجود على اليمين (Gallery4) وقم بتعديل خاصيّة Items إلى ما يلي:
Filter(ReceiptLineItems, ReceiptHeaderID=Gallery3.Selected.ID)
الآن (ما زلنا فِي Gallery4) غيّر الخاصية Text للعنوان إلى ما يلي:
LookUp(Products, ID=ThisItem.ProductID).Name
بعد ذلك، (ما زلنا فِي Gallery4)، غيّر الخاصيّة Text للعنوان الفرعي إلى ما يلي:
LookUp(ReceiptHeader, ID=ThisItem.ReceiptHeaderID).Name
لديك الآن صفحة محفوظات الأوامر التي تعمل بشكل صحيح، مع البيانات الرئيسية للأمر على اليسار فِي Gallery3 والعناصر المشتراة على اليمين فِي Gallery4. يمكنك تحديد عنصر رأس إيصال الاستلام من الجانب الأيسر لمشاهدة العناصر السطرية من ذلك الإيصال على اليمين.
يمكنك العودة إلى الشاشة الأولى وتحديد عناصر جديدة من المعرض1 لملء Shopping Cart (التي يمثلها المعرض2). بعدئذ يمكنك الضغط على زر تسجيل الخروج، والانتقال إلى Screen2 ومشاهدة طلب آخر باسمك. يؤدي تحديد أي من الطلبين إلى إظهار العناصر التي تم شراؤها لهذا الطلب المحدد.
يمكنك مواصلة العمل وإكمال الحل الخاص بك. يمكنك إضافة المزيد من التصنيفات الوصفية وأجزاء التنقل وتحديد ما سيفعله المستخدم بتطبيق مثل هذا.
نأمل أن ترى إمكانيات استخدام البيانات العلائقية. على الرغم من أن هذا ليس حلاً كاملاً، إلا أنه يمكنك البدء فِي رؤية إمكانيات استخدام تقنيات مثل هذه فِي تطبيقاتك.