{"id":1256,"date":"2019-01-22T05:00:00","date_gmt":"2019-01-22T13:00:00","guid":{"rendered":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/new-cds-capabilities-for-canvas-apps-enter-preview\/"},"modified":"2025-06-11T08:05:32","modified_gmt":"2025-06-11T15:05:32","slug":"new-cds-capabilities-for-canvas-apps-enter-preview","status":"publish","type":"post","link":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/new-cds-capabilities-for-canvas-apps-enter-preview\/","title":{"rendered":"New CDS capabilities for Canvas apps enter Preview"},"content":{"rendered":"<p>For the last few months we have been rolling out new features for Canvas apps when connected to the Common Data Service for Apps:<\/p>\n<ul>\n<li><a href=\"https:\/\/powerapps.microsoft.com\/en-us\/blog\/one-to-many-relationships-for-canvas-apps\/\">One-to-Many relationships<\/a><\/li>\n<li><a href=\"https:\/\/powerapps.microsoft.com\/en-us\/blog\/option-sets-and-many-to-many-relationships-for-canvas-apps\/\">Option sets<\/a><\/li>\n<li><a href=\"https:\/\/powerapps.microsoft.com\/en-us\/blog\/option-sets-and-many-to-many-relationships-for-canvas-apps\/\">Many-to-Many relationships<\/a><\/li>\n<li><a href=\"https:\/\/powerapps.microsoft.com\/en-us\/blog\/delegation-of-aggregate-functions-for-cds\/\">Aggregate delegation<\/a><\/li>\n<\/ul>\n<p>We have been doing this work under an <a href=\"https:\/\/docs.microsoft.com\/en-us\/powerapps\/maker\/canvas-apps\/working-with-experimental\">Experimental<\/a> switch, off by default for all apps:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-1203\" height=\"146\" src=\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/01\/2019-01-17_09h09_51.png\" width=\"601\" srcset=\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-17_09h09_51.webp 601w, https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-17_09h09_51-300x73.webp 300w\" sizes=\"auto, (max-width: 601px) 100vw, 601px\" \/><br \/>\n<strong>Thank you<\/strong>\u00a0for playing with these features and sending us your feedback during the Experimental phase.\u00a0 It has really helped us to run down issues and refine these features.\u00a0 Please keep the feedback coming!<\/p>\n<p>I am pleased to announce that we are <strong>moving this functionality to the Preview phase that is on by default for new apps<\/strong>.\u00a0 It will remain off for existing apps but we encourage everyone to start moving their apps forward. We also renamed and moved the feature switch to the Preview section of Advanced settings:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-1205\" height=\"163\" src=\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/01\/2019-01-17_09h02_52c.png\" width=\"598\" srcset=\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-17_09h02_52c.webp 598w, https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-17_09h02_52c-300x82.webp 300w\" sizes=\"auto, (max-width: 598px) 100vw, 598px\" \/><\/p>\n<p>Moving to Preview is an indicator that we are almost done with this work and every day that passes it becomes harder for us to make changes.\u00a0 Now is the time to test out this new functionality and let us know what you think.\u00a0 Please use the bottom of this blog post or the <a href=\"https:\/\/powerusers.microsoft.com\/t5\/PowerApps-Community\/ct-p\/PowerApps1\">PowerApps community forum<\/a> to report any issues or concerns.<\/p>\n<h1>Road ahead<\/h1>\n<p>As I described at the end of the <a href=\"https:\/\/powerapps.microsoft.com\/en-us\/blog\/option-sets-and-many-to-many-relationships-for-canvas-apps\/\">Option sets and Many-to-Many relationships blog post<\/a>, these new features come with a few breaking changes.\u00a0 If you use any of the capabilities below then your formulas will need to be updated in order to turn on the new functionality.\u00a0 \u00a0Again, we are not turning this switch on for existing apps &#8211; your existing apps should not be impacted.<\/p>\n<p>The breaking changes are:<\/p>\n<ul>\n<li><strong>Option sets.<\/strong>\u00a0 The new implementation of this is in place now.\u00a0 Where there were separate <strong>myfield<\/strong>\u00a0and <strong>_myfield_label<\/strong> fields there is now just a single\u00a0<strong>myfield<\/strong> that can be used both for locale independent comparisons and to obtain the locale specific label.<\/li>\n<li><strong>Polymorphic lookups.<\/strong>\u00a0 This is almost done and will ship within the next few weeks.\u00a0 Until then, Owner, Customer, and Regarding fields are not available in a Canvas app.\u00a0 \u00a0When they come back, as with Option sets, we will no longer use separate\u00a0<strong>_myfield_type<\/strong> and <strong>_myfield_value<\/strong>\u00a0fields and instead will just use a single\u00a0<strong>myfield<\/strong>\u00a0with new functions to access the type and value.\u00a0 More details to come.<\/li>\n<li><strong>Date Only, User Local fields.\u00a0\u00a0<\/strong>The new implementation of this is in place now.\u00a0 Previously it was possible to store and view a date through a Canvas app and have it show a different date in Model-driven apps because of time zone corrections.\u00a0 In the Canvas form controls these fields currently show time pickers because the underlying data type stores both date and time.\u00a0 Use &#8220;Date Only&#8221; with behavior also set to &#8220;Date Only&#8221; for a true date only data type that is independent of time and time zone.<\/li>\n<li><strong>Time zone independent fields.<\/strong>\u00a0 These fields are currently blocked as they do not return the right answer.\u00a0 When these are working properly we will re-enable this data type.\u00a0 Turn off the Preview switch if you need to access these fields in the meantime.<\/li>\n<\/ul>\n<p>Not a breaking change but something to look forward to: we will also be adding functions to relate and unrelate records in a Many-to-Many relationship.<\/p>\n<h1>Update existing apps<\/h1>\n<p>What should you do now?\u00a0 When you are ready, turn\u00a0 this functionality on for existing apps and update formulas and controls as needed.\u00a0 \u00a0Most apps will not require any changes.\u00a0 The biggest source of changes will be for the use of Option sets and Two option data types as described below.<\/p>\n<p>There is no pressure to do this as the old functionality will remain in place for a while and we only changed the default for new apps.\u00a0 But eventually we will be deprecating the old functionality and your existing apps will need to be moved forward.\u00a0 You can start to do this migration now.<\/p>\n<h2>Option sets<\/h2>\n<p>Let&#8217;s look at what happens to an app built with &#8220;Start with your data&#8221; if we build the app without the new functionality and then turn it on, similar to what you will do with your existing apps.\u00a0 Building an app with the new functionality turned on from the beginning, which is now the default, will work fine.<\/p>\n<p>Below we have the edit form screen for the Accounts entity with the <strong>Category<\/strong> field added at the end.\u00a0 Note that the DataField property of the data card is set to <strong>&#8220;_accountcategorycode_label&#8221;<\/strong>:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-1257\" height=\"989\" src=\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/01\/2019-01-21_18h10_15.png\" width=\"1301\" srcset=\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-21_18h10_15.webp 1301w, https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-21_18h10_15-300x228.webp 300w, https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-21_18h10_15-1024x778.webp 1024w, https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-21_18h10_15-768x584.webp 768w\" sizes=\"auto, (max-width: 1301px) 100vw, 1301px\" \/><\/p>\n<p>If we look at the field list we see that the data card is of type <strong>String<\/strong> which makes sense for the label:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-1258\" height=\"989\" src=\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/01\/2019-01-21_18h10_36.png\" width=\"1301\" srcset=\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-21_18h10_36.webp 1301w, https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-21_18h10_36-300x228.webp 300w, https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-21_18h10_36-1024x778.webp 1024w, https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-21_18h10_36-768x584.webp 768w\" sizes=\"auto, (max-width: 1301px) 100vw, 1301px\" \/><\/p>\n<p>Now, let&#8217;s turn on the new functionality (File menu &gt; App settings &gt; Advanced settings &gt; Preview features, end of the list).\u00a0 Immediately we will see some errors in the App Checker (stethoscope at the top of the screen) because the <strong>_accountcategorycode_label<\/strong> field no longer exists and has been replaced with<strong> accountcategorycode<\/strong>:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-1265\" height=\"989\" src=\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/01\/2019-01-21_18h11_02_b.png\" width=\"1301\" srcset=\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-21_18h11_02_b.webp 1301w, https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-21_18h11_02_b-300x228.webp 300w, https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-21_18h11_02_b-1024x778.webp 1024w, https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-21_18h11_02_b-768x584.webp 768w\" sizes=\"auto, (max-width: 1301px) 100vw, 1301px\" \/><\/p>\n<p>It is tempting to just fix up the formulas from the app checker, and that will indeed make the errors go away.\u00a0 But unfortunately something deeper needs to be changed.\u00a0 Option sets are a new data type and data cards in the form controls are strongly typed.\u00a0 A <strong>String<\/strong> based data card, which is where we started, won&#8217;t allow updates to the option set value and as such the form control has made these cards <strong>Custom<\/strong>\u00a0with no output:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-1261\" height=\"989\" src=\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/01\/2019-01-21_18h11_30.png\" width=\"1301\" srcset=\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-21_18h11_30.webp 1301w, https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-21_18h11_30-300x228.webp 300w, https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-21_18h11_30-1024x778.webp 1024w, https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-21_18h11_30-768x584.webp 768w\" sizes=\"auto, (max-width: 1301px) 100vw, 1301px\" \/><\/p>\n<p>The fix is to remove the old card and add a new one that is Option set aware:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-1264\" height=\"989\" src=\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/01\/2019-01-21_18h12_13.png\" width=\"1301\" srcset=\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-21_18h12_13.webp 1301w, https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-21_18h12_13-300x228.webp 300w, https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-21_18h12_13-1024x778.webp 1024w, https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-21_18h12_13-768x584.webp 768w\" sizes=\"auto, (max-width: 1301px) 100vw, 1301px\" \/><\/p>\n<p>And now all is well again with no errors:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-1263\" height=\"989\" src=\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/01\/2019-01-21_18h12_06.png\" width=\"1301\" srcset=\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-21_18h12_06.webp 1301w, https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-21_18h12_06-300x228.webp 300w, https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-21_18h12_06-1024x778.webp 1024w, https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-21_18h12_06-768x584.webp 768w\" sizes=\"auto, (max-width: 1301px) 100vw, 1301px\" \/><\/p>\n<p>For use of the\u00a0<a href=\"https:\/\/docs.microsoft.com\/en-us\/powerapps\/maker\/canvas-apps\/functions\/function-patch\"><strong>Patch<\/strong> function<\/a>, you may have previously had a formula like this:<\/p>\n<p><strong>Patch( Accounts, First(Accounts), { &#8216;Category Value&#8217;: 1 } ) )<\/strong><\/p>\n<p>This will need to be updated as we no longer separate out the Value field nor do we require the use of the numeric value.\u00a0 Instead, this becomes:<\/p>\n<p><strong>Patch( Accounts, First(Accounts), { Category: &#8216;Category (Accounts)&#8217;.&#8217;Preferred Customer&#8217; } )<\/strong><br \/>\n<strong>&#8216;Category (Accounts)&#8217;<\/strong> is the name of the enum for the Category field of the Accounts entity since this is a local option set.<\/p>\n<h2>Two option<\/h2>\n<p>A similar thing happens with a Two option field and we can apply a similar fix.\u00a0 Previously, Canvas apps saw these as simple Boolean data types with no labels (just true\/on and false\/off):<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-1266\" height=\"989\" src=\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/01\/2019-01-21_18h28_41.png\" width=\"1301\" srcset=\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-21_18h28_41.webp 1301w, https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-21_18h28_41-300x228.webp 300w, https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-21_18h28_41-1024x778.webp 1024w, https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-21_18h28_41-768x584.webp 768w\" sizes=\"auto, (max-width: 1301px) 100vw, 1301px\" \/><\/p>\n<p>If we look at the data type for this data card, we find\u00a0<strong>Boolean<\/strong>:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-1267\" height=\"989\" src=\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/01\/2019-01-21_18h28_50.png\" width=\"1301\"\/><\/p>\n<p>And if we turn on the new functionality, this turns to a custom card that can no longer update the field:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-1268\" height=\"989\" src=\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/01\/2019-01-21_18h29_06.png\" width=\"1301\"\/><\/p>\n<p>Requiring us to replace the card with a new Two option aware data card:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-1269\" height=\"989\" src=\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/01\/2019-01-21_18h29_25.png\" width=\"1301\"\/><\/p>\n<p>And we are back in business.\u00a0 Now we see the labels of the two different options in the combo box control rather than a simple on\/off toggle that had no labels:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-1270\" height=\"989\" src=\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/01\/2019-01-21_18h30_38.png\" width=\"1301\" srcset=\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-21_18h30_38.webp 1301w, https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-21_18h30_38-300x228.webp 300w, https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-21_18h30_38-1024x778.webp 1024w, https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-21_18h30_38-768x584.webp 768w\" sizes=\"auto, (max-width: 1301px) 100vw, 1301px\" \/><\/p>\n<p>If you prefer the toggle switch, you can unlock the data card and replace the control within the data card with a toggle control instead:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-1271\" height=\"989\" src=\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/01\/2019-01-21_18h57_04.png\" width=\"1301\" srcset=\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-21_18h57_04.webp 1301w, https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-21_18h57_04-300x228.webp 300w, https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-21_18h57_04-1024x778.webp 1024w, https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/01\/2019-01-21_18h57_04-768x584.webp 768w\" sizes=\"auto, (max-width: 1301px) 100vw, 1301px\" \/><\/p>\n<p>You will need to set these properties:<\/p>\n<ul>\n<li><strong>Toggle1.Default = ThisItem.&#8217;Do not allow Bulk Emails&#8217;<\/strong><\/li>\n<li><strong>Toggle1.TrueText = &#8216;Do not allow Bulk Emails (Accounts)&#8217;.&#8217;Do Not Allow&#8217;<\/strong><\/li>\n<li><strong>Toggle1.FalsText = &#8216;Do not allow Bulk Emails (Accounts)&#8217;.Allow<\/strong><\/li>\n<li><strong>DataCard.Value =\u00a0If( Toggle1.Value, <\/strong><br \/>\n<strong>\u00a0 \u00a0 &#8216;Do not allow Bulk Emails (Accounts)&#8217;.&#8217;Do Not Allow&#8217;, <\/strong><br \/>\n<strong>\u00a0 \u00a0 &#8216;Do not allow Bulk Emails (Accounts)&#8217;.Allow <\/strong><br \/>\n<strong>)<\/strong><\/li>\n<\/ul>\n<p>Using the <strong>Patch<\/strong> function with Two option should be fine as it supports direct use of true and false just as a Boolean does.\u00a0 The only slight difference is that if you put the value in a Label control previously, and it showed true and false, it will now show the Two option labels instead.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>For the last few months we have been rolling out new features for Canvas apps when connected to the Common Data Service for Apps: One-to-Many relationships Option sets Many-to-Many relationships Aggregate delegation We have been doing this work under an Experimental switch, off by default for all apps: Thank you\u00a0for playing with these features and [&hellip;]<\/p>\n","protected":false},"author":86,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ms_queue_id":[],"ep_exclude_from_search":false,"_classifai_error":"","_classifai_text_to_speech_error":"","_alt_title":"","ms-ems-related-posts":[],"footnotes":""},"audience":[3378],"content-type":[3424],"job-role":[],"product":[3473],"property":[],"topic":[3421],"coauthors":[2104],"class_list":["post-1256","post","type-post","status-publish","format-standard","hentry","audience-it-professional","content-type-news","product-power-apps","topic-application-modernization"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>New CDS capabilities for Canvas apps enter Preview - Microsoft Power Platform Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/01\/22\/new-cds-capabilities-for-canvas-apps-enter-preview\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"New CDS capabilities for Canvas apps enter Preview - Microsoft Power Platform Blog\" \/>\n<meta property=\"og:description\" content=\"For the last few months we have been rolling out new features for Canvas apps when connected to the Common Data Service for Apps: One-to-Many relationships Option sets Many-to-Many relationships Aggregate delegation We have been doing this work under an Experimental switch, off by default for all apps: Thank you\u00a0for playing with these features and [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/new-cds-capabilities-for-canvas-apps-enter-preview\/\" \/>\n<meta property=\"og:site_name\" content=\"Microsoft Power Platform Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-01-22T13:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-11T15:05:32+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/01\/2019-01-17_09h09_51.png\" \/>\n\t<meta property=\"og:image:width\" content=\"601\" \/>\n\t<meta property=\"og:image:height\" content=\"146\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Greg Lindhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Greg Lindhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/01\/22\/new-cds-capabilities-for-canvas-apps-enter-preview\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/01\/22\/new-cds-capabilities-for-canvas-apps-enter-preview\/\"},\"author\":[{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/author\/greg-lindhorst\/\",\"@type\":\"Person\",\"@name\":\"Greg Lindhorst\"}],\"headline\":\"New CDS capabilities for Canvas apps enter Preview\",\"datePublished\":\"2019-01-22T13:00:00+00:00\",\"dateModified\":\"2025-06-11T15:05:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/01\/22\/new-cds-capabilities-for-canvas-apps-enter-preview\/\"},\"wordCount\":1271,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/01\/22\/new-cds-capabilities-for-canvas-apps-enter-preview\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/01\/2019-01-17_09h09_51.png\",\"keywords\":[\"Dataverse\",\"Formulas\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/01\/22\/new-cds-capabilities-for-canvas-apps-enter-preview\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/01\/22\/new-cds-capabilities-for-canvas-apps-enter-preview\/\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/01\/22\/new-cds-capabilities-for-canvas-apps-enter-preview\/\",\"name\":\"New CDS capabilities for Canvas apps enter Preview - Microsoft Power Platform Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/01\/22\/new-cds-capabilities-for-canvas-apps-enter-preview\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/01\/22\/new-cds-capabilities-for-canvas-apps-enter-preview\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/01\/2019-01-17_09h09_51.png\",\"datePublished\":\"2019-01-22T13:00:00+00:00\",\"dateModified\":\"2025-06-11T15:05:32+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/01\/22\/new-cds-capabilities-for-canvas-apps-enter-preview\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/01\/22\/new-cds-capabilities-for-canvas-apps-enter-preview\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/01\/22\/new-cds-capabilities-for-canvas-apps-enter-preview\/#primaryimage\",\"url\":\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/01\/2019-01-17_09h09_51.png\",\"contentUrl\":\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/01\/2019-01-17_09h09_51.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/01\/22\/new-cds-capabilities-for-canvas-apps-enter-preview\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"New CDS capabilities for Canvas apps enter Preview\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#website\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/\",\"name\":\"Microsoft Power Platform Blog\",\"description\":\"Innovate with Business Apps\",\"publisher\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#organization\",\"name\":\"Microsoft Power Platform Blog\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/03\/Microsoft-Logo-e1685482038800.png\",\"contentUrl\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/03\/Microsoft-Logo-e1685482038800.png\",\"width\":194,\"height\":145,\"caption\":\"Microsoft Power Platform Blog\"},\"image\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#\/schema\/person\/dbd4cb8af4503e696f240353831f05d4\",\"name\":\"Greg Lindhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/d2e26bc357423265c4eeeb6a4ed51bd71fb29b8eced3e31f4bc1ccd5bedaf80f?s=96&d=mm&r=g0133d144d5ed416197bd3b29ccd9a59c\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d2e26bc357423265c4eeeb6a4ed51bd71fb29b8eced3e31f4bc1ccd5bedaf80f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d2e26bc357423265c4eeeb6a4ed51bd71fb29b8eced3e31f4bc1ccd5bedaf80f?s=96&d=mm&r=g\",\"caption\":\"Greg Lindhorst\"},\"url\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/author\/gregli\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"New CDS capabilities for Canvas apps enter Preview - Microsoft Power Platform Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/01\/22\/new-cds-capabilities-for-canvas-apps-enter-preview\/","og_locale":"en_US","og_type":"article","og_title":"New CDS capabilities for Canvas apps enter Preview - Microsoft Power Platform Blog","og_description":"For the last few months we have been rolling out new features for Canvas apps when connected to the Common Data Service for Apps: One-to-Many relationships Option sets Many-to-Many relationships Aggregate delegation We have been doing this work under an Experimental switch, off by default for all apps: Thank you\u00a0for playing with these features and [&hellip;]","og_url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/new-cds-capabilities-for-canvas-apps-enter-preview\/","og_site_name":"Microsoft Power Platform Blog","article_published_time":"2019-01-22T13:00:00+00:00","article_modified_time":"2025-06-11T15:05:32+00:00","og_image":[{"width":601,"height":146,"url":"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/01\/2019-01-17_09h09_51.png","type":"image\/png"}],"author":"Greg Lindhorst","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Greg Lindhorst","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/01\/22\/new-cds-capabilities-for-canvas-apps-enter-preview\/#article","isPartOf":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/01\/22\/new-cds-capabilities-for-canvas-apps-enter-preview\/"},"author":[{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/author\/greg-lindhorst\/","@type":"Person","@name":"Greg Lindhorst"}],"headline":"New CDS capabilities for Canvas apps enter Preview","datePublished":"2019-01-22T13:00:00+00:00","dateModified":"2025-06-11T15:05:32+00:00","mainEntityOfPage":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/01\/22\/new-cds-capabilities-for-canvas-apps-enter-preview\/"},"wordCount":1271,"commentCount":0,"publisher":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#organization"},"image":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/01\/22\/new-cds-capabilities-for-canvas-apps-enter-preview\/#primaryimage"},"thumbnailUrl":"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/01\/2019-01-17_09h09_51.png","keywords":["Dataverse","Formulas"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/01\/22\/new-cds-capabilities-for-canvas-apps-enter-preview\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/01\/22\/new-cds-capabilities-for-canvas-apps-enter-preview\/","url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/01\/22\/new-cds-capabilities-for-canvas-apps-enter-preview\/","name":"New CDS capabilities for Canvas apps enter Preview - Microsoft Power Platform Blog","isPartOf":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/01\/22\/new-cds-capabilities-for-canvas-apps-enter-preview\/#primaryimage"},"image":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/01\/22\/new-cds-capabilities-for-canvas-apps-enter-preview\/#primaryimage"},"thumbnailUrl":"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/01\/2019-01-17_09h09_51.png","datePublished":"2019-01-22T13:00:00+00:00","dateModified":"2025-06-11T15:05:32+00:00","breadcrumb":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/01\/22\/new-cds-capabilities-for-canvas-apps-enter-preview\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/01\/22\/new-cds-capabilities-for-canvas-apps-enter-preview\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/01\/22\/new-cds-capabilities-for-canvas-apps-enter-preview\/#primaryimage","url":"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/01\/2019-01-17_09h09_51.png","contentUrl":"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/01\/2019-01-17_09h09_51.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/01\/22\/new-cds-capabilities-for-canvas-apps-enter-preview\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/"},{"@type":"ListItem","position":2,"name":"New CDS capabilities for Canvas apps enter Preview"}]},{"@type":"WebSite","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#website","url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/","name":"Microsoft Power Platform Blog","description":"Innovate with Business Apps","publisher":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#organization","name":"Microsoft Power Platform Blog","url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/03\/Microsoft-Logo-e1685482038800.png","contentUrl":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/03\/Microsoft-Logo-e1685482038800.png","width":194,"height":145,"caption":"Microsoft Power Platform Blog"},"image":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#\/schema\/person\/dbd4cb8af4503e696f240353831f05d4","name":"Greg Lindhorst","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/d2e26bc357423265c4eeeb6a4ed51bd71fb29b8eced3e31f4bc1ccd5bedaf80f?s=96&d=mm&r=g0133d144d5ed416197bd3b29ccd9a59c","url":"https:\/\/secure.gravatar.com\/avatar\/d2e26bc357423265c4eeeb6a4ed51bd71fb29b8eced3e31f4bc1ccd5bedaf80f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d2e26bc357423265c4eeeb6a4ed51bd71fb29b8eced3e31f4bc1ccd5bedaf80f?s=96&d=mm&r=g","caption":"Greg Lindhorst"},"url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/author\/gregli\/"}]}},"bloginabox_animated_featured_image":null,"bloginabox_display_generated_audio":false,"distributor_meta":false,"distributor_terms":false,"distributor_media":false,"distributor_original_site_name":"Microsoft Power Platform Blog","distributor_original_site_url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog","push-errors":false,"_links":{"self":[{"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/posts\/1256","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/users\/86"}],"replies":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/comments?post=1256"}],"version-history":[{"count":1,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/posts\/1256\/revisions"}],"predecessor-version":[{"id":130967,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/posts\/1256\/revisions\/130967"}],"wp:attachment":[{"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/media?parent=1256"}],"wp:term":[{"taxonomy":"audience","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/audience?post=1256"},{"taxonomy":"content-type","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/content-type?post=1256"},{"taxonomy":"job-role","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/job-role?post=1256"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/product?post=1256"},{"taxonomy":"property","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/property?post=1256"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/topic?post=1256"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/coauthors?post=1256"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}