مشاركة عبر


كائن تطبيق في Power Apps

تنطبق على: تطبيقات اللوحة التطبيقات المستندة إلى النموذج

يوفر معلومات حول التطبيق الذي يعمل حاليًا والتحكم في سلوك التطبيق.

‏‏الوصف

كما هو الحال مع عنصر التحكم، يوفر كائن التطبيق الخصائص التي تحدد الشاشة التي تظهر والتي تطالب المستخدم بحفظ التغييرات بحيث لا يتم فقدها. يحتوي كل تطبيق على كائن تطبيق.

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

كائن التطبيق في جزء عرض الشجرة.

خاصيه ActiveScreen

تحدد الخاصية ActiveScreen الشاشة التي تظهر.

تعمل هذه الخاصية على إرجاع كائن شاشة. استخدمه كمرجع لخصائص الشاشة المعروضة حاليا، مثل الاسم الذي له صيغة App.ActiveScreen.Name. يمكنك أيضا مقارنة هذه الخاصية بكائن شاشة آخر ، كما هو مع صيغة المقارنة App.Active Compare = Screen2لاختبار إذا كانت Screen2 هي الشاشة المعروضة حاليا.

استخدم الوظيفة Back أو Navigate لتغيير الشاشة التي تظهر.

خاصية BackEnabled

تعمل الخاصية BackEnabled على تغيير كيفية استجابة التطبيق لإيماءة رجوع الجهاز (قم بالتمرير السريع أو استخدم زر رجوع الجهاز على Android الأجهزة، ثم قم بالتمرير من اليسار إلى iOS الأجهزة) عند التشغيل على Power Apps الجوال. عند التمكين، تنتقل إيماءة الرجوع للجهاز مرة أخرى إلى الشاشة التي تم عرضها مؤخرًا، والتي تشبه صيغة الرجوع . عند التعطيل، تقوم إيماءة الرجوع للجهاز بإرجاع المستخدم إلى قائمة التطبيقات.

خصائص ConfirmExit

لا يريد أي شخص فقدان التغييرات غير المحفوظة. استخدم الخصائص ConfirmExit و ConfirmExitMessage لتحذير المستخدم قبل إغلاق التطبيق الخاص بك.

‏‫ملاحظة‬

  • لا يعمل ConfirmExit في التطبيقات التي يتم تضمينها، على سبيل المثال Power BI و SharePoint.
  • الآن، يمكن لهذه الخصائص الرجوع إلى عناصر التحكم الموجودة على الشاشة الأولى فقط إذا تم تمكين ميزة معاينة التحميل المتأخر (وهي ميزة مفعلة بشكل افتراضي للتطبيقات الجديدة). إذا تم إجراء المراجع، لا يظهر Power Apps Studio خطأ، ولكن لا يتم فتح التطبيق المنشور الناتج في Power Apps Mobile أو مستعرض. إننا نعمل على رفع هذا القيد بنشاط. في غضون ذلك، يمكنك إيقاف تشغيل التحميل المتأخر في الإعدادات>الميزات القادة (ضمن الإصدار الأولي).

ConfirmExit

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

في المواقف التي قد يكون لدى المستخدم فيها تغييرات غير االنسيج في التطبيق، استخدم هذه الخاصية لعرض مربع حوار التأكيد قبل الخروج من التطبيق. استخدم صيغة يمكنها التحقق من المتغيرات وخصائص عناصر التحكم (على سبيل المثال، الخاصية Unsaved لعنصر التحكم Edit form).

يظهر مربع حوار التأكيد في أي موقف حيث قد يتم فقدان البيانات، كما في هذه الأمثلة:

  • تشغيل الوظيفة Exit.
  • إذا كان التطبيق قيد التشغيل في مستعرض:
    • إغلاق المستعرض أو علامة تبويب المستعرض الذي يعمل عليه التطبيق.
    • تحديد زر للخلف الخاص بالمستعرض.
    • تشغيل وظيفة Launch باستخدام LaunchTarget من ذاتي.
  • إذا كان التطبيق يعمل في Power Apps Mobile (بنظام التشغيل iOS أو Android):
    • قم بالتمرير للتبديل إلى تطبيق مختلف في Power Apps Mobile.
    • تحديد الزر للخلف على جهاز يعمل بنظام Android.
    • تشغيل وظيفة Launch لبدء تشغيل تطبيق لوحة آخر.

قد يختلف الشكل الدقيق لمربع حوار التأكيد عبر الأجهزة والإصدارات الخاصة بـ Power Apps.

لا يظهر مربع حوار التأكيد في Power Apps Studio.

ConfirmExitMessage

وبشكل افتراضي، يظهر مربع حوار التأكيد رسالة عامة، مثل "You may have unsaved changes" (قد يكون لديك تغييرات غير محفوظة). بلغة المستخدم

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

في المستعرض، قد يظهر مربع حوار التأكيد برسالة عامة من المستعرض.

‏‫ملاحظة‬

لكائن التطبيق نوعان آخران من الخصائص هما OnMessageوBackEnabled وهما تجريبيان. ستتم إزالة هذه الخصائص من كائن التطبيق في النهاية. نوصي بعدم استخدام هذه الخصائص في بيئة التشغيل الخاصة بك.

مثال

  1. قم بإنشاء تطبيق يحتوي على عنصري تحكم نموذج AccountForm و ContactForm.

  2. تعيين الخاصية ConfirmExit الخاصة بكائن التطبيق لهذا التعبير:

    AccountForm.Unsaved Or ContactForm.Unsaved
    

    يظهر مربع الحوار هذا إذا قام المستخدم بتغيير البيانات في أي نموذج ثم حاول إغلاق التطبيق دون حفظ تلك التغييرات.

    مربع حوار التأكيد عام.

  3. تعيين الخاصية ConfirmExitMessage الخاصة بكائن التطبيق لهذه الصيغة:

    If( AccountsForm.Unsaved,
        "Accounts form has unsaved changes.",
        "Contacts form has unsaved changes."
    )
    

    يظهر مربع الحوار هذا إذا قام المستخدم بتغيير البيانات في نموذج الحساب ثم حاول إغلاق التطبيق دون حفظ تلك التغييرات.

    مربع حوار تأكيد نموذج معين.

إعداد مفتاح الأدوات لـ Application Insights

لتصدير سجلات التطبيقات التي أنشأها من النظام إلى Application Insights، عليك إعداد مفتاح الأدوات‬ لتطبيق اللوحة.

  1. افتح تطبيقك لتحريره في Power Apps Studio.
  2. حدد كائن التطبيقمن طريقه عرض الشجرة علي شريط التنقل الأيمن.
  3. أدخل مفتاح الأدوات في جزء الخصائص.

إذا لم يتم إرسال البيانات إلى App Insights، فاتصل بمسؤول Power Platform وتحقق مما إذا تم تعطيل App Insights على مستوى المستأجر.

خاصية الصيغ

استخدم الصيغ المسماة، في خاصية الصيغ، لتحديد صيغة يمكن إعادة استخدامها عبر التطبيق الخاص بك.

في Power Apps‏‎، تحدد المعادلات قيمة خصائص التحكم. على سبيل المثال، لتعيين لون الخلفية بشكل متسق عبر تطبيق ما، يمكنك تعيين خاصية التعبئة لكل منها إلى صيغة مشتركة:

Label1.Fill: ColorValue( Param( "BackgroundColor" ) )
Label2.Fill: ColorValue( Param( "BackgroundColor" ) )
Label3.Fill: ColorValue( Param( "BackgroundColor" ) )

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

App.OnStart: Set( BGColor, ColorValue( Param( "BackgroundColor" ) ) )
Label1.Fill: BGColor
Label2.Fill: BGColor
Label3.Fill: BGColor

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

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

App.Formulas: BGColor = ColorValue( Param( "BackgroundColor" ) );
Label1.Fill: BGColor
Label2.Fill: BGColor
Label3.Fill: BGColor

تتضمن مزايا استخدام الصيغ المسماة ما يلي:

  • تتوفر قيمة الصيغة دائمًا. لا توجد تبعية توقيت، لا توجد خاصية OnStart يجب تشغيلها أولاً قبل تعيين القيمة، ولا يوجد وقت تكون فيه قيمة الصيغة غير صحيحة. يمكن أن تشير الصيغ المسماة إلى بعضها البعض بأي ترتيب، طالما أنها لا تنشئ مرجعًا دائريًا. ويمكن حسابها بالتوازي.
  • تتوفر قيمة الصيغة محدثةً دائمًا. يمكن للصيغة إجراء عملية حسابية تعتمد على خصائص عنصر التحكم أو سجلات قاعدة البيانات، وعندما تتغير، يتم تحديث قيمة الصيغة تلقائيًا. لا تحتاج إلى تحديث القيمة يدويًا كما تفعل مع المتغير. وتتم إعادة حساب الصيغ فقط عند الحاجة.
  • تعريف الصيغة غير قابل للتغيير. التعريف في الصيغ هو المصدر الوحيد للحقيقة ولا يمكن تغيير القيمة في مكان آخر في التطبيق. مع المتغيرات، من الممكن أن يقوم بعض التعليمات البرمجية بتغيير قيمة بشكل غير متوقع، ولكن هذا الموقف الصعب الذي يمكن تصحيحه غير ممكن مع الصيغ المسماة.
  • يمكن تأجيل عملية حساب الصيغة. نظرًا لأنها قيمة غير قابلة للتغيير، يمكن دائمًا حسابها عند الحاجة، مما يعني أنه لا يلزم حسابها حتى يتم الاحتياج إليها. لا يلزم حساب قيم الصيغ التي لم يتم استخدامها حتى يتم عرض screen2 من التطبيق حتى تظهر screen2. يمكن أن يؤدي تأجيل هذا العمل إلى تحسين وقت تحميل التطبيق. الصيغ المسماة توضيحية وتوفر فرصًا للنظام لتحسين كيفية ووقت حسابها.
  • الصيغ المسماة هي مفهوم Excel. يستخدم Power Fx مفاهيم Excel حيثما أمكن ذلك لأن كثيرًا من الناس يعرفون Excel جيدًا. الصيغ المسماة مكافئة للخلايا المسماة والصيغ المسماة في Excel، وتتم إدارتها باستخدام مدير الاسم. تتم إعادة الحساب تلقائيًا مثل خلايا جدول البيانات وتتحكم الخصائص.

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

UserEmail = User().Email;
UserInfo = LookUp( Users, 'Primary Email' = User().Email );
UserTitle = UserInfo.Title;
UserPhone = Switch( UserInfo.'Preferred Phone', 
                    'Preferred Phone (Users)'.'Mobile Phone', UserInfo.'Mobile Phone',
                    UserInfo.'Main Phone' );

إذا كانت صيغة UserTitle بحاجة إلى التحديث، فإنه يمكن القيام بذلك بسهولة في هذا الموقع الواحد. في حالة عدم الحاجة إلى UserPhone في التطبيق، فإنه لا يتم إجراء هذه الاستدعاءات لجدول المستخدمين في Dataverse. لا توجد عقوبة لتضمين تعريف صيغة غير مستخدم.

بعض القيود على الصيغ المسماة:

  • لا يمكنها استخدام وظائف السلوك وإلا تسبب آثارًا جانبية داخل التطبيق.
  • لا يمكنها إنشاء مرجع دائري. وجود a = b; وb = a; في التطبيق نفسه غير مسموح به.

دالات محددة من قِبل المستخدم

مهم

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

على سبيل المثال، يمكنك تعريف صيغة مسماة تقوم بإرجاع الكتب الخيالية من مكتبة:

Library = [ { Title: "The Hobbit", Author: "J. R. R. Tolkien", Genre: "Fiction" },
            { Title: "Oxford English Dictionary", Author: "Oxford University", Genre: "Reference" } ];

LibraryFiction = Filter( Library, Genre = "Fiction" );

وبدون معلمات، سنحتاج إلى تحديد صيغ مسماة منفصلة لكل نوع. ولكن بدلاً من ذلك، دعنا نقوم بوضع معلمات للصيغة المسماة لدينا:

LibraryType := Type( [ { Title: Text, Author: Text, Genre: Text } ] );

LibraryGenre( SelectedGenre: Text ): LibraryType = Filter( Library, Genre = SelectedGenre );

الآن يمكننا استدعاء LibraryGenre( "Fiction" )، LibraryGenre( "Reference" )، أو تصفية أنواع أخرى باستخدام دالة واحدة محددة من قبل المستخدم.

فيما يلي بناء الجملة:

FunctionName( [ ParameterName1: ParameterType1 [ , ParameterName2: ParameterType2 ... ] ] ) : ReturnType = Formula;

  • FunctionName – مطلوب. اسم الدالة المحددة من قِبل المستخدم.
  • ParameterName(s) – اختياري. اسم معلمة الدالة.
  • ParameterType(s) – اختياري. اسم النوع، سواء كان اسم نوع البيانات المدمج، أو اسم مصدر البيانات، أو النوع المحدد باستخدام الدالة Type.
  • ReturnType – مطلوب. نوع قيمة الإرجاع من الدالة.
  • الصيغة – مطلوبة. الصيغة التي تحسب قيمة الدالة بناءً على المعلمات.

يجب كتابة كل معلمة والإخراج من دالة تعريف المستخدم. في هذا المثال، تحدد SelectedGenre: Text المعلمة الأولى لوظيفتنا لتكون من نوع النص وSelectedGenre هو اسم المعلمة المستخدمة في النص الأساسي لعملية التصفية. راجع أنواع البيانات لأسماء الأنواع المدعومة. تُستخدم دالة النوع لإنشاء نوع مجمع لمكتبتنا، حتى نتمكن من إرجاع جدول الكتب من دالتنا.

عرفنا LibraryType على أنه جدول جمع لنوع السجلات. إذا أردنا تمرير دفتر واحد إلى دالة، فيمكننا استخراج نوع السجل لهذا الجدول باستخدام دالة RecordOf:

BookType := Type( RecordOf( LibraryType ) );

IsGenre( Book: BookType, SelectedGenre: Text ): Boolean = (Book.Genre = SelectedGenre);

مطابقة السجلات لمعلمات الدالة أكثر إحكامًا مما هي عليه في الأجزاء الأخرى من Power Fx. يجب أن تكون حقول قيمة السجل مجموعة فرعية مناسبة من تعريف النوع ولا يمكن أن تتضمن حقولاً إضافية. على سبيل المثال، سيؤدي IsGenre( { Title: "My Book", Published: 2001 }, "Fiction" ) إلى حدوث خطأ.

لاحظ أن التكرار غير مدعوم حتى الآن بواسطة الدالات المحددة من قِبل المستخدم.

سلوك الدالات المحددة من قِبل المستخدم

لا تدعم الصيغ المسماة ومعظم الدالات المحددة من قبل المستخدم دالات السلوك ذات التأثيرات الجانبية، مثل تعيين أو إخطار. بشكل عام، من الأفضل تجنب تحديث الحالة إذا كان بإمكانك ذلك، والاعتماد بدلاً من ذلك على أنماط البرمجة الوظيفية والسماح لـ ‏‎Power Fx بإعادة حساب الصيغ حسب الحاجة تلقائيًا. ولكن هناك حالات حيث لا يمكن تجنب ذلك. لتضمين منطق السلوك في دالة محددة من قبل المستخدم، قم بلف النص بين أقواس متعرجة:

Spend( Amount: Number ) : Void = {
    If( Amount > Savings, 
        Error( $"{Amount} is more than available savings" ),
        Set( Savings, Savings - Amount );
        Set( Spent, Spent + Amount) 
    );
}

الآن يمكننا استدعاء ‏‎Spend( 12 ) للتحقق مما إذا كان لدينا 12 في مدخراتنا، وإذا كان الأمر كذلك، نقوم بخصمه من 12 وإضافة 12 إلى متغير Spent. نوع الإرجاع لهذه الدالة هو Void لأنه لا يرجع قيمة.

بناء جملة دالة سلوك محددة من قبل المستخدم هو:

FunctionName( [ ParameterName1: ParameterType1 [ , ParameterName2: ParameterType2 ... ] ] ) : ReturnType = { Formula1 [ ; Formula2 ... ] };

  • FunctionName – مطلوب. اسم الدالة المحددة من قِبل المستخدم.
  • ParameterName(s) – اختياري. اسم معلمة الدالة.
  • ParameterType(s) – اختياري. اسم النوع، سواء كان اسم نوع البيانات المدمج، أو اسم مصدر البيانات، أو النوع المحدد باستخدام الدالة Type.
  • ReturnType – مطلوب. نوع قيمة الإرجاع من الدالة. استخدم Void إذا لم ترجع الدالة قيمة.
  • الصيغة(الصيغ) – مطلوبة. الصيغة التي تحسب قيمة الدالة بناءً على المعلمات.

كما هو الحال مع جميع معادلات Power Fx، لا ينتهي التنفيذ عند مواجهة خطأ. بعد استدعاء الدالة Error، تمنع الدالة If حدوث التغييرات على Savings وSpent. يمكن استخدام الدالة ‏IfError أيضًا لمنع المزيد من التنفيذ بعد حدوث خطأ. على الرغم من أنها ترجع Void، إلا أنه لا يزال بإمكان الصيغة إرجاع خطأ إذا كانت هناك مشكلة.

الأنواع المحددة من قِبل المستخدم

مهم

يمكن استخدام الصيغ المسماة مع دالة Type لإنشاء أنواع محددة من قِبل المستخدم. استخدم := بدلاً من = لتحديد نوع محدد من قبل المستخدم، على سبيل المثال Book := Type( { Title: Text, Author: Text } ). راجع دالة Type للاطلاع على مزيد من المعلومات والأمثلة.

خاصية OnError

استخدم OnError لاتخاذ إجراء عند حدوث خطأ في أي مكان في التطبيق. وهو يوفر فرصة عمومية لتستخدم شعار خطأ قبل عرضه على المستخدم النهائي. كما يمكن استخدامها لتسجيل خطأ في الدالة Trace أو اكتب قاعدة بيانات أو خدمة ويب.

في تطبيقات اللوحة، يتم التحقق من نتيجة كل تقييم صيغة بحثًا عن خطأ. إذا كان هناك خطأ، فإنه يتم تقييم OnError بمتغيرات النطاق FirstError و AllErrors نفسها التي كانت ستبقى موجودة إذا تم التعامل مع الصيغة بالكامل في الدالة IfError.

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

يتعذر على OnError استبدال خطأ في العمليات الحسابية بالطريقة التي تستطيع الدالة IfError القيام بها. إذا تم استدعاء ‏‎OnError فهذا يعني أن الخطأ قد حدث بالفعل وتمت معالجته بالفعل من خلال عمليات حساب الصيغة، مثل عناصر التحكم IfError؛ OnError في إعداد تقارير الأخطاء فقط.

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

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

مثال

فكر في عنصر التحكم Label وعنصر التحكم Slider الموجودان معًا في الصيغة:

Label1.Text = 1/Slider1.Value

ربط عنصر التحكم Labelو slider خلال الصيغة Label1.Text = 1/Slider1.Value.

يتم تعيين شريط التمرير الافتراضي إلى 50. إذا انتقل شريط التمرير إلى 0، فلن تعرض Label1 قيمة ويتم عرض شعار الخطأ:

تم نقل عنصر التحكم Slider إلى 0، مما نتج عنه خطأ القسمة على صفر وشعار خطأ.

فلننظر إلى ما حدث بالتفصيل:

  1. قام المستخدم بنقل الشرائح إلى اليمين، ثم تم تغيير الخاصية Slide1.Value إلى 0.
  2. تمت إعادة تقييم Label1.Text تلقائيًا. تمت القسمة على صفر، مما يعمل على حدوث خطأ.
  3. لا يوجد IfError في هذه الصيغة. يتم إرجاع القسمة على صفر من خلال تقييم الصيغة.
  4. لا يمكن أن تعرض Label1.Text أي شيء لهذا الخطأ، لذلك فإنها تعرض حالة فارغة.
  5. يتم استدعاء OnError. ونظرًا لأنه لا يوجد معالج، فإنه يتم عرض شعار الخطأ القياسي مع معلومات الخطأ.

وإذا لزم الأمر، يمكننا أيضًا تعديل الصيغة إلى Label1.Text = IfError( 1/Slider1.Value, 0 ). سيؤدي استخدام IfError إلى عدم وجود خطأ أو شعار خطأ. لا يمكننا تغيير قيمة خطأ من OnError حيث أنه عند هذه النقطة حدث خطأ ما بالفعل، ما هو إلا سؤال حول كيفية الإبلاغ.

إذا قمنا بإضافة معالج OnError، لا يكون له تأثير قبل الخطوة 5، ولكن يمكن أن يؤثر ذلك على كيفية الإبلاغ عن الخطأ:

Trace( $"Error {FirstError.Message} in {FirstError.Source}" )

تم تعيين الصيغة App.OnError لإنشاء تتبع

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

انتقل عنصر التحكم Slider إلى 0، مما نتج عنه خطأ القسمة على صفر ولكن بدون شعار خطأ.

إذا كنا نريد شعار الخطأ الافتراضي نفسه أيضًا المعروض بالإضافة إلى التتبع، فإنه يمكننا إعادة طرح الخطأ باستخدام الدالة Error بعد استدعاء Trace تمامًا كما يحدث إذا لم تكن Trace موجودة:

Trace( $"Error {FirstError.Message} in {FirstError.Source}" );
Error( FirstError )

خاصية OnStart

‏‫ملاحظة‬

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

يتم تشغيل الخاصية OnStart عندما يقوم المستخدم ببدء تشغيل التطبيق. غالبًا ما تُستخدم هذه الخاصية لأداء المهام التالية:

  • استرداد البيانات وتخزينها مؤقتا في المجموعات باستخدام الوظيفة Collect.
  • قم بإعداد المتغيرات العمومية باستخدام الوظيفة Set.

يتم تقييم هذه الصيغة قبل ظهور الشاشة الأولى. لا يتم تحميل شاشة، يمكنك تعيين متغيرات السياق باستخدام الوظيفة UpdateContext. ومع ذلك، يمكنك تمرير متغيرات السياق بواسطة وظيفة Navigate.

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

قائمة اختصار عنصر التطبيق لـ Run OnStart

‏‫ملاحظة‬

  • تم استبعاد استخدام وظيفة Navigate في خاصية OnStart. ستستمر التطبيقات الحالية في العمل. لفترة محدودة، لا يزال بإمكانك تمكينها في إعدادات التطبيق (متاحة ضمن مستبعدة). ومع ذلك، فإن استخدام التنقل بهذه الطريقة يمكن أن يؤدي إلى تأخير تحميل التطبيق لأنه يجبر النظام على إكمال تقييم OnStart قبل عرض الشاشة الأولى. استخدم خاصية StartScreen بدلاً من ذلك لحساب الشاشة الأولى المعروضة.
  • سيتم إيقاف تشغيل المفتاح المتقاعد للتطبيقات التي تم إنشاؤها قبل مارس 2021 حيث أضفت Navigate إلى OnStart بين مارس 2021 والآن. عندما تحرر هذه التطبيقات في Power Apps Studio، قد ترى خطأ. قم بتشغيل المفتاح المتقاعد لمسح هذا الخطأ.

خاصية StartScreen

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

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

  • وظيفة Param لقراءة المعلمات المستخدمة لبدء التطبيق.
  • وظيفة User لقراءة معلومات عن المستخدم الحالي.
  • LookUp، وFilter، وCountRows، وMax، والوظائف الأخرى التي تقرأ من مصدر البيانات.
  • أي استدعاءات API من خلال موصل، ولكن كن حذرًا من أنه يعود بسرعة.
  • إشارت مثل الاتصال، والبوصلة، والتطبيق.

‏‫ملاحظة‬

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

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

بعد تغيير StartScreen في الاستوديو، اختبره بتمرير الماوس فوق كائن التطبيق في جزء طريقة عرض الشجرة، وتحديد علامة القطع (...), ثم تحديد تنقل إلى StartScreen. ستتغير الشاشة كما لو تم تحميل التطبيق للتو.

انتقال إلى StartScreen

الأمثلة

Screen9

الإشارة إلى أنه يجب عرض Screen9 أولاً عند بدء تشغيل التطبيق.

If( Param( "admin-mode" ) = 1, HomeScreen, AdminScreen )

يتحقق مما إذا كان المستخدم قد تم تعيين المعلمة "وضع المسؤول" ويستخدمه لتحديد ما إذا كان يجب عرض HomeScreen أو AdminScreen أولاً.

If( LookUp( Attendees, User = User().Email ).Staff, StaffPortal, HomeScreen )

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

IfError( If( CustomConnector.APICall() = "Forest", 
             ForestScreen, 
             OceanScreen 
         ), 
         ErrorScreen 
)

يوجه التطبيق بناءً على استدعاء API لـ ForestScreen أو OceanScreen. إذا فشلت واجهة برمجة التطبيقات لأي سبب من الأسباب، فسيتم استخدام ErrorScreen بدلاً من ذلك.

خاصية StudioVersion

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

يتم إرجاع StudioVersion كنص. وقد يتغير تنسيق النص بمرور الوقت وينبغي التعامل به ككل؛ تجنب استخراج أجزاء فردية.