مشاركة عبر


دالتا RecordOf وType

تنطبق على: تطبيقات اللوحة

إنشاء نوع محدد من قِبل المستخدم للاستخدام مع الدالات المحددة من قِبل المستخدم والقيم غير المصنفة.

مهم

الوصف

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

وعند إنشاء الوظائف المحددة من قبل المستخدم، تحتاج إلى تحديد أنواع الإدخال والإخراج. وبالنسبة للأنواع البسيطة مثل Decimal أو Text، يكون هذا سهلاً لأن هذه الأنواع الأساسية محددة مسبقًا. وبالنسبة للأنواع الأكثر تعقيدًا، مثل السجلات أو الجداول، استخدم الدالة Type لإنشاء النوع.

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

والدالة Type تأخذ TypeSpecification باعتبارها وسيطة فقط. وأبسط مواصفات النوع هي الإشارة إلى نوع موجود، على سبيل المثال Type( Text ). يشبه تحديد النوع لسجل أو جدول تعريف سجل أو جدول بقيم حرفية، حيث يتم استبدال القيم بأسماء الأنواع. على سبيل المثال، ستتم كتابة {Name: "Jane"} باستخدام Type( {Name: Text} ). ويتم تحديد الجداول بأقواس مربعة، وليس الدالة Table، ويمكن توفير سجل واحد فقط. على سبيل المثال، ستتم كتابة [1,2,3] باستخدام Type( [Number] ).

استخدم الدالة RecordOf لاستخراج نوع السجل من نوع جدول. على سبيل المثال، سيقوم Type( RecordOf( Library ) ) بإرجاع نوع كتاب واحد من المكتبة. ولإنشاء نوع جدول من نوع سجل، قم بلف نوع السجل بين قوسين مربعين. على سبيل المثال، يحدد Type( [ Book ] ) مكتبة. لا يمكن استخدام RecordOf إلا ضمن دالة Type.

لا يمكن استخدام الدالة Type وقيمة النوع التي تقوم بإرجاعها إلا في أماكن Power Fx محددة، مثل الوسيطة الثانية لـ ParseJSON. وفي تطبيقات اللوحة، يمكن استخدام الدالة Type مع صيغة مسماة في App.Formulas.

بناء الجملة

RecordOf( TableType )

  • TableType – مطلوب. نوع اسم الجدول. ولا يقبل هذا تحديد النوع، بل يجب أن يكون اسم نوع محدد مسبقًا لجدول.

النوع( TypeSpecification )

  • TypeSpecification – مطلوب. وصف نوع.

الأمثلة

دالة Type

فكر في التعريفات التالية في App.Formulas:

Library = 
  [ { Title: "A Study in Scarlet", Author: "Sir Arthur Conan Doyle", Published: 1887 }, 
    { Title: "And Then There Were None", Author: "Agatha Christie", Published: 1939 },
    { Title: "The Marvelous Land of Oz", Author: "L. Frank Baum", Published: 1904 } ];

// Type definition for a single book
BookType := Type( { Title: Text, Author: Text, Published: Number } );

// Type definition for a table of books
LibraryType := Type( [ BookType ] );

لاحظ كيف يتم استبدال نص العنوان الفعلي "A Study in Scarlet" باسم النوع Text في مواصفات النوع، وهو عنصر نائب لأي قيمة نصية. ويمكن لمعلمة أو متغير من النوع BookType الاحتفاظ بأحد الكتب في Library، بينما يمكن لـ LibraryType الاحتفاظ بالجدول بأكمله. ومع وجود هذه الأنواع في مكانها الصحيح، يمكننا تحديد هذه الدالات المحددة من قِبل المستخدم:

SortedBooks( books: LibraryType ): LibraryType = 
    SortByColumns( Library, Author, SortOrder.Ascending, Title, SortOrder.Ascending );

PublishedInLeapYear( book: BookType ): Boolean = 
    Mod( book.Published, 4 ) = 0 And 
    (Mod( book.Published, 100 ) <> 0 Or Mod( book.Published, 400 ) = 0);

يمكنك أيضًا استخدام BookType لتحليل سلسلة JSON التي تحتوي على كتاب:

ParseJSON( "{""Title"":""Gulliver's Travels"", ""Author"": ""Jonathan Swift"", ""Published"": 1900}", BookType
)

ويؤدي استخدام BookType باعتبارها الوسيطة الثانية لـ ParseJSON إلى ظهور سجل مصنف يمكن استخدامه مثل أي سجل Power Fx آخر.

دالة RecordInfo

في مثال الدالة Type، تبدأ بـ BookType وتنشئ LibraryType عن طريق التفاف جدول حولها. كان بإمكاننا تحديد هذه الأنواع بالعكس باستخدام:

// Type definition for a table of books
RecordOfLibraryType := Type( [ { Title: Text, Author: Text, Published: Number } ] );

// Type definition for a single book
RecordOfBookType := Type( RecordOf( RecordOfLibraryType ) );