مشاركة عبر


ForAll دالة

ينطبق على: تعمل تطبيقات Canvas Copilot Studio Desktop على تدفقات التطبيقات المستندة إلى نموذج Power Platform CLI Dataverse لوظائف Power Pages

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

‏‏الوصف

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

استخدم الدالة Sequence مع الدالة ForAll للتكرار استنادا إلى عدد.

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

قيمة الإرجاع

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

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

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

اتخاذ إجراء

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

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

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

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

البدائل

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

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

تفويض

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

بناء الجملة

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

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

الأمثلة

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

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

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

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

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

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

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

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

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

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

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

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

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

الصيغة ‏‏الوصف نتيجة
ForAll(التعبيرات، MicrosoftTranslator.Translate(Value, "es")) بالنسبة لجميع السجلات الموجودة في جدول التعبيرات، قم بترجمة محتويات عمود القيمة إلى الإسبانية (اختصارًا بـ "es"). مثال للقيمة
ForAll(التعبيرات، 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 وCollect . ونتيجة لذلك، فإن كمية البيانات التي يمكن نقلها بهذه الطريقة محدودة.

جمع ضمن 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 لجميع السجلات، والتي يمكن أن تضيف ما يصل إلى العديد من البيانات إذا كنا نلتقطها.

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

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