استراتيجيات تحميل البيانات

مكتمل

Power Apps يوفر للمستخدمين طريقة فعالة للعمل مع بيانات الأعمال والعمليات الخاصة بهم. يمكن للتطبيقات الوصول إلى البيانات باستخدام الموصلات. بشكل عام، عند بدء تشغيل تطبيق أو عرض شاشة جديدة، يتم استرداد بعض المعلومات للعرض الأولي. غالباً ما تكون عناصر التحكم على الشاشات مرتبطة مباشرة بالموصلات، ويتم استرداد البيانات عند تقديم الشاشة للمستخدم. يمكن أن يؤدي التنقل من شاشة إلى شاشة أيضاً إلى استرداد البيانات مرة أخرى. في بعض الحالات، إذا لم يتم تحسينها، يمكن أن تؤدي هذه العملية إلى تجربة مستخدم دون المستوى أو معالجة إضافية. من خلال تقييم احتياجات المستخدم وكيفية تحميل البيانات، يمكنك تطوير استراتيجية لتحسين الأداء.

أثناء تقييم تطبيقك، ضع فِي اعتبارك الأسئلة الرئيسية التالية:

  • هل البيانات الأولية التي تظهر للمستخدم مفيدة؟ في كثير من الأحيان، يرغب صانعو التطبيقات فِي عرض البيانات عند وصول المستخدمين إلى الشاشة. يمكن أن يجعل هذا السلوك التطبيق يبدو جذاباً ويتم عرضه جيداً؛ ومع ذلك، فهو غير فعال عندما لا يتم استخدام القائمة الأولية بانتظام. يمكن أن يؤدي هذا الموقف إلى بطء غير مقصود فِي التطبيق عندما يقوم المستخدمون بتحميل كمية كبيرة من السجلات غير المفلترة مسبقاً.

  • هل يقدم التطبيق عومل تصفية البيانات الصحيحة؟ يمكن أن تكون إضافة عناصر تحكم بحيث يمكن للمستخدمين إدخال معايير لتقليل عدد الصفوف المعروضة مفيدة لإنتاجية المستخدم وأدائه.

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

  • هل تعلم ما هي البيانات الثابتة وما هي البيانات التي يتم تحديثها بشكل متكرر؟ قبل التفكير فِي تحميل البيانات مسبقاً، تأكد من معرفة ما إذا كان يتم تحديثها بشكل متكرر. يمكن أن يساعد التخزين المؤقت للبيانات الثابتة أو المتغيرة بشكل غير منتظم فِي تحسين أداء التطبيق من خلال جعل البيانات جاهزة عند عرض الشاشة. يمكن أن يكون لبيانات التخزين المؤقت التي تتغير بشكل متكرر تأثير ضار على أداء التطبيق أو يمكن أن تقدم بيانات تالفة للمستخدم.

  • هل تريد إظهار مؤشر التحميل للمستخدم؟ إذا كنت تقوم بربط البيانات من الموصل مباشرة إلى عنصر التحكم، فلن يكون لديك خيار إظهار وإخفاء مؤشر التحميل كما تفعل إذا قمت بتخزين البيانات مؤقتاً فِي مجموعة.

  • ما مقدار البيانات التي سيتم تحميلها من مصدر البيانات؟ إذا كنت تفكر فِي التخزين المؤقت، فتأكد من أن مصدر البيانات الذي تريد تخزينه فِي ذاكرة التخزين المؤقت لا يحتوي على صفوف أكثر من تلك التي تمت تكوينها لحد صف البيانات فِي إعدادات التطبيق.

  • هل تحتاج إلى حساب الأعمدة أو معالجة البيانات التي قمت بتحميلها؟ إذا كان مصدر البيانات يدعم العمليات الحسابية المطلوبة، وكان العمود مفيداً عبر تطبيقات متعددة، فحاول تنفيذ هذه الأعمدة فِي مصدر البيانات. على سبيل المثال، يحتوي Microsoft Dataverse على إمكانيات العمود المحسوب والقيمة المحتسبة.

  • كم مرة تحتاج إلى رؤية البيانات المضافة/المعدلة بواسطة تطبيق آخر أو أتمتة مختلفة؟ إذا كنت تقوم بتحميل البيانات مسبقاً فِي مجموعة، فلن يتم عرض سوى المعلومات المحدثة إذا قمت بإعادة تحميل المجموعة.

ربط مصدر البيانات المباشر

عندما تقوم بتعيين خاصية العناصر لمعرض على جدول موصل جدولي، أو إذا كنت تستخدم تعبير مثل دالة Filter() الذي يستند إلى الجدول، فإنك بذلك تقوم بربط مصدر البيانات المباشر. يرتبط التعبير التالي مباشرة بجدول المكاتب.

SortByColumns(Filter([@Desks], StartsWith(Title, TextSearchBox1.Text)), "Title", If(SortDescending1, Descending, Ascending))

هذا النهج هو الأكثر أساسية لتحميل البيانات. يتم استرداد البيانات مباشرة من الموصل حيث تتغير معايير عامل التصفية. هذا الأسلوب هو طريقة تعريفية لتحميل البيانات حيث يمكن أن يقرر وقت تشغيل Power Apps تحميل البيانات وتحديثها. نتيجة لذلك، ليس لديك خيار عرض مؤشر التحميل للمستخدم.

بعد تحميل البيانات، يمكن استخدامها بواسطة عناصر التحكم دون استرجاعها من مصدر البيانات فِي كل مرة. يمكنك تحديث البيانات يدوياً من مصدر البيانات باستخدام التحديث (tableName). يتم تحديث البيانات المعروضة فِي عناصر التحكم تلقائيًا عند تعديل البيانات فِي مكان آخر فِي التطبيق.

ميزة أخرى هامة للربط المباشر هي أنك لست مقيداً بإعداد التطبيق حد صف البيانات إذا كان الموصل يدعم التفويض. على سبيل المثال، إذا كان لديك 100000 صف جهة اتصال فِي Microsoft Dataverse وقمت بربط معرض مباشرةً بالجدول، فسيحمل المعرض مجموعة أولية من العناصر ثم يحصل على المزيد أثناء قيام المستخدم بالتمرير. تُظهر لقطة الشاشة التالية أحداث أداة المراقبة التي تتضمن استدعاء getRows لتحميل البيانات الأولية، متبوعة بعدة استدعاءات getMoreRows أثناء قيام المستخدم بالتمرير فِي المعرض. يتم إجراء هذه الاستدعاءات تلقائيًا بواسطة Power Apps، ولا يحتاج التطبيق إلى معالجة ترحيل البيانات.

لقطة شاشة تُظهر أحداث أداة المراقبة بثلاثة أعمدة.

كما ذكرنا سابقاً، لا تريد أن تقدم للمستخدم 100,000 صف. بدلاً من ذلك، باستخدام مصادر البيانات التي تدعم التفويض، يمكنك إضافة عامل تصفية ثم السماح للموصل بمعالجة معايير التصفية وإرجاع الصفوف المتطابقة فقط.

التحميل المسبق للبيانات فِي المجموعة

يسمح لك التحميل المسبق للبيانات فِي مجموعة بالتحكم فِي تحميل البيانات إما فِي خصائص App.OnStart أو OnVisible. التحميل المسبق للبيانات فِي App.OnStart يعد اختياراً جيداً إذا كنت بحاجة إلى نفس البيانات على شاشات متعددة. بدلاً من ذلك، يسمح لك التحميل المسبق للبيانات من OnVisible بتأجيل التحميل حتى يتم استخدام تلك الشاشة. يتيح لك أي من الخيارين إظهار مؤشر التحميل أثناء تحميل البيانات.

يقوم التعبير التالي بمسح مجموعة colDesks وتحميل جميع صفوف جدول المكاتب حتى إعداد تطبيق حد صف البيانات.

ClearCollect(colDesks,Desks)

لاستخدام البيانات مسبقة التحميل، قم بتغيير المعادلات ذات الصلة لاستخدام المجموعة.

لقطة شاشة ل‏‏طريقة عرض شجرة > قائمة الشاشات مع تمييز المعادلات المحدثة.

عند استخدام البيانات التي تم تحميلها مسبقاً فِي مجموعة، لا يتم تحديث البيانات ما لم تستخدم دالة ClearCollect() مرة أخرى لإعداد أحدث البيانات. يختلف هذا السيناريو عن ربط مصدر البيانات المباشر، حيث تتم إدارة التحديث تلقائيًا بواسطة Power Apps.

ميزة أخرى لهذا الأسلوب هي أنه يمكنك السماح للمستخدم بتعديل ومراجعة صفوف متعددة أثناء التنقل، دون الحاجة إلى حفظ كل صف باستخدام مصدر البيانات. بعد اكتمال التغييرات، يمكنك إلزامها مرة أخرى بمصدر البيانات باستخدام استدعاء دالة Patch (). إذا كنت تريد التراجع عن جميع التغييرات قبل الالتزام، فيمكنك تحديث المجموعة. يوضح المثال التالي عملية استخدام الدالة Patch() لإجراء التغييرات فِي مجموعة colDesks مرة أخرى إلى جدول المكاتب فِي Dataverse.

Patch(Desks,colDesks)

تحميل من موقع التخزين الدائم

يتمثل أحد أشكال أسلوب التحميل المسبق البسيط فِي تحميل البيانات من التخزين المحلي لجهازك أولاً ثم متابعة التحميل مباشرةً من مصدر البيانات. هذه الاستراتيجية مفيدة عندما يكون مصدر البيانات بطيئاً أو متاحاً بشكل متقطع. لتنفيذ هذا النمط، اتبع الخطوات التالية:

  1. قم بتحميل البيانات، إن وجدت، من التخزين المحلي للجهاز باستخدام دالة LoadData (). في هذه المرحلة، فإن أي عنصر تحكم مرتبط بالمجموعة سيظهر البيانات.

  2. تحميل البيانات مباشرة من موصل مصدر البيانات فِي نفس المجموعة. في هذه المرحلة، أي عنصر تحكم مرتبط بالمجموعة سيعرض البيانات المحدثة التي تم تحميلها من الموصل.

  3. استخدم دالة SaveData() للاحتفاظ بأحدث البيانات فِي التخزين المحلي للجهاز.

ستبدو المعادلات الخاصة بك مشابهة للمعادلات التالية:

LoadData(colDesks,"LocalDesks",true);

ClearCollect(colDesks,Desks);

SaveData(colDesks,"LocalDesks");

إذا كان المستخدمون غير متصلين أحياناً، فيمكنك إضافة فحص شرطي إذا كانوا متصلين قبل محاولة تحميل بيانات جديدة. ستبدو المعادلة المعدلة مشابهة للمعادلة التالية:

LoadData(colDesks,"LocalDesks", true);

If (Connection.Connected,

ClearCollect(colDesks,Desks);

SaveData(colDesks,"LocalDesks")

)

التحميل المسبق فِي متغير

عند العمل باستخدام موصلات غير مجدولة، مثل مستخدمي Office 365، يمكنك تحسين الأداء عن طريق حفظ النتائج من استدعاء دالة فِي متغير. في المثال التالي، تستدعي المعادلات الدالة ثلاث مرات للحصول على معلومات من ملف التعريف:

Set(profileDisplayName,Office365Users.MyProfileV2().displayName);

Set(profileHireDate,Office365Users.MyProfileV2().hireDate);

Set(profileCity,Office365Users.MyProfileV2().city);

يعتبر التعبير التالي أكثر فاعلية لأنه يستدعي الموصل مرة واحدة فقط ولكنه لا يزال يملأ المتغيرات الثلاثة:

Set(profile,Office365Users.MyProfileV2());

Set(profileDisplayName,profile.displayName);

Set(profileHireDate,profile.hireDate);

Set(profileCity,profile.city);

يمكنك أيضاً تبسيطها إلى متغير واحد يسمى ملف التعريف ثم استخدام التدوين المنقط للوصول إلى الخصائص متى لزم الأمر. على سبيل المثال، يمكنك استخدام خاصية profile.hireDate بدلاً من متغير profileHireDate. للقيام بذلك، ما عليك سوى استخدام التعبير التالي فِي App.OnStart:

Set(profile,Office365Users.MyProfileV2());

بعد ذلك، بدلاً من استخدام تعبير If(IsBlank(profileHireDate),Red,Green) الذي يستخدم المتغيرات الفردية لتعيين لون عناصر التحكم، يمكنك استخدام التعبير If(IsBlank(profile.hireDate),Red,Green) الذي يستخدم التدوين المنقط profile.hireDate بدلاً من ذلك.

تحميل البيانات بشكل متزامن

إذا كنت تقوم بتحميل البيانات مسبقاً من الموصلات ولديك عناصر متعددة تقوم بتخزينها مؤقتاً، فسيتم تشغيلها بشكل افتراضي واحدة تلو الأخرى بالتتابع. يوضح المثال التالي عملية تحميل جدولين وملف تعريف المستخدم فِي مجموعات ومتغير عمومي.

ClearCollect(colDesks,Desks);

ClearCollect(colDeskFeatures,'Desk Features');

Set(userProfile, Office365Users.MyProfileV2())

إذا كان كل جدول يقوم بتحميل البيانات مسبقاً بشكل مستقل، فيمكنك تشغيلها بالتوازي باستخدام دالة Concurrent ().

Concurrent(

ClearCollect( colDesks,Desks ),

ClearCollect( colDeskFeatures, 'Desk Features' ),

Set( userProfile, Office365Users.MyProfileV2() )

)

تحميل البيانات مرة واحدة

إذا قمت بتحميل البيانات مسبقاً فِي App.OnStart، فلن يتم تشغيلها إلا مرة واحدة عند بدء تشغيل التطبيق. إذا كنت تستخدم خاصية OnVisible بدلاً من ذلك للتأجيل، فقم بالتحميل المسبق لأول مرة عند استخدام الشاشة وسيتم تشغيل OnVisible فِي كل مرة يتم فيها الانتقال إلى الشاشة. من المحتمل أن يؤدي هذا النهج إلى تحديث مجموعتك بشكل متكرر. لتجنب هذا الموقف، بدلاً من القيام بدالة ClearCollect ()، ستحتاج إلى التحقق أولاً مما إذا كنت قد قمت بالفعل بتحميل البيانات.

استبدل استدعاء دالة ClearCollect(colDesks,Desks) بالتعبير If(IsEmpty(colDesks),ClearCollect(colDesks,Desks)) والذي يتضمن التحقق مما إذا كانت المجموعة فارغة.

إعدادات التطبيق وتحميل البيانات

كما ذكرنا سابقاً، يمكن أن تؤثر إعدادات التطبيق فِي أداء وسلوكيات التطبيق. إذا كنت تستخدم المجموعات لتحميل البيانات مسبقاً، فسيتم تطبيق حد صف البيانات ويمكن أن يجعل مجموعات البيانات الأكبر غير مناسبة للتحميل المسبق.

إعداد آخر يجب أن تكون على دراية به هو تأخير التحميل. يؤخر هذا الإعداد تشغيل استدعاءات تعبيرات الشاشة إلى أن تكون هناك حاجة إليها، ثم يقوم بتشغيلها عند الطلب. يتم تشغيل هذا الإعداد افتراضياً لجميع التطبيقات الجديدة ويمكن تشغيله يدوياً للتطبيقات الأقدم.

يعد تحسين تحميل بيانات تطبيقك أمراً فريداً لكل تطبيق. أوضح هذا الموضوع كيفية تقييم احتياجات المستخدمين والتطبيق لتخصيص استراتيجية تحميل البيانات الخاصة بك للحصول على أفضل أداء وتجربة مستخدم. ولا يعتبر التحسين مجرد تمرين لمرة واحدة ولكنه إجراء ستقوم به طوال مده بقاء التطبيق. بالإضافة إلى ذلك، ستحتاج إلى الاستفادة من أي إمكانيات نظام أساسي جديد تعمل على تحسين تحميل البيانات عند توفرها.