الدالة ForAll

ينطبق على: تطبيقات قماش تدفقات سطح المكتب التطبيقات التي يحركها النموذج Power Platform CLI

يحسب القيم وينفذ إجراءات لكافة السجلاتالموجودة في جدول.

‏‏الوصف

تقيّم الدالة ForAll صيغة لكافة السجلات الموجودة في جدول. يمكن للصيغة حساب قيمة و/أو تنفيذ إجراءات، مثل تعديل البيانات أو العمل مع اتصال. استخدم وظيفة With لتقييم الصيغة لسجل منفرد.

استخدم وظيفة التسلسل مع وظيفة ForAll للتكرار على أساس عددي.

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

قيمة الإرجاع

يتم إرجاع نتيجة كل تقييم للمعادلة في جدول بنفس الترتيب مثل جدول الإدخال.

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

إذا كانت نتيجة الصيغة قيمة فارغة، فلن يكون هناك سجل في جدول النتيجة لسجل الإدخال هذا. في هذه الحالة، سيكون عدد السجلات في جدول النتائج أقل من الجدول المصدر.

اتخاذ إجراء

يمكن أن تتضمن الصيغة وظائف تتخذ إجراء، مثل تعديل سجلات مصدر البيانات باستخدام وظيفتي Patch وCollect. كما يمكن للصيغة أن تستدعي الأساليب الخاصة بالاتصالات. يمكن تنفيذ إجراءات متعددة لكل سجل باستخدام عامل ؛. لا يمكنك تعديل الجدول الذي هو موضوع وظيفة ForAll.

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

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

ترجع الوظائف العديدة التي تقوم بتعديل مصادر البيانات، بما في ذلك وظائف Collect وRemove وUpdate، مصدر البيانات الذي تم تغييره كقيمه إرجاع خاصة بها. يمكن أن تكون قيم الإرجاع هذه كبيرة وتستهلك موارد كبيرة إذا تم إرجاعها لكل سجل في جدول ForAll. قد تجد أيضًا أن قيم الإرجاع هذه ليست كما تتوقع، لأن وظيفة ForAll يمكنها أن تعمل بالتوازي وقد تفصل الآثار الجانبية لهذه الوظائف من الحصول على نتائجها. إذا لم يتم استخدام قيمة الإرجاع من ForAll، وهو غالبًا ما يكون الحال مع وظائف تعديل البيانات، فلن يتم إنشاء قيمة الارجاع ولا توجد مشاكل في الموارد أو الأوامر. ولكن إذا كنت تستخدم نتيجة وظيفة ForAll وإحدى الوظائف التي تقوم بإرجاع مصدر البيانات، ففكر جيدًا في كيفية هيكلة النتيجة وجربها أولاً على مجموعات بيانات صغيرة.

البدائل

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

وأحد الاعتبارات الأخرى هو أن وظيفة ForAll غير قابلة للتفويض بينما قد تكون الوظائف الأخرى كذلك، مثل Filter.

تفويض

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

بناء الجملة

ForAll( الجدول، الصيغة )

  • الجدول - مطلوب. الجدول المراد التعامل معه.
  • الصيغة‏‎ - مطلوبة. الصيغة المطلوب تقييمها لكافة سجلات الجدول.

الأمثلة

عمليات الحساب

تستخدم الأمثلة التالية مصدر البياناتSquares:

مثال على المربعات.

لإنشاء مصدر البيانات هذا كمجموعة، قم بتعيين خاصية OnSelect لعنصر التحكم Button إلى هذه الصيغة، وافتح وضع المعاينة، ثم حدد الزر:

ClearCollect( Squares, [ "1", "4", "9" ] )

الصيغة ‏‏الوصف نتيجة
ForAll( Squares, Sqrt( Value ) )

Sqrt( Squares )
بالنسبة لجميع السجلات الموجودة في جدول الإدخال، تقوم هذه الوظيفة بحساب الجذر التربيعي لعمود القيمة. كما يمكن استخدام الدالة Sqrt مع جدول من عمود واحد، مما يجعل من الممكن تنفيذ هذا المثال من دون استخدام ForAll. مثال على Sqrt.
ForAll( Squares, Power( Value, 3 ) ) بالنسبة لجميع السجلات الموجودة في جدول الإدخال، تقوم هذه الوظيفة برفع عمود القيمة إلى الأس الثالث. لا تدعم وظيفة Power الجداول المكونة من عمود واحد. ولذلك، يجب استخدام ForAll في هذه الحالة. مثال على الطاقة.

استخدام اتصال

تستخدم الأمثلة التالية مصدر البياناتالتعبيرات:

مثال على تعبيرات.

لإنشاء مصدر البيانات هذا كمجموعة، قم بتعيين خاصية OnSelect لعنصر التحكم Button إلى هذه الصيغة، وافتح وضع المعاينة، ثم حدد الزر:

ClearCollect( Expressions, [ "Hello", "Good morning", "Thank you", "Goodbye" ] )

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

الصيغة ‏‏الوصف نتيجة
ForAll( Expressions, MicrosoftTranslator.Translate( Value, "es" ) ) بالنسبة لجميع السجلات الموجودة في جدول التعبيرات، قم بترجمة محتويات عمود القيمة إلى الإسبانية (اختصارًا بـ "es"). مثال للقيمة
ForAll( Expressions, MicrosoftTranslator.Translate( Value, "fr" ) ) بالنسبة لجميع السجلات الموجودة في جدول التعبيرات، قم بترجمة محتويات عمود القيمة إلى الفرنسية (اختصارًا بـ "fr"). مثال للقيمة

نسخ جدول

في بعض الأحيان تحتاج إلى تصفية البيانات وتشكيلها وفرزها ومعالجتها. يوفر Power Apps العديد من الوظائف للقيام بذلك، مثل Filter و AddColumns و Sort. يُعامل Power Apps كل جدول على أنه قيمة، مما يسمح له بالانسياب خلال الصيغ والاستهلاك بسهولة.

وفي بعض الأحيان، ترغب في عمل نسخة من هذه النتيجة لاستخدامها لاحقًا، أو تريد نقل المعلومات من مصدر بيانات إلى آخر. يوفر Power Apps وظيفة Collect لنسخ البيانات.

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

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

تستخدم الأمثلة التالية مصدر البياناتالمنتجات:

مثال على منتجات مصدر البيانات.

لإنشاء مصدر البيانات هذا كمجموعة، قم بتعيين خاصية OnSelect لعنصر التحكم Button إلى هذه الصيغة، وافتح وضع المعاينة، ثم حدد الزر:

ClearCollect( Products,
    Table(
        { Product: "Widget",    'Quantity Requested': 6,  'Quantity Available': 3 },
        { Product: "Gadget",    'Quantity Requested': 10, 'Quantity Available': 20 },
        { Product: "Gizmo",     'Quantity Requested': 4,  'Quantity Available': 11 },
        { Product: "Apparatus", 'Quantity Requested': 7,  'Quantity Available': 6 }
    )
)

هدفنا هو العمل مع جدول مشتق يتضمن فقط العناصر التي تم طلبها أكثر مما هو متاح، والتي نحتاج إلى تقديم طلب لها:

مثال على الجدول مشتق.

يمكننا أداء هذه المهمة بطريقتين مختلفتين، وكلها تؤدي إلى نفس النتيجة، مع مزايا وعيوب مختلفة.

تشكيل الجدول عند الطلب

لا تقم بعمل هذه النسخة! يمكننا استخدام الصيغة التالية في أي مكان نحتاج إليه:

// Table shaping on demand, no need for a copy of the result
ShowColumns(
    AddColumns(
        Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
        "Quantity To Order", 'Quantity Requested' - 'Quantity Available'
    ),
    "Product",
    "Quantity To Order"
)

يتم إنشاء نطاق السجل باستخدام وظيفتي Filter وAddColumns لإجراء عمليات المقارنة والطرح، على التوالي، باستخدام حقلي "الكمية المطلوبة" و"الكمية المتوفرة" لكل سجل.

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

ونظرًا لأننا لم ننشئ نسخة، لا توجد نسخة إضافية من المعلومات لإدارة أو تقادم.

وظيفة ForAll عند الطلب

والطريقة الأخرى هي استخدام وظيفة ForAll لاستبدال وظائف تشكيل الجدول:

ForAll( Products,
    If( 'Quantity Requested' > 'Quantity Available',
        {
            Product: Product,
            'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
        }
    )
)

قد تكون هذه الصيغة أبسط بالنسبة لبعض الأشخاص للقراءة والكتابة.

لا يوجد جزء في وظيفة ForAll قابل للتفاوض. سوف يتم تقييم الجزء الأول فقط من جدول المنتجات، والذي قد يمثل مشكلة إذا كان هذا الجدول كبيرًا. ونظرًا لأنه قد يتم تفويض Filter في المثال السابق، فقد يعمل بشكل أفضل مع مجموعات البيانات الكبيرة.

تجميع النتيجة

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

نستخدم نفس شكل الجدول كما في المثالين السابقين، لكننا نلتقط النتيجة في مجموعة:

ClearCollect( NewOrder,
    ShowColumns(
        AddColumns(
            Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
            "Quantity To Order", 'Quantity Requested' - 'Quantity Available'
        ),
        "Product",
        "Quantity To Order"
    )
)
ClearCollect( NewOrder,
    ForAll( Products,
        If( 'Quantity Requested' > 'Quantity Available',
            {
                Product: Product,
                'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
            }
        )
    )
)

لا يمكن تفويض وظيفتي ClearCollect والجمع. ونتيجة لذلك، فإن كمية البيانات التي يمكن نقلها بهذه الطريقة محدودة.

التجميع من خلال وظيفة ForAll

وأخيرًا، يمكننا إجراء التجميع مباشرة من خلال ForAll:

Clear( NewOrder );
ForAll( Products,
    If( 'Quantity Requested' > 'Quantity Available',
        Collect( NewOrder,
            {
                Product: Product,
                'Quantity To Order': 'Quantity Requested' - 'Quantity Available'
            }
        )
    )
)

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

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

تعيين جدول في مكون

راجع تعيين الجداول.