{"id":8824,"date":"2020-03-30T08:04:32","date_gmt":"2020-03-30T15:04:32","guid":{"rendered":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/introducing-command-checker-for-model-app-ribbons\/"},"modified":"2020-03-30T08:04:32","modified_gmt":"2020-03-30T15:04:32","slug":"introducing-command-checker-for-model-app-ribbons","status":"publish","type":"power-apps","link":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/introducing-command-checker-for-model-app-ribbons\/","title":{"rendered":"Introducing Command Checker for model-app ribbons"},"content":{"rendered":"

We\u2019re excited to announce a new feature adding transparency to model-driven app ribbons in Power Apps!\u00a0 Command Checker<\/strong> is an in-app tool designed to help users understand why buttons are hidden or shown and what command will run upon click.<\/p>\n

For each button on a given ribbon, the tool will show its calculated visibility status, the evaluation result of each enable\/display rule attached to the button, and the command to be executed when clicked.\u00a0 In addition, we have built the ability to see solution layers contributing to the final set of rules and buttons.<\/p>\n

If you’re experiencing issues with command button visiblity or execution (or just curious about ribbon behavior), try out our step-by-step troubleshooting guide<\/a>.<\/p>\n

Let\u2019s see the tool in action!\u00a0 To enable Command Checker, pass ribbondebug=true<\/strong> as a URL parameter (ex: https:\/\/myorg.crm.dynamics.com\/main.aspx?appid=c26d1c44-e7c0-4c72-9d6d-0e82768cb5bd&ribbondebug=true<\/a>).\u00a0 You\u2019ll see two new UI features light up.\u00a0 The first is a new button in the top right of the header which lets you inspect the global command bar<\/p>\n

\"\"<\/p>\n

Next, each command bar contains a new \u201cCommand checker\u201d button.\u00a0 Note that this shows up at the end of the ribbon, so you may have to click the overflow flyout.<\/p>\n

\"\"<\/p>\n

Let\u2019s explore the experience upon clicking the button.\u00a0 For this example, we\u2019ll use the account edit form.\u00a0 The tool is overlaid on top of the page as seen below.<\/p>\n

\"\"<\/p>\n

On the left, the context and entity name are displayed above a tree of tabs, groups, flyouts, and buttons.\u00a0 On the right, the details of the currently selected button are shown.\u00a0 The tree is collapsible at any tab, group, and flyout level for a cleaner experience when desired.\u00a0 The tree contents reflect the current state of the inspected ribbon (of course, this is dependent on each solution layer installed).<\/p>\n

Buttons and flyouts in italicized grey are hidden, and those in black text are visible.\u00a0 Note a flyout will be hidden when all its children are hidden.\u00a0 Likewise, all children will be hidden when a flyout evaluates to hidden.<\/p>\n

Let\u2019s drill down into one of the buttons to see why it\u2019s hidden.\u00a0 We\u2019ll use the Mark Complete <\/strong>button as an example.\u00a0 Clicking on this button shows the following breakdown.<\/p>\n

\"\"<\/p>\n

You can see the name of the button and other properties from the ribbon XML displayed on the right.\u00a0 Clicking on Command properties<\/strong> on the right pane header will show details on execution and rule evaluation.<\/p>\n

\"\"<\/p>\n

You can quickly see that the Mscrm.PrimaryIsActivity<\/strong> display rule evaluated to false in this page load, and in model-apps ribbons, the button is hidden if any rule evaluates to false.\u00a0 Drilling down into the evaluation, you can see which rule was used to determine visibility.<\/p>\n

\"\"<\/p>\n

The rule was an EntityPropertyRule <\/strong>which checks the IsActivity<\/strong> property of the PrimaryEntity<\/strong> (this being the entity used on the form).\u00a0 Since the account entity has an IsActivity<\/strong> property of false, the rule itself evaluates to false, and the button is hidden.\u00a0 This level of detail exists for all types of rules, namely the JavaScriptRule<\/strong>, which shows the exact function name and JS file used to determine visibility (example below).<\/p>\n

\"\"<\/p>\n

This breakdown is intended to demystify the hiding and showing of buttons in any context, be it an edit form, subgrid, home page grid, or the global command bar.\u00a0 The tool will also show the method to be executed upon click, including function name and JS file.<\/p>\n

\"\"<\/p>\n

Let\u2019s next look at the solution layer drilldown.\u00a0 Within Command checker, you can view the solution layering, including diffing ability, for button, command, and rule definitions.\u00a0 We\u2019ll use the Save\u00a0<\/strong>button on the opportunity form as an example.\u00a0 In this example, Contoso has imported a rule to always show to the Save button, regardless of auto-save status.\u00a0 Let\u2019s click on the button, navigate to Command properties, open the Mscrm.IsAutoSaveDisable<\/strong> rule\u00a0and click View rule definition solution layers<\/strong>.<\/p>\n

\"\"<\/strong><\/p>\n

You can see all solutions which contribute to this command definition with publisher, order, and entity context displayed.\u00a0 One common mystery of button visibility is when many solution layers add and remove rules, so it\u2019s hard to determine which are in the final set.\u00a0 Let\u2019s compare the custom and base solutions to see how a rule was modified.\u00a0 We\u2019ll select the two records.\u00a0 Then we\u2019ll hit Compare<\/strong>.<\/p>\n

\"\"<\/p>\n

In this view, you can select any two solutions for button, command, or rule definition comparison.\u00a0 Here, we are comparing the top solution (ContosoCustomization) with the base solution (System).\u00a0 You can see that the top solution (on the right) has overridden the base rule definition and instead uses the alwaysEnabled function to return true, meaning the Mscrm.IsAutoSaveDisable\u00a0<\/strong>rule will always evaluate to true.\u00a0 This should help clarify how solution layering has impact on the final rule set.<\/p>\n

Feedback<\/h1>\n

We hope you\u2019ll take some time to try out this new diagnostics feature, whether investigating a user-facing issue or simply exploring the buttons and rules present in the system.<\/p>\n

Please help us improve the tool by providing feedback in our Power Apps community post<\/a>.<\/p>\n

What\u2019s next<\/h1>\n

We’re excited for you to try out Command Checker, and we’re already working on improvements to make it more useful:<\/p>\n

    \n
  • Allow Command Checker usage through a new privilege rather than URL parameter<\/li>\n
  • Support for the HideCustomAction element<\/li>\n
  • Visualize commands hidden server-side before they reach the client<\/li>\n
  • Support for buttons hidden for reasons other than rule evaluation<\/li>\n
  • Adding detection for common ribbon mistakes and show them as errors and warnings<\/li>\n
  • Show lock icons for system solutions that are not modifiable<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"

    We\u2019re excited to announce a new feature adding transparency to model-driven app ribbons in Power Apps! Command Checker is an in-app tool designed to help users understand why buttons are hidden or shown and what command will run upon click.<\/p>\n","protected":false},"author":206,"featured_media":0,"comment_status":"open","ping_status":"open","template":"","power-apps-category":[1549,1599,1664,1703],"power-apps-tag":[1600,1650],"coauthors":[2180],"class_list":["post-8824","power-apps","type-power-apps","status-publish","hentry","power-apps-category-building-power-apps","power-apps-category-dynamics-365","power-apps-category-uncategorized","power-apps-category-support","power-apps-tag-dynamics-365","power-apps-tag-model-driven-apps"],"yoast_head":"\nIntroducing Command Checker for model-app ribbons - 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\/power-apps\/introducing-command-checker-for-model-app-ribbons\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Introducing Command Checker for model-app ribbons - Microsoft Power Platform Blog\" \/>\n<meta property=\"og:description\" content=\"We\u2019re excited to announce a new feature adding transparency to model-driven app ribbons in Power Apps! Command Checker is an in-app tool designed to help users understand why buttons are hidden or shown and what command will run upon click.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/introducing-command-checker-for-model-app-ribbons\/\" \/>\n<meta property=\"og:site_name\" content=\"Microsoft Power Platform Blog\" \/>\n<meta property=\"og:image\" content=\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2020\/03\/1-300x48.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"4 min read\" \/>\n\t<meta name=\"twitter:label2\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data2\" content=\"Jesse Parsons\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/introducing-command-checker-for-model-app-ribbons\/\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/introducing-command-checker-for-model-app-ribbons\/\",\"name\":\"Introducing Command Checker for model-app ribbons - 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\/power-apps\/introducing-command-checker-for-model-app-ribbons\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/introducing-command-checker-for-model-app-ribbons\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2020\/03\/1-300x48.png\",\"datePublished\":\"2020-03-30T15:04:32+00:00\",\"dateModified\":\"2020-03-30T15:04:32+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/introducing-command-checker-for-model-app-ribbons\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/introducing-command-checker-for-model-app-ribbons\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/introducing-command-checker-for-model-app-ribbons\/#primaryimage\",\"url\":\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2020\/03\/1-300x48.png\",\"contentUrl\":\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2020\/03\/1-300x48.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/introducing-command-checker-for-model-app-ribbons\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Power Apps\",\"item\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Introducing Command Checker for model-app ribbons\"}]},{\"@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\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Introducing Command Checker for model-app ribbons - 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\/power-apps\/introducing-command-checker-for-model-app-ribbons\/","og_locale":"en_US","og_type":"article","og_title":"Introducing Command Checker for model-app ribbons - Microsoft Power Platform Blog","og_description":"We\u2019re excited to announce a new feature adding transparency to model-driven app ribbons in Power Apps! Command Checker is an in-app tool designed to help users understand why buttons are hidden or shown and what command will run upon click.","og_url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/introducing-command-checker-for-model-app-ribbons\/","og_site_name":"Microsoft Power Platform Blog","og_image":[{"url":"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2020\/03\/1-300x48.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"4 min read","Written by":"Jesse Parsons"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/introducing-command-checker-for-model-app-ribbons\/","url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/introducing-command-checker-for-model-app-ribbons\/","name":"Introducing Command Checker for model-app ribbons - 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\/power-apps\/introducing-command-checker-for-model-app-ribbons\/#primaryimage"},"image":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/introducing-command-checker-for-model-app-ribbons\/#primaryimage"},"thumbnailUrl":"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2020\/03\/1-300x48.png","datePublished":"2020-03-30T15:04:32+00:00","dateModified":"2020-03-30T15:04:32+00:00","breadcrumb":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/introducing-command-checker-for-model-app-ribbons\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/introducing-command-checker-for-model-app-ribbons\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/introducing-command-checker-for-model-app-ribbons\/#primaryimage","url":"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2020\/03\/1-300x48.png","contentUrl":"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2020\/03\/1-300x48.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/introducing-command-checker-for-model-app-ribbons\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/"},{"@type":"ListItem","position":2,"name":"Power Apps","item":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/"},{"@type":"ListItem","position":3,"name":"Introducing Command Checker for model-app ribbons"}]},{"@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\/"}}]}},"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\/power-apps\/8824"}],"collection":[{"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/power-apps"}],"about":[{"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/types\/power-apps"}],"author":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/users\/206"}],"replies":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/comments?post=8824"}],"version-history":[{"count":0,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/power-apps\/8824\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/media?parent=8824"}],"wp:term":[{"taxonomy":"power-apps-category","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/power-apps-category?post=8824"},{"taxonomy":"power-apps-tag","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/power-apps-tag?post=8824"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/coauthors?post=8824"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}