نوع بيانات كائن غير مصنف

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

الكائن غير المصنف هو نوع الإرجاع للموفرين غير المصنفين. في الوقت الحالي، وحدها الدالة ParseJSON() تُرجع كائنًا غير مصنف.

الأنواع البسيطة

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

تقوم الأمثلة التالية بتحويل قيمة متغير كائن غير مصنف باسم UOValue.

Text(UOValue)
Value(UOValue)

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

نوع البيانات الوظيفة الوصف
قيمة منطقية Boolean() عند تحويل كائن غيرمعين إلى كائن منطقي، يجب أن تمثل القيمة الأساسية كائنا منطقيا أو نوع يمكن تحويله تلقائيا (مثل سلسلة "true").
Color ColorValue() أو RGBA() يمكن تمثيل الألوان في تدوين تعريف ألوان ورقة الأنماط المتتالية (CSS) كسلسلة أو كمكونات RGBA فردية. يمكن تحويل الكائن غير المصنف مباشرةً من سلسلة تعريف اللون (CSS) في ورقة أنماط متتالية باستخدام الدالة ColorValue() أو من أرقام RGBA فردية إلى لون باستخدام الدالة RGBA().
العملة، الرقم Value() عند تحويل ‎كائن غير إلى رقم، يجب أن تمثل القيمة الأساسية رقمًا أو نوعًا يمكن تحويله تلقائيًا (مثل سلسلة "123.456").
التاريخ، التاريخ/الوقت، الوقت DateValue(), TimeValue() or DateTimeValue() يمكن تحويل التاريخ والوقت والتاريخ/الوقت مباشرة من كائن غير مصنف إلى نوعه الخاص، عند تمثيله بتنسيق ISO 8601. يجب تحويل التنسيقات الأخرى إلى نص أولاً باستخدام الدالة Text() ثم تمريرها إلى الدالة DateValue(), TimeValue() or DateTimeValue() التي ستستخدم بشكل افتراضي لغة إعدادات المستخدم الحالية.
معرف Guid GUID() يمكن تحويل كائن غير مرتبط مباشرة إلى GUID إذا كان الكائن الأساسي يمثل GUID أو إذا كان يمثل سلسلة.
ارتباط تشعبي، صورة، وسائط Text() أنواع البيانات هذه هي أنواع بيانات نصية، ويمكن تحويلها إلى نص ثم استخدامها في Power Fx.
اختيار، خياران Switch() أو If() يتم تقديم الاختيارات والخيارين كسلاسل مترجمة في Power Fx. الاختيارات مدعومة برقم والخيارين كقيم منطقية. لا يوجد تحويل مباشر من قيمة منطقية أو رقم أو سلسلة إلى الاختيار‏‎ أو الخيارين‏‎، ولكن يمكن استخدام الدالتين Switch() or If() على القيمة المنطقية أو النصية أو الرقمية لتعيين قيمة الاختيار أو الخيارين بشكل صحيح.
سجل غير متوفر لا يوجد تحويل مباشر من كائن غير مصنف إلى بنية سجل، ولكن يمكن استرداد الحقول الفردية من الكائن غير المصنف لتشكيل سجل.
مرجع السجل غير متوفر مراجع السجل فريدة لمصادر البيانات وليس لديها تمثيل ذي معنى في الكائنات غير المصنفة.
جدول Table() وForAll() بإمكان كائن غير مصنف تمثيل صفيف، والذي يمكن تحويله إلى جدول. يمكن أن تكون هذه الكائنات عبارة عن صفائف من السجلات، أو صفائف من القيم هي في الواقع جداول عمود واحد. يمكن استخدام ForAll() لإنشاء جدول بسجلات مصنفة بالكامل. راجع الأمثلة اللاحقة هذه المقالة لمزيد من المعلومات.
نص Text() يمكن تحويل النص مباشرة. إذا كان كائن غير مصنف يمثل رقمًا، فعليك تحويل الكائن غير المصنف إلى رقم أولاً باستخدام Value() قبل تحويله إلى نص.

أنواع السجلات

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

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

تستخدم الأمثلة التالية الحقول من متغير كائن غير مصنف باسم UORecord.

Text(UORecord.StringField)
Value(UORecord.Field.ChildField)

في حالة ما إذا كان اسم الحقل يتكون من اسم معرف غير صالح، على سبيل المثال عندما تبدأ أسماء الحقول برقم أو تحتوي على أحرف غير صالحة مثل الواصلة، يمكنك وضع أسماء الحقول في علامات اقتباس مفردة:

untyped.'01'
untyped.'my-field'

الصفائف

بإمكان كائن غير مصنف أن يحتوي على صفيف. على الرغم من أنه بإمكان الصفيف أن يكون عبارة عن صفيف من السجلات أو صفيف من الأنواع البسيطة، إلا أن تحويل صفيف كائن غير مصنف إلى جدول باستخدام الدالة Table() سيؤدي دائمًا إلى الحصول على جدول عمود فردي من كائنات غير مصنفة. لا تحتاج دالات مثل ForAll() وIndex() أن تقوم أولاً بإنشاء Table()، ونتيجة لذلك لن تتطلب من استخدام حقل Value بعمود واحد.

على سبيل المثال، للحصول على الرقم الثاني في صفيف كائن غير مصنف يحتوي على قيم رقمية ( [1, 2, 3] )، يمكن استخدام الصيغة التالية لاسترداد الصف الثاني في الجدول وتحويل العمود إلى رقم:

Value( Index( UOArray, 2 ) )

إذا تم تحويل كائن غير مصنف إلى Table() أولاً، فإن الصف الثاني في الجدول الناتج بعمود واحد هو عمود Value يحتوي على الكائن غير المصنف:

Value( Index( Table( UOArray ), 2 ).Value )

بالنسبة لصفيف من السجلات يحتوي على عمود نصي يسمى Field، ينطبق نفس المنطق. يمكن الوصول إلى الكائن غير المصنف مباشرة، أو إذا كان استخدام الدالة Table() سيؤدي إلى الحصول على جدول من عمود واحد من الكائن غير المصنف.

يمكن الوصول إلى العمود Field مباشرةً من الكائن غير المصنف الذي تُرجعه الدالة Index().

Text( Index( UORecordArray, 2 ).Field )

عند استخدام الدالة Table()، عليك أولاً استرداد العمود Value الفردي للحصول على الكائن غير المصنف، ثم الوصول إلى العمود Field:

Text( Index( Table( UORecordArray ), 2 ).Value.Field )

لتحويل صفيف من السجلات جدول مصنف، يمكنك استخدام الدالة ForAll() وتحويل كل حقل فردي.

ForAll( UORecordArray, { FirstField: Value(ThisRecord.FirstField), SecondField: Text(ThisRecord.SecondField) } )

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

ForAll( Table(UORecordArray), { FirstField: Value(ThisRecord.Value.FirstField), SecondField: Text(ThisRecord.Value.SecondField) } )