Although Custom Pages generally have most of the functionality of traditional Canvas Apps, they're not without their limitations and quirks.
Setup
Consider the following variable:
Set ( Hours, [ { Display: "0 Hours", Value: 0 }, { Display: "1 Hour", Value: 60 }, { Display: "2 Hours", Value: 120 }, { Display: "3 Hours", Value: 180 }, { Display: "4 Hours", Value: 240 }, { Display: "5 Hours", Value: 300 }, { Display: "6 Hours", Value: 360 }, { Display: "7 Hours", Value: 420 }, { Display: "8 Hours", Value: 480 }, { Display: "9 Hours", Value: 540 }, { Display: "10 Hours", Value: 600 }, { Display: "11 Hours", Value: 660 }, { Display: "12 Hours", Value: 720 } ] );
A simple array of objects, to hold a 'Display' value of a number of hours and a 'Value' in minutes.
Canvas Apps Combo Boxes and Drop Downs
If you were to present that data in a Combo Box or a Drop Down in a Canvas App using the following:
Sort(Hours,Value,SortOrder.Ascending)
You would expect to see the options presented in Value order - 60, 120, 180 etc. And that is certainly the case:
Custom Page Combo Boxes
However... in a Custom Page Combo Box, the Sort command is ignored and the values are always in Display order:
And as a result, 10, 11 and 12 appear before 2, which obviously isn't helpful. If you enable the modern controls and select a Dropdown (no idea why it's 'dropdown' in a custom page and 'drop down' in a canvas app), you still get the same behaviour:
The Solution
I'm not sure why Sorts are ignored in Custom Pages, but fortunately, the workaround isn't too bad - add a space before all the single-digit numbers:
Set ( Hours, [ { Display: " 0 Hours", Value: 0 }, { Display: " 1 Hour", Value: 60 }, { Display: " 2 Hours", Value: 120 }, { Display: " 3 Hours", Value: 180 }, { Display: " 4 Hours", Value: 240 }, { Display: " 5 Hours", Value: 300 }, { Display: " 6 Hours", Value: 360 }, { Display: " 7 Hours", Value: 420 }, { Display: " 8 Hours", Value: 480 }, { Display: " 9 Hours", Value: 540 }, { Display: "10 Hours", Value: 600 }, { Display: "11 Hours", Value: 660 }, { Display: "12 Hours", Value: 720 } ] );
and you then get the desired result:
I'm not sure if this is a bug or just a limitation, but it's worth being aware of at least.