<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3970629459363259828</id><updated>2026-05-23T12:15:03.916+10:00</updated><category term="Power Automate"/><category term="Microsoft Dataverse"/><category term="cloud flow"/><category term="javascript"/><category term="Dyn365CE"/><category term="crm 2011"/><category term="sharepoint"/><category term="model-driven apps in Dynamics 365"/><category term="ms crm"/><category term="ms crm 2011"/><category term="error"/><category term="email"/><category term="Power Apps"/><category term="lookup"/><category term="fetchxml"/><category term="Document"/><category term="canvas app"/><category term="crm 2013"/><category term="model-driven apps"/><category term="List  records"/><category term="File"/><category term="File Field Input SharePoint Storage"/><category term="Solution"/><category term="form"/><category term="issue"/><category term="microsoft dynamics crm 2011"/><category term="ms crm 4.0"/><category term="plugin"/><category term="sql"/><category term="unified interface"/><category term="Custom Control"/><category term="JSON"/><category term="Project Operations"/><category term="async"/><category term="attachment"/><category term="compilation"/><category term="crm 2015"/><category term="crm 4.0"/><category term="difference"/><category term="import wizard"/><category term="javascript error"/><category term="label"/><category term="links"/><category term="maker portal"/><category term="notebook"/><category term="queryexpression"/><category term="refresh"/><category term="ribbon"/><category term="setting ownerid"/><category term="tips"/><category term="workflow"/><category term=".net"/><category term="Address"/><category term="Audit History"/><category term="Autonomous Agent"/><category term="Base64"/><category term="Bulk Data Updater"/><category term="Business Process Flow"/><category term="Button"/><category term="Command Bar"/><category term="Copilot"/><category term="Debugging"/><category term="EntityType"/><category term="Environment Variable"/><category term="Expand Query"/><category term="Field Service"/><category term="Filter array"/><category term="Get a record"/><category term="Grid View"/><category term="MSDyn365"/><category term="Offline"/><category term="Partition Id"/><category term="Polymorphic Lookup"/><category term="Portal"/><category term="Power Fx"/><category term="Record Item"/><category term="Security"/><category term="Table"/><category term="WebAPI"/><category term="Xrm.Navigation.navigateTo"/><category term="addCustomFilter"/><category term="annotation"/><category term="assignrequest"/><category term="asynchronously"/><category term="asyncservice"/><category term="attribute"/><category term="batch job"/><category term="binary"/><category term="blank page"/><category term="bookmark"/><category term="bound action"/><category term="bug"/><category term="cache"/><category term="calibri"/><category term="canvas apps"/><category term="changeset request"/><category term="chrome"/><category term="client side scripting"/><category term="configuration"/><category term="console application"/><category term="custom entity"/><category term="custom workflow"/><category term="customization"/><category term="date time"/><category term="debug"/><category term="distinct"/><category term="documentbody"/><category term="elastic table"/><category term="email template"/><category term="embedded canvas apps"/><category term="exception"/><category term="fetchexpression"/><category term="field"/><category term="firefox"/><category term="fix"/><category term="font"/><category term="form parameter"/><category term="formula bar"/><category term="forward email"/><category term="hide column"/><category term="how-to"/><category term="iFrame"/><category term="icon"/><category term="iis"/><category term="iis7"/><category term="installation"/><category term="javascript files"/><category term="javavscript"/><category term="microsoft dynamics crm"/><category term="option set"/><category term="paging"/><category term="paging cookie"/><category term="pre create"/><category term="product key"/><category term="prompt"/><category term="publish"/><category term="querybyattribute"/><category term="quick create"/><category term="rename"/><category term="repair"/><category term="ribbon button"/><category term="role"/><category term="salesperson"/><category term="save"/><category term="scheduler"/><category term="setup"/><category term="silverlight"/><category term="skip token"/><category term="sql server"/><category term="standalone"/><category term="subgrid"/><category term="sync"/><category term="synchronously"/><category term="sytem job"/><category term="tabs"/><category term="team"/><category term="threading"/><category term="trigger"/><category term="truncated"/><category term="unbound action"/><category term="unsupported"/><category term="url"/><category term="view"/><category term="web resource"/><category term="word template"/><title type='text'>Linn&#39;s Power Platform Notebook</title><subtitle type='html'>A place to note down my learning experience in my Power Platform journey</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://linnzawwin.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://linnzawwin.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Linn Zaw Win</name><uri>http://www.blogger.com/profile/16015532694415495453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaCUObunP3kiYNRu6pZ-J4ezoWDP-Jf1Cv010HLXr_bLFmB0bcZj8atUiBYmg37uDyBDzxPrHFX7EGESjgSMIOIBX7TR9VS9nZ179jpYpTkpsDtw09albFOTBEXTdw2OhtXLyZkfd4kBnOHYZmGSoge7m2XxXOVZvFJxuEiXnTmg7sRRc/s220/IMG_5259-Square%20-%20MVP.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>117</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3970629459363259828.post-6089127807263631548</id><published>2026-01-19T00:31:00.000+10:00</published><updated>2026-01-19T00:31:14.605+10:00</updated><title type='text'>Quick Tip: Finding the Right Many-to-Many Relationship When Adding Subgrids</title><content type='html'>&lt;p&gt;When you add a subgrid to a model-driven app form and select &quot;Show related records&quot;, you&#39;ll see a list of tables related to your current form&#39;s table.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJIqQjIRVHCc-U9LpJaYCoLUuFEg85I8-57-X4fv9AePV-BXqWsgTyziB0s1zvCfuP7blm2fMZvf8qiBzGhGyUI9PQD9DoXD2G7aq09Jqe9gJmOAK6OkMeGG9D6ssScHMpCL4wm51RIyls1rW9ou_3PhuoHcCK7eyitT6JCGSZggssg8NOIojVOJ0tiys4/s490/Show%20related%20records.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;457&quot; data-original-width=&quot;490&quot; height=&quot;596&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJIqQjIRVHCc-U9LpJaYCoLUuFEg85I8-57-X4fv9AePV-BXqWsgTyziB0s1zvCfuP7blm2fMZvf8qiBzGhGyUI9PQD9DoXD2G7aq09Jqe9gJmOAK6OkMeGG9D6ssScHMpCL4wm51RIyls1rW9ou_3PhuoHcCK7eyitT6JCGSZggssg8NOIojVOJ0tiys4/w640-h596/Show%20related%20records.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;For one-to-many (1:N) child tables, life is pretty straightforward. The lookup column name appears at the end in brackets, making it easy to distinguish between multiple relationships with the same table.&lt;/p&gt;&lt;div data-test-render-count=&quot;1&quot;&gt;&lt;div class=&quot;group&quot; style=&quot;height: auto; opacity: 1; transform: none;&quot;&gt;&lt;div class=&quot;group relative relative pb-3&quot; data-is-streaming=&quot;false&quot; style=&quot;opacity: 1; transform: none;&quot;&gt;&lt;div class=&quot;font-claude-response relative leading-[1.65rem] [&amp;amp;_pre&amp;gt;div]:bg-bg-000/50 [&amp;amp;_pre&amp;gt;div]:border-0.5 [&amp;amp;_pre&amp;gt;div]:border-border-400 [&amp;amp;_.ignore-pre-bg&amp;gt;div]:bg-transparent [&amp;amp;_.standard-markdown_:is(p,blockquote,h1,h2,h3,h4,h5,h6)]:pl-2 [&amp;amp;_.standard-markdown_:is(p,blockquote,ul,ol,h1,h2,h3,h4,h5,h6)]:pr-8 [&amp;amp;_.progressive-markdown_:is(p,blockquote,h1,h2,h3,h4,h5,h6)]:pl-2 [&amp;amp;_.progressive-markdown_:is(p,blockquote,ul,ol,h1,h2,h3,h4,h5,h6)]:pr-8&quot;&gt;&lt;div class=&quot;standard-markdown grid-cols-1 grid gap-3 [&amp;amp;_&amp;gt;_*]:min-w-0 standard-markdown&quot;&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;But many-to-many (N:N) relationships? That&#39;s where things get messy. The dropdown just shows the related table name, and if you&#39;ve got multiple many-to-many relationships with the same table, good luck figuring out which option corresponds to which relationship.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Here&#39;s a quick workaround that&#39;s saved me plenty of headaches:&lt;/p&gt;1. Click the ellipsis (...) at the top and select &quot;Switch to Classic&quot;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2xqLTCeB3GH7uQK1GnTJicZ-mV8YludkjixtzkKsfkI7QIkUeR-ihwAJG5tH1tRhNPlKzO4_5tycxMfTjR4rklD0RpbiAkdMD0PBg-ZF-Rz4WH9-Q0XQxMpNN-kMMZDR0d36_OBjzHzCUcSm4WGPq3ZJjlhKBbW4cH7I8384v-lVviB0oVlek0-t1lOp9/s604/Switch%20to%20Classic.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;160&quot; data-original-width=&quot;604&quot; height=&quot;170&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2xqLTCeB3GH7uQK1GnTJicZ-mV8YludkjixtzkKsfkI7QIkUeR-ihwAJG5tH1tRhNPlKzO4_5tycxMfTjR4rklD0RpbiAkdMD0PBg-ZF-Rz4WH9-Q0XQxMpNN-kMMZDR0d36_OBjzHzCUcSm4WGPq3ZJjlhKBbW4cH7I8384v-lVviB0oVlek0-t1lOp9/w640-h170/Switch%20to%20Classic.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;standard-markdown grid-cols-1 grid gap-3 [&amp;amp;_&amp;gt;_*]:min-w-0 standard-markdown&quot;&gt;2. In the classic form designer, open the subgrid properties (by selecting the subgrid and click Change Properties)&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPv9Xf7lYy0pxqcDk9EoHBqJhyphenhyphen99VPZ2WCou4kM3rBUvlaIdCyriJyoW-AX9LgNcLxiNM_65lWZtSZF20zqiBc1BDz5cwhp-AjlZd_gx_kqazUUhuqo4GaAJKwS8FbJzfwX7YqMK-g9SOEIUFG-iR3wNo4sj7EXRuyUhiqoEWuiWRvNu9yn3Y5r8wzNcdP/s604/subgrid%20properties.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;539&quot; data-original-width=&quot;604&quot; height=&quot;572&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPv9Xf7lYy0pxqcDk9EoHBqJhyphenhyphen99VPZ2WCou4kM3rBUvlaIdCyriJyoW-AX9LgNcLxiNM_65lWZtSZF20zqiBc1BDz5cwhp-AjlZd_gx_kqazUUhuqo4GaAJKwS8FbJzfwX7YqMK-g9SOEIUFG-iR3wNo4sj7EXRuyUhiqoEWuiWRvNu9yn3Y5r8wzNcdP/w640-h572/subgrid%20properties.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;standard-markdown grid-cols-1 grid gap-3 [&amp;amp;_&amp;gt;_*]:min-w-0 standard-markdown&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;standard-markdown grid-cols-1 grid gap-3 [&amp;amp;_&amp;gt;_*]:min-w-0 standard-markdown&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;standard-markdown grid-cols-1 grid gap-3 [&amp;amp;_&amp;gt;_*]:min-w-0 standard-markdown&quot;&gt;3. Fire up your browser&#39;s Developer Tools (F12 or Ctrl+Shift+I)&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjY3iv4lNfa1EWmrN2ap_bPLlkHRgqDHq_diCouJiU65VqG2wcIu1LVlOIlieODOplUtHdIvJtNEr8KAbwLe_fXbGDrTnARJV5ZTjybNA09iKyYqpdSKZ1YhPv0VkUMdioq1mpPC7bgcaZitWMxcegPQhfGRq6rEp5v1EqelgQM_j5rPa2RIeKDEa2KXBqv/s784/Dev%20Tools.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;594&quot; data-original-width=&quot;784&quot; height=&quot;484&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjY3iv4lNfa1EWmrN2ap_bPLlkHRgqDHq_diCouJiU65VqG2wcIu1LVlOIlieODOplUtHdIvJtNEr8KAbwLe_fXbGDrTnARJV5ZTjybNA09iKyYqpdSKZ1YhPv0VkUMdioq1mpPC7bgcaZitWMxcegPQhfGRq6rEp5v1EqelgQM_j5rPa2RIeKDEa2KXBqv/w640-h484/Dev%20Tools.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;standard-markdown grid-cols-1 grid gap-3 [&amp;amp;_&amp;gt;_*]:min-w-0 standard-markdown&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;standard-markdown grid-cols-1 grid gap-3 [&amp;amp;_&amp;gt;_*]:min-w-0 standard-markdown&quot;&gt;4. Click the &quot;select element&quot; button in Developer Tools (or press Ctrl+Shift+C)&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLstOH-harcWIy6R1E3uTVrEEmPdV98Ms5BTD3DZwvXlbPXweJ8bez4Q2PL9XRunfaBMlfy1t-XHMz-mfQ5eYXubERuKDwaDVrBWP-p3POC_WrnnSxWvEYvVp6l_fkH1VQFaF5BsUTgq-8AYYd_ZyJ0v9ht65LYyRY-7wP79cWPKKXAQUvGGe4m9SDxQM8/s394/Select%20Element.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;159&quot; data-original-width=&quot;394&quot; height=&quot;258&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLstOH-harcWIy6R1E3uTVrEEmPdV98Ms5BTD3DZwvXlbPXweJ8bez4Q2PL9XRunfaBMlfy1t-XHMz-mfQ5eYXubERuKDwaDVrBWP-p3POC_WrnnSxWvEYvVp6l_fkH1VQFaF5BsUTgq-8AYYd_ZyJ0v9ht65LYyRY-7wP79cWPKKXAQUvGGe4m9SDxQM8/w640-h258/Select%20Element.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;standard-markdown grid-cols-1 grid gap-3 [&amp;amp;_&amp;gt;_*]:min-w-0 standard-markdown&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;standard-markdown grid-cols-1 grid gap-3 [&amp;amp;_&amp;gt;_*]:min-w-0 standard-markdown&quot;&gt;&lt;br /&gt;5. Point to and select the Entity dropdown in the &quot;Specify the primary data source for this list or chart&quot; section&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWU0I907HS5zwRkIF0-HknBQHpp7MN9z4BNRqAey9VX_OoWGMeKLGDFqWY52zETeKcwQtpMG6XQ5my_Z20v1n1-n1kseJbFZhHc-ukcjmlkQbt4GhTeqmZTUPtjgtyZx6Xc4radjXG28paQ8hZwqdDEIllQkehBFf5r3sH8GNxXhmwtX7hB2u8VHy3-udI/s499/Entity%20Dropdown.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;286&quot; data-original-width=&quot;499&quot; height=&quot;366&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWU0I907HS5zwRkIF0-HknBQHpp7MN9z4BNRqAey9VX_OoWGMeKLGDFqWY52zETeKcwQtpMG6XQ5my_Z20v1n1-n1kseJbFZhHc-ukcjmlkQbt4GhTeqmZTUPtjgtyZx6Xc4radjXG28paQ8hZwqdDEIllQkehBFf5r3sH8GNxXhmwtX7hB2u8VHy3-udI/w640-h366/Entity%20Dropdown.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;standard-markdown grid-cols-1 grid gap-3 [&amp;amp;_&amp;gt;_*]:min-w-0 standard-markdown&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;standard-markdown grid-cols-1 grid gap-3 [&amp;amp;_&amp;gt;_*]:min-w-0 standard-markdown&quot;&gt;6. Expand the &lt;code class=&quot;bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]&quot;&gt;&amp;lt;select&amp;gt;&lt;/code&gt; tag in the HTML inspector&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLPen7Ox3c6p4apK1AnV7EthofucEHYzED_RrBG0d62C8CR7QKw7ZfIcnvn4ALNMtY4iVorgRFkDoXPIpINTXVyTIiODCDnGkQ__vFe5Q8SBHGKUspkDmiLBP7FfLkY9gO51PKb-DX_gkJNOTdzCxhvyZiI2jo6YE3P4jSJPzQDD31wj8CmJ2H1NI8spEm/s1244/HTML.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;395&quot; data-original-width=&quot;1244&quot; height=&quot;204&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLPen7Ox3c6p4apK1AnV7EthofucEHYzED_RrBG0d62C8CR7QKw7ZfIcnvn4ALNMtY4iVorgRFkDoXPIpINTXVyTIiODCDnGkQ__vFe5Q8SBHGKUspkDmiLBP7FfLkY9gO51PKb-DX_gkJNOTdzCxhvyZiI2jo6YE3P4jSJPzQDD31wj8CmJ2H1NI8spEm/w640-h204/HTML.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;standard-markdown grid-cols-1 grid gap-3 [&amp;amp;_&amp;gt;_*]:min-w-0 standard-markdown&quot;&gt;&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;You&#39;ll now see all the options with the actual relationship names sitting right next to each entity name. From there, you can work out exactly which relationship name matches the subgrid you want to configure (say, the second Contact in the list) and choose the correct one from the dropdown.&lt;/p&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Not the most elegant solution, but it gets the job done when you&#39;re dealing with multiple N:N relationships to the same table.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://linnzawwin.blogspot.com/feeds/6089127807263631548/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://linnzawwin.blogspot.com/2026/01/quick-tip-finding-right-many-to-many.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/6089127807263631548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/6089127807263631548'/><link rel='alternate' type='text/html' href='http://linnzawwin.blogspot.com/2026/01/quick-tip-finding-right-many-to-many.html' title='Quick Tip: Finding the Right Many-to-Many Relationship When Adding Subgrids'/><author><name>Linn Zaw Win</name><uri>http://www.blogger.com/profile/16015532694415495453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaCUObunP3kiYNRu6pZ-J4ezoWDP-Jf1Cv010HLXr_bLFmB0bcZj8atUiBYmg37uDyBDzxPrHFX7EGESjgSMIOIBX7TR9VS9nZ179jpYpTkpsDtw09albFOTBEXTdw2OhtXLyZkfd4kBnOHYZmGSoge7m2XxXOVZvFJxuEiXnTmg7sRRc/s220/IMG_5259-Square%20-%20MVP.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJIqQjIRVHCc-U9LpJaYCoLUuFEg85I8-57-X4fv9AePV-BXqWsgTyziB0s1zvCfuP7blm2fMZvf8qiBzGhGyUI9PQD9DoXD2G7aq09Jqe9gJmOAK6OkMeGG9D6ssScHMpCL4wm51RIyls1rW9ou_3PhuoHcCK7eyitT6JCGSZggssg8NOIojVOJ0tiys4/s72-w640-h596-c/Show%20related%20records.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3970629459363259828.post-6441449853757222597</id><published>2025-07-10T18:06:00.006+10:00</published><updated>2025-07-13T23:01:48.168+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cloud flow"/><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft Dataverse"/><category scheme="http://www.blogger.com/atom/ns#" term="Power Automate"/><title type='text'>Dataverse Connector&#39;s &quot;Return Full Metadata&quot; Parameter in Power Automate</title><content type='html'>&lt;p&gt;I stumbled across something interesting today whilst working on a Power Automate cloud flow. There&#39;s this &quot;Return Full Metadata&quot; parameter (with key in the code view&amp;nbsp;&lt;span style=&quot;font-family: monospace;&quot;&gt;x-ms-odata-metadata-full&lt;/span&gt;) in the Dataverse connector that I&#39;d never really paid attention to before. The &lt;a href=&quot;https://learn.microsoft.com/connectors/commondataserviceforapps/?WT.mc_id=DX-MVP-5003873&quot;&gt;official documentation&lt;/a&gt; describes it as &quot;The header parameter to customer to opt-in returning full odata metadata in response.&quot;&lt;/p&gt;
&lt;p&gt;Not exactly the most enlightening explanation, is it? It doesn&#39;t tell you what kind of OData metadata we&#39;re talking about, and more importantly, it doesn&#39;t explain how this parameter actually behaves.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMJNQ7gjiGOVXjLwEVfo-QSwMbMrF0kU12p2F9cZsl0MKJeRygyMkkYuBKhefsLcko6_9tVZvBt14dr6ezhAQUmHsqQ2C94oiB_QhGFbBjUjcyeA-Nh8vNHepC2J09DP7F5umtP4Sk3nRww7yvCN2OdELZkdOJb_dmFjCjOp_vIE60J1GIX1oPes9TDkIo/s1660/Thumbnail.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;952&quot; data-original-width=&quot;1660&quot; height=&quot;230&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMJNQ7gjiGOVXjLwEVfo-QSwMbMrF0kU12p2F9cZsl0MKJeRygyMkkYuBKhefsLcko6_9tVZvBt14dr6ezhAQUmHsqQ2C94oiB_QhGFbBjUjcyeA-Nh8vNHepC2J09DP7F5umtP4Sk3nRww7yvCN2OdELZkdOJb_dmFjCjOp_vIE60J1GIX1oPes9TDkIo/w400-h230/Thumbnail.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;
&lt;h2&gt;What the Documentation Doesn&#39;t Tell You&lt;/h2&gt;
&lt;p&gt;So naturally, I did what any curious developer would do - I set the parameter to &quot;Yes&quot; and ran the flow to see what would happen. The result? The output JSON looked exactly the same as before.&lt;/p&gt;
&lt;p&gt;This got me thinking. After a bit more experimentation, I discovered the real story behind this parameter:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The default value is actually &quot;Yes&quot;&lt;/strong&gt; - even when you don&#39;t specify the parameter at all. The documentation completely fails to mention this crucial detail. If you want to see the difference, you need to set the parameter to &quot;No&quot; to get a slimmer version of the output JSON.&lt;/p&gt;
&lt;h2&gt;The Real Impact: What You&#39;re Actually Getting&lt;/h2&gt;
&lt;p&gt;When you set &quot;Return Full Metadata&quot; to &quot;No&quot;, you&#39;ll notice that several OData properties are stripped out from the response:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;@odata.type&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@odata.id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@odata.editLink&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@odata.associationLink&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@odata.navigationLink&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgexQZbqcyCoBSTU0nsNa7lapA_jev88CYNPKqKaxcaYAD_g2A99hrNC8fb7P5dYM8nLgfk5KNFc2opNSM2MAHey6UjgTPObzhzSDDwZSJzxzpppkicz5hWFbap8cbVyRTYOEn5nHo9fzSYAWA-Yi711qAIUL8NLGp5JvCslhyphenhyphenwl4uGso3RcpspZuJJhUrk/s1661/Comparison%201.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;971&quot; data-original-width=&quot;1661&quot; height=&quot;374&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgexQZbqcyCoBSTU0nsNa7lapA_jev88CYNPKqKaxcaYAD_g2A99hrNC8fb7P5dYM8nLgfk5KNFc2opNSM2MAHey6UjgTPObzhzSDDwZSJzxzpppkicz5hWFbap8cbVyRTYOEn5nHo9fzSYAWA-Yi711qAIUL8NLGp5JvCslhyphenhyphenwl4uGso3RcpspZuJJhUrk/w640-h374/Comparison%201.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBVtF1XLFR55QonUUdjCVWJmTxl5P_MYWs-UsJdGs4ZHIm-cC3LDUcNcp0bMqSvdqqJkmN-gggEMntFw1iB0KtyG9ncn6yn08uOwyNZ7dYfF7AhBxlB07qEOUyocWzpqsMT6bGnyTF7-3btY9lynosluhg_BrJ60VMnNsP8o9pHp5jrpH5gh-ysK6xr6Nj/s1661/Comparison%202.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;975&quot; data-original-width=&quot;1661&quot; height=&quot;376&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBVtF1XLFR55QonUUdjCVWJmTxl5P_MYWs-UsJdGs4ZHIm-cC3LDUcNcp0bMqSvdqqJkmN-gggEMntFw1iB0KtyG9ncn6yn08uOwyNZ7dYfF7AhBxlB07qEOUyocWzpqsMT6bGnyTF7-3btY9lynosluhg_BrJ60VMnNsP8o9pHp5jrpH5gh-ysK6xr6Nj/w640-h376/Comparison%202.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;The good news? All the useful metadata that you actually need for business scenarios remains intact:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;@OData.Community.Display.V1.FormattedValue&lt;/code&gt; (for displaying formatted values like option set labels and lookup name text)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@Microsoft.Dynamics.CRM.lookuplogicalname&lt;/code&gt; (for identifying the logical name of lookup targets especially for polymorphic lookups)&lt;/li&gt;&lt;li&gt;&lt;code&gt;@odata.nextLink&amp;nbsp;&lt;/code&gt;(for paging&amp;nbsp;to retrieve the next page of results when the response exceeds the page size limit)&lt;/li&gt;
&lt;li&gt;All your actual data fields&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;The Performance Question&lt;/h2&gt;
&lt;p&gt;Let&#39;s be honest - when was the last time you needed to know the &lt;code&gt;@odata.editLink&lt;/code&gt; in your business logic? For 99% of use cases, you&#39;re interested in the actual data and maybe some formatting information, not the internal OData plumbing.&lt;/p&gt;
&lt;p&gt;Whilst I haven&#39;t done extensive performance testing, common sense suggests that smaller JSON payloads should result in:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Faster network transfer&lt;/li&gt;
&lt;li&gt;Reduced memory usage&lt;/li&gt;
&lt;li&gt;Quicker JSON parsing&lt;/li&gt;
&lt;li&gt;Better overall flow performance&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is particularly relevant when you&#39;re working with large datasets or when your flows are running frequently.&lt;/p&gt;&lt;p&gt;Thanks to &lt;a href=&quot;https://www.linkedin.com/in/markmulvina/&quot; target=&quot;_blank&quot;&gt;Mark Mulvina&lt;/a&gt; for conducting the &lt;a href=&quot;https://www.linkedin.com/feed/update/urn%3Ali%3Aactivity%3A7349892738902806530/&quot; target=&quot;_blank&quot;&gt;benchmark testing for the quick time trial comparing performance when using the &#39;Return Full Metadata&#39; property in the Dataverse &#39;List Rows&#39; action in Power Automate&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;My Recommendation&lt;/h2&gt;
&lt;p&gt;I believe the default value for &quot;Return Full Metadata&quot; parameter (when not specified) should be &quot;No&quot; rather than &quot;Yes&quot; but I guess Microsoft did not wait to break the existing flows. Most developers don&#39;t need the full OData metadata for their business logic, and when they do, they can explicitly opt-in.&lt;/p&gt;
&lt;p&gt;For your flows, I&#39;d suggest:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Set &quot;Return Full Metadata&quot; to &quot;No&quot; for all your standard data retrieval operations&lt;/li&gt;
&lt;li&gt;Only set it to &quot;Yes&quot; when you specifically need the OData navigation properties&lt;/li&gt;
&lt;li&gt;Test your existing flows to see if they actually depend on any of the metadata properties that get stripped out&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;A Word of Caution&lt;/h2&gt;
&lt;p&gt;Before you rush off to change all your existing flows, make sure you&#39;re not inadvertently using any of the metadata properties that get removed. It&#39;s unlikely, but worth checking if you have any complex flows that manipulate the raw JSON output.&lt;/p&gt;&lt;p&gt;And this setting didn&#39;t work if your List Rows action is using FetchXML query.&lt;/p&gt;
&lt;h2&gt;Final Thoughts&lt;/h2&gt;
&lt;p&gt;This is yet another example of why it&#39;s worth digging into the technical details rather than just accepting the surface-level documentation. The &quot;Return Full Metadata&quot; parameter is a simple but effective way to optimise your Dataverse connector calls, but you&#39;d never know it from reading the official docs.&lt;/p&gt;
&lt;p&gt;Have you encountered this parameter before, or have you noticed any performance improvements after setting it to &quot;No&quot;? I&#39;d be curious to hear about your experiences in the comments below.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://linnzawwin.blogspot.com/feeds/6441449853757222597/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://linnzawwin.blogspot.com/2025/07/dataverse-connectors-return-full.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/6441449853757222597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/6441449853757222597'/><link rel='alternate' type='text/html' href='http://linnzawwin.blogspot.com/2025/07/dataverse-connectors-return-full.html' title='Dataverse Connector&#39;s &quot;Return Full Metadata&quot; Parameter in Power Automate'/><author><name>Linn Zaw Win</name><uri>http://www.blogger.com/profile/16015532694415495453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaCUObunP3kiYNRu6pZ-J4ezoWDP-Jf1Cv010HLXr_bLFmB0bcZj8atUiBYmg37uDyBDzxPrHFX7EGESjgSMIOIBX7TR9VS9nZ179jpYpTkpsDtw09albFOTBEXTdw2OhtXLyZkfd4kBnOHYZmGSoge7m2XxXOVZvFJxuEiXnTmg7sRRc/s220/IMG_5259-Square%20-%20MVP.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMJNQ7gjiGOVXjLwEVfo-QSwMbMrF0kU12p2F9cZsl0MKJeRygyMkkYuBKhefsLcko6_9tVZvBt14dr6ezhAQUmHsqQ2C94oiB_QhGFbBjUjcyeA-Nh8vNHepC2J09DP7F5umtP4Sk3nRww7yvCN2OdELZkdOJb_dmFjCjOp_vIE60J1GIX1oPes9TDkIo/s72-w400-h230-c/Thumbnail.png" height="72" width="72"/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3970629459363259828.post-9217335274453051053</id><published>2025-07-07T23:21:00.002+10:00</published><updated>2025-07-23T11:46:16.402+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Autonomous Agent"/><category scheme="http://www.blogger.com/atom/ns#" term="Copilot"/><title type='text'>Troubleshooting Copilot Studio Autonomous Agent &quot;Incomplete&quot; Status</title><content type='html'>&lt;p&gt;If you&#39;ve been working with Copilot Studio&#39;s autonomous agents, you&#39;ve probably encountered the frustrating &quot;Incomplete&quot; status. The agent runs, but doesn&#39;t complete successfully, leaving you wondering what went wrong. I&#39;ve dealt with this issue multiple times, and here are two common scenarios with practical solutions.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXzTKMLwLgeoQmZ7XrBgiSfyC74CYhix7pKwMrzgq4G37Zn8ijYq2RKmHuraXskw_3_ieB8D5g7cngIZxo0AjltO5GIPusOHm6hcTcCgYQKP05znhkFZhSvpwn6BAJqeI6ExVIPKnSAX1yQTmhEMZXKT6JJrnfM3Cnk1-jkIGDDgPFQsjVSfVlUysD0VS2/s1176/Thumbnail.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;895&quot; data-original-width=&quot;1176&quot; height=&quot;305&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXzTKMLwLgeoQmZ7XrBgiSfyC74CYhix7pKwMrzgq4G37Zn8ijYq2RKmHuraXskw_3_ieB8D5g7cngIZxo0AjltO5GIPusOHm6hcTcCgYQKP05znhkFZhSvpwn6BAJqeI6ExVIPKnSAX1yQTmhEMZXKT6JJrnfM3Cnk1-jkIGDDgPFQsjVSfVlUysD0VS2/w400-h305/Thumbnail.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2&gt;The Mystery of Zero Completed Steps&lt;/h2&gt;
&lt;p&gt;The most puzzling scenario is when your agent run shows &quot;Incomplete&quot; status with 0 completed steps. The agent literally does nothing - no actions, no progress, just stops dead in its tracks. All you see is the trigger input and rationale, which doesn&#39;t help much.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYB-YADq1D1oPip0P_jKTfNyaCAhgKsx-KcBqfxx6LmOj2mRbpvRYlL9em7BdBcE5XKu_R5LfXavODEFW_B9h6XDMn4nDBkSaeTzLeqM1bseVJtH2xb_7XmqFtkSO4ME88Gn4_GpwK3o1RWlEuj684oYXfjkPlIoMMSTmnrJiWrPwUWUIlCXz-KcWgs4Mo/s1185/The%20Mystery%20of%20Zero%20Completed%20Steps.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;643&quot; data-original-width=&quot;1185&quot; height=&quot;348&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYB-YADq1D1oPip0P_jKTfNyaCAhgKsx-KcBqfxx6LmOj2mRbpvRYlL9em7BdBcE5XKu_R5LfXavODEFW_B9h6XDMn4nDBkSaeTzLeqM1bseVJtH2xb_7XmqFtkSO4ME88Gn4_GpwK3o1RWlEuj684oYXfjkPlIoMMSTmnrJiWrPwUWUIlCXz-KcWgs4Mo/w640-h348/The%20Mystery%20of%20Zero%20Completed%20Steps.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h3&gt;Finding the Real Error&lt;/h3&gt;
&lt;p&gt;Here&#39;s the trick most people miss: the Activity map view hides the actual error. Click on the &quot;View as&quot; dropdown and switch from &quot;Activity map&quot; to &quot;Transcript&quot;. This reveals the Copilot interaction details where the real error message lives.&lt;/p&gt;
&lt;p&gt;In my case, I found the Error Code&amp;nbsp;&lt;code&gt;OpenAIMaxTokenLengthExceeded&lt;/code&gt; buried in the error message. The agent was choking on too much input data before it could even start processing.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibeh8HBTrnDsWlu_6yIWzZWrh0gorZ2saxfO-1D0RXyUn_Y5nz-c9Z7TyE-VovDKi0-zP0welVsabj0h5AqwLHpagWVo5dSVDaAz3DuuYFceXTKEsqINJG4q9Dwz2QRjm9KYdNPWFuh0e715KcaxM5NL7Cr9zuTYYpGsajZ6awmIdFSTF02ZrVGuwp2AXY/s1167/Finding%20the%20Real%20Error.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;852&quot; data-original-width=&quot;1167&quot; height=&quot;468&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibeh8HBTrnDsWlu_6yIWzZWrh0gorZ2saxfO-1D0RXyUn_Y5nz-c9Z7TyE-VovDKi0-zP0welVsabj0h5AqwLHpagWVo5dSVDaAz3DuuYFceXTKEsqINJG4q9Dwz2QRjm9KYdNPWFuh0e715KcaxM5NL7Cr9zuTYYpGsajZ6awmIdFSTF02ZrVGuwp2AXY/w640-h468/Finding%20the%20Real%20Error.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h3&gt;The Root Cause&lt;/h3&gt;
&lt;p&gt;The culprit was a lengthy JSON payload from the trigger input. When you&#39;re passing complex data structures from Power Automate flows or other sources, it&#39;s easy to exceed the token limits without realising it. The agent receives this massive input, tries to process it, and immediately fails.&lt;/p&gt;&lt;p&gt;According to Microsoft Support, Copilot Studio typically enforces a practical limit of around 4,096 tokens per interaction. This includes both the input and the output.&amp;nbsp;&lt;/p&gt;&lt;p&gt;As a rough estimate:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;1 token ≈ 4 characters of English text.&lt;/li&gt;&lt;li&gt;4,096 tokens ≈ 3,000 words.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;The Solution&lt;/h3&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8d6ymDlpCjGsR75m1G1p6qNH31q7VCWNxFamGfzvxYjGAd-OKQxF5mgFup7CPqcoRCOr2htCGcYe0sYrksNSvo3xOugkV_Lzdw4LKgcpN0DLs-jXzvQpPQ-OfedPIMDCn_7C_-hNuu7SvANFE8sR3lA_ShOSgxHA0_uzXTiXGiwEfbpOIH4DlzZ718vwD/s770/Trigger.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;195&quot; data-original-width=&quot;770&quot; height=&quot;162&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8d6ymDlpCjGsR75m1G1p6qNH31q7VCWNxFamGfzvxYjGAd-OKQxF5mgFup7CPqcoRCOr2htCGcYe0sYrksNSvo3xOugkV_Lzdw4LKgcpN0DLs-jXzvQpPQ-OfedPIMDCn_7C_-hNuu7SvANFE8sR3lA_ShOSgxHA0_uzXTiXGiwEfbpOIH4DlzZ718vwD/w640-h162/Trigger.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;I went back to the Power Automate flow that triggers the agent and added an AI Prompt step before the agent call. This step cleans up and simplifies the JSON input, removing unnecessary fields and condensing the data structure. Think of it as pre-processing your data to make it digestible for the agent.&lt;/p&gt;
&lt;p&gt;The key is being selective about what information the agent actually needs versus what you&#39;re passing along &quot;just in case.&quot;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw3LwXTVbCb5WkTxcBdXjy3lejmr-nZCy2SbXR7WVWtFX_45gmuICI9wIb0GK1mkYmpwgJjt2JNK83RcyiJSUv_xO1jzFYMKTioZLLMwSU4NUQSM7ThyphenhyphenqrqnqLfzjI0OWld0NgvBbQtgLDLphPah9nQ7fwQ6ujV1Iq6VG8VCzKc_KrtEMqqGKZSmEhvVXs/s886/The%20Solution%20Extract%20Information.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;511&quot; data-original-width=&quot;886&quot; height=&quot;370&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw3LwXTVbCb5WkTxcBdXjy3lejmr-nZCy2SbXR7WVWtFX_45gmuICI9wIb0GK1mkYmpwgJjt2JNK83RcyiJSUv_xO1jzFYMKTioZLLMwSU4NUQSM7ThyphenhyphenqrqnqLfzjI0OWld0NgvBbQtgLDLphPah9nQ7fwQ6ujV1Iq6VG8VCzKc_KrtEMqqGKZSmEhvVXs/w640-h370/The%20Solution%20Extract%20Information.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;em&gt;The&amp;nbsp;&lt;a href=&quot;https://community.powerplatform.com/forums/thread/details/?threadid=0144b913-e1cb-ef11-b8e8-7c1e520d9ce5&quot;&gt;Power Platform Community forum thread&lt;/a&gt;&amp;nbsp;has also discussed about similar issue for &quot;An error has occurred. Error code: OpenAIMaxTokenLengthExceeded&quot; error.&lt;/em&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2&gt;When Dataverse Actions Fail Silently&lt;/h2&gt;
&lt;p&gt;The second scenario involves agents that start processing but fail during Dataverse operations. You&#39;ll see some completed steps, but the run ends with &quot;Incomplete&quot; status and a generic HTTP 400 error from the Dataverse connector.&lt;/p&gt;
&lt;h3&gt;Getting to the Real Problem&lt;/h3&gt;
&lt;p&gt;The error message &lt;code&gt;connectorRequestFailure The connector &#39;Microsoft Dataverse&#39; returned an HTTP error with code 400&lt;/code&gt; tells you almost nothing useful. Here&#39;s how to dig deeper:&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPCnBj4a2hblsdE4bJZkULdUGWwlk2YCZ7ztbh6nOV9Uknk1Hp1AoOScxQKNhAqD6yoJRNGRQDFJ4Szc8XGZoiPEhP_yjWGnSS_Cu5EMCZKi2Vdr5Cemacbzjj7YDyxRldfHQEHWwPtjqxsGxS4zf1UY3R55YNe1dFE3_iZ9IHojEQHU2OYtyutQMWZn6t/s1164/When%20Dataverse%20Actions%20Fail%20Silently.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;772&quot; data-original-width=&quot;1164&quot; height=&quot;424&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPCnBj4a2hblsdE4bJZkULdUGWwlk2YCZ7ztbh6nOV9Uknk1Hp1AoOScxQKNhAqD6yoJRNGRQDFJ4Szc8XGZoiPEhP_yjWGnSS_Cu5EMCZKi2Vdr5Cemacbzjj7YDyxRldfHQEHWwPtjqxsGxS4zf1UY3R55YNe1dFE3_iZ9IHojEQHU2OYtyutQMWZn6t/w640-h424/When%20Dataverse%20Actions%20Fail%20Silently.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Copy the &quot;Row Item&quot; JSON data from the failed step&lt;/li&gt;
&lt;li&gt;Create a new on-demand Power Automate flow&lt;/li&gt;
&lt;li&gt;Add the same Dataverse action as in the Copilot agent action (like &quot;Update a row&quot;)&lt;/li&gt;
&lt;li&gt;For the Table Name, use the &lt;code&gt;trim()&lt;/code&gt; function in the custom value hack as mentioned in &lt;a href=&quot;https://linnzawwin.blogspot.com/2020/12/dynamically-populate-polymorphic-lookup.html&quot; target=&quot;_blank&quot;&gt;my blog post&lt;/a&gt;&amp;nbsp;instead of selecting from the list - this makes the step dynamic and allows you to paste in the Row Item data&lt;/li&gt;
&lt;li&gt;Paste the copied JSON data and test the flow&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;When you run this test flow, you&#39;ll get the actual error message that explains what&#39;s wrong with the data.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCljNVJnlo_ye_Btx60XcTo7mVhQsPBgazVdvWBs_VomTtZuPcN5w0-tKnxrKT8RhrTIKMAV0vo3a7vZJ6m8fk3weChT0Z6bnPxoyBN065MDmDTVV31c_HLvkD5dz5SVZYAzvPgerTPp3EoCuq12C3K14OsZ1j8Oi5egCHKhS2OWt97koWz79WDDzs5gaD/s613/Create%20a%20new%20on-demand%20Power%20Automate%20flow%202.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;570&quot; data-original-width=&quot;613&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCljNVJnlo_ye_Btx60XcTo7mVhQsPBgazVdvWBs_VomTtZuPcN5w0-tKnxrKT8RhrTIKMAV0vo3a7vZJ6m8fk3weChT0Z6bnPxoyBN065MDmDTVV31c_HLvkD5dz5SVZYAzvPgerTPp3EoCuq12C3K14OsZ1j8Oi5egCHKhS2OWt97koWz79WDDzs5gaD/s16000/Create%20a%20new%20on-demand%20Power%20Automate%20flow%202.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h3&gt;What I Found&lt;/h3&gt;
&lt;p&gt;In my situation, the agent was populating a Choice column with a value that wasn&#39;t in the valid options list. The agent &quot;thought&quot; it was providing a reasonable value, but Dataverse rejected it because it wasn&#39;t one of the predefined choices.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJ9kn9Wvtd46IxDM6nAHjljEr_OrhnCFEnZJv0PyXpvL7Y6aX4ep6coYZyMPUFAalr-t_gejoVFL66nMzKy6137EsZ_ELcLjqvJgXtSfs_EvRSSHe4PO11EY9ypEksURN_JaBFPd79ZNEdih958o5fIThKoDODahH35NSloGqgpXYR3Uzc6NE2N0RKfCEY/s744/actual%20error%20message.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;343&quot; data-original-width=&quot;744&quot; height=&quot;296&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJ9kn9Wvtd46IxDM6nAHjljEr_OrhnCFEnZJv0PyXpvL7Y6aX4ep6coYZyMPUFAalr-t_gejoVFL66nMzKy6137EsZ_ELcLjqvJgXtSfs_EvRSSHe4PO11EY9ypEksURN_JaBFPd79ZNEdih958o5fIThKoDODahH35NSloGqgpXYR3Uzc6NE2N0RKfCEY/w640-h296/actual%20error%20message.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;The Fix&lt;/h3&gt;
&lt;p&gt;I updated the agent&#39;s general instructions and knowledge sources to explicitly specify the valid options for that Choice column. Instead of letting the agent guess, I gave it a clear list of acceptable values.&lt;/p&gt;
&lt;p&gt;The lesson here is that agents need explicit guidance about data constraints, especially for Choice columns, lookups, and other fields with restricted values.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2&gt;Prevention is Better Than Debugging&lt;/h2&gt;
&lt;p&gt;Both scenarios highlight the importance of being specific with your agent instructions. Don&#39;t assume the agent will figure out data constraints or input limitations on its own.&lt;/p&gt;
&lt;p&gt;For triggers, consider what data the agent actually needs and pre-process complex inputs. For Dataverse operations, document the valid values for constrained fields in your knowledge sources.&lt;/p&gt;
&lt;p&gt;The Copilot Studio interface doesn&#39;t always surface errors clearly, but with these troubleshooting techniques, you can get to the root cause faster and build more reliable agents. Once the changes are done, you can re-run the same agent run by resubmitting the particular cloud flow run.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvwzlXFKppTYBAiPnSgkgGI1ktx1ULgSqekLYUIpDRH57blvqNg2OQ1UvYf5OfcBCU50DxZUyIhOVUtsbD2HogkROR0e5yPSqaxpeK8O0ia_u6M4E_uZ2FnXrmmbfW7iDC7l1O1sGJOMhrpF4Ypiz98YKD-BaCvulEDtL31pSOlBDV7dx0K3iG4AtNFBTJ/s584/Resubmit.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;584&quot; data-original-width=&quot;304&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvwzlXFKppTYBAiPnSgkgGI1ktx1ULgSqekLYUIpDRH57blvqNg2OQ1UvYf5OfcBCU50DxZUyIhOVUtsbD2HogkROR0e5yPSqaxpeK8O0ia_u6M4E_uZ2FnXrmmbfW7iDC7l1O1sGJOMhrpF4Ypiz98YKD-BaCvulEDtL31pSOlBDV7dx0K3iG4AtNFBTJ/s320/Resubmit.png&quot; width=&quot;167&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://linnzawwin.blogspot.com/feeds/9217335274453051053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://linnzawwin.blogspot.com/2025/07/troubleshooting-copilot-studio.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/9217335274453051053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/9217335274453051053'/><link rel='alternate' type='text/html' href='http://linnzawwin.blogspot.com/2025/07/troubleshooting-copilot-studio.html' title='Troubleshooting Copilot Studio Autonomous Agent &quot;Incomplete&quot; Status'/><author><name>Linn Zaw Win</name><uri>http://www.blogger.com/profile/16015532694415495453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaCUObunP3kiYNRu6pZ-J4ezoWDP-Jf1Cv010HLXr_bLFmB0bcZj8atUiBYmg37uDyBDzxPrHFX7EGESjgSMIOIBX7TR9VS9nZ179jpYpTkpsDtw09albFOTBEXTdw2OhtXLyZkfd4kBnOHYZmGSoge7m2XxXOVZvFJxuEiXnTmg7sRRc/s220/IMG_5259-Square%20-%20MVP.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXzTKMLwLgeoQmZ7XrBgiSfyC74CYhix7pKwMrzgq4G37Zn8ijYq2RKmHuraXskw_3_ieB8D5g7cngIZxo0AjltO5GIPusOHm6hcTcCgYQKP05znhkFZhSvpwn6BAJqeI6ExVIPKnSAX1yQTmhEMZXKT6JJrnfM3Cnk1-jkIGDDgPFQsjVSfVlUysD0VS2/s72-w400-h305-c/Thumbnail.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3970629459363259828.post-8430884763867801406</id><published>2025-05-31T13:16:00.002+10:00</published><updated>2025-06-02T20:51:31.429+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Power Apps"/><category scheme="http://www.blogger.com/atom/ns#" term="Power Fx"/><title type='text'>PowerFx to Add Row Numbers to Data Tables Directly</title><content type='html'>&lt;h2&gt;The Problem&lt;/h2&gt;
&lt;p&gt;I recently hit a common but annoying issue while building a canvas app for Dynamics 365 Project Operations. The requirement was straightforward: display project tasks in the same order they appear in the D365 Project Tasks grid.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgI_t4JMWS_zPCpuaRuDgJ5EwIMEXtAU6GzSltMROrvBqGGgx1jwGd19im-7B-u-bRG17Yox6K1MQ2ZKYI-nbCKdPFBV94TKexIYvFkZgL9TA8PlyhF7za5KIyLD5wPieQSC2k235o3762yGq-cGIcDVP8nawSa5a1XwxuY9izpzxzQ6RmD56rebpsunxx_/s632/Thumbnail.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;632&quot; data-original-width=&quot;587&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgI_t4JMWS_zPCpuaRuDgJ5EwIMEXtAU6GzSltMROrvBqGGgx1jwGd19im-7B-u-bRG17Yox6K1MQ2ZKYI-nbCKdPFBV94TKexIYvFkZgL9TA8PlyhF7za5KIyLD5wPieQSC2k235o3762yGq-cGIcDVP8nawSa5a1XwxuY9izpzxzQ6RmD56rebpsunxx_/s16000/Thumbnail.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;When I connected the Project Task table directly to a data table control, the rows showed up in creation order instead of the logical sequence users expect. Tasks that should appear at the top were buried at the bottom.&lt;/p&gt;&lt;p&gt;My first instinct was to sort by the &lt;code&gt;msdyn_displaysequence&lt;/code&gt; column in ascending order. This got me closer, but revealed another issue: the D365 grid shows clean row numbers (1, 2, 3...) while &lt;code&gt;msdyn_displaysequence&lt;/code&gt; contains decimal values like 1.5, 2.3, 4.7.&lt;/p&gt;
&lt;p&gt;This makes perfect sense from a data perspective. When someone inserts a task between positions 1 and 2, the system assigns it 1.5 instead of renumbering every subsequent row. Smart design, but not great for user experience.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_ChjO6G1kj5la4HPdjUIlZlZE63Qkb6rcu77Wzg2ceYli0oef6u08HiWLWOc6BtEb46jY4CFF25MO75RTWPCKyaQGACQSIaC8n151Sn2RWn22RLMK_VjFeVHOAKJT1GNe787yvEfGFfqO3qjHTBnP7iZaYFV7Bp3iwbZNVvN53TFVpywvxo6F1IoLkOur/s720/Failed%20Attempt.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;486&quot; data-original-width=&quot;720&quot; height=&quot;432&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_ChjO6G1kj5la4HPdjUIlZlZE63Qkb6rcu77Wzg2ceYli0oef6u08HiWLWOc6BtEb46jY4CFF25MO75RTWPCKyaQGACQSIaC8n151Sn2RWn22RLMK_VjFeVHOAKJT1GNe787yvEfGFfqO3qjHTBnP7iZaYFV7Bp3iwbZNVvN53TFVpywvxo6F1IoLkOur/w640-h432/Failed%20Attempt.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2&gt;The Traditional Approach (And Why I Avoided It)&lt;/h2&gt;
&lt;p&gt;Most solutions I found online suggest creating a collection with row numbers added.&lt;/p&gt;&lt;p&gt;This works, but it creates a local copy of your data. That means dealing with refresh logic, potential sync issues, and the overhead of maintaining a collection that mirrors your data source.&lt;/p&gt;
&lt;p&gt;I wanted a cleaner approach that works directly with the data source.&lt;/p&gt;
&lt;h2&gt;The Solution: PowerFx Row Numbering&lt;/h2&gt;
&lt;p&gt;After digging through community solutions, I found inspiration in &lt;a href=&quot;https://www.matthewdevaney.com/power-apps-generate-row-numbers-in-a-collection/&quot; target=&quot;_blank&quot;&gt;Matthew&#39;s blog post&lt;/a&gt; about generating row numbers in collections. I adapted his approach to work directly with data sources instead of creating separate collections.&lt;/p&gt;
&lt;p&gt;Here&#39;s the formula that solved my problem: (replace with your own dynamic)&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-powerfx&quot;&gt;ForAll(
    Sequence(
        CountIf(
            Filter(
                &#39;Project Tasks&#39;,
                Project.Project = [@ModelDrivenFormIntegration].Item.Project
            ),
            true
        )
    ),
    With(
        {
            sortedTasks: SortByColumns(
                Filter(
                    &#39;Project Tasks&#39;,
                    Project.Project = [@ModelDrivenFormIntegration].Item.Project
                ),
                &quot;msdyn_displaysequence&quot;,
                SortOrder.Ascending
            )
        },
        Patch(
            Last(FirstN(sortedTasks, Value)),
            { Index: Value }
        )
    )
)&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;; text-align: left; white-space: normal;&quot;&gt;Thanks to&amp;nbsp;&lt;a href=&quot;https://www.linkedin.com/in/perretalexandre/&quot; target=&quot;_blank&quot;&gt;Alexandre Perret&lt;/a&gt; for suggestion to remove the redundent&amp;nbsp;SortByColumns() and to use the&amp;nbsp;CountIf() instead of CountRows() due to cache issue for Dataverse data source.&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;; text-align: left; white-space: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;; text-align: left; white-space: normal;&quot;&gt;And here&#39;s the end result.&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOGJ_XspGPIEFM_qjsgkvZwa6p3e9Ahq-2Ewegbcds6qRVMte5ahcEeef_IYlVcsxjw_UK1oFleMS3TY2aFSejqSxUxXou9HRplEiiaNe2MsCvipMtqWJ3MSUW-dQBusBUcZ2efIcusUETfBM-RtZWnS4LiA7FEqLohOjLPr6bRIw1LzPZ6iKfufb7Gmxc/s671/Solution.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;475&quot; data-original-width=&quot;671&quot; height=&quot;454&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOGJ_XspGPIEFM_qjsgkvZwa6p3e9Ahq-2Ewegbcds6qRVMte5ahcEeef_IYlVcsxjw_UK1oFleMS3TY2aFSejqSxUxXou9HRplEiiaNe2MsCvipMtqWJ3MSUW-dQBusBUcZ2efIcusUETfBM-RtZWnS4LiA7FEqLohOjLPr6bRIw1LzPZ6iKfufb7Gmxc/w640-h454/Solution.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;code class=&quot;language-powerfx&quot;&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;How It Works&lt;/h2&gt;
&lt;p&gt;Let me break this down into digestible pieces:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 1: Create the sequence&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-powerfx&quot;&gt;Sequence(CountRows(filtered_and_sorted_tasks))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This generates a sequence from 1 to the total number of tasks. If you have 10 tasks, you get [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 2: Process each position&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-powerfx&quot;&gt;ForAll(sequence, ...)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;For each number in our sequence, we execute the patching logic.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 3: Get the task at each position&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-powerfx&quot;&gt;Last(FirstN(sortedTasks, Value))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This grabs the Nth task from our sorted list. &lt;code&gt;FirstN(sortedTasks, 3)&lt;/code&gt; gets the first 3 tasks, then &lt;code&gt;Last()&lt;/code&gt; gives us exactly the 3rd task.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 4: Add the row number&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-powerfx&quot;&gt;Patch(task, { Index: Value })
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This adds an &lt;code&gt;Index&lt;/code&gt; column to each task record with the appropriate row number.&lt;/p&gt;
&lt;h2&gt;Real-World Impact&lt;/h2&gt;
&lt;p&gt;This approach gave me exactly what I needed: tasks displayed in the correct sequence with clean, sequential row numbers that match what users see in D365. The row numbers automatically update when the underlying &lt;code&gt;msdyn_displaysequence&lt;/code&gt; changes, and I don&#39;t have to manage a separate collection.&lt;/p&gt;
&lt;p&gt;The performance is reasonable for typical project sizes (50-200 tasks). For larger datasets, you might want to implement pagination or consider the collection approach after all.&lt;/p&gt;
&lt;h2&gt;When to Use This Pattern&lt;/h2&gt;
&lt;p&gt;This technique works well when:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You need row numbers that reflect a specific sort order&lt;/li&gt;
&lt;li&gt;You want to avoid managing collections&lt;/li&gt;
&lt;li&gt;Your dataset is reasonably sized (under a few hundred records)&lt;/li&gt;
&lt;li&gt;The underlying data doesn&#39;t change frequently during a single session&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Avoid this approach if:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You&#39;re working with thousands of records&lt;/li&gt;
&lt;li&gt;The data changes constantly&lt;/li&gt;
&lt;li&gt;You need complex transformations beyond adding row numbers&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;The Bottom Line&lt;/h2&gt;
&lt;p&gt;Sometimes the best solution isn&#39;t the most obvious one. Instead of fighting with collections or settling for confusing decimal sequences, a targeted PowerFx formula can solve the problem directly at the data source level.&lt;/p&gt;
&lt;p&gt;The key insight here is using &lt;code&gt;Sequence()&lt;/code&gt; with &lt;code&gt;ForAll()&lt;/code&gt; and &lt;code&gt;Patch()&lt;/code&gt; to systematically add computed columns to your data source. Once you understand this pattern, you can apply it to other scenarios where you need to augment data source records with calculated values.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Credit to Matthew Devaney for the original collection-based approach that inspired this solution.&lt;/em&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://linnzawwin.blogspot.com/feeds/8430884763867801406/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://linnzawwin.blogspot.com/2025/05/powerfx-to-add-row-numbers-to-data.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/8430884763867801406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/8430884763867801406'/><link rel='alternate' type='text/html' href='http://linnzawwin.blogspot.com/2025/05/powerfx-to-add-row-numbers-to-data.html' title='PowerFx to Add Row Numbers to Data Tables Directly'/><author><name>Linn Zaw Win</name><uri>http://www.blogger.com/profile/16015532694415495453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaCUObunP3kiYNRu6pZ-J4ezoWDP-Jf1Cv010HLXr_bLFmB0bcZj8atUiBYmg37uDyBDzxPrHFX7EGESjgSMIOIBX7TR9VS9nZ179jpYpTkpsDtw09albFOTBEXTdw2OhtXLyZkfd4kBnOHYZmGSoge7m2XxXOVZvFJxuEiXnTmg7sRRc/s220/IMG_5259-Square%20-%20MVP.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgI_t4JMWS_zPCpuaRuDgJ5EwIMEXtAU6GzSltMROrvBqGGgx1jwGd19im-7B-u-bRG17Yox6K1MQ2ZKYI-nbCKdPFBV94TKexIYvFkZgL9TA8PlyhF7za5KIyLD5wPieQSC2k235o3762yGq-cGIcDVP8nawSa5a1XwxuY9izpzxzQ6RmD56rebpsunxx_/s72-c/Thumbnail.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3970629459363259828.post-5399053227370492650</id><published>2025-05-27T00:14:00.003+10:00</published><updated>2025-05-27T00:14:41.038+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Project Operations"/><title type='text'>Fixing Date Decrement Issues in Dynamics 365 Project Operations Tasks Grid</title><content type='html'>&lt;h2&gt;The Problem&lt;/h2&gt;
&lt;p&gt;A recent update to Dynamics 365 Project Operations introduced a welcome enhancement: custom columns in the tasks grid are now editable. However, this improvement has also introduced an unexpected side effect that&#39;s causing headaches for organizations using custom date-only columns.&lt;/p&gt;
&lt;p&gt;The issue manifests as a peculiar bug where custom date values in the tasks grid automatically decrement by one day every time the form is refreshed and the tasks grid reloads. For example, a date that should display as 15 March 2025, might show as 14 March 2025 after a refresh, and continue decrementing with each subsequent reload.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEpSif7VH5zC7YlVe_Gzsf8-YU2GLJmyeDJTT4mtEl4n7WgCbfL425kbcRK6xnHs6ObljHqxnKaWp3oH6QfwTbXUY6t_oM_IlSndXx6duzedcHH_FBCRJVCq-wuF1bkyQWd-WMI2tDRJtsNSouTj0RCauTuRg5L78aqdowKlOv7NBwkjvZ1ol63NxHbUvx/s1064/Thumbnail.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;630&quot; data-original-width=&quot;1064&quot; height=&quot;236&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEpSif7VH5zC7YlVe_Gzsf8-YU2GLJmyeDJTT4mtEl4n7WgCbfL425kbcRK6xnHs6ObljHqxnKaWp3oH6QfwTbXUY6t_oM_IlSndXx6duzedcHH_FBCRJVCq-wuF1bkyQWd-WMI2tDRJtsNSouTj0RCauTuRg5L78aqdowKlOv7NBwkjvZ1ol63NxHbUvx/w400-h236/Thumbnail.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2&gt;Root Cause Analysis&lt;/h2&gt;
&lt;p&gt;The underlying cause appears to be related to timezone handling during the data conversion process. When the tasks grid loads, the system now converts date values to UTC as part of the enhanced editing functionality. This conversion process doesn&#39;t properly account for date-only fields that should remain timezone-agnostic, leading to the unintended day subtraction.&lt;/p&gt;
&lt;p&gt;This problem didn&#39;t exist in previous versions because custom columns were read-only in the tasks grid. The introduction of editable custom columns has changed how the system processes these date values, exposing this timezone conversion issue.&lt;/p&gt;
&lt;h2&gt;The Solution&lt;/h2&gt;
&lt;p&gt;Fortunately, Microsoft has anticipated this type of problem and provided a solution through the 2025 Release Wave 1 features. Here&#39;s how to resolve the date decrement issue:&lt;/p&gt;
&lt;h3&gt;Step 1: Enable Time Zone Independent Dates Feature&lt;/h3&gt;
&lt;p&gt;First, you&#39;ll need to enable the new time zone independent dates feature. This functionality is part of Microsoft&#39;s 2025 Release Wave 1 and is specifically designed to address timezone-related issues with project date fields.&lt;/p&gt;
&lt;p&gt;You can find detailed information about this feature in Microsoft&#39;s official documentation: &lt;a href=&quot;https://learn.microsoft.com/en-us/dynamics365/release-plan/2025wave1/finance-supply-chain/dynamics365-project-operations/add-time-zone-agnostic-fields-project-project-tasks?WT.mc_id=DX-MVP-5003873&quot;&gt;Add time zone agnostic fields to project and project tasks&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Since this feature is currently in public preview, you&#39;ll need to manually enable it:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Navigate to &lt;b&gt;Settings &lt;/b&gt;&amp;gt; &lt;b&gt;Parameters&lt;/b&gt; &amp;gt; open the&amp;nbsp;&lt;strong&gt;Project Parameters&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Go to the &lt;strong&gt;Feature Control&lt;/strong&gt; menu&lt;/li&gt;
&lt;li&gt;Locate and enable the time zone independent dates feature&lt;/li&gt;
&lt;/ol&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhomEl_FyjvkZFJuSNKlxwM-eqEnzCoFFsJQ826zajMzs2GC0GYqf3pIOUx7HG8qNnIv2MO3PGqNh6Ge_z4eycAejNGeYbFFpCK9HfHzrrftuvUrhjmpbOtMcVwIMQ-2TlqpEIfBMfzWcGnThsE1BHnJy_AxJegjhV7yyQAMpTLS2BGzHi2AFCkDTBeBZxB/s1366/Time%20zone%20independent.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;624&quot; data-original-width=&quot;1366&quot; height=&quot;292&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhomEl_FyjvkZFJuSNKlxwM-eqEnzCoFFsJQ826zajMzs2GC0GYqf3pIOUx7HG8qNnIv2MO3PGqNh6Ge_z4eycAejNGeYbFFpCK9HfHzrrftuvUrhjmpbOtMcVwIMQ-2TlqpEIfBMfzWcGnThsE1BHnJy_AxJegjhV7yyQAMpTLS2BGzHi2AFCkDTBeBZxB/w640-h292/Time%20zone%20independent.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;Step 2: Configure Custom Date Columns&lt;/h3&gt;
&lt;p&gt;Once the feature is enabled, you&#39;ll need to adjust the timezone settings for your affected custom date columns:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open the custom date column configuration in the solution&lt;/li&gt;
&lt;li&gt;Locate the &lt;strong&gt;Time zone adjustment&lt;/strong&gt; setting&lt;/li&gt;
&lt;li&gt;Change the setting to &lt;strong&gt;Time zone independent&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This configuration tells the system to treat these date fields as timezone-agnostic, preventing the unwanted UTC conversion that causes the date decrement.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjboyOKwSuRKPUIfkDZuU7ktCJug8lMOzsve97danlkLbHmkc8HyTHP-135827PbpTYbRGpj6QEUVLoal9cdjsZgNzsq-2KMTey-2cIoHDIYtXVU6tUh6O4QGVpPtMUcszc0MSkasxOLM2oFuZY3V8jzFQ96h4BR8d4UQkapOA6JU7hxVrgQ1kHQmqbFM7T/s1073/Column%20Time%20zone%20independent.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;294&quot; data-original-width=&quot;1073&quot; height=&quot;176&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjboyOKwSuRKPUIfkDZuU7ktCJug8lMOzsve97danlkLbHmkc8HyTHP-135827PbpTYbRGpj6QEUVLoal9cdjsZgNzsq-2KMTey-2cIoHDIYtXVU6tUh6O4QGVpPtMUcszc0MSkasxOLM2oFuZY3V8jzFQ96h4BR8d4UQkapOA6JU7hxVrgQ1kHQmqbFM7T/w640-h176/Column%20Time%20zone%20independent.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2&gt;Prevention and Best Practices&lt;/h2&gt;
&lt;p&gt;To avoid similar issues in the future, consider these best practices when working with custom date columns in Dynamics 365 Project Operations:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Evaluate Date Field Requirements&lt;/strong&gt;: Before creating custom date columns, determine whether they truly need timezone awareness or should remain timezone-independent. For most project management scenarios involving deadlines, milestones, or target dates, timezone independence is preferable.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Test After Updates&lt;/strong&gt;: Always test custom field behavior after major system updates, particularly when Microsoft introduces new editing capabilities or data processing changes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Monitor Feature Previews&lt;/strong&gt;: Keep an eye on &lt;a href=&quot;https://releaseplans.microsoft.com/en-us/?app=Project+Operations&amp;amp;status=planned&quot; target=&quot;_blank&quot;&gt;Microsoft&#39;s release waves and preview features&lt;/a&gt; that might address common issues in your implementation. The time zone independent dates feature is a perfect example of Microsoft proactively solving problems that organizations commonly encounter.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Documentation&lt;/strong&gt;: Maintain clear documentation of your custom field configurations, including timezone settings, to facilitate troubleshooting and ensure consistency across your environment.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;While the introduction of editable custom columns in the Dynamics 365 Project Operations tasks grid is a valuable enhancement, it&#39;s a reminder that system updates can sometimes introduce unexpected behaviors. The date decrement issue demonstrates the importance of thorough testing after updates and staying current with Microsoft&#39;s preview features and solutions.&lt;/p&gt;
&lt;p&gt;By implementing the time zone independent dates feature and properly configuring your custom date columns, you can resolve this issue and ensure your project dates display accurately regardless of user timezone or form refresh frequency. This fix not only solves the immediate problem but also provides a more robust foundation for date handling in your project management workflows.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://linnzawwin.blogspot.com/feeds/5399053227370492650/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://linnzawwin.blogspot.com/2025/05/fixing-date-decrement-issues-in.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/5399053227370492650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/5399053227370492650'/><link rel='alternate' type='text/html' href='http://linnzawwin.blogspot.com/2025/05/fixing-date-decrement-issues-in.html' title='Fixing Date Decrement Issues in Dynamics 365 Project Operations Tasks Grid'/><author><name>Linn Zaw Win</name><uri>http://www.blogger.com/profile/16015532694415495453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaCUObunP3kiYNRu6pZ-J4ezoWDP-Jf1Cv010HLXr_bLFmB0bcZj8atUiBYmg37uDyBDzxPrHFX7EGESjgSMIOIBX7TR9VS9nZ179jpYpTkpsDtw09albFOTBEXTdw2OhtXLyZkfd4kBnOHYZmGSoge7m2XxXOVZvFJxuEiXnTmg7sRRc/s220/IMG_5259-Square%20-%20MVP.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEpSif7VH5zC7YlVe_Gzsf8-YU2GLJmyeDJTT4mtEl4n7WgCbfL425kbcRK6xnHs6ObljHqxnKaWp3oH6QfwTbXUY6t_oM_IlSndXx6duzedcHH_FBCRJVCq-wuF1bkyQWd-WMI2tDRJtsNSouTj0RCauTuRg5L78aqdowKlOv7NBwkjvZ1ol63NxHbUvx/s72-w400-h236-c/Thumbnail.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3970629459363259828.post-8843378060499036405</id><published>2025-05-13T23:25:00.000+10:00</published><updated>2025-05-13T23:25:10.853+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Power Automate"/><title type='text'>Power Automate convertTimeZone using an expression: Decoding the Mystery of Time Zone Names</title><content type='html'>&lt;p&gt;Ever wrestled with time zone conversions in your Power Automate flows? You&#39;re not alone! Today, we&#39;re diving deep into the time zone parameters of the &lt;a href=&quot;https://learn.microsoft.com/power-automate/convert-time-zone?WT.mc_id=DX-MVP-5003873#convert-a-time-zone-using-an-expression&quot; target=&quot;_blank&quot;&gt;convertTimeZone expression&lt;/a&gt;, shedding light on a few nuances that might just save you some headaches.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgMkVSJSvOCbZsOkII5HXBrklMD8DdcSnv_-L3XD3zB8uikckBaG9OPpFEybXfuNXQ0Qo1zAd3e96wQpObMkMpKPqR8CbtJyrelmnI9obkSHylQjkZru46iZthjle9evdzi-ApuOSK4GsINyCK6nEGGWw5J2R-ubXO_kkoSAgcxIMV1szUNPfZO_RRK5rU/s4000/world-time-zones-map.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;2157&quot; data-original-width=&quot;4000&quot; height=&quot;173&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgMkVSJSvOCbZsOkII5HXBrklMD8DdcSnv_-L3XD3zB8uikckBaG9OPpFEybXfuNXQ0Qo1zAd3e96wQpObMkMpKPqR8CbtJyrelmnI9obkSHylQjkZru46iZthjle9evdzi-ApuOSK4GsINyCK6nEGGWw5J2R-ubXO_kkoSAgcxIMV1szUNPfZO_RRK5rU/s320/world-time-zones-map.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Like many of you, I recently stumbled upon a fascinating detail, courtesy of my insightful colleague &lt;a href=&quot;https://www.linkedin.com/in/danielkerridge/&quot; target=&quot;_blank&quot;&gt;Daniel Kerridge&lt;/a&gt;. Did you know that Australia has two seemingly similar time zone names: &quot;E. Australia Standard Time&quot; and &quot;AUS Eastern Standard Time&quot;? The difference? The former refers to Queensland, which happily skips daylight saving time, while the latter applies to other eastern states that do observe it. Mind. Blown.&lt;/p&gt;&lt;p&gt;This revelation highlights a common challenge when working with the convertTimeZone function in Power Automate: figuring out the correct time zone names to populate the sourceTimeZone and destinationTimeZone parameters. The &lt;a href=&quot;https://learn.microsoft.com/power-automate/convert-time-zone?WT.mc_id=DX-MVP-5003873#convert-a-time-zone-using-an-expression&quot; target=&quot;_blank&quot;&gt;official Power Automate documentation&lt;/a&gt; often points to the &lt;a href=&quot;https://learn.microsoft.com/azure/logic-apps/workflow-definition-language-functions-reference?WT.mc_id=DX-MVP-5003873#converttimezone&quot; target=&quot;_blank&quot;&gt;Azure Logic Apps Reference guide&lt;/a&gt;, which in turn directs you to the &lt;a href=&quot;https://learn.microsoft.com/windows-hardware/manufacture/desktop/default-time-zones?view=windows-11&amp;amp;WT.mc_id=DX-MVP-5003873#time-zones&quot; target=&quot;_blank&quot;&gt;Microsoft Windows Default Time Zones list&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;While this list includes &quot;AUS Eastern Standard Time&quot;, you might find yourself scratching your head when looking for other Australian time zones or time zones from different parts of the world. Fear not! There are a couple of handy ways to uncover these elusive time zone values:&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Method 1: The Action-Then-Code View Trick&lt;/b&gt;&lt;/p&gt;&lt;p&gt;This is a straightforward and visual approach:&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0ABpVztF9a41UYQaJ7CuPv4t4H8W-wT8lFaddF9WsXitpxvDSHTA7-q-3L3k4xHTEKNKyjZGEvNJEJhdH4P_qLCfgqQsiZM4SyJ7imnVYYMRNjSMVpKzfryuRqqRt4GoLHVooiDCPqA4Qq8-lBHcUR-CgP3HQ5HOL8wsOYcxy6XXMTvOTz2-z7f2U7kM7/s778/Convert%20Time%20Zone.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;778&quot; data-original-width=&quot;625&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0ABpVztF9a41UYQaJ7CuPv4t4H8W-wT8lFaddF9WsXitpxvDSHTA7-q-3L3k4xHTEKNKyjZGEvNJEJhdH4P_qLCfgqQsiZM4SyJ7imnVYYMRNjSMVpKzfryuRqqRt4GoLHVooiDCPqA4Qq8-lBHcUR-CgP3HQ5HOL8wsOYcxy6XXMTvOTz2-z7f2U7kM7/s16000/Convert%20Time%20Zone.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Add a &quot;Convert time zone&quot; action to your Power Automate flow.&lt;/li&gt;&lt;li&gt;Use the dropdown menus in the action to select your desired source and destination time zones. Don&#39;t worry about configuring the &quot;Base time&quot; or &quot;Format string&quot; fields for now.&lt;/li&gt;&lt;li&gt;Switch to Code view.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;In the code view, you&#39;ll see the underlying JSON representation of the action. Look for the inputs section, and within that, you&#39;ll find the sourceTimeZone and destinationTimeZone parameters populated with the exact values Power Automate uses internally. Voila! You&#39;ve unearthed the correct time zone names.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Method 2: Cross-Referencing with Azure SQL Managed Instance Documentation&lt;/b&gt;&lt;/p&gt;&lt;p&gt;The &lt;a href=&quot;https://learn.microsoft.com/azure/azure-sql/managed-instance/timezones-overview?view=azuresql&amp;amp;WT.mc_id=DX-MVP-5003873#list-of-supported-time-zones&quot; target=&quot;_blank&quot;&gt;list of supported time zones in Azure SQL Managed Instance documentation&lt;/a&gt; provides a comprehensive list of time zone IDs. We can leverage the options available in the Power Automate &quot;Convert time zone&quot; action and match them against these IDs.&lt;/p&gt;&lt;table aria-label=&quot;List of supported time zones&quot; class=&quot;table table-sm margin-top-none&quot; style=&quot;background-color: #1a1a1a; border-collapse: collapse; border-color: rgb(80, 80, 80); border-image: none 100% / 1 / 0 stretch; border-spacing: 0px; border-style: solid; border-width: 1px; box-sizing: inherit; color: #e6e6e6; font-family: &amp;quot;Segoe UI&amp;quot;, SegoeUI, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 0.875rem; margin-block-start: 0px !important; margin-top: 1rem; outline-color: inherit; table-layout: auto; width: 852px;&quot;&gt;&lt;thead style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;th style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; text-align: left; vertical-align: top;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;Time zone ID&lt;/span&gt;&lt;/th&gt;&lt;th style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; text-align: left; vertical-align: top;&quot;&gt;&lt;span style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;Time zone display name&lt;/span&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Dateline Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-12:00) International Date Line West&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;UTC-11&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-11:00) Coordinated Universal Time-11&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Aleutian Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-10:00) Aleutian Islands&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Hawaiian Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-10:00) Hawaii&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Marquesas Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-09:30) Marquesas Islands&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Alaskan Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-09:00) Alaska&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;UTC-09&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-09:00) Coordinated Universal Time-09&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Pacific Standard Time (Mexico)&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-08:00) Baja California&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;UTC-08&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-08:00) Coordinated Universal Time-08&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Pacific Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-08:00) Pacific Time (US &amp;amp; Canada)&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;US Mountain Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-07:00) Arizona&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Mountain Standard Time (Mexico)&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-07:00) Chihuahua, La Paz, Mazatlan&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Mountain Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-07:00) Mountain Time (US &amp;amp; Canada)&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Central America Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-06:00) Central America&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Central Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-06:00) Central Time (US &amp;amp; Canada)&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Easter Island Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-06:00) Easter Island&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Central Standard Time (Mexico)&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-06:00) Guadalajara, Mexico City, Monterrey&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Canada Central Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-06:00) Saskatchewan&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;SA Pacific Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-05:00) Bogota, Lima, Quito, Rio Branco&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Eastern Standard Time (Mexico)&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-05:00) Chetumal&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Eastern Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-05:00) Eastern Time (US &amp;amp; Canada)&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Haiti Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-05:00) Haiti&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Cuba Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-05:00) Havana&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;US Eastern Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-05:00) Indiana (East)&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Turks And Caicos Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-05:00) Turks and Caicos&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Paraguay Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-04:00) Asuncion&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Atlantic Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-04:00) Atlantic Time (Canada)&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Venezuela Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-04:00) Caracas&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Central Brazilian Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-04:00) Cuiaba&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;SA Western Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-04:00) Georgetown, La Paz, Manaus, San Juan&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Pacific SA Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-04:00) Santiago&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Newfoundland Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-03:30) Newfoundland&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Tocantins Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-03:00) Araguaina&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;E. South America Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-03:00) Brasilia&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;SA Eastern Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-03:00) Cayenne, Fortaleza&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Argentina Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-03:00) City of Buenos Aires&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Greenland Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-03:00) Greenland&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Montevideo Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-03:00) Montevideo&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Magallanes Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-03:00) Punta Arenas&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Saint Pierre Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-03:00) Saint Pierre and Miquelon&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Bahia Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-03:00) Salvador&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;UTC-02&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-02:00) Coordinated Universal Time-02&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Mid-Atlantic Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-02:00) Mid-Atlantic - Old&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Azores Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-01:00) Azores&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Cape Verde Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC-01:00) Cabo Verde Is.&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;UTC&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC) Coordinated Universal Time&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;GMT Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+00:00) Dublin, Edinburgh, Lisbon, London&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Greenwich Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+00:00) Monrovia, Reykjavik&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;W. Europe Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Central Europe Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Romance Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+01:00) Brussels, Copenhagen, Madrid, Paris&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Morocco Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+01:00) Casablanca&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Sao Tome Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+01:00) Sao Tome&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Central European Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+01:00) Sarajevo, Skopje, Warsaw, Zagreb&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;W. Central Africa Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+01:00) West Central Africa&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Jordan Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+02:00) Amman&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;GTB Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+02:00) Athens, Bucharest&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Middle East Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+02:00) Beirut&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Egypt Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+02:00) Cairo&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;E. Europe Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+02:00) Chisinau&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Syria Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+02:00) Damascus&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;West Bank Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+02:00) Gaza, Hebron&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;South Africa Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+02:00) Harare, Pretoria&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;FLE Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Israel Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+02:00) Jerusalem&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Kaliningrad Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+02:00) Kaliningrad&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Sudan Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+02:00) Khartoum&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Libya Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+02:00) Tripoli&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Namibia Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+02:00) Windhoek&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Arabic Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+03:00) Baghdad&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Turkey Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+03:00) Istanbul&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Arab Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+03:00) Kuwait, Riyadh&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Belarus Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+03:00) Minsk&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Russian Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+03:00) Moscow, St. Petersburg&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;E. Africa Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+03:00) Nairobi&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Iran Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+03:30) Tehran&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Arabian Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+04:00) Abu Dhabi, Muscat&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Astrakhan Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+04:00) Astrakhan, Ulyanovsk&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Azerbaijan Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+04:00) Baku&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Russia Time Zone 3&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+04:00) Izhevsk, Samara&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Mauritius Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+04:00) Port Louis&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Saratov Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+04:00) Saratov&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Georgian Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+04:00) Tbilisi&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Volgograd Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+04:00) Volgograd&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Caucasus Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+04:00) Yerevan&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Afghanistan Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+04:30) Kabul&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;West Asia Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+05:00) Ashgabat, Tashkent&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Ekaterinburg Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+05:00) Ekaterinburg&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Pakistan Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+05:00) Islamabad, Karachi&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;India Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Sri Lanka Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+05:30) Sri Jayawardenepura&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Nepal Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+05:45) Kathmandu&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Central Asia Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+06:00) Astana&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Bangladesh Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+06:00) Dhaka&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Omsk Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+06:00) Omsk&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Myanmar Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+06:30) Yangon (Rangoon)&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;SE Asia Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+07:00) Bangkok, Hanoi, Jakarta&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Altai Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+07:00) Barnaul, Gorno-Altaysk&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;W. Mongolia Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+07:00) Hovd&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;North Asia Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+07:00) Krasnoyarsk&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;N. Central Asia Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+07:00) Novosibirsk&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Tomsk Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+07:00) Tomsk&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;China Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;North Asia East Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+08:00) Irkutsk&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Singapore Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+08:00) Kuala Lumpur, Singapore&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;W. Australia Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+08:00) Perth&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Taipei Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+08:00) Taipei&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Ulaanbaatar Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+08:00) Ulaanbaatar&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Aus Central W. Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+08:45) Eucla&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Transbaikal Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+09:00) Chita&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Tokyo Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+09:00) Osaka, Sapporo, Tokyo&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;North Korea Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+09:00) Pyongyang&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Korea Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+09:00) Seoul&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Yakutsk Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+09:00) Yakutsk&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Cen. Australia Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+09:30) Adelaide&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;AUS Central Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+09:30) Darwin&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;E. Australia Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+10:00) Brisbane&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;AUS Eastern Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+10:00) Canberra, Melbourne, Sydney&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;West Pacific Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+10:00) Guam, Port Moresby&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Tasmania Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+10:00) Hobart&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Vladivostok Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+10:00) Vladivostok&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Lord Howe Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+10:30) Lord Howe Island&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Bougainville Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+11:00) Bougainville Island&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Russia Time Zone 10&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+11:00) Chokurdakh&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Magadan Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+11:00) Magadan&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Norfolk Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+11:00) Norfolk Island&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Sakhalin Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+11:00) Sakhalin&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Central Pacific Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+11:00) Solomon Is., New Caledonia&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Russia Time Zone 11&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+12:00) Anadyr, Petropavlovsk-Kamchatsky&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;New Zealand Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+12:00) Auckland, Wellington&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;UTC+12&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+12:00) Coordinated Universal Time+12&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Fiji Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+12:00) Fiji&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Kamchatka Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+12:00) Petropavlovsk-Kamchatsky - Old&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Chatham Islands Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+12:45) Chatham Islands&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;UTC+13&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+13:00) Coordinated Universal Time+13&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Tonga Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+13:00) Nuku&#39;alofa&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Samoa Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+13:00) Samoa&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;Line Islands Standard Time&lt;/td&gt;&lt;td style=&quot;border-block-start: 1px solid rgb(80, 80, 80); box-sizing: inherit; line-height: 1.5; outline-color: inherit; overflow-wrap: break-word; padding: 0.5rem; vertical-align: top;&quot;&gt;(UTC+14:00) Kiritimati Island&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</content><link rel='replies' type='application/atom+xml' href='http://linnzawwin.blogspot.com/feeds/8843378060499036405/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://linnzawwin.blogspot.com/2025/05/power-automate-converttimezone-using.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/8843378060499036405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/8843378060499036405'/><link rel='alternate' type='text/html' href='http://linnzawwin.blogspot.com/2025/05/power-automate-converttimezone-using.html' title='Power Automate convertTimeZone using an expression: Decoding the Mystery of Time Zone Names'/><author><name>Linn Zaw Win</name><uri>http://www.blogger.com/profile/16015532694415495453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaCUObunP3kiYNRu6pZ-J4ezoWDP-Jf1Cv010HLXr_bLFmB0bcZj8atUiBYmg37uDyBDzxPrHFX7EGESjgSMIOIBX7TR9VS9nZ179jpYpTkpsDtw09albFOTBEXTdw2OhtXLyZkfd4kBnOHYZmGSoge7m2XxXOVZvFJxuEiXnTmg7sRRc/s220/IMG_5259-Square%20-%20MVP.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgMkVSJSvOCbZsOkII5HXBrklMD8DdcSnv_-L3XD3zB8uikckBaG9OPpFEybXfuNXQ0Qo1zAd3e96wQpObMkMpKPqR8CbtJyrelmnI9obkSHylQjkZru46iZthjle9evdzi-ApuOSK4GsINyCK6nEGGWw5J2R-ubXO_kkoSAgcxIMV1szUNPfZO_RRK5rU/s72-c/world-time-zones-map.png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3970629459363259828.post-8625763922764106919</id><published>2024-11-15T12:28:00.001+10:00</published><updated>2024-11-15T12:28:25.362+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Power Automate"/><category scheme="http://www.blogger.com/atom/ns#" term="Project Operations"/><title type='text'>Error Handling for Project Schedule API in Power Automate</title><content type='html'>&lt;meta content=&quot;summary_large_image&quot; name=&quot;twitter:card&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;This blog post provides a guide to implementing error handling in Power Automate flows with Project Schedule APIs to prevent errors caused by unclosed Operation Sets.&quot; name=&quot;twitter:description&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrxU9S1LHKyaz7k67nymogNuLZVadW0gsjR8VzUvXK_2sPzTQpdMcyxT_GLy0lDG03neHzBPRxktTFoq8Xt1mwyfpP-qtU7KET-0k2sxACc1KMlWyMSWAHiTwazuYGEYioLak8bq2bczzBLFge5a5EBVWWTYC1LjL9yQjbykiNP3LxCOE6wW8xqlC5BMCr/s869/Error%20Handling.png&quot; name=&quot;twitter:image&quot;&gt;&lt;/meta&gt;
&lt;p&gt;
  Calling
  &lt;a href=&quot;https://learn.microsoft.com/en-us/dynamics365/project-operations/project-management/scheduling-apis-powerautomate?WT.mc_id=DX-MVP-5003873&quot; target=&quot;_blank&quot;&gt;Project Schedule APIs within Power Automate cloud flows with Perform an
    Unbound Action&lt;/a&gt;
  can streamline project management tasks, but it requires careful error
  handling to prevent operational issues.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrxU9S1LHKyaz7k67nymogNuLZVadW0gsjR8VzUvXK_2sPzTQpdMcyxT_GLy0lDG03neHzBPRxktTFoq8Xt1mwyfpP-qtU7KET-0k2sxACc1KMlWyMSWAHiTwazuYGEYioLak8bq2bczzBLFge5a5EBVWWTYC1LjL9yQjbykiNP3LxCOE6wW8xqlC5BMCr/s869/Error%20Handling.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;632&quot; data-original-width=&quot;869&quot; height=&quot;291&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrxU9S1LHKyaz7k67nymogNuLZVadW0gsjR8VzUvXK_2sPzTQpdMcyxT_GLy0lDG03neHzBPRxktTFoq8Xt1mwyfpP-qtU7KET-0k2sxACc1KMlWyMSWAHiTwazuYGEYioLak8bq2bczzBLFge5a5EBVWWTYC1LjL9yQjbykiNP3LxCOE6wW8xqlC5BMCr/w400-h291/Error%20Handling.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;The Project Schedule APIs in Power
  Automate rely on an &lt;i&gt;Operation Set&lt;/i&gt; to group multiple requests into a
  single transaction. Typically, the flow structure involves
  &lt;i&gt;Create Operation Set&lt;/i&gt; at the beginning, executing API requests in
  sequence, and concluding with an &lt;i&gt;Execute Operation Set&lt;/i&gt; step.
&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_vGX5B1IOmH-7OxzaoJQUKf7T1WZKBfS919QOcN1skcKJdxlrNJscnqy66XmswFWnzOF4L02m3dJxNr36egcUvoqQm_WcVAkZ2ZOzKUkrKFbzErmI7xmAkM7VnFaPVRDSpky0QonGmblAGxNUk5aWckrch-tJyXnQWsTT9sdunbDI5Tdzazcp7A7izhOf/s891/Flow%20with%20Project%20Schedule%20API.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;891&quot; data-original-width=&quot;328&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_vGX5B1IOmH-7OxzaoJQUKf7T1WZKBfS919QOcN1skcKJdxlrNJscnqy66XmswFWnzOF4L02m3dJxNr36egcUvoqQm_WcVAkZ2ZOzKUkrKFbzErmI7xmAkM7VnFaPVRDSpky0QonGmblAGxNUk5aWckrch-tJyXnQWsTT9sdunbDI5Tdzazcp7A7izhOf/s16000/Flow%20with%20Project%20Schedule%20API.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;
  &lt;span style=&quot;font-size: large;&quot;&gt;Problem: Handling Failures Mid-Flow&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
  A common challenge arises if any API call between the
  &lt;b&gt;&lt;i&gt;Create Operation Set&lt;/i&gt;&lt;/b&gt; and
  &lt;b&gt;&lt;i&gt;Execute Operation Set&lt;/i&gt;&lt;/b&gt; steps fails. This interruption causes the
  flow to halt before reaching the final &lt;b&gt;&lt;i&gt;Execute Operation Set&lt;/i&gt;&lt;/b&gt;, leaving the Operation Set in an &quot;&lt;b&gt;Open&lt;/b&gt;&quot; status (192350000) in the
  &lt;i&gt;Operation Set&lt;/i&gt; table (msdyn_operationset).&amp;nbsp;When Operation Set
  records with &quot;Open&quot; status reach x10 for a single user, the following error
  occurs in the flow because each user can only have a
  &lt;a href=&quot;https://learn.microsoft.com/dynamics365/project-operations/project-management/schedule-api-preview?WT.mc_id=DX-MVP-5003873&quot; target=&quot;_blank&quot;&gt;maximum of 10 open OperationSets as per the limitation&lt;/a&gt;.
&lt;/p&gt;
&lt;div&gt;&lt;pre style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent; background: rgb(245, 242, 240); border-radius: 5px; border: 1px solid rgb(150, 150, 150); box-shadow: none; box-sizing: inherit; font-family: consolas, monaco, &amp;quot;andale mono&amp;quot;, &amp;quot;ubuntu mono&amp;quot;, monospace; font-size: 12px; hyphens: none; line-height: 1.3; margin-bottom: 0.5em; margin-top: 0.5em; overflow: auto; padding: 10px; tab-size: 4; text-rendering: optimizelegibility; text-shadow: rgb(255, 255, 255) 0px 1px; white-space: pre-wrap; word-break: break-all;&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;ScheduleAPI-OV-0004:00000000-0000-0000-0000-000000000000: The maximum number of operation set allowed per user is 10.&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc4qhpZuw8Dg0MWDm0o5U_42pmo70xMx3umwAUcCWJ2j-OfA3wxSS0H_znFel1d64lILOhCETNCDSk2f1bHN_Xmr_LZzhpQXw3sL3cN_qzJ5AR6LOL_GZwMsfv3lT0iBtJ5YS-DAmCYMAOtd1WpdBljHaS45Wim0eGl-TbFGjX5EdgmHWPLThDg79gR3ev/s881/Error%20Handling.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;688&quot; data-original-width=&quot;881&quot; height=&quot;500&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc4qhpZuw8Dg0MWDm0o5U_42pmo70xMx3umwAUcCWJ2j-OfA3wxSS0H_znFel1d64lILOhCETNCDSk2f1bHN_Xmr_LZzhpQXw3sL3cN_qzJ5AR6LOL_GZwMsfv3lT0iBtJ5YS-DAmCYMAOtd1WpdBljHaS45Wim0eGl-TbFGjX5EdgmHWPLThDg79gR3ev/w640-h500/Error%20Handling.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Solution: Implementing Error Handling with Scopes&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;h4&gt;&lt;/h4&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;To prevent this accumulation of &quot;Open&quot; &lt;em&gt;Operation Sets&lt;/em&gt;, consider structuring the flow with a &lt;strong&gt;Try-Catch pattern&lt;/strong&gt; using &lt;em&gt;Scope&lt;/em&gt; actions. This approach ensures that if any error, timeout, or skip event occurs during the process, a cleanup step updates the status of the incomplete &lt;em&gt;Operation Set&lt;/em&gt;.&lt;/p&gt;&lt;h4&gt;Steps for Error Handling&lt;/h4&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Define the Try Scope&lt;/strong&gt;: Place all steps between the &lt;em&gt;Create Operation Set&lt;/em&gt; and &lt;em&gt;Execute Operation Set&lt;/em&gt; actions within a single Scope (e.g., &quot;Try&quot;). This scope will contain all the critical API actions.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Add a Catch Scope&lt;/strong&gt;: Create another Scope (e.g., &quot;Catch&quot;) and configure it to run if the &lt;em&gt;Try&lt;/em&gt; Scope fails, times out, or is skipped.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Update Operation Set Status&lt;/strong&gt;: Inside the &lt;em&gt;Catch&lt;/em&gt; Scope, add a &lt;em&gt;Dataverse &quot;Update a Row&quot;&lt;/em&gt; action. Set the status of the &lt;em&gt;Operation Set&lt;/em&gt; to &quot;Failed&quot; by using the ID output from the &lt;em&gt;Create Operation Set&lt;/em&gt; step, which releases the open &lt;em&gt;Operation Set&lt;/em&gt; and allows the flow to proceed without reaching the 10-record limit.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Benefits of Using This Error Handling Approach&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Implementing error handling through Scopes ensures that &lt;em&gt;Operation Sets&lt;/em&gt; are not left in an &quot;Open&quot; status, preventing the flow from encountering the maximum operation limit. This approach is reliable, improves flow resilience, and maintains user productivity by automating the management of operation statuses during errors.&lt;/p&gt;&lt;p&gt;Using these steps, you can ensure your Power Automate flows with Project Schedule APIs remain efficient, effective, and error-resistant.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://linnzawwin.blogspot.com/feeds/8625763922764106919/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://linnzawwin.blogspot.com/2024/11/error-handling-for-project-schedule-api.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/8625763922764106919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/8625763922764106919'/><link rel='alternate' type='text/html' href='http://linnzawwin.blogspot.com/2024/11/error-handling-for-project-schedule-api.html' title='Error Handling for Project Schedule API in Power Automate'/><author><name>Linn Zaw Win</name><uri>http://www.blogger.com/profile/16015532694415495453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaCUObunP3kiYNRu6pZ-J4ezoWDP-Jf1Cv010HLXr_bLFmB0bcZj8atUiBYmg37uDyBDzxPrHFX7EGESjgSMIOIBX7TR9VS9nZ179jpYpTkpsDtw09albFOTBEXTdw2OhtXLyZkfd4kBnOHYZmGSoge7m2XxXOVZvFJxuEiXnTmg7sRRc/s220/IMG_5259-Square%20-%20MVP.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrxU9S1LHKyaz7k67nymogNuLZVadW0gsjR8VzUvXK_2sPzTQpdMcyxT_GLy0lDG03neHzBPRxktTFoq8Xt1mwyfpP-qtU7KET-0k2sxACc1KMlWyMSWAHiTwazuYGEYioLak8bq2bczzBLFge5a5EBVWWTYC1LjL9yQjbykiNP3LxCOE6wW8xqlC5BMCr/s72-w400-h291-c/Error%20Handling.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3970629459363259828.post-5582144640282060045</id><published>2024-11-06T22:18:00.004+10:00</published><updated>2024-11-28T14:05:33.352+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Solution"/><category scheme="http://www.blogger.com/atom/ns#" term="Table"/><title type='text'>Missing Dependencies Error for Primary Name Column of Tables Created in Table Visual Designer Experience</title><content type='html'>&lt;meta content=&quot;summary_large_image&quot; name=&quot;twitter:card&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;The new table visual designer in Power Apps accelerates table creation but may trigger a missing dependencies issue when exporting solutions, which can be resolved by editing the solution.xml file.&quot; name=&quot;twitter:description&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkTGBFti9cvXcab1F3cZIcqxZMv6jxcigIVNJ5aq-pQWofluVTdkqzFVnn9TA1LQyC2iL1AUYqNaKGUxF4uzPvbIucYpdE-vTocafXEjHt05eVnVLlG22MhEbV_b_kw8VAm4y339z7sMFBPkjT5yfyJGqmDyZmVmG93rsuAihY2Zgizl554hPiu9qW9V96/s940/Thumbnail.png&quot; name=&quot;twitter:image&quot;&gt;&lt;/meta&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkTGBFti9cvXcab1F3cZIcqxZMv6jxcigIVNJ5aq-pQWofluVTdkqzFVnn9TA1LQyC2iL1AUYqNaKGUxF4uzPvbIucYpdE-vTocafXEjHt05eVnVLlG22MhEbV_b_kw8VAm4y339z7sMFBPkjT5yfyJGqmDyZmVmG93rsuAihY2Zgizl554hPiu9qW9V96/s940/Thumbnail.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;433&quot; data-original-width=&quot;940&quot; height=&quot;147&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkTGBFti9cvXcab1F3cZIcqxZMv6jxcigIVNJ5aq-pQWofluVTdkqzFVnn9TA1LQyC2iL1AUYqNaKGUxF4uzPvbIucYpdE-vTocafXEjHt05eVnVLlG22MhEbV_b_kw8VAm4y339z7sMFBPkjT5yfyJGqmDyZmVmG93rsuAihY2Zgizl554hPiu9qW9V96/s320/Thumbnail.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;
  With the recent introduction of the&lt;a href=&quot;https://learn.microsoft.com/en-us/power-apps/maker/data-platform/create-edit-entities-portal?tabs=excel&amp;amp;WT.mc_id=DX-MVP-5003873#create-new-tables&quot; target=&quot;_blank&quot;&gt;
    new table visual designer in Power Apps&lt;/a&gt;, creating tables has become a streamlined, intuitive process. Accessible
  through &lt;a href=&quot;http://make.powerapps.com&quot;&gt;make.powerapps.com&lt;/a&gt;, this
  designer provides an Entity-Relationship Diagram (ERD) experience, allowing
  users to define tables by simply describing their needs to Copilot.
  Additionally, it enables importing data directly from sources like SharePoint
  lists, Excel, or CSV files, making it even easier to build a data structure
  from existing sources.
&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcsCLQTTn54Vf1OY0vosEv70T2qlbILE3f7bCA_GdYg8a88x2S-qkD5-1o30btY8q_xYuiH6sk4OVndjCTxv_iTCv6VUeKnpqUruv-dul5IFzPVYXlbKOT6RLz491Hsq1kXNUG_Dl1M_sfRbEC3Jy7ABET0r8-zJBBQ47O3Z_6C9F6Qg2Wtvt1_-kqA2SK/s3160/table-visual-designer.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1422&quot; data-original-width=&quot;3160&quot; height=&quot;288&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcsCLQTTn54Vf1OY0vosEv70T2qlbILE3f7bCA_GdYg8a88x2S-qkD5-1o30btY8q_xYuiH6sk4OVndjCTxv_iTCv6VUeKnpqUruv-dul5IFzPVYXlbKOT6RLz491Hsq1kXNUG_Dl1M_sfRbEC3Jy7ABET0r8-zJBBQ47O3Z_6C9F6Qg2Wtvt1_-kqA2SK/w640-h288/table-visual-designer.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
  &lt;span style=&quot;font-size: large;&quot;&gt;First Impressions: Benefits and Limitations&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
  For those familiar with the conventional table creation process, the visual
  designer can feel like a breath of fresh air. It simplifies and speeds up what
  used to be a multi-step procedure. However, there are a few limitations to
  keep in mind:
&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
  &lt;li&gt;
    &lt;b&gt;Lack of Activity Table Creation&lt;/b&gt;: Currently, the designer does not
    support the creation of activity tables for which we still need to go to the
    Table &quot;advanced properties&quot; experience.
  &lt;/li&gt;&lt;li&gt;&lt;b&gt;Sync with Global Choice&lt;/b&gt;: For choice columns, it is not possible to create a global choice column with an existing set of choices or even a new one and share it among other choice columns created in the same table.&lt;/li&gt;
  &lt;li&gt;
    &lt;b&gt;Inability to Create Relationships with Existing Tables&lt;/b&gt;: Relationships
    can only be defined within tables created directly in the visual designer,
    which could disrupt data integration in complex models with pre-existing
    tables.
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
  These limitations aside, the visual designer is a valuable tool for speeding
  up table creation and enhancing the overall experience.
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: large;&quot;&gt;The Missing Dependencies Issue&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Workaround Solution&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #38225d; padding: 20px;&quot;&gt;
	&lt;b style=&quot;color: #e2daf1;&quot;&gt;🛈&amp;nbsp;Note&lt;/b&gt;
	&lt;br /&gt;
	&lt;br /&gt;&lt;span style=&quot;color: #e2daf1;&quot;&gt;Since publishing this blog post, it appears that the product team has resolved the issue. I recently tested creating a new table using the visual designer, and it was successfully imported into another environment without any problems.&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;
&lt;p&gt;
  While testing out this new designer, I encountered a more serious issue that
  only appeared when moving tables between environments. After creating tables
  in the visual designer, I exported the solution containing these tables, then
  attempted to import it into another environment. Unfortunately, I was met with
  an import error due to “Missing Dependencies.”
&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7NSNbSmAFZ2jJCWLi5EH48hTuUcoCQ01nLEqunIe46T4Z8FYJ88rCTfwTC70JS4ut77olu0qs1rRsrHsiQP6UyYvpJCvt7sdMVXNzPaDLfeJUZl3GELfUm1__Nc660mLtc3Rdj9sVT80eMatSL3k2W_LED5AzVQlcvrEIr8mJBrIdg6Nt2RFjYYcOnukX/s941/Missing%20Dependencies.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;920&quot; data-original-width=&quot;941&quot; height=&quot;626&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7NSNbSmAFZ2jJCWLi5EH48hTuUcoCQ01nLEqunIe46T4Z8FYJ88rCTfwTC70JS4ut77olu0qs1rRsrHsiQP6UyYvpJCvt7sdMVXNzPaDLfeJUZl3GELfUm1__Nc660mLtc3Rdj9sVT80eMatSL3k2W_LED5AzVQlcvrEIr8mJBrIdg6Nt2RFjYYcOnukX/w640-h626/Missing%20Dependencies.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Diagnosing the Problem&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
  Upon closer inspection, I found that the missing dependencies were related to
  columns—specifically, the primary name columns of the tables created in the
  visual designer. Oddly, these columns were listed as missing even though they
  were part of the solution. It turns out that the &lt;b&gt;solution.xml&lt;/b&gt; file had
  unintentionally flagged these primary name columns within the
  &lt;b&gt;&lt;i&gt;&amp;lt;MissingDependencies&amp;gt;&lt;/i&gt;&lt;/b&gt;&amp;nbsp;tag, likely due to a bug in the designer, which is no longer in the
  public preview.
&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhM_kfGm7LfMO1-DdHjcQqCcrtUkoAhpJrH_mbVlOmk3scREt_3z8eO_JhdYrPYzuxzeAmsIMyu8oZTgVj9Eegq3puqJdeTxH5ZZ5b9kC8C5nSKWQnJewGP7mmMT9JG_7S2sXbSU-wA_y_9KYMcZoDD8S2IcGGe72APibquZjdE3DxR6mPGXG9EE-lJwCkZ/s1140/Primary%20Column.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;565&quot; data-original-width=&quot;1140&quot; height=&quot;318&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhM_kfGm7LfMO1-DdHjcQqCcrtUkoAhpJrH_mbVlOmk3scREt_3z8eO_JhdYrPYzuxzeAmsIMyu8oZTgVj9Eegq3puqJdeTxH5ZZ5b9kC8C5nSKWQnJewGP7mmMT9JG_7S2sXbSU-wA_y_9KYMcZoDD8S2IcGGe72APibquZjdE3DxR6mPGXG9EE-lJwCkZ/w640-h318/Primary%20Column.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Workaround Solution&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #38225d; padding: 20px;&quot;&gt;
	&lt;b style=&quot;color: #e2daf1;&quot;&gt;🛈&amp;nbsp;Note&lt;/b&gt;
	&lt;br /&gt;
	&lt;br /&gt;&lt;span style=&quot;color: #e2daf1;&quot;&gt;One of the readers shared that setting the primary name column as &quot;not required&quot; also resolves the issue.&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;
  Here is another workaround solution to update the solution.xml to bypass the “Missing
  Dependencies” error:
&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
  &lt;li&gt;
    &lt;b&gt;Extract the Solution .zip File&lt;/b&gt;: Extract the exported solution .zip
    file.
  &lt;/li&gt;
  &lt;li&gt;
    &lt;b&gt;Edit the solution.xml File&lt;/b&gt;: Open the solution.xml file and look for
    the &amp;lt;MissingDependency&amp;gt; tags that correspond to the primary name
    columns of the tables you created in the visual designer.
  &lt;/li&gt;
  &lt;li&gt;
    &lt;b&gt;Remove the Tags for the Affected Columns&lt;/b&gt;: Delete the
    &amp;lt;MissingDependency&amp;gt; tags associated with these primary name columns.
    This step removes the erroneous dependency listings.
  &lt;/li&gt;
  &lt;li&gt;
    &lt;b&gt;Repackage the Solution&lt;/b&gt;: Compress the modified files back into a .zip
    format.
  &lt;/li&gt;
  &lt;li&gt;
    &lt;b&gt;Import the Solution&lt;/b&gt;: Re-import the solution. This time, it should
    successfully import without the missing dependency errors.
  &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimmJpMg2F_cqXCBPAccq4K_-bINpbpKcz5s1QMD-h0XcUvr3qo4AmYeiYT5oNxj4AOpPxK10OQYBR3fRxs_URcJDpfW0xDRmTUYMM2QjpgXnT7Pi84eunZB-CFWrAPNx9CDPpWNQJhaSaAo9yhc50ZI3gwhsmL8pAsqMTeoPOaGz3U-wtZdp3hiXQW5CCO/s1788/Solution%20XML.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;937&quot; data-original-width=&quot;1788&quot; height=&quot;336&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimmJpMg2F_cqXCBPAccq4K_-bINpbpKcz5s1QMD-h0XcUvr3qo4AmYeiYT5oNxj4AOpPxK10OQYBR3fRxs_URcJDpfW0xDRmTUYMM2QjpgXnT7Pi84eunZB-CFWrAPNx9CDPpWNQJhaSaAo9yhc50ZI3gwhsmL8pAsqMTeoPOaGz3U-wtZdp3hiXQW5CCO/w640-h336/Solution%20XML.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Conclusion&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
  The new table visual designer in Power Apps offers a fantastic user
  experience, speeding up table creation while integrating Copilot&#39;s AI
  capabilities. However, for those of us working in multi-environment setups,
  this missing dependencies issue serves as a reminder to thoroughly test and
  verify our solutions when using new tools and features.
&lt;/p&gt;
&lt;p&gt;
  If you face this issue, following the above workaround can save time and
  prevent the frustration of an interrupted import. It’s a small but valuable
  fix that can keep your project moving forward smoothly while Microsoft
  addresses this bug.
&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://linnzawwin.blogspot.com/feeds/5582144640282060045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://linnzawwin.blogspot.com/2024/11/missing-dependencies-error-for-primary.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/5582144640282060045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/5582144640282060045'/><link rel='alternate' type='text/html' href='http://linnzawwin.blogspot.com/2024/11/missing-dependencies-error-for-primary.html' title='Missing Dependencies Error for Primary Name Column of Tables Created in Table Visual Designer Experience'/><author><name>Linn Zaw Win</name><uri>http://www.blogger.com/profile/16015532694415495453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaCUObunP3kiYNRu6pZ-J4ezoWDP-Jf1Cv010HLXr_bLFmB0bcZj8atUiBYmg37uDyBDzxPrHFX7EGESjgSMIOIBX7TR9VS9nZ179jpYpTkpsDtw09albFOTBEXTdw2OhtXLyZkfd4kBnOHYZmGSoge7m2XxXOVZvFJxuEiXnTmg7sRRc/s220/IMG_5259-Square%20-%20MVP.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkTGBFti9cvXcab1F3cZIcqxZMv6jxcigIVNJ5aq-pQWofluVTdkqzFVnn9TA1LQyC2iL1AUYqNaKGUxF4uzPvbIucYpdE-vTocafXEjHt05eVnVLlG22MhEbV_b_kw8VAm4y339z7sMFBPkjT5yfyJGqmDyZmVmG93rsuAihY2Zgizl554hPiu9qW9V96/s72-c/Thumbnail.png" height="72" width="72"/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3970629459363259828.post-32171996773904406</id><published>2024-05-29T01:01:00.003+10:00</published><updated>2024-09-28T01:41:23.223+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cloud flow"/><category scheme="http://www.blogger.com/atom/ns#" term="elastic table"/><category scheme="http://www.blogger.com/atom/ns#" term="lookup"/><category scheme="http://www.blogger.com/atom/ns#" term="Partition Id"/><title type='text'>Use Dataverse Elastic Tables in Power Automate Cloud Flows</title><content type='html'>&lt;meta content=&quot;summary_large_image&quot; name=&quot;twitter:card&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;In this blog post, I address common challenges with CRUD operations on Dataverse&#39;s elastic tables using cloud flows, highlighting the importance of including the partitionid column value to ensure proper data linkage and avoid errors.&quot; name=&quot;twitter:description&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifiTbESJQMTrRx1kJ4zoJLGlJrEZzKzZE49ywRu36YhSenjz0JlY4s-YJ-TNFlcPR53yY4atRDNzGDFPYLdm9T-lRpZoLQQulpkEpJaUEDj8ugCjOFWs4EdgvlxgSxKPMS3lereRcpzErAhdpbcjIN_Y0_vEcwwnoYuaGHhVUPz2fTFsI2D8ZVDe4djyA-/s1319/Thumbnail-overlay.png&quot; name=&quot;twitter:image&quot;&gt;&lt;/meta&gt;&lt;div&gt;
  &lt;div&gt;
    In this blog post, I will guide you through overcoming common challenges
    encountered during CRUD operations on elastic tables in Dataverse using
    Power Automate cloud flow.
  &lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifiTbESJQMTrRx1kJ4zoJLGlJrEZzKzZE49ywRu36YhSenjz0JlY4s-YJ-TNFlcPR53yY4atRDNzGDFPYLdm9T-lRpZoLQQulpkEpJaUEDj8ugCjOFWs4EdgvlxgSxKPMS3lereRcpzErAhdpbcjIN_Y0_vEcwwnoYuaGHhVUPz2fTFsI2D8ZVDe4djyA-/s1319/Thumbnail-overlay.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;375&quot; data-original-width=&quot;1319&quot; height=&quot;114&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifiTbESJQMTrRx1kJ4zoJLGlJrEZzKzZE49ywRu36YhSenjz0JlY4s-YJ-TNFlcPR53yY4atRDNzGDFPYLdm9T-lRpZoLQQulpkEpJaUEDj8ugCjOFWs4EdgvlxgSxKPMS3lereRcpzErAhdpbcjIN_Y0_vEcwwnoYuaGHhVUPz2fTFsI2D8ZVDe4djyA-/w400-h114/Thumbnail-overlay.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;
    &lt;div&gt;
      While I was working with&amp;nbsp;&lt;a href=&quot;https://learn.microsoft.com/en-us/power-automate/dataverse/cloud-flow-run-metadata&quot; target=&quot;_blank&quot;&gt;cloud flow run history in Dataverse&lt;/a&gt;, I experienced an unusual issue. In my cloud flow, I use a &quot;List Rows&quot;
      action to retrieve the data from
      &lt;a href=&quot;https://learn.microsoft.com/en-us/power-apps/developer/data-platform/reference/entities/flowrun&quot; target=&quot;_blank&quot;&gt;Flow Run&lt;/a&gt;
      table (which&amp;nbsp;is using Dataverse’s nonrelational database, elastic
      tables). The query returned the columns as specified in
      &lt;a href=&quot;https://learn.microsoft.com/en-us/power-automate/dataverse/cloud-flow-run-metadata#cloud-flow-run-elements&quot; target=&quot;_blank&quot;&gt;the documentation&lt;/a&gt;.
    &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
    &lt;div&gt;&lt;pre style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent; background: rgb(245, 242, 240); border-radius: 5px; border: 1px solid rgb(150, 150, 150); box-shadow: none; box-sizing: inherit; font-family: consolas, monaco, &amp;quot;andale mono&amp;quot;, &amp;quot;ubuntu mono&amp;quot;, monospace; font-size: 12px; hyphens: none; line-height: 1.3; margin-bottom: 0.5em; margin-top: 0.5em; overflow: auto; padding: 10px; tab-size: 4; text-rendering: optimizelegibility; text-shadow: rgb(255, 255, 255) 0px 1px; white-space: pre-wrap; word-break: break-all;&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;flowruns(«GUID»)
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
    &lt;div&gt;However, when I used the GUID of the flow run to populate the lookup column in the custom table, I encountered the following error.&lt;/div&gt;
    &lt;div&gt;&lt;pre style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent; background: rgb(245, 242, 240); border-radius: 5px; border: 1px solid rgb(150, 150, 150); box-shadow: none; box-sizing: inherit; font-family: consolas, monaco, &amp;quot;andale mono&amp;quot;, &amp;quot;ubuntu mono&amp;quot;, monospace; font-size: 12px; hyphens: none; line-height: 1.3; margin-bottom: 0.5em; margin-top: 0.5em; overflow: auto; padding: 10px; tab-size: 4; text-rendering: optimizelegibility; text-shadow: rgb(255, 255, 255) 0px 1px; white-space: pre-wrap; word-break: break-all;&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;The HTTP status code of the response was not expected (404).
&quot;error&quot;:
{
	&quot;message&quot;: &quot;Could not find item &#39;25b17f77-3abb-9596-5cd3-9275652c7f01&#39;.&quot;,
	&quot;details&quot;:
	[
		{
		&quot;message&quot;: &quot;\r\nErrors : [\r\n &quot;Resource Not Found. Learn more: https://aka.ms/cosmosdb-tsg-not-found&quot;&quot;
		}
	]
}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
    &lt;div&gt;I double-checked the GUID, confirming it matches the flowrunid from the output of the &quot;List Rows&quot; action. I attempted to retrieve the Flow Run record using the &quot;Get a row&quot; action with the same GUID, but I encountered the same error.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;After searching through forum solutions and Microsoft documentation, I discovered the article &quot;&lt;a href=&quot;https://learn.microsoft.com/en-us/power-apps/developer/data-platform/use-elastic-tables?tabs=webapi&quot; target=&quot;_blank&quot;&gt;Use Elastic Tables Using Code.&lt;/a&gt;&quot;&lt;/div&gt;&lt;div&gt;In the article, it explains the information that we need to set the lookup column which is referring to an elastic table.&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #38225d; padding: 20px;&quot;&gt;
	&lt;b style=&quot;color: #e2daf1;&quot;&gt;🛈&amp;nbsp;Note&lt;/b&gt;
	&lt;br /&gt;&lt;div style=&quot;padding: 20px;&quot;&gt;&lt;span style=&quot;color: #e2daf1;&quot;&gt;When a table record refers to an elastic table record which has partitionid column value set, you must include the partitionid column value of the elastic table record when you set the lookup column of the referencing table. You can do this by including the value as an alternate key.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #e2daf1;&quot;&gt;As described in Partitionid value column on referencing table, when a one-to-many relationship is created and the elastic table is the referenced table, a string column and a lookup column is created on the referencing table. The string column stores the partitionid value of the referenced elastic table record.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #e2daf1;&quot;&gt;You can set both the lookup and the string column values with their respective values by:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;color: #e2daf1;&quot;&gt;Using an alternate key reference to set only the lookup&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;color: #e2daf1;&quot;&gt;Setting the two column values together in one update&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;
    &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It&#39;s crucial to understand that setting the GUID of the lookup without including the partitionid column value won&#39;t trigger an error, but the data won&#39;t link correctly. This is why the related columns in the subgrid didn&#39;t display properly when I used only the GUID to set the lookup value with the SQL4CDS tool.&lt;/div&gt;
  &lt;/div&gt;
  &lt;div style=&quot;background-color: #004173; padding: 20px;&quot;&gt;
	&lt;b style=&quot;color: #e2daf1;&quot;&gt;⚠&amp;nbsp;Important&lt;/b&gt;
	&lt;br /&gt;
	&lt;br /&gt;&lt;span style=&quot;color: #e2daf1;&quot;&gt;If you choose to use a partitioning strategy for your elastic table, all operations on that table or referring to records in that table MUST specify the partitionid column value to uniquely identify the record. There is no error thrown if partitionid is not specified in the lookup value of referencing table, but the lookup will fail to locate the record when you use it. You must document and enforce this requirement via code reviews to ensure that your data is consistent and partitionid is used appropriately for all the operations.&lt;/span&gt;&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The article also includes examples of various operations using the Web API, formatted similarly to the parameters in Dataverse actions.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;Populating Lookup with GUID and PartitionId&lt;/b&gt;&lt;/h3&gt;
  &lt;div&gt;This is the format that I used to populate the lookup to the elastic table with two parameters, one for the GUID and another one for the partitionid (which is similar to populating the lookup with composite alternate key)&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;pre style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent; background: rgb(245, 242, 240); border-radius: 5px; border: 1px solid rgb(150, 150, 150); box-shadow: none; box-sizing: inherit; color: black; font-family: consolas, monaco, &amp;quot;andale mono&amp;quot;, &amp;quot;ubuntu mono&amp;quot;, monospace; font-size: 12px; hyphens: none; line-height: 1.3; margin-bottom: 0.5em; margin-top: 0.5em; overflow: auto; padding: 10px; tab-size: 4; text-rendering: optimizelegibility; text-shadow: rgb(255, 255, 255) 0px 1px; text-wrap: wrap; word-break: break-all;&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;flowruns(flowrunid=«GUID»,partitionid=&#39;«PartitionId»&#39;)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;Note: There are single quotes ( &#39; ) around the&amp;nbsp;PartitionId parameter but not required for the GUID parameter.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtXWrVOJ66xewMDVNFmZdjX3LKmHwUFLF2B6sJt8ikqZLb8ilAqQTnPins4LZDkwoCoosPB138drn4-DsdW-y0y_M6BlRghtylUu1qFJUXQD8MCe32j62W2iv838iDuVtbLbw6JWAsEuq7DF2-ZseI_5oKx0FRPYs1RDImo8Wy3dloZoDwb5FwIF4DkFLf/s865/Flow%20Run%20By%20ID.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;102&quot; data-original-width=&quot;865&quot; height=&quot;76&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtXWrVOJ66xewMDVNFmZdjX3LKmHwUFLF2B6sJt8ikqZLb8ilAqQTnPins4LZDkwoCoosPB138drn4-DsdW-y0y_M6BlRghtylUu1qFJUXQD8MCe32j62W2iv838iDuVtbLbw6JWAsEuq7DF2-ZseI_5oKx0FRPYs1RDImo8Wy3dloZoDwb5FwIF4DkFLf/w640-h76/Flow%20Run%20By%20ID.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3&gt;&lt;b&gt;Populating Lookup with Alternate Key and PartitionId&lt;/b&gt;&lt;/h3&gt;&lt;div&gt;You can also use the alternate key to populate the lookup (in this case, name column is a key)&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;pre style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent; background: rgb(245, 242, 240); border-radius: 5px; border: 1px solid rgb(150, 150, 150); box-shadow: none; box-sizing: inherit; color: black; font-family: consolas, monaco, &amp;quot;andale mono&amp;quot;, &amp;quot;ubuntu mono&amp;quot;, monospace; font-size: 12px; hyphens: none; line-height: 1.3; margin-bottom: 0.5em; margin-top: 0.5em; overflow: auto; padding: 10px; tab-size: 4; text-rendering: optimizelegibility; text-shadow: rgb(255, 255, 255) 0px 1px; text-wrap: wrap; word-break: break-all;&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;flowruns(name=«AlternateKeyValue»,partitionid=&#39;«PartitionId»&#39;)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;Note: In this case, there are single quotes ( &#39; ) around both parameters.&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhv1KGT0vjAhyfY_jarqaV3k5K2s4Mm2uLwTkI7ghrp-7ACTd1903Gr2AIHOVLleCAl1gyTWguTUWiTiKq9HPb5cQSKxQfBZV0WuqTvt6S-NtnrzKmtUVxpguelZNVclAoo2tmBzuXZM24cP7ywOas-bAmcdPO7zBxZLb2tFPau0__TxGPdfVTFSbif7OKx/s868/Alternate%20Key.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;88&quot; data-original-width=&quot;868&quot; height=&quot;64&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhv1KGT0vjAhyfY_jarqaV3k5K2s4Mm2uLwTkI7ghrp-7ACTd1903Gr2AIHOVLleCAl1gyTWguTUWiTiKq9HPb5cQSKxQfBZV0WuqTvt6S-NtnrzKmtUVxpguelZNVclAoo2tmBzuXZM24cP7ywOas-bAmcdPO7zBxZLb2tFPau0__TxGPdfVTFSbif7OKx/w640-h64/Alternate%20Key.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3&gt;Get a Row by ID and PartitionId&lt;/h3&gt;&lt;div&gt;Similarly, you can get the data from the elastic table using &quot;Get a Row by ID&quot; action by populating the Partition Id parameter.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi87ddCwWlSgvXQujjbslDCOSbsjXmsijH_9JZLzZ2rXIrU2O3Ip8ZdVjNtzIPzVwX4_z-fMR22EERG3X3UvLe6G993bg_-UWBiCbX508f6TFImEt6wPil-iOwR8z5YpKXBS3B0hB4HV8ehbwnDwvnuadJKSr8af_7ujy0GlCnRH30hUOHZIT80kMIRv1U0/s667/Get%20Flow%20Run%20by%20ID.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;658&quot; data-original-width=&quot;667&quot; height=&quot;316&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi87ddCwWlSgvXQujjbslDCOSbsjXmsijH_9JZLzZ2rXIrU2O3Ip8ZdVjNtzIPzVwX4_z-fMR22EERG3X3UvLe6G993bg_-UWBiCbX508f6TFImEt6wPil-iOwR8z5YpKXBS3B0hB4HV8ehbwnDwvnuadJKSr8af_7ujy0GlCnRH30hUOHZIT80kMIRv1U0/s320/Get%20Flow%20Run%20by%20ID.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3&gt;Delete a Row by ID and PartitionId&lt;/h3&gt;&lt;div&gt;The same logic applies for the &quot;Delete a row&quot; action.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsEdER-9CqwKrgoYPWiFEgjbjinrX-n-L1YtnGW8WEvr1xW0IlWh5ASVP-Fxo_YLPol2V4Qz8XM3Hm4ETpvSqGnu1QvNvQExykTyrt67St3KiUEw8whDL_k9Qv0UTNF1HHXr4fKy85MA-iuFotKyE0AvWzkvOgnBIyVMjiXWUjXBR-ZqAuQJJNO4wlZ_9N/s886/Delete%20Flow%20Run.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;657&quot; data-original-width=&quot;886&quot; height=&quot;237&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsEdER-9CqwKrgoYPWiFEgjbjinrX-n-L1YtnGW8WEvr1xW0IlWh5ASVP-Fxo_YLPol2V4Qz8XM3Hm4ETpvSqGnu1QvNvQExykTyrt67St3KiUEw8whDL_k9Qv0UTNF1HHXr4fKy85MA-iuFotKyE0AvWzkvOgnBIyVMjiXWUjXBR-ZqAuQJJNO4wlZ_9N/s320/Delete%20Flow%20Run.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&quot;&lt;a href=&quot;https://learn.microsoft.com/en-us/connectors/commondataserviceforapps/#list-rows&quot; target=&quot;_blank&quot;&gt;List rows&lt;/a&gt;&quot; action also contains the&amp;nbsp;Partition Id parameter.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;b&gt;Retrieving both GUID and PartitionId of the Lookup&lt;/b&gt;&lt;/h3&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;When you retrieve the value of the lookup to the elastic table (e.g. flowrun), you need to retrieve both PartitionId (string column) and GUID (lookup column) on the referencing table because you will need both information in &quot;Get a Row by ID&quot; action (as mentioned above)&lt;/div&gt;&lt;div&gt;The column name of the&amp;nbsp;PartitionId (string column) will be&amp;nbsp;«LookupColumn» + &quot;pid&quot; (e.g. if the lookup column is &quot;lzw_flowrun&quot;, PartitionId column will be &quot;lzw_flowrunpid&quot;)&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjULa7vE_7ij4Y2m-8_x9f1wfdZJy_DDELV67V3U7RzTn6oq2fNFCBhINsNSbFkM03LjbREyFezHdjqIQpWa7k0aPKPfoAFxLHiRl7bXSkCJ8Ss-77a26svuAU1s8KvXBu74W9OF0m59v_jOMP5qDWJ-4-lmq-uFsr15NdqImKsyX4r9lo42g2MdPDm_LpT/s619/Select%20Columns%20with%20PartitionId.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;251&quot; data-original-width=&quot;619&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjULa7vE_7ij4Y2m-8_x9f1wfdZJy_DDELV67V3U7RzTn6oq2fNFCBhINsNSbFkM03LjbREyFezHdjqIQpWa7k0aPKPfoAFxLHiRl7bXSkCJ8Ss-77a26svuAU1s8KvXBu74W9OF0m59v_jOMP5qDWJ-4-lmq-uFsr15NdqImKsyX4r9lo42g2MdPDm_LpT/s16000/Select%20Columns%20with%20PartitionId.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;In this blog post, I address common challenges with CRUD operations on Dataverse&#39;s elastic tables using cloud flows, highlighting the importance of including the partitionid column value to ensure proper data linkage and avoid errors.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://linnzawwin.blogspot.com/feeds/32171996773904406/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://linnzawwin.blogspot.com/2024/05/use-dataverse-elastic-tables-in-power.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/32171996773904406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/32171996773904406'/><link rel='alternate' type='text/html' href='http://linnzawwin.blogspot.com/2024/05/use-dataverse-elastic-tables-in-power.html' title='Use Dataverse Elastic Tables in Power Automate Cloud Flows'/><author><name>Linn Zaw Win</name><uri>http://www.blogger.com/profile/16015532694415495453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaCUObunP3kiYNRu6pZ-J4ezoWDP-Jf1Cv010HLXr_bLFmB0bcZj8atUiBYmg37uDyBDzxPrHFX7EGESjgSMIOIBX7TR9VS9nZ179jpYpTkpsDtw09albFOTBEXTdw2OhtXLyZkfd4kBnOHYZmGSoge7m2XxXOVZvFJxuEiXnTmg7sRRc/s220/IMG_5259-Square%20-%20MVP.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifiTbESJQMTrRx1kJ4zoJLGlJrEZzKzZE49ywRu36YhSenjz0JlY4s-YJ-TNFlcPR53yY4atRDNzGDFPYLdm9T-lRpZoLQQulpkEpJaUEDj8ugCjOFWs4EdgvlxgSxKPMS3lereRcpzErAhdpbcjIN_Y0_vEcwwnoYuaGHhVUPz2fTFsI2D8ZVDe4djyA-/s72-w400-h114-c/Thumbnail-overlay.png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3970629459363259828.post-548160440452402604</id><published>2024-03-05T00:06:00.004+10:00</published><updated>2024-03-05T00:06:53.351+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="form parameter"/><category scheme="http://www.blogger.com/atom/ns#" term="javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="Xrm.Navigation.navigateTo"/><title type='text'>Open New Record Form with Pre-populated Fields Using Xrm.Navigation.navigateTo</title><content type='html'>&lt;meta content=&quot;summary_large_image&quot; name=&quot;twitter:card&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;This post will explain how you can pre-populate fields with various data types (lookup, partylist, etc.) when a new table form is opened using the Xrm.Navigation.navigateTo&quot; name=&quot;twitter:description&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkAyq-aOKADhI7QUQSiAV_smsBoSZtwz0E95eLjaBLLeB8Y6px_mKjz3JxvECA69XntnnTM2xrr6ukBIHLQhopek-Xk7Jr6c4Ug0jgkCW1ryDK-PexNJoGB2825ubtzxMxS9Iw-M2cKS21MQNL2ijjL7VWvc0RPXS55_hrMsz4AWR7XdDzYiu9QkTUJx_Q/s1736/Thumbnail.png&quot; name=&quot;twitter:image&quot;&gt;&lt;/meta&gt;
&lt;p&gt;
  This post will explain how you can pre-populate fields with various data types (lookup, partylist, etc.) when a new table form is opened using the&amp;nbsp;Xrm.Navigation.navigateTo
  method.&lt;br /&gt;
&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkAyq-aOKADhI7QUQSiAV_smsBoSZtwz0E95eLjaBLLeB8Y6px_mKjz3JxvECA69XntnnTM2xrr6ukBIHLQhopek-Xk7Jr6c4Ug0jgkCW1ryDK-PexNJoGB2825ubtzxMxS9Iw-M2cKS21MQNL2ijjL7VWvc0RPXS55_hrMsz4AWR7XdDzYiu9QkTUJx_Q/s1736/Thumbnail.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1197&quot; data-original-width=&quot;1736&quot; height=&quot;276&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkAyq-aOKADhI7QUQSiAV_smsBoSZtwz0E95eLjaBLLeB8Y6px_mKjz3JxvECA69XntnnTM2xrr6ukBIHLQhopek-Xk7Jr6c4Ug0jgkCW1ryDK-PexNJoGB2825ubtzxMxS9Iw-M2cKS21MQNL2ijjL7VWvc0RPXS55_hrMsz4AWR7XdDzYiu9QkTUJx_Q/w400-h276/Thumbnail.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;There is a&amp;nbsp;&lt;a href=&quot;https://learn.microsoft.com/en-us/power-apps/developer/model-driven-apps/clientapi/reference/xrm-navigation/navigateto#entity-record&quot; target=&quot;_blank&quot;&gt;navigateTo (Client API reference) in the Microsoft Learn&lt;/a&gt;
  but it lacks a
  &lt;a href=&quot;https://learn.microsoft.com/en-us/power-apps/developer/model-driven-apps/clientapi/reference/xrm-navigation/navigateto#example-3-open-an-account-form-in-the-create-mode-within-a-dialog&quot; target=&quot;_blank&quot;&gt;code example&lt;/a&gt;
  for the implementation of&amp;nbsp;&lt;b&gt;data&lt;/b&gt; object parameter to set the default
  values to the fields when a form is opened in the create mode. The
  documentation simply referred to see
  &lt;a href=&quot;https://learn.microsoft.com/en-us/powerapps/developer/model-driven-apps/set-field-values-using-parameters-passed-form&quot; target=&quot;_blank&quot;&gt;Set column values using parameters passed to a form&lt;/a&gt;&amp;nbsp;which only contains an
  &lt;a href=&quot;https://learn.microsoft.com/en-us/power-apps/developer/model-driven-apps/set-field-values-using-parameters-passed-form#example-use-xrmnavigationopenform-to-open-a-new-window&quot; target=&quot;_blank&quot;&gt;example to set column values using parameters passed to a form with
    Xrm.Navigation.openForm&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;
  Setting column values using parameters with&amp;nbsp;Xrm.Navigation.navigateTo is
  different from&amp;nbsp;Xrm.Navigation.openForm and it could take some trial and
  error to get it right without the&amp;nbsp;code example or the documentation of
  expected parameters. With the code example below, I hope you can easily pre-populated any field using Xrm.Navigation.navigateTo method.&lt;/p&gt;
&lt;pre style=&quot;background-attachment: initial; background-clip: initial; background-color: #f0f0f0; background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLuc5FdGlqmwZfKBeeLnE2H6oI7dyvDGy9T_NLEqiWHIZ5eIOlfOLjtniwVervfAcL6dJ854wOONXUt4B7yJUwcKBlO13EDkqWN6fzq1s8sAIIop_JukgkESKsMBvW8Ej2b8WqRGxU8tH6/s320/codebg.gif); background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; background: #f0f0f0; border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;&quot;&gt;&lt;code style=&quot;color: black; overflow-wrap: normal; word-wrap: normal;&quot;&gt; function OpenNewContact(primaryControl)  
 {  
     let formContext = primaryControl; // primaryControl parameter of the command button is same as formContext and NOT executionContext  
   
     // Define the data object with key-value pairs  
     var data = {  
       
         // Text column  
         &quot;subject&quot;: &quot;Do people still use fax anymore?&quot;,  
   
         // Number column  
         &quot;numberofpages&quot;: 3,  
   
         // Yes/No column  
         &quot;directioncode&quot;: true,  
   
         // Date column  
         &quot;scheduledend&quot;: new Date(&quot;2024-03-02 10:54&quot;), // Replace with your desired date  
   
         // Choice column  
         &quot;prioritycode&quot;: 2, // Replace with the option value from your Choice options  
   
         // Lookup column (single)  
         &quot;ownerid&quot;: {  
             &quot;entityType&quot;: &quot;team&quot;,  
             &quot;id&quot;: &quot;91a4e4ab-8c67-eb11-a812-000d3a6a350f&quot;,  
             &quot;name&quot;: &quot;Test Owner Team&quot;  
         },  
   
         // Lookup column (multiple)  
         &quot;to&quot;: [  
         {  
             &quot;entityType&quot;: &quot;account&quot;,  
             &quot;id&quot;: &quot;6e060750-ab16-eb11-a812-000d3a6aa8dc&quot;,  
             &quot;name&quot;: &quot;A. Datum Corporation (sample)&quot;},  
         {  
             &quot;entityType&quot;: &quot;contact&quot;,  
             &quot;id&quot;: &quot;cc139876-a2f3-4308-829e-e5599a566142&quot;,  
             &quot;name&quot;: &quot;Jim Glynn (sample)&quot;}]  
     };  
   
     // Define the parameters for the form  
     var pageInput = {  
         pageType: &quot;entityrecord&quot;,  
         entityName: &quot;fax&quot;, // Replace &quot;fax&quot; with your target entity logical name  
         data: data,  
         formId: &quot;fa741227-f468-4864-b2a1-e0379d387e71&quot;, // Replace with your desired form ID or remove the parameter if there is only one form  
         createFromEntity: { // This will populate the lookup to the current record e.g. regardingobjectid and other mapping fields  
             &quot;entityType&quot;: formContext.data.entity.getEntityName(),  
             &quot;id&quot;: formContext.data.entity.getId(),  
             &quot;name&quot;: formContext.data.entity.getPrimaryAttributeValue()  
         }  
     };  
   
     // Define the navigation options  
     var navOptions = {  
         target: 2,  
         height: {value: 80, unit:&quot;%&quot;},  
         width: {value: 70, unit:&quot;%&quot;},  
         position: 1  
     };  
   
     // Perform the navigation  
     Xrm.Navigation.navigateTo(pageInput, navOptions).then(  
         function success(result) {  
             Xrm.Navigation.openAlertDialog(  
             {  
                 text: &quot;Record created with ID: &quot; + result.savedEntityReference[0].id + &quot; Name: &quot; + result.savedEntityReference[0].name  
             });  
             // Handle dialog closed  
         },  
         function (error) {  
             Xrm.Navigation.openAlertDialog(  
             {  
                 text: error.message  
             });  
         }  
     );  
 }  
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;
  Thanks&amp;nbsp;&lt;a href=&quot;https://www.linkedin.com/in/arjun-musuvathy-b567982b/&quot; target=&quot;_blank&quot;&gt;Arjun Musuvathy&lt;/a&gt;
  for the suggestion and motivation to come up with this post.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://linnzawwin.blogspot.com/feeds/548160440452402604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://linnzawwin.blogspot.com/2024/03/open-new-record-form-with-pre-populated.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/548160440452402604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/548160440452402604'/><link rel='alternate' type='text/html' href='http://linnzawwin.blogspot.com/2024/03/open-new-record-form-with-pre-populated.html' title='Open New Record Form with Pre-populated Fields Using Xrm.Navigation.navigateTo'/><author><name>Linn Zaw Win</name><uri>http://www.blogger.com/profile/16015532694415495453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaCUObunP3kiYNRu6pZ-J4ezoWDP-Jf1Cv010HLXr_bLFmB0bcZj8atUiBYmg37uDyBDzxPrHFX7EGESjgSMIOIBX7TR9VS9nZ179jpYpTkpsDtw09albFOTBEXTdw2OhtXLyZkfd4kBnOHYZmGSoge7m2XxXOVZvFJxuEiXnTmg7sRRc/s220/IMG_5259-Square%20-%20MVP.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkAyq-aOKADhI7QUQSiAV_smsBoSZtwz0E95eLjaBLLeB8Y6px_mKjz3JxvECA69XntnnTM2xrr6ukBIHLQhopek-Xk7Jr6c4Ug0jgkCW1ryDK-PexNJoGB2825ubtzxMxS9Iw-M2cKS21MQNL2ijjL7VWvc0RPXS55_hrMsz4AWR7XdDzYiu9QkTUJx_Q/s72-w400-h276-c/Thumbnail.png" height="72" width="72"/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3970629459363259828.post-7737840469835401758</id><published>2024-02-24T03:48:00.002+10:00</published><updated>2024-02-24T03:48:25.197+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Button"/><category scheme="http://www.blogger.com/atom/ns#" term="Command Bar"/><title type='text'>How to Fix Button in Modern Command Bar Disappearing After Grid Item Selection</title><content type='html'>&lt;meta content=&quot;summary_large_image&quot; name=&quot;twitter:card&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;The buttons added to the grid views with Visibility property = Show are treated as non-item specific command and the Visiblility property needs to be changed as &quot;Show on condition from formula&quot; to make it available when one or more grid items are selected.&quot; name=&quot;twitter:description&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil0m9Ud9NLDcmQcbCDFX1mDvBG_9MIIrCZ-6Z1W4ZI2ESEvQx3wP-F_iA6tkN39uvCE_34GAd7bGjNEEOBBrP5dVsRiX5tv8dklDXJ-Jl5mqf_309ksX3cvajX_ui_-xMgqv1bMR-QdsGUVrNI1E0N47WvwJcAJ59cqh30BPbMNYmtaXc7U3oOixfB1BWx/s1182/Button%20Disappear%20Thumbnail.png&quot; name=&quot;twitter:image&quot;&gt;&lt;/meta&gt;
&lt;div&gt;
  This post provides a resolution for the issue that the
  &lt;a
    href=&quot;https://learn.microsoft.com/en-us/power-apps/maker/model-driven-apps/manage-commands-in-solutions&quot;
    target=&quot;_blank&quot;
    &gt;modern command button&lt;/a
  &gt;
  added to the Main Grid, Subgrid View or Associated View doesn&#39;t appear as
  expected after one or more grid items are selected.
&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;a
    href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil0m9Ud9NLDcmQcbCDFX1mDvBG_9MIIrCZ-6Z1W4ZI2ESEvQx3wP-F_iA6tkN39uvCE_34GAd7bGjNEEOBBrP5dVsRiX5tv8dklDXJ-Jl5mqf_309ksX3cvajX_ui_-xMgqv1bMR-QdsGUVrNI1E0N47WvwJcAJ59cqh30BPbMNYmtaXc7U3oOixfB1BWx/s1182/Button%20Disappear%20Thumbnail.png&quot;
    imageanchor=&quot;1&quot;
    style=&quot;margin-left: 1em; margin-right: 1em;&quot;
    &gt;&lt;img
      border=&quot;0&quot;
      data-original-height=&quot;864&quot;
      data-original-width=&quot;1182&quot;
      height=&quot;293&quot;
      src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil0m9Ud9NLDcmQcbCDFX1mDvBG_9MIIrCZ-6Z1W4ZI2ESEvQx3wP-F_iA6tkN39uvCE_34GAd7bGjNEEOBBrP5dVsRiX5tv8dklDXJ-Jl5mqf_309ksX3cvajX_ui_-xMgqv1bMR-QdsGUVrNI1E0N47WvwJcAJ59cqh30BPbMNYmtaXc7U3oOixfB1BWx/w400-h293/Button%20Disappear%20Thumbnail.png&quot;
      width=&quot;400&quot;
  /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
  In the following scenario, a &lt;b&gt;Clone&lt;/b&gt; button is added to the Main Grid of
  the table before the Delete button&amp;nbsp;&lt;a
    href=&quot;https://learn.microsoft.com/en-us/power-apps/maker/model-driven-apps/command-designer-overview&quot;
    target=&quot;_blank&quot;
    &gt;using the&amp;nbsp;modern commanding&lt;/a
  &gt;&amp;nbsp;with the &lt;b&gt;Visibility &lt;/b&gt;property to &lt;b&gt;Show &lt;/b&gt;all the time.
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;a
    href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjb6z5SEwJ3kObGW5emldFdGuRTmyxKPqWukLBx2bsX_sJdFgGIBhzpJkjJT73T9B8TshuR0z7cPRtLBeRJ0_ZVNo2GUQPy3KT9ZwdqoaC5V8agObOxfbRdR804IPBJvKZjQtAYcCzS77SzJeQ0WhV5Xi_z9R7Mel_jz19pkSEzE1ouEb_WB8f96I3AkPDF/s1746/Modern%20Command%20Visibility%20Show.png&quot;
    style=&quot;margin-left: 1em; margin-right: 1em;&quot;
    &gt;&lt;img
      border=&quot;0&quot;
      data-original-height=&quot;485&quot;
      data-original-width=&quot;1746&quot;
      height=&quot;178&quot;
      src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjb6z5SEwJ3kObGW5emldFdGuRTmyxKPqWukLBx2bsX_sJdFgGIBhzpJkjJT73T9B8TshuR0z7cPRtLBeRJ0_ZVNo2GUQPy3KT9ZwdqoaC5V8agObOxfbRdR804IPBJvKZjQtAYcCzS77SzJeQ0WhV5Xi_z9R7Mel_jz19pkSEzE1ouEb_WB8f96I3AkPDF/w640-h178/Modern%20Command%20Visibility%20Show.png&quot;
      width=&quot;640&quot;
  /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
  But when one or more row is selected in the grid, the button disappears.
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;a
    href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIX0RTJ5zXxMbvEWiaO7g95B_S7kGRsGwe4_uEq2eMrmG8uCoZWyFAJdMWCRueDAWDaayw93Mxz69c7noedYmB-vooC2wsZSj2ZmKrHuSvIohBsyQlGMlwl_nOB8r9n1fWmT4p0Z9VQaj5zm4T9jINgvURTTM3dxccOw5TrgNlgRjFY4he0tZkgB9UFNBA/s1182/Button%20Disappear%20on%20Selection.png&quot;
    style=&quot;margin-left: 1em; margin-right: 1em;&quot;
    &gt;&lt;img
      border=&quot;0&quot;
      data-original-height=&quot;864&quot;
      data-original-width=&quot;1182&quot;
      height=&quot;468&quot;
      src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIX0RTJ5zXxMbvEWiaO7g95B_S7kGRsGwe4_uEq2eMrmG8uCoZWyFAJdMWCRueDAWDaayw93Mxz69c7noedYmB-vooC2wsZSj2ZmKrHuSvIohBsyQlGMlwl_nOB8r9n1fWmT4p0Z9VQaj5zm4T9jINgvURTTM3dxccOw5TrgNlgRjFY4he0tZkgB9UFNBA/w640-h468/Button%20Disappear%20on%20Selection.png&quot;
      width=&quot;640&quot;
  /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
  Upon troubleshooting the behaviour with&amp;nbsp;&lt;a
    href=&quot;https://powerapps.microsoft.com/en-au/blog/introducing-command-checker-for-model-app-ribbons/&quot;
    target=&quot;_blank&quot;
    &gt;Command Checker Tool&lt;/a
  &gt;, the button is not mark as &lt;i&gt;(hidden)&lt;/i&gt;&amp;nbsp;and there is no Enable Rule
  or Display Rule which evaluates to false.&amp;nbsp;Then, what is causing the
  button to disappear?
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;a
    href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh00tUDDB6MLy1dBs2K2bidzQxSuQk7oZAsST1ABqijj9GIJ17UREX6kAk3ED7Eb1QBDTjD8g44bVpOxiO_As9u5VkmROlNP2DDFRlOyab_n8vvBSryaruPp7Cdn1Rh_6_hRNMwljAmsEk4O1gR2jC__s1BgHWdInLNq6tuiB8hLKRvnwzgHJgqoaNIm4KE/s1425/Command%20Checker%20Tool.png&quot;
    style=&quot;margin-left: 1em; margin-right: 1em;&quot;
    &gt;&lt;img
      border=&quot;0&quot;
      data-original-height=&quot;1106&quot;
      data-original-width=&quot;1425&quot;
      height=&quot;496&quot;
      src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh00tUDDB6MLy1dBs2K2bidzQxSuQk7oZAsST1ABqijj9GIJ17UREX6kAk3ED7Eb1QBDTjD8g44bVpOxiO_As9u5VkmROlNP2DDFRlOyab_n8vvBSryaruPp7Cdn1Rh_6_hRNMwljAmsEk4O1gR2jC__s1BgHWdInLNq6tuiB8hLKRvnwzgHJgqoaNIm4KE/w640-h496/Command%20Checker%20Tool.png&quot;
      width=&quot;640&quot;
  /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
Upon further research, we found that the issue is similar to this&amp;nbsp;&lt;a
  href=&quot;https://learn.microsoft.com/en-us/troubleshoot/dynamics-365/sales/button-in-command-bar-not-appear-after-grid-item-selection&quot;
  target=&quot;_blank&quot;
  &gt;KB article in Dynamics 365 Sales&lt;/a
&gt;. Even though the article is referring to the&amp;nbsp;classic commanding, I
believe the issue applies the same to the&amp;nbsp;modern commanding and only
item-specific buttons are shown when one or more items are selected by design.
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
  So, how do we make our button&amp;nbsp;an item-specific command in Modern Command
  Bar? What are the options in the modern commanding which are equivalent to the
  &lt;b&gt;&lt;i&gt;&amp;lt;SelectionCountRule&amp;gt;&lt;/i&gt;&lt;/b&gt; or&amp;nbsp;&quot;Mscrm.AnySelection&quot; Enable
  Rule as mentioned in
  &lt;a
    href=&quot;https://learn.microsoft.com/en-us/troubleshoot/dynamics-365/sales/button-in-command-bar-not-appear-after-grid-item-selection&quot;
    target=&quot;_blank&quot;
    &gt;the KB article&lt;/a
  &gt;?&lt;br /&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
  The option equivalent to
  &lt;b&gt;&lt;i&gt;&amp;lt;EnableRule Id=&quot;Mscrm.AnySelection&quot; /&amp;gt;&lt;/i&gt;&lt;/b&gt; to make&amp;nbsp;the
  modern command button as both an item-specific command and a non-item specific
  command&amp;nbsp;(and display in both cases) is by switching the&amp;nbsp;&lt;b
    &gt;Visiblility&lt;/b
  &gt;
  property as &quot;&lt;b&gt;&lt;i&gt;Show on condition from formula&lt;/i&gt;&lt;/b
  &gt;&quot; and set the Power Fx visible property as just &lt;b&gt;&lt;i&gt;true&lt;/i&gt;&lt;/b
  &gt;. (as mentioned in the forum threads like
  &lt;a
    href=&quot;https://powerusers.microsoft.com/t5/Building-Power-Apps/Command-bar-button-not-shown-when-select-a-record/td-p/1752030&quot;
    target=&quot;_blank&quot;
    &gt;this&lt;/a
  &gt;
  and
  &lt;a
    href=&quot;https://powerusers.microsoft.com/t5/Microsoft-Dataverse/New-Command-Button-is-hidden-if-row-selected/td-p/1573603&quot;
    target=&quot;_blank&quot;
    &gt;this&lt;/a
  &gt;)
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;a
    href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5dS3UDLsUd07iqWJE9Qb3zQGUBXNL4axfZfMIJtawZz53SYr1aJ9l3iTYvzvSKqHimV79tkWORov9yBtuGLUU7vu69dpjlFUS1vJXqI-bSBPmdA0D9PuCCQLiF0X3npRsj5rSynEuRL9K_dlNt9gYjid7gTFhbyZdHpRShvDcrmQAXjBbyQ-Wc3MXx07J/s1728/Formula%20True.png&quot;
    style=&quot;margin-left: 1em; margin-right: 1em;&quot;
    &gt;&lt;img
      border=&quot;0&quot;
      data-original-height=&quot;476&quot;
      data-original-width=&quot;1728&quot;
      height=&quot;176&quot;
      src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5dS3UDLsUd07iqWJE9Qb3zQGUBXNL4axfZfMIJtawZz53SYr1aJ9l3iTYvzvSKqHimV79tkWORov9yBtuGLUU7vu69dpjlFUS1vJXqI-bSBPmdA0D9PuCCQLiF0X3npRsj5rSynEuRL9K_dlNt9gYjid7gTFhbyZdHpRShvDcrmQAXjBbyQ-Wc3MXx07J/w640-h176/Formula%20True.png&quot;
      width=&quot;640&quot;
  /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
  But in my case, the Clone button needs to be visible when one and
  only&amp;nbsp;grid item is selected. In that case, the&amp;nbsp;Power Fx visible
  property equivalent to the SelectionCountRule as mentioned in this&amp;nbsp;&lt;a
    href=&quot;https://learn.microsoft.com/en-us/power-apps/maker/model-driven-apps/command-designer-overview#classic-versus-modern-visibility-rule-comparison&quot;
    target=&quot;_blank&quot;
    &gt;Classic versus modern visibility rule comparison&lt;/a
  &gt;
  is as below.
&lt;/div&gt;
&lt;pre
  style=&quot;background-attachment: initial; background-clip: initial; background-color: #f0f0f0; background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLuc5FdGlqmwZfKBeeLnE2H6oI7dyvDGy9T_NLEqiWHIZ5eIOlfOLjtniwVervfAcL6dJ854wOONXUt4B7yJUwcKBlO13EDkqWN6fzq1s8sAIIop_JukgkESKsMBvW8Ej2b8WqRGxU8tH6/s320/codebg.gif); background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; background: #f0f0f0; border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;&quot;
&gt;&lt;code style=&quot;color: black; overflow-wrap: normal; word-wrap: normal;&quot;&gt; If(CountRows(Self.Selected.AllItems) = 1,true , false)  
&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;a
    href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglcyjPv0R7fHyxhALcDMtlcZ5s-S8HiOgIlkaL1LdXnlzADV2uUqgPYeLYuy_5tE8_JEj5tDGf2_hJNxQATUCFDnJsa9f5L1T2RVnhPDxdisTrZixFignILJcodlbLl-qMNwU8RIelis0tdRY_nHvNq-Yy2e1uC9Dkh8AycEHMKXOquo04j5dmKejWUPLG/s2012/Formula%20Record%20Selection.png&quot;
    style=&quot;margin-left: 1em; margin-right: 1em;&quot;
    &gt;&lt;img
      border=&quot;0&quot;
      data-original-height=&quot;439&quot;
      data-original-width=&quot;2012&quot;
      height=&quot;140&quot;
      src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglcyjPv0R7fHyxhALcDMtlcZ5s-S8HiOgIlkaL1LdXnlzADV2uUqgPYeLYuy_5tE8_JEj5tDGf2_hJNxQATUCFDnJsa9f5L1T2RVnhPDxdisTrZixFignILJcodlbLl-qMNwU8RIelis0tdRY_nHvNq-Yy2e1uC9Dkh8AycEHMKXOquo04j5dmKejWUPLG/w640-h140/Formula%20Record%20Selection.png&quot;
      width=&quot;640&quot;
  /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
  In summary, the buttons added to the grid views
  with&amp;nbsp;&lt;b&gt;Visibility&amp;nbsp;&lt;/b&gt;property =&amp;nbsp;&lt;b&gt;Show&lt;/b&gt; are treated as
  non-item specific command and the&amp;nbsp;&lt;b&gt;Visiblility&lt;/b&gt;&amp;nbsp;property needs
  to be changed as &quot;&lt;b&gt;&lt;i&gt;Show on condition from formula&lt;/i&gt;&lt;/b
  &gt;&quot; to make it available when one or more grid items are selected.
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://linnzawwin.blogspot.com/feeds/7737840469835401758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://linnzawwin.blogspot.com/2024/02/how-to-fix-button-in-modern-command-bar.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/7737840469835401758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/7737840469835401758'/><link rel='alternate' type='text/html' href='http://linnzawwin.blogspot.com/2024/02/how-to-fix-button-in-modern-command-bar.html' title='How to Fix Button in Modern Command Bar Disappearing After Grid Item Selection'/><author><name>Linn Zaw Win</name><uri>http://www.blogger.com/profile/16015532694415495453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaCUObunP3kiYNRu6pZ-J4ezoWDP-Jf1Cv010HLXr_bLFmB0bcZj8atUiBYmg37uDyBDzxPrHFX7EGESjgSMIOIBX7TR9VS9nZ179jpYpTkpsDtw09albFOTBEXTdw2OhtXLyZkfd4kBnOHYZmGSoge7m2XxXOVZvFJxuEiXnTmg7sRRc/s220/IMG_5259-Square%20-%20MVP.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil0m9Ud9NLDcmQcbCDFX1mDvBG_9MIIrCZ-6Z1W4ZI2ESEvQx3wP-F_iA6tkN39uvCE_34GAd7bGjNEEOBBrP5dVsRiX5tv8dklDXJ-Jl5mqf_309ksX3cvajX_ui_-xMgqv1bMR-QdsGUVrNI1E0N47WvwJcAJ59cqh30BPbMNYmtaXc7U3oOixfB1BWx/s72-w400-h293-c/Button%20Disappear%20Thumbnail.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3970629459363259828.post-6346410892400949783</id><published>2024-02-17T07:13:00.003+10:00</published><updated>2024-02-20T02:58:25.024+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft Dataverse"/><category scheme="http://www.blogger.com/atom/ns#" term="Solution"/><title type='text'>Keep Your Dataverse Solution Clean and Simple</title><content type='html'>&lt;meta content=&quot;summary_large_image&quot; name=&quot;twitter:card&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;It is important to keep the solutions as simple as possible to improve the solution import time and to avoid unexpected behaviour in the target environment.&quot; name=&quot;twitter:description&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBIFAdOhHZieCAEnUiTnIkuJ71HwPBzGv9gbrEFHvXJXbUiBi9KBAjNzS214qsK-5yNRoyDPPaGHLvri8zpfLWlV04f2nkJsrsFyojkwrbSzm3WI3GxrUe7mXhtYASOa9gGYIroQ0qN22nKmVHmHxU5EYtEhG-whVbZCO0hSUYbobsRO91c8Wveq5wfTLW/s2244/Solution%20Thumbnail.png&quot; name=&quot;twitter:image&quot;&gt;&lt;/meta&gt;

&lt;dir&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/power-apps/maker/data-platform/solutions-overview&quot; target=&quot;_blank&quot;&gt;Solutions&lt;/a&gt; are used to transport table metadata, apps, automations and other components from one environment to another in Dataverse or Power Platform projects. It is important to keep the solutions as simple as possible to improve the solution import time and to avoid unexpected behaviour in the target environment. The rule of thumb is to include only the components that are created/updated in that environment which are unmanaged components or managed components with unmanaged layer (due to being updated in that environment).&lt;/dir&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBIFAdOhHZieCAEnUiTnIkuJ71HwPBzGv9gbrEFHvXJXbUiBi9KBAjNzS214qsK-5yNRoyDPPaGHLvri8zpfLWlV04f2nkJsrsFyojkwrbSzm3WI3GxrUe7mXhtYASOa9gGYIroQ0qN22nKmVHmHxU5EYtEhG-whVbZCO0hSUYbobsRO91c8Wveq5wfTLW/s2244/Solution%20Thumbnail.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1283&quot; data-original-width=&quot;2244&quot; height=&quot;229&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBIFAdOhHZieCAEnUiTnIkuJ71HwPBzGv9gbrEFHvXJXbUiBi9KBAjNzS214qsK-5yNRoyDPPaGHLvri8zpfLWlV04f2nkJsrsFyojkwrbSzm3WI3GxrUe7mXhtYASOa9gGYIroQ0qN22nKmVHmHxU5EYtEhG-whVbZCO0hSUYbobsRO91c8Wveq5wfTLW/w400-h229/Solution%20Thumbnail.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;dir&gt;&lt;br /&gt;&lt;/dir&gt;&lt;dir&gt;&lt;b&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Do not Include All Objects&lt;/span&gt;&lt;/b&gt;&lt;/dir&gt;&lt;dir&gt;The first point is simple. When you add an existing table to the solution, do not check &quot;Include all objects&quot; (unless there is a specific reason or you created that table in another solution and intend to add the whole table in this solution as well).&amp;nbsp;&quot;Include table metadata&quot; can also be left unchecked unless the table metadata (Enable Audit, Duplicate Detection, Quick Create, etc.) is being updated. By clicking the &quot;Select objects&quot;, you can add the sub-components that are created/updated.&lt;/dir&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZy-2t0FdlvGy9M9fChcy2Rhy-Aphj_48BbN8KpN5R_C76y1YfslMpuHjud7iLicwUZxsLqnjawBYCGOy0qvmS6jZsYiueNSKUOZ34sCehia3J3DNqYYuXkdzPSZtaYVHIf368qRQmVNMRIbcHlN4JlxDu1R9xpQkQCcjYx12eNt1JKzJSqy_uVYZpy1Ql/s1372/Select%20Tables.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;424&quot; data-original-width=&quot;1372&quot; height=&quot;198&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZy-2t0FdlvGy9M9fChcy2Rhy-Aphj_48BbN8KpN5R_C76y1YfslMpuHjud7iLicwUZxsLqnjawBYCGOy0qvmS6jZsYiueNSKUOZ34sCehia3J3DNqYYuXkdzPSZtaYVHIf368qRQmVNMRIbcHlN4JlxDu1R9xpQkQCcjYx12eNt1JKzJSqy_uVYZpy1Ql/w640-h198/Select%20Tables.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;dir&gt;&lt;b&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/dir&gt;&lt;dir&gt;&lt;b&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Do not Add Required Objects&lt;/span&gt;&lt;/b&gt;&lt;/dir&gt;&lt;dir&gt;Do not use &quot;Add required components&quot; to avoid unexpected consequences since it could&amp;nbsp;add a lot more unrelated components to the solution unnecessarily. You can read more details at&amp;nbsp;&lt;a href=&quot;https://www.linkedin.com/in/alexandershlega&quot; target=&quot;_blank&quot;&gt;Alex Shlega&lt;/a&gt;&#39;s &lt;a href=&quot;https://www.itaintboring.com/dynamics/when-adding-required-components-be-cautious-of-the-solution-layers/&quot; target=&quot;_blank&quot;&gt;blog post here&lt;/a&gt;.&lt;/dir&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKThaZN1u-npOKuwtaIvHUfE6iMwROQeLyoxy2gM2XBmf5vsPti492kpfLBGQhKSWKse1NKpaRDKwOhya9HmY9toLw5vaDBx_W_1trrkoYJAqLgglmZW4zmkJ8M9dCgwrW5I53hDk3BLTe7hhZVNWq3Qd9SR4EJP8b_nSUEezmBTLZ0GHc6AVK7hky-hEP/s1164/Add%20required%20objects.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;510&quot; data-original-width=&quot;1164&quot; height=&quot;280&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKThaZN1u-npOKuwtaIvHUfE6iMwROQeLyoxy2gM2XBmf5vsPti492kpfLBGQhKSWKse1NKpaRDKwOhya9HmY9toLw5vaDBx_W_1trrkoYJAqLgglmZW4zmkJ8M9dCgwrW5I53hDk3BLTe7hhZVNWq3Qd9SR4EJP8b_nSUEezmBTLZ0GHc6AVK7hky-hEP/w640-h280/Add%20required%20objects.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;dir&gt;&lt;br /&gt;&lt;/dir&gt;&lt;dir&gt;Even if you avoid the actions above, there are some&amp;nbsp;scenarios that the system may&amp;nbsp;add related components to the solution, so be cautious not to let the system automatically add unnecessary components.&lt;/dir&gt;&lt;dir&gt;&lt;br /&gt;&lt;/dir&gt;&lt;dir&gt;&lt;b&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Do not Include Missing Required Components&lt;/span&gt;&lt;/b&gt;&lt;/dir&gt;&lt;dir&gt;For those who are still using the classic solution explorer for any reason, always choose the &quot;&lt;b&gt;&lt;i&gt;No, do not include required components.&lt;/i&gt;&lt;/b&gt;&quot; option in the &quot;&lt;b&gt;Missing Required Components&lt;/b&gt;&quot; dialog. Choosing &quot;&lt;span style=&quot;white-space: normal;&quot;&gt;&lt;b&gt;&lt;i&gt;Yes, include required components.&lt;/i&gt;&lt;/b&gt;&quot; may cause&amp;nbsp;&lt;/span&gt;unexpected consequences as point above.&amp;nbsp;You don&#39;t have to worry about that if you only use to modern solution explorer to add the components to the solution.&lt;/dir&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjL_wrdHv0zbWeaNujdYUk7ttquto_pDc0xMxbkTD6-AO9RspPUL9kvuVSnUi98MYZP8x-Doeg0n9odFtF1w9cC28dbobMwCUJNdge9O8ZMJawUsrF436CqG0eG4RADY-kzVacUqwUqGekluC14sApEyY-fk4X9nBAjPvIO_3LvrnVoBFgcex28DWXAVvXK/s1136/Missing%20Required%20Components.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;737&quot; data-original-width=&quot;1136&quot; height=&quot;416&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjL_wrdHv0zbWeaNujdYUk7ttquto_pDc0xMxbkTD6-AO9RspPUL9kvuVSnUi98MYZP8x-Doeg0n9odFtF1w9cC28dbobMwCUJNdge9O8ZMJawUsrF436CqG0eG4RADY-kzVacUqwUqGekluC14sApEyY-fk4X9nBAjPvIO_3LvrnVoBFgcex28DWXAVvXK/w640-h416/Missing%20Required%20Components.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;dir&gt;&lt;br /&gt;&lt;/dir&gt;&lt;dir&gt;&lt;b&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Adding Relationship and Related Table&lt;/span&gt;&lt;/b&gt;&lt;/dir&gt;&lt;dir&gt;When you create/update a relationship between tables OR create a lookup column (which creates a relationship as a result) in the solution, make sure that the other table of the relationship is in the solution too. If the other table is not in the solution, you can add just the table without any component (as mentioned in the first point of this post).&lt;br /&gt;e.g. if you have a &lt;b&gt;Table A&lt;/b&gt; in the solution and you need to&lt;br /&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;create a lookup column to &lt;b&gt;Table B&lt;/b&gt; OR&lt;/li&gt;&lt;li&gt;update a many-to-many relationship to &lt;b&gt;Table B&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/dir&gt;&lt;dir&gt;&lt;div&gt;but the&amp;nbsp;&lt;b&gt;Table B&lt;/b&gt;&amp;nbsp;is not part of the solution yet. In that case, before creating/updating those lookup/relationship, it is better to add the&amp;nbsp;&lt;b&gt;Table B&lt;/b&gt;&amp;nbsp;to the solution manually with &quot;Include all objects&quot; unchecked.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Otherwise, the system will automatically add that missing table (&lt;b&gt;Table B&lt;/b&gt;&amp;nbsp;in the above example) to the solution upon the creation/update of the relationships. When the system&amp;nbsp;automatically add the table to the solution, only a table without any sub-component is added sometimes (which is fine). But sometimes, a table is automatically added with all objects and that is the situation that we want to avoid by adding the table to the solution manually beforehand.&amp;nbsp;You can read more details at&amp;nbsp;&lt;a href=&quot;https://crmtipoftheday.com/714/avoid-solution-bloat-with-the-new-solution-component-framework/&quot; target=&quot;_blank&quot;&gt;Power Platform &amp;amp; Dynamics CRM Tip Of The Day Tip #714&lt;/a&gt;.&lt;/div&gt;&lt;/dir&gt;
&lt;dir&gt;&lt;br /&gt;&lt;/dir&gt;&lt;dir&gt;&lt;b&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Adding Form and Related Business Rules&lt;/span&gt;&lt;/b&gt;&lt;/dir&gt;&lt;dir&gt;When the existing form of the table is added, the &lt;b&gt;Business Rules&lt;/b&gt; related to that form are automatically added. If those &lt;b&gt;Business Rules&lt;/b&gt;&amp;nbsp;are not modified and not required to be in that solution, those should be reviewed and removed after adding the form.&lt;/dir&gt;&lt;dir&gt;&lt;br /&gt;&lt;/dir&gt;&lt;dir&gt;&lt;b&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Mobile Offline Profile and D&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;b&gt;ependent Components&lt;/b&gt;&lt;/span&gt;&lt;/dir&gt;&lt;dir&gt;This one is a bit tricky and it needs to be handled depending on the solution management strategy. In short,&amp;nbsp;When a solution containing a Mobile Offline Profile is exported, the system automatically adds the dependent components of the tables (from the Mobile Offline Profile) into the solution without any confirmation. (you can read more details in &lt;a href=&quot;https://linnzawwin.blogspot.com/2019/08/exporting-mobile-offline-profile-as.html&quot; target=&quot;_blank&quot;&gt;my blog post&lt;/a&gt;). As I mentioned in the blog post, one of the workaround solution is to use a &lt;a href=&quot;https://www.xrmtoolbox.com/plugins/Colso.Xrm.DataTransporter/&quot; target=&quot;_blank&quot;&gt;Data Transporter tool&lt;/a&gt;&amp;nbsp;or a PowerShell script in the pipeline to deploy the mobile offline profile data.&lt;/dir&gt;&lt;dir&gt;But if the team&#39;s policy is to deploy the mobile offline profile as a solution component, the team needs to review the&amp;nbsp;solution segmentation approach. The&amp;nbsp;Mobile Offline Profile needs to be in the same solution as the other components that the offline profile is automatically adding to the solution.&lt;/dir&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih0mJfomxqOxD2nJI1mEj1gkKx1PKB7BisGCu3_rM9LgwPY26zXZfPLuQ7Xpqgs1QzYAVeRdQGbF_R8cR1YVcLjPSkluMPcERCCOtS4xzzE-AiTbUwvCCEQpf0xtAbRIIzLrkIOu32b4jcY1ETJNrNDb8kMATkptHNtFlVbIL8_AdVWzNOrWBVBd3YarTt/s670/Solution%20Layer.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;670&quot; data-original-width=&quot;593&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih0mJfomxqOxD2nJI1mEj1gkKx1PKB7BisGCu3_rM9LgwPY26zXZfPLuQ7Xpqgs1QzYAVeRdQGbF_R8cR1YVcLjPSkluMPcERCCOtS4xzzE-AiTbUwvCCEQpf0xtAbRIIzLrkIOu32b4jcY1ETJNrNDb8kMATkptHNtFlVbIL8_AdVWzNOrWBVBd3YarTt/s16000/Solution%20Layer.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;dir&gt;In the scenario above, the Mobile Offline Profile is deployed as a separate managed solution from the managed solution which contains the table metadata (and forms, views, etc.).&amp;nbsp;Due to the system automatically adding the dependent components upon exporting of Mobile Offline Profile solution, there are some table components in the&amp;nbsp;Mobile Offline Profile solution and there is a multiple solution layers for some of those tables. When the new version of Table Solution 1.1 is imported, the changes are not reflected for those overlapped components because the updates are only installed to the Table Solution layer below.&lt;/dir&gt;&lt;dir&gt;&lt;br /&gt;&lt;/dir&gt;&lt;dir&gt;If the table with all assets are added to the solution unnecessarily by the system by any chance, you can fix it by using&amp;nbsp;&lt;a href=&quot;https://www.linkedin.com/pulse/new-xrmtoolbox-tool-solution-table-integrity-manager-tanguy-touzard-mcpae/&quot; target=&quot;_blank&quot;&gt;Solution Table Integrity Manager&lt;/a&gt; tool by &lt;a href=&quot;https://www.linkedin.com/in/tanguytouzard/&quot; target=&quot;_blank&quot;&gt;Tanguy&lt;/a&gt;. (as commented by one of the readers below and thanks for the recommendation too, &lt;a href=&quot;https://www.linkedin.com/in/parvezghumra/&quot; target=&quot;_blank&quot;&gt;Parvez Ghumra&lt;/a&gt;).&amp;nbsp;&lt;/dir&gt;&lt;dir&gt;With that tool, you can select all the faulty tables (e.g. managed tables with all components) and apply the Fix 1 (remove the managed tables and re-add the unmanaged components only) OR Fix 2 (remove the managed tables and re-add the unmanaged components + managed components with active layer which are modified in the current environment).&lt;/dir&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibxV31YkDhOSHFaM34ozv3qmcF33f5jBR3XUx01ZwCvKYL-hUEHxAysJSkaFF_oVMassxjwPJKbjIAKYguGhNkeGEZY9gqGkTOZCuz6sMWAVMKbEuwM1QHjuhwOr9kecoIj97cwUnEWUaViE13709lmHO4AUyJadrgQsXhieyudH8-gEVgmRlgnjGv-RYS/s2238/Solution%20Table%20Integrity%20Manager.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1313&quot; data-original-width=&quot;2238&quot; height=&quot;376&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibxV31YkDhOSHFaM34ozv3qmcF33f5jBR3XUx01ZwCvKYL-hUEHxAysJSkaFF_oVMassxjwPJKbjIAKYguGhNkeGEZY9gqGkTOZCuz6sMWAVMKbEuwM1QHjuhwOr9kecoIj97cwUnEWUaViE13709lmHO4AUyJadrgQsXhieyudH8-gEVgmRlgnjGv-RYS/w640-h376/Solution%20Table%20Integrity%20Manager.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;dir&gt;&lt;br /&gt;&lt;/dir&gt;&lt;dir&gt;Do you have any other tips to keep the solutions clean? Or can you think of any other scenario where the system automatically add the components to the solution? Please leave a comment below to share with the other readers.&lt;/dir&gt;</content><link rel='replies' type='application/atom+xml' href='http://linnzawwin.blogspot.com/feeds/6346410892400949783/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://linnzawwin.blogspot.com/2024/02/keep-your-dataverse-solution-clean-and.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/6346410892400949783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/6346410892400949783'/><link rel='alternate' type='text/html' href='http://linnzawwin.blogspot.com/2024/02/keep-your-dataverse-solution-clean-and.html' title='Keep Your Dataverse Solution Clean and Simple'/><author><name>Linn Zaw Win</name><uri>http://www.blogger.com/profile/16015532694415495453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaCUObunP3kiYNRu6pZ-J4ezoWDP-Jf1Cv010HLXr_bLFmB0bcZj8atUiBYmg37uDyBDzxPrHFX7EGESjgSMIOIBX7TR9VS9nZ179jpYpTkpsDtw09albFOTBEXTdw2OhtXLyZkfd4kBnOHYZmGSoge7m2XxXOVZvFJxuEiXnTmg7sRRc/s220/IMG_5259-Square%20-%20MVP.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBIFAdOhHZieCAEnUiTnIkuJ71HwPBzGv9gbrEFHvXJXbUiBi9KBAjNzS214qsK-5yNRoyDPPaGHLvri8zpfLWlV04f2nkJsrsFyojkwrbSzm3WI3GxrUe7mXhtYASOa9gGYIroQ0qN22nKmVHmHxU5EYtEhG-whVbZCO0hSUYbobsRO91c8Wveq5wfTLW/s72-w400-h229-c/Solution%20Thumbnail.png" height="72" width="72"/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3970629459363259828.post-4174955602017618776</id><published>2024-02-08T08:35:00.003+10:00</published><updated>2024-02-15T02:20:00.353+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="javavscript"/><category scheme="http://www.blogger.com/atom/ns#" term="quick create"/><category scheme="http://www.blogger.com/atom/ns#" term="refresh"/><category scheme="http://www.blogger.com/atom/ns#" term="subgrid"/><title type='text'>Refresh Main Form When New Child Row is Added in Subgrid via Quick Create Form in Model-Driven App</title><content type='html'>&lt;meta content=&quot;summary_large_image&quot; name=&quot;twitter:card&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;This post will explain how you can refresh all the data of the main form when the user adds a new row to the child table by clicking on the + Add New button from the subgrid and adding one from the Quick Create Form of the child table.&quot; name=&quot;twitter:description&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPkwJBNtqgey6tRSUPOKcg6TuRf7liE70zwylIqaoRNiR8Kr1bPH-I4pRhhj0VzOsi_Ys1ky3QQKV6A50mlmbgdF7w1uYByHDPKTzog1WX40KLvB7TSDRmhK2hfJ7mjjzkrwwt6P7_BvHNoaiqtijW-lOjGa54TfEnk0APW4NJ8WhjIxCdgRwxsldPi2rF/s1618/Subgrid%20Quick%20Create.png&quot; name=&quot;twitter:image&quot;&gt;&lt;/meta&gt;
&lt;div&gt;
  This post will explain how you can refresh all the data of the main form when
  the user adds a new row to the child table by clicking on the
  &lt;b&gt;+ Add New&lt;/b&gt;&amp;nbsp;button from the subgrid and adding one from the
  &lt;b&gt;Quick Create Form&lt;/b&gt; of the child table.
&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPkwJBNtqgey6tRSUPOKcg6TuRf7liE70zwylIqaoRNiR8Kr1bPH-I4pRhhj0VzOsi_Ys1ky3QQKV6A50mlmbgdF7w1uYByHDPKTzog1WX40KLvB7TSDRmhK2hfJ7mjjzkrwwt6P7_BvHNoaiqtijW-lOjGa54TfEnk0APW4NJ8WhjIxCdgRwxsldPi2rF/s1618/Subgrid%20Quick%20Create.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;982&quot; data-original-width=&quot;1618&quot; height=&quot;243&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPkwJBNtqgey6tRSUPOKcg6TuRf7liE70zwylIqaoRNiR8Kr1bPH-I4pRhhj0VzOsi_Ys1ky3QQKV6A50mlmbgdF7w1uYByHDPKTzog1WX40KLvB7TSDRmhK2hfJ7mjjzkrwwt6P7_BvHNoaiqtijW-lOjGa54TfEnk0APW4NJ8WhjIxCdgRwxsldPi2rF/w400-h243/Subgrid%20Quick%20Create.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
  When the user&amp;nbsp;adds a new row to the child table&amp;nbsp;from the subgrid and
  &lt;b&gt;Save and Close&lt;/b&gt; the&amp;nbsp;&lt;b&gt;Quick Create Form&lt;/b&gt;, the subgrid (from
  which the &lt;b&gt;Quick Create Form&lt;/b&gt; was triggered) is refreshed. Similarly when
  the user deletes or deactivate the row, the subgrid is refreshed. But
  sometimes, there is a synchronous background process for the child table which
  rolls up/calculate and update the data of the parent row (e.g. total amount,
  no. of confirmed attendees, etc.). In that case, the updated data on the main
  form is not reflected immediately because only the subgrid is refreshed.
&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
  To refresh the main form when there is any row change to the subgrid, this
  solution is to add a function to be called when the subgrid control is
  loaded/refreshed. That function can count the number of rows and refresh the
  main form accordingly by comparing the row count against the previous count.
&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
  First of all, set the global variable for the initial loading of the subgrid.
&lt;/div&gt;
&lt;pre style=&quot;background-attachment: initial; background-clip: initial; background-color: #f0f0f0; background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja6__4vAq9ZtreoOwIQBu0NgBgfhthdWVLtKG6Hw_uYsbv9F_udbpvNTgIT4FtCDACZHpvvpj-HXanWLYovqFa0sXT-MJGK6J-m3YRkWAl5jqdMQpbB9eHE7U-7fJiY06fVkmIx2ft2eM0/s320/codebg.gif); background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; background: rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;&quot;&gt;&lt;code style=&quot;color: black; overflow-wrap: normal; word-wrap: normal;&quot;&gt; var gridRowCount = -1;  
&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
  OnLoad function of the form, add event handler to the subgrid control,
  use&amp;nbsp;&lt;b&gt;&lt;i&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/power-apps/developer/model-driven-apps/clientapi/reference/grids/gridcontrol/addonload&quot; target=&quot;_blank&quot;&gt;addOnLoad()&lt;/a&gt;&lt;/i&gt;&lt;/b&gt;&amp;nbsp;method and the function will be called the initial loading of the
  subgrid and every time the subgrid is refreshed.
&lt;/div&gt;
&lt;pre style=&quot;background-attachment: initial; background-clip: initial; background-color: #f0f0f0; background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja6__4vAq9ZtreoOwIQBu0NgBgfhthdWVLtKG6Hw_uYsbv9F_udbpvNTgIT4FtCDACZHpvvpj-HXanWLYovqFa0sXT-MJGK6J-m3YRkWAl5jqdMQpbB9eHE7U-7fJiY06fVkmIx2ft2eM0/s320/codebg.gif); background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; background: rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;&quot;&gt;&lt;code style=&quot;color: black; overflow-wrap: normal; word-wrap: normal;&quot;&gt; formContext.getControl(&quot;Subgrid_Child_Tests&quot;).addOnLoad(subgridOnLoad);  
&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
  In the function,
  &lt;a href=&quot;https://learn.microsoft.com/en-us/power-apps/developer/model-driven-apps/clientapi/reference/grids/grid/gettotalrecordcount&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;&lt;i&gt;getTotalRecordCount()&lt;/i&gt;&lt;/b&gt;&lt;/a&gt;
  of the subgrid control to keep it in the global variable for the initial load
  (when the global variable is -1) and compare it against the row count in
  subsequent refreshes. When the row count is different from the previous
  value,&amp;nbsp;&lt;a href=&quot;https://learn.microsoft.com/en-us/power-apps/developer/model-driven-apps/clientapi/reference/formcontext-data/refresh&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;&lt;i&gt;data.refresh()&lt;/i&gt;&lt;/b&gt;&lt;/a&gt;&amp;nbsp;to refresh the data in main form .
&lt;/div&gt;
&lt;pre style=&quot;background-attachment: initial; background-clip: initial; background-color: #f0f0f0; background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja6__4vAq9ZtreoOwIQBu0NgBgfhthdWVLtKG6Hw_uYsbv9F_udbpvNTgIT4FtCDACZHpvvpj-HXanWLYovqFa0sXT-MJGK6J-m3YRkWAl5jqdMQpbB9eHE7U-7fJiY06fVkmIx2ft2eM0/s320/codebg.gif); background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; background: rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;&quot;&gt;&lt;code style=&quot;color: black; overflow-wrap: normal; word-wrap: normal;&quot;&gt; this.subgridOnLoad = function (executionContext)  
 {  
      let formContext = executionContext.getFormContext();  
      let subgridTotalRecordCount = formContext.getControl(&quot;Subgrid_Child_Tests&quot;).getGrid().getTotalRecordCount();  
      if (gridRowCount === -1)  
      {  
           gridRowCount = subgridTotalRecordCount;  
      }  
      else if (gridRowCount !== subgridTotalRecordCount)  
      {  
           gridRowCount = subgridTotalRecordCount;  
           formContext.data.refresh();  
      }  
 }  
&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
  The solution can be used not only refresh the data in the main form, the
  triggered function can perform any other operations (such as refreshing
  another subgrid, open up another quick create/custom page on the side panel,
  etc.)
&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
The whole script will look something like this and you will need to register the formOnLoad function in the OnLoad event of your form.
&lt;pre style=&quot;background-attachment: initial; background-clip: initial; background-color: #f0f0f0; background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja6__4vAq9ZtreoOwIQBu0NgBgfhthdWVLtKG6Hw_uYsbv9F_udbpvNTgIT4FtCDACZHpvvpj-HXanWLYovqFa0sXT-MJGK6J-m3YRkWAl5jqdMQpbB9eHE7U-7fJiY06fVkmIx2ft2eM0/s320/codebg.gif); background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; background: #f0f0f0; border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;&quot;&gt;&lt;code style=&quot;color: black; overflow-wrap: normal; word-wrap: normal;&quot;&gt; var gridRowCount = -1;  
   
 this.formOnLoad = function (executionContext)   
 {  
      let formContext = executionContext.getFormContext();  
      formContext.getControl(&quot;Subgrid_Child_Tests&quot;).addOnLoad(subgridOnLoad);  
 }  
   
 this.subgridOnLoad = function (executionContext)  
 {  
      let formContext = executionContext.getFormContext();  
      let subgridTotalRecordCount = formContext.getControl(&quot;Subgrid_Child_Tests&quot;).getGrid().getTotalRecordCount();  
      if (gridRowCount === -1)  
      {  
           gridRowCount = subgridTotalRecordCount;  
      }  
      else if (gridRowCount !== subgridTotalRecordCount)  
      {  
           gridRowCount = subgridTotalRecordCount;  
           formContext.data.refresh();  
      }  
 }  
&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
  Note: The idea of this solution started from
  &lt;a href=&quot;https://powerusers.microsoft.com/t5/Microsoft-Dataverse/I-am-trying-to-Refresh-the-main-form-whenever-there-is-a-related/m-p/2353533#M33521&quot; target=&quot;_blank&quot;&gt;this forum thread&lt;/a&gt;.
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://linnzawwin.blogspot.com/feeds/4174955602017618776/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://linnzawwin.blogspot.com/2024/02/refresh-main-form-when-new-child-row-is.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/4174955602017618776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/4174955602017618776'/><link rel='alternate' type='text/html' href='http://linnzawwin.blogspot.com/2024/02/refresh-main-form-when-new-child-row-is.html' title='Refresh Main Form When New Child Row is Added in Subgrid via Quick Create Form in Model-Driven App'/><author><name>Linn Zaw Win</name><uri>http://www.blogger.com/profile/16015532694415495453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaCUObunP3kiYNRu6pZ-J4ezoWDP-Jf1Cv010HLXr_bLFmB0bcZj8atUiBYmg37uDyBDzxPrHFX7EGESjgSMIOIBX7TR9VS9nZ179jpYpTkpsDtw09albFOTBEXTdw2OhtXLyZkfd4kBnOHYZmGSoge7m2XxXOVZvFJxuEiXnTmg7sRRc/s220/IMG_5259-Square%20-%20MVP.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPkwJBNtqgey6tRSUPOKcg6TuRf7liE70zwylIqaoRNiR8Kr1bPH-I4pRhhj0VzOsi_Ys1ky3QQKV6A50mlmbgdF7w1uYByHDPKTzog1WX40KLvB7TSDRmhK2hfJ7mjjzkrwwt6P7_BvHNoaiqtijW-lOjGa54TfEnk0APW4NJ8WhjIxCdgRwxsldPi2rF/s72-w400-h243-c/Subgrid%20Quick%20Create.png" height="72" width="72"/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3970629459363259828.post-4157184990340292019</id><published>2024-01-29T22:17:00.010+10:00</published><updated>2024-01-30T10:44:19.835+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Audit History"/><category scheme="http://www.blogger.com/atom/ns#" term="iFrame"/><category scheme="http://www.blogger.com/atom/ns#" term="javascript"/><title type='text'>How to Embed Audit History on a Form in Model-Driven App</title><content type='html'>&lt;meta content=&quot;summary_large_image&quot; name=&quot;twitter:card&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;This post will explain how you can embed an audit history on the form of a table using an iFrame control and JavaScript.&quot; name=&quot;twitter:description&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_b9sZvvCxDjAHAaKboxRa2JSMRGsmdAVY-4lu_MiSlGbV80TWYWqGXc5tnFAg1EamYLpOGjefBXS1itY1dKXz0feTWhwHVeeaPYDqW_Gk-Zb8x3Dm3ukksmRjCoLwuduw-hDA6FFyRb_2fDvi5ihj8PMUmjCEUZf7GcpulbvtO6BiwwBmxcmcN44K7USY/s920/Audit%20History%20Difference.png&quot; name=&quot;twitter:image&quot;&gt;&lt;/meta&gt;
&lt;div&gt;
  &lt;div&gt;
    This post will explain how you can embed an audit history on the form of a
    table using an iFrame control and JavaScript.
  &lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilhBTdO0aTfQUTL8Qz9cTB5KA-4ki2K95izdczOb_EfOx7FIt-hIFFXLi8BC4n_w6aUiFUsi0__JpPpHNcUFN9oa7LtnhyqVgIQww326kTZjyFXj8eOOOLzaLj7KjS7xA36OEDCuiq3wxbxnBDAplaL5QPj21aLPKeex6kC0xQcZbSoJt3xJ0iBalhdbs-/s1407/Thumbnail.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;946&quot; data-original-width=&quot;1407&quot; height=&quot;269&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilhBTdO0aTfQUTL8Qz9cTB5KA-4ki2K95izdczOb_EfOx7FIt-hIFFXLi8BC4n_w6aUiFUsi0__JpPpHNcUFN9oa7LtnhyqVgIQww326kTZjyFXj8eOOOLzaLj7KjS7xA36OEDCuiq3wxbxnBDAplaL5QPj21aLPKeex6kC0xQcZbSoJt3xJ0iBalhdbs-/w400-h269/Thumbnail.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;
    If you do not want the users to click multiple times on &lt;b&gt;Related&lt;/b&gt; tab
    and then &lt;b&gt;&lt;i&gt;Audit History&lt;/i&gt;&lt;/b&gt;, you can show it on the form directly or under a separate tab by adding an
    iFrame control and set the URL of the iFrame using JavaScript.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: #38225d; padding: 20px;&quot;&gt;
	&lt;b style=&quot;color: #e2daf1;&quot;&gt;🛈&amp;nbsp;Note&lt;/b&gt;
	&lt;br /&gt;
	&lt;br /&gt;&lt;span style=&quot;color: #e2daf1;&quot;&gt;Please be aware that the current Audit History is one of the certain legacy UI which is enabled as part of hybrid experience in Unified Interface. When Microsoft implement the Audit History in full Unified Interface experience, you will have to re-implement this functionality.&lt;/span&gt;&lt;/div&gt;
    &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To add an iFrame to the form, select the &lt;b&gt;External website&lt;/b&gt; component in the form designer and set the site URL with a dummy URL. Set the name of the iFrame control as well which will be used in the JavaScript below. (for sample code,&amp;nbsp;&quot;IFRAME_audit&quot; is used as the name of an iFrame)&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8-nN8eZnv5AAbPh822G1Hh930aWomdAy2ZXACkJYM6eT4___OpgcJgoj2Ie9EQzGJhSjUAhbLhjR2d3UymZB8nFrh5T0ZjjQrKWEZJaGew17GgMzBwiT2vI1hY1_m_125bu5gJRObYSZDhFaMawI8-GxDRDs4AFNAGzidBqER8W1hXIE0IErg2hwDYV-G/s1586/Form%20Designer.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;637&quot; data-original-width=&quot;1586&quot; height=&quot;258&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8-nN8eZnv5AAbPh822G1Hh930aWomdAy2ZXACkJYM6eT4___OpgcJgoj2Ie9EQzGJhSjUAhbLhjR2d3UymZB8nFrh5T0ZjjQrKWEZJaGew17GgMzBwiT2vI1hY1_m_125bu5gJRObYSZDhFaMawI8-GxDRDs4AFNAGzidBqER8W1hXIE0IErg2hwDYV-G/w640-h258/Form%20Designer.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
    &lt;div&gt;Embedding the Audit History in the IFrame will require JavaScript to
      populate the entity ID and object type code parameters. WebAPI request
      will be required to get Object Type Code and the sample JavaScript function below can be called from the
    &lt;a href=&quot;https://learn.microsoft.com/en-us/power-apps/developer/model-driven-apps/clientapi/reference/events/form-onload&quot; target=&quot;_blank&quot;&gt;Form OnLoad event&lt;/a&gt;&amp;nbsp;or &lt;a href=&quot;https://learn.microsoft.com/en-us/power-apps/developer/model-driven-apps/clientapi/reference/events/tabstatechange&quot; target=&quot;_blank&quot;&gt;TabStateChange event&lt;/a&gt; (if an iFrame is placed on a different tab).&lt;/div&gt;&lt;/div&gt;
  &lt;pre style=&quot;background-attachment: initial; background-clip: initial; background-color: #f0f0f0; background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja6__4vAq9ZtreoOwIQBu0NgBgfhthdWVLtKG6Hw_uYsbv9F_udbpvNTgIT4FtCDACZHpvvpj-HXanWLYovqFa0sXT-MJGK6J-m3YRkWAl5jqdMQpbB9eHE7U-7fJiY06fVkmIx2ft2eM0/s320/codebg.gif); background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; background: rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;&quot;&gt;&lt;code style=&quot;color: black; overflow-wrap: normal; word-wrap: normal;&quot;&gt; this.formOnLoad = function (executionContext)  
 {  
   setAuditIframeURL(executionContext);  
 }&lt;/code&gt;&lt;/pre&gt;&lt;pre style=&quot;background-attachment: initial; background-clip: initial; background-color: #f0f0f0; background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja6__4vAq9ZtreoOwIQBu0NgBgfhthdWVLtKG6Hw_uYsbv9F_udbpvNTgIT4FtCDACZHpvvpj-HXanWLYovqFa0sXT-MJGK6J-m3YRkWAl5jqdMQpbB9eHE7U-7fJiY06fVkmIx2ft2eM0/s320/codebg.gif); background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; background: rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;&quot;&gt;&lt;code style=&quot;color: black; overflow-wrap: normal; word-wrap: normal;&quot;&gt; this.setAuditIframeURL = function (executionContext)  
 {  
      let formContext = executionContext.getFormContext();  
      Xrm.Utility.getEntityMetadata(formContext.data.entity.getEntityName()).then(  
      function success(entityMetadata)  
      {  
           if (entityMetadata &amp;amp;&amp;amp; entityMetadata.ObjectTypeCode)  
           {  
                let objectTypeCode = entityMetadata.ObjectTypeCode;  
                let auditIFrameUrl = location.protocol + &quot;//&quot; + location.hostname + &quot;/userdefined/areas.aspx?oId=&quot; + formContext.data.entity.getId().replace(&quot;{&quot;, &quot;&quot;).replace(&quot;}&quot;, &quot;&quot;) + &quot;&amp;amp;oType=&quot; + objectTypeCode + &quot;&amp;amp;inlineEdit=1&amp;amp;navItemName=Audit History&amp;amp;pagemode=iframe&amp;amp;rof=true&amp;amp;security=852023&amp;amp;tabSet=areaAudit&amp;amp;theme=Outlook15White&quot;;  
                formContext.getControl(&quot;IFRAME_audit&quot;).setSrc(auditIFrameUrl);  
           }  
      },  
      function (error)  
      {  
           Xrm.Navigation.openAlertDialog(  
           {  
                text: error.message  
           });  
      });  
 }  
&lt;/code&gt;&lt;/pre&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For some reasons, it shows a bit differently (&lt;b&gt;Filter&lt;/b&gt;&amp;nbsp;dropdown and&amp;nbsp;&lt;b&gt;Delete Change History&lt;/b&gt;&amp;nbsp;button are not visible), so the users will not be able to filter the audit details by a specific column or delete the entire change history for that particular record from the custom audit iFrame.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_b9sZvvCxDjAHAaKboxRa2JSMRGsmdAVY-4lu_MiSlGbV80TWYWqGXc5tnFAg1EamYLpOGjefBXS1itY1dKXz0feTWhwHVeeaPYDqW_Gk-Zb8x3Dm3ukksmRjCoLwuduw-hDA6FFyRb_2fDvi5ihj8PMUmjCEUZf7GcpulbvtO6BiwwBmxcmcN44K7USY/s920/Audit%20History%20Difference.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;760&quot; data-original-width=&quot;920&quot; height=&quot;528&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_b9sZvvCxDjAHAaKboxRa2JSMRGsmdAVY-4lu_MiSlGbV80TWYWqGXc5tnFAg1EamYLpOGjefBXS1itY1dKXz0feTWhwHVeeaPYDqW_Gk-Zb8x3Dm3ukksmRjCoLwuduw-hDA6FFyRb_2fDvi5ihj8PMUmjCEUZf7GcpulbvtO6BiwwBmxcmcN44K7USY/w640-h528/Audit%20History%20Difference.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;One of the commenters,&amp;nbsp;&lt;a href=&quot;https://www.linkedin.com/in/sanket-verma/&quot; target=&quot;_blank&quot;&gt;Sanket Kumar&lt;/a&gt;, also provided another script to show the OOB &quot;Audit History&quot; tab under by default so that the user has one less click to view Audit History without opening the &lt;b&gt;Related&lt;/b&gt; tab.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is the original form with just a General tab.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjA9qtevLlMIvUTBpnkngOPy8-2aFxQkog3ogyaRwEpw865NdClS_fnaN_LAYFx92g_p92I0YrQDovNmOYu390BCr2-54paMtrIJQwiWDvB6l7_2LXMdnXbPXkHRS_MdQlB1jTsEFe2LEU3-KAX7aD1s8LdNiuHZrWeT8ALW53nxwZF3-f1LPZU6DO6QieJ/s268/Original.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;250&quot; data-original-width=&quot;268&quot; height=&quot;250&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjA9qtevLlMIvUTBpnkngOPy8-2aFxQkog3ogyaRwEpw865NdClS_fnaN_LAYFx92g_p92I0YrQDovNmOYu390BCr2-54paMtrIJQwiWDvB6l7_2LXMdnXbPXkHRS_MdQlB1jTsEFe2LEU3-KAX7aD1s8LdNiuHZrWeT8ALW53nxwZF3-f1LPZU6DO6QieJ/s1600/Original.png&quot; width=&quot;268&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;The following function can be called from the Form OnLoad event. The purpose of the script is focusing the Audit History tab under the Related navigation menu and focusing back to the previously focus.&lt;/div&gt;&lt;div&gt;
&lt;pre style=&quot;background-attachment: initial; background-clip: initial; background-color: #f0f0f0; background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja6__4vAq9ZtreoOwIQBu0NgBgfhthdWVLtKG6Hw_uYsbv9F_udbpvNTgIT4FtCDACZHpvvpj-HXanWLYovqFa0sXT-MJGK6J-m3YRkWAl5jqdMQpbB9eHE7U-7fJiY06fVkmIx2ft2eM0/s320/codebg.gif); background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; background: #f0f0f0; border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;&quot;&gt;&lt;code style=&quot;color: black; overflow-wrap: normal; word-wrap: normal;&quot;&gt; this.formOnLoad = function (executionContext)   
 {   
      showAuditTab(executionContext);   
 }  &lt;/code&gt;&lt;/pre&gt;&lt;pre style=&quot;background-attachment: initial; background-clip: initial; background-color: #f0f0f0; background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja6__4vAq9ZtreoOwIQBu0NgBgfhthdWVLtKG6Hw_uYsbv9F_udbpvNTgIT4FtCDACZHpvvpj-HXanWLYovqFa0sXT-MJGK6J-m3YRkWAl5jqdMQpbB9eHE7U-7fJiY06fVkmIx2ft2eM0/s320/codebg.gif); background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; background: #f0f0f0; border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;&quot;&gt;&lt;code style=&quot;color: black; overflow-wrap: normal; word-wrap: normal;&quot;&gt;
 this.showAuditTab = function (executionContext)   
 {  
      let formContext = executionContext.getFormContext();   
      const navigations = formContext.ui.navigation.items;  
      const tabs = formContext.ui.tabs;  
      const focusedTab = tabs.get().find(tab =&amp;gt; tab.getDisplayState() == &#39;expanded&#39;)  
      navigations.get(&quot;navAudit&quot;).setFocus(); // set focus on audit history tab  
      focusedTab.setFocus(); // set focus on the original default tab  
 }   
&lt;/code&gt;&lt;/pre&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;By doing so, the &lt;b&gt;Audit History&lt;/b&gt; tab is visible by default without clicking the &lt;b&gt;Related&lt;/b&gt; tab as if the user manually opened the&amp;nbsp;&lt;b&gt;Audit History&lt;/b&gt;&amp;nbsp;tab&amp;nbsp;under&amp;nbsp;&lt;b&gt;Related&lt;/b&gt;&amp;nbsp;tab&amp;nbsp;and focus back to the &lt;b&gt;General&lt;/b&gt; tab.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpuxw8uqBfIk_bYLo3DBgIcsoNl8E8msA63_zwFtVCRd_zUkcEzyoiATEePDa7YGK5985hifKiRc56jmLkiI76GZqIdf535bMQUBuTlOVktz9MKkKpXarmoecvWP9UMBLbPEwKNQw6zjjlVOacIDMDQRSBnbDQQicgFsJlBd0IfMPFvDeQOaQ91p_gq8j9/s318/Audit%20History%20Tab.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;275&quot; data-original-width=&quot;318&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpuxw8uqBfIk_bYLo3DBgIcsoNl8E8msA63_zwFtVCRd_zUkcEzyoiATEePDa7YGK5985hifKiRc56jmLkiI76GZqIdf535bMQUBuTlOVktz9MKkKpXarmoecvWP9UMBLbPEwKNQw6zjjlVOacIDMDQRSBnbDQQicgFsJlBd0IfMPFvDeQOaQ91p_gq8j9/s1600/Audit%20History%20Tab.png&quot; width=&quot;318&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://linnzawwin.blogspot.com/feeds/4157184990340292019/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://linnzawwin.blogspot.com/2024/01/how-to-embed-audit-history-on-table_30.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/4157184990340292019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/4157184990340292019'/><link rel='alternate' type='text/html' href='http://linnzawwin.blogspot.com/2024/01/how-to-embed-audit-history-on-table_30.html' title='How to Embed Audit History on a Form in Model-Driven App'/><author><name>Linn Zaw Win</name><uri>http://www.blogger.com/profile/16015532694415495453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaCUObunP3kiYNRu6pZ-J4ezoWDP-Jf1Cv010HLXr_bLFmB0bcZj8atUiBYmg37uDyBDzxPrHFX7EGESjgSMIOIBX7TR9VS9nZ179jpYpTkpsDtw09albFOTBEXTdw2OhtXLyZkfd4kBnOHYZmGSoge7m2XxXOVZvFJxuEiXnTmg7sRRc/s220/IMG_5259-Square%20-%20MVP.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilhBTdO0aTfQUTL8Qz9cTB5KA-4ki2K95izdczOb_EfOx7FIt-hIFFXLi8BC4n_w6aUiFUsi0__JpPpHNcUFN9oa7LtnhyqVgIQww326kTZjyFXj8eOOOLzaLj7KjS7xA36OEDCuiq3wxbxnBDAplaL5QPj21aLPKeex6kC0xQcZbSoJt3xJ0iBalhdbs-/s72-w400-h269-c/Thumbnail.png" height="72" width="72"/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3970629459363259828.post-4367040346575576145</id><published>2023-04-07T13:37:00.003+10:00</published><updated>2023-04-08T12:00:54.047+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="hide column"/><category scheme="http://www.blogger.com/atom/ns#" term="view"/><title type='text'>Hiding a Column Without Removing From a View in Model-Driven App</title><content type='html'>&lt;meta content=&quot;summary_large_image&quot; name=&quot;twitter:card&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;If there is a requirement to hide a column from a view in model-driven app without removing it completely, you can use a tool or update the LayoutXml to hide the column.&quot; name=&quot;twitter:description&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTbH1PwX7camyGBLd641xpnpugXe5alTFZUNKMXqd_Q0CrDqmDLcXxbEGIg7GFePZgikHK8bUKSZQVmTsR1I20Td9RaW4fpInas9lFtF0phINBP6m-6TgLY0VI8vfvb_Z07pnkND68YyURNumBHmy4ti6fMNgxv5HKlOZ4kCaILefLmjbYAknD786BuQ/s1950/Thumbnail.png&quot; name=&quot;twitter:image&quot;&gt;&lt;/meta&gt;
&lt;p&gt;
  Sometimes, there is a requirement to hide a column from a view (main grid or
  subgrid view) even though the column is required for the view to be
  functional. Since the column is still required, it cannot be removed using the
  modern view designer.
&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTbH1PwX7camyGBLd641xpnpugXe5alTFZUNKMXqd_Q0CrDqmDLcXxbEGIg7GFePZgikHK8bUKSZQVmTsR1I20Td9RaW4fpInas9lFtF0phINBP6m-6TgLY0VI8vfvb_Z07pnkND68YyURNumBHmy4ti6fMNgxv5HKlOZ4kCaILefLmjbYAknD786BuQ/s1950/Thumbnail.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;757&quot; data-original-width=&quot;1950&quot; height=&quot;155&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTbH1PwX7camyGBLd641xpnpugXe5alTFZUNKMXqd_Q0CrDqmDLcXxbEGIg7GFePZgikHK8bUKSZQVmTsR1I20Td9RaW4fpInas9lFtF0phINBP6m-6TgLY0VI8vfvb_Z07pnkND68YyURNumBHmy4ti6fMNgxv5HKlOZ4kCaILefLmjbYAknD786BuQ/w400-h155/Thumbnail.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;
  One of the examples is to hide the column that is used for sorting because it
  is showing up as a subtitle in the lookup dropdown because it is the 2nd
  column of the lookup view.
  &lt;a href=&quot;https://www.linkedin.com/in/kailash-ramachandran-4428b922/&quot; target=&quot;_blank&quot;&gt;Kailash Ramachandran&lt;/a&gt;
  has
  &lt;a href=&quot;https://mytrial365.com/2020/08/01/hide-the-field-that-is-used-to-sort-a-view-in-dynamics-365/&quot; target=&quot;_blank&quot;&gt;blogged about the solution&lt;/a&gt;
  for such a problem by removing the column only in the LayoutXml with the
  “Select Columns” option in the&amp;nbsp;&lt;a href=&quot;https://linnzawwin.blogspot.com/p/view-designer.html&quot; target=&quot;_blank&quot;&gt;View Designer tool in XrmToolBox&lt;/a&gt;.
&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaVg-pvchD-rXLnTSd-HoGLN-3PhPqTDP8BLxhZqHz23_Ac9cTvxAByg5gXbvRfqH0-g2ocJNdbvbfuzg-Dq0ZTPHhYIFNVWGLLIiS2ihXZq04OG_ro3ymxLCD2PdC8TP1SKvR83GXPV4iWI3TAHyj-Dpy1X2GzX2FZ7LW3LvEL-6tBG0d65-U-UXl5w/s332/Select%20Columns.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;332&quot; data-original-width=&quot;307&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaVg-pvchD-rXLnTSd-HoGLN-3PhPqTDP8BLxhZqHz23_Ac9cTvxAByg5gXbvRfqH0-g2ocJNdbvbfuzg-Dq0ZTPHhYIFNVWGLLIiS2ihXZq04OG_ro3ymxLCD2PdC8TP1SKvR83GXPV4iWI3TAHyj-Dpy1X2GzX2FZ7LW3LvEL-6tBG0d65-U-UXl5w/s16000/Select%20Columns.png&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;
  Another requirement with a similar problem is to hide the Path column in the
  associated view of the SharePoint documents in the model-driven app (as
  &lt;a href=&quot;https://linnzawwin.blogspot.com/2020/06/how-to-add-metadata-to-sharepoint.html?showComment=1680686965283#c5738445067437372244&quot; target=&quot;_blank&quot;&gt;commented over here&lt;/a&gt;).
&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuiuDks2kApXOMiEIwXSt72k2YhnPuZJXLSeA7Hh_WZH0i6gWVW_dy5c5j6Pi36fTVXwy2gz488Kl_vtGu39nKteZDucScX1ayFVh8p0QiwWPPcYqbYWwOVuFSU-25pKAN5nhvQ08ZzXskMZInEkIrQOYWLrG5ga4ZAuVe5HCsGpd4n15CcA1-h3wGFw/s1950/Documents%20Associated%20Grid.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;757&quot; data-original-width=&quot;1950&quot; height=&quot;248&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuiuDks2kApXOMiEIwXSt72k2YhnPuZJXLSeA7Hh_WZH0i6gWVW_dy5c5j6Pi36fTVXwy2gz488Kl_vtGu39nKteZDucScX1ayFVh8p0QiwWPPcYqbYWwOVuFSU-25pKAN5nhvQ08ZzXskMZInEkIrQOYWLrG5ga4ZAuVe5HCsGpd4n15CcA1-h3wGFw/w640-h248/Documents%20Associated%20Grid.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;
  If the Path (relativelocation) column is removed from the view in the view
  designer, the grid control is not able to render anymore.
&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg45wB7Uu6IFEvRL4rb8hquuL06BeQ8KgjhSZDU_VzK8JDjyF_SchX7KMA5F06VKPSvztTz4Kzvp21v6a0HnZzAaZxjDVYGpSO_nt-PNg3bAj_i3aQDcbwt8_JgQJ_WK_M7Eemusq8NvgA2r54SqQUlvGmGtIEwq0lMoQudsFT0NzQJyuFpuQpGCWMvqw/s831/Documents%20Associated%20Grid%20Error.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;501&quot; data-original-width=&quot;831&quot; height=&quot;386&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg45wB7Uu6IFEvRL4rb8hquuL06BeQ8KgjhSZDU_VzK8JDjyF_SchX7KMA5F06VKPSvztTz4Kzvp21v6a0HnZzAaZxjDVYGpSO_nt-PNg3bAj_i3aQDcbwt8_JgQJ_WK_M7Eemusq8NvgA2r54SqQUlvGmGtIEwq0lMoQudsFT0NzQJyuFpuQpGCWMvqw/w640-h386/Documents%20Associated%20Grid%20Error.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;
  As in the solution above, I tried to load the Document Associated Grid with
  the&amp;nbsp;View Designer tool in XrmToolBox but I was getting
  NullReferenceException error and was unable to save the view. Since the tool
  was last updated in 2016, there might be some issues with the new properties
  introduced in the later version of the view schema.
&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2yY2XRXWm114q75__lvjpIlqtcqVCkJyW7Qa8K7GzLQETMZyrxwTiuFk0MPZKsa7bW2H81QRAdfBsTfliPMvHD-A5JfXj9dEUYPv2YK8UPdPpHSQtMLEUO8ew2X1Vc2zwFJz3OfRjBPtQbfeFFuFO3T1jUJYoQe5Pb86ISzOWIbdTd3GZGNqK1WlS_w/s440/View%20Designer%20Tool%20Error.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;319&quot; data-original-width=&quot;440&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2yY2XRXWm114q75__lvjpIlqtcqVCkJyW7Qa8K7GzLQETMZyrxwTiuFk0MPZKsa7bW2H81QRAdfBsTfliPMvHD-A5JfXj9dEUYPv2YK8UPdPpHSQtMLEUO8ew2X1Vc2zwFJz3OfRjBPtQbfeFFuFO3T1jUJYoQe5Pb86ISzOWIbdTd3GZGNqK1WlS_w/s16000/View%20Designer%20Tool%20Error.png&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;
  Since View Designer tool is not working well with&amp;nbsp;Document Associated
  Grid, the only solution is to update the LayoutXml manually. To do so, create
  a new solution, add the view into the solution, export and extract the
  solution.zip file and edit the &lt;b&gt;customizations.xml&lt;/b&gt;. In the XML file,
  find the cell element for Path (with name=&quot;relativelocation&quot;) cell, replace
  the width attribute with (ishidden=&quot;1&quot;) as in the screenshot below (or remove
  the whole element).
&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpdbQOp-pknPVXgtwaLF0mMzcMoxrqze6HliKpgeoRIAuEfNaw-bq_d47Ac6VxGFbjfXFpXoh3NJdlk1CGcWKQ0FURKlUi6eO8_XbwHryF67I0QmULoNUxovVuOfhtp8ucAcj5DGwoZ5Ago7-oxD8_pk2-Nyz7tTKht2WvJHxCzd2WtuHYICCVnGLMOw/s1059/LayoutXml.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;700&quot; data-original-width=&quot;1059&quot; height=&quot;424&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpdbQOp-pknPVXgtwaLF0mMzcMoxrqze6HliKpgeoRIAuEfNaw-bq_d47Ac6VxGFbjfXFpXoh3NJdlk1CGcWKQ0FURKlUi6eO8_XbwHryF67I0QmULoNUxovVuOfhtp8ucAcj5DGwoZ5Ago7-oxD8_pk2-Nyz7tTKht2WvJHxCzd2WtuHYICCVnGLMOw/w640-h424/LayoutXml.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;
  That will hide the column from the view but it will still remain in the
  &amp;lt;fetchxml&amp;gt; so that the grid control will still be functional.
&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://linnzawwin.blogspot.com/feeds/4367040346575576145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://linnzawwin.blogspot.com/2023/04/hiding-column-without-removing-from.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/4367040346575576145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/4367040346575576145'/><link rel='alternate' type='text/html' href='http://linnzawwin.blogspot.com/2023/04/hiding-column-without-removing-from.html' title='Hiding a Column Without Removing From a View in Model-Driven App'/><author><name>Linn Zaw Win</name><uri>http://www.blogger.com/profile/16015532694415495453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaCUObunP3kiYNRu6pZ-J4ezoWDP-Jf1Cv010HLXr_bLFmB0bcZj8atUiBYmg37uDyBDzxPrHFX7EGESjgSMIOIBX7TR9VS9nZ179jpYpTkpsDtw09albFOTBEXTdw2OhtXLyZkfd4kBnOHYZmGSoge7m2XxXOVZvFJxuEiXnTmg7sRRc/s220/IMG_5259-Square%20-%20MVP.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTbH1PwX7camyGBLd641xpnpugXe5alTFZUNKMXqd_Q0CrDqmDLcXxbEGIg7GFePZgikHK8bUKSZQVmTsR1I20Td9RaW4fpInas9lFtF0phINBP6m-6TgLY0VI8vfvb_Z07pnkND68YyURNumBHmy4ti6fMNgxv5HKlOZ4kCaILefLmjbYAknD786BuQ/s72-w400-h155-c/Thumbnail.png" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3970629459363259828.post-2819336053094377261</id><published>2022-11-20T06:28:00.002+10:00</published><updated>2024-02-15T14:12:41.841+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cloud flow"/><category scheme="http://www.blogger.com/atom/ns#" term="fetchxml"/><category scheme="http://www.blogger.com/atom/ns#" term="Power Automate"/><title type='text'>Dynamically List Rows From Any Dataverse Table with FetchXML in Power Automate</title><content type='html'>&lt;meta content=&quot;summary_large_image&quot; name=&quot;twitter:card&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;The solution is to populate the Table name parameter of the List Rows action dynamically based on the entity name from the FetchXML&quot; name=&quot;twitter:description&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQfuj_gZqAmbrth68HQWwuevLw6J8LtZ-1r3wDiJLFrNv8lOEuKM_bhURWFA4Oh0vH5nZzlFU6PRVwfiOE2eC5XSVIlqwtojMo-9h5I5yPH0MkW3kqr4Xka3ntSHxI-b0lPmEdTvFIfwA-P03xVN1fDjBnTzf061hHlkmY35tG5yFoMuCtwZV4ydNCKw/s882/Thumbnail.png&quot; name=&quot;twitter:image&quot;&gt;&lt;/meta&gt;
&lt;div&gt;
  With the &lt;b&gt;List Rows&lt;/b&gt; action of Microsoft Dataverse, we can use FetchXML
  to query the data. For such queries, all we need is to populate the&amp;nbsp;&lt;b&gt;Table name&lt;/b&gt;
  and&amp;nbsp;&lt;b&gt;Fetch Xml Query&lt;/b&gt; parameters. But what if we only have
  the&amp;nbsp;FetchXML? What if we want to query dynamically from different tables
  based on the FetchXML? One of the use cases would be storing the FetchXML in
  the config table where the user admin maintains the value and the cloud flow
  would query the data based on the FetchXML and process the data regardless of
  which table it is.
&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQfuj_gZqAmbrth68HQWwuevLw6J8LtZ-1r3wDiJLFrNv8lOEuKM_bhURWFA4Oh0vH5nZzlFU6PRVwfiOE2eC5XSVIlqwtojMo-9h5I5yPH0MkW3kqr4Xka3ntSHxI-b0lPmEdTvFIfwA-P03xVN1fDjBnTzf061hHlkmY35tG5yFoMuCtwZV4ydNCKw/s882/Thumbnail.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;437&quot; data-original-width=&quot;882&quot; height=&quot;318&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQfuj_gZqAmbrth68HQWwuevLw6J8LtZ-1r3wDiJLFrNv8lOEuKM_bhURWFA4Oh0vH5nZzlFU6PRVwfiOE2eC5XSVIlqwtojMo-9h5I5yPH0MkW3kqr4Xka3ntSHxI-b0lPmEdTvFIfwA-P03xVN1fDjBnTzf061hHlkmY35tG5yFoMuCtwZV4ydNCKw/w640-h318/Thumbnail.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
  The solution is to populate the&amp;nbsp;&lt;b&gt;Table name&lt;/b&gt;&amp;nbsp;parameter of
  the&amp;nbsp;&lt;b&gt;List Rows&lt;/b&gt;&amp;nbsp;action dynamically based on the&amp;nbsp;&lt;b&gt;entity name&lt;/b&gt;
  from the FetchXML. The only problem is that the&amp;nbsp;&lt;b&gt;entity name&lt;/b&gt;&amp;nbsp;from the FetchXML is the logical name and the&amp;nbsp;&lt;b&gt;Table name&lt;/b&gt;&amp;nbsp;parameter accepts the EntitySetName (the plural version of the logical name). Luckily, we can easily retrieve the EntitySetName of the table
  by another&amp;nbsp;&lt;b&gt;List Rows&lt;/b&gt;&amp;nbsp;action&amp;nbsp;query from the Entity table.
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In this post, you will also learn how to retrieve the EntitySetName (the plural name) of the table dynamically from the logical name of the table by retrieving the&amp;nbsp;Entities metadata table.&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
  In the sample child flow below, the input parameter is the FetchXML and it
  returns the number of rows from any table based on the FetchXML as an output
  parameter to the Power App or parent flow.
&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2U4UMx6ZZ3JoesPq-ccG4Qb4BzOpF2ouLeBPyWHnpRgA3Zvhs87USgCENwDk2dvO3cuByL43I_nCQt0VyQmUeWg-PnUFS3x0JyVcJXn6miLWbacbqXuS6Qrjk417ruwIFdrNogQ9e9QGQlUFLZ3DO_0iM4olQmTELzGsvp9JgOFLOFts430U-spz10A/s813/Child%20Flow%20-%20List%20Rows%20Using%20FetchXML.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;813&quot; data-original-width=&quot;627&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2U4UMx6ZZ3JoesPq-ccG4Qb4BzOpF2ouLeBPyWHnpRgA3Zvhs87USgCENwDk2dvO3cuByL43I_nCQt0VyQmUeWg-PnUFS3x0JyVcJXn6miLWbacbqXuS6Qrjk417ruwIFdrNogQ9e9QGQlUFLZ3DO_0iM4olQmTELzGsvp9JgOFLOFts430U-spz10A/s16000/Child%20Flow%20-%20List%20Rows%20Using%20FetchXML.png&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
The first step is to query the&amp;nbsp;&lt;b&gt;entitysetname&lt;/b&gt; column from
&lt;b&gt;Entities&lt;/b&gt; table where the name is equal to the entity name from the
FetchXML. To extract is with the string manipulation, use
the&amp;nbsp;first(split(last(split functions as mentioned in the
&lt;a href=&quot;https://crmtipoftheday.com/pages/power-automate-gymnastics-reference-guide/&quot; target=&quot;_blank&quot;&gt;Power Automate Gymnastics Reference Guide&lt;/a&gt;&amp;nbsp;and get the value between &lt;b&gt;&amp;lt;entity name=&quot;&lt;/b&gt;&amp;nbsp;
&amp;nbsp;VALUE&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;b&gt;&quot;&amp;gt;&lt;/b&gt;.
&lt;div&gt;
  &lt;pre style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent; background: rgb(245, 242, 240); border-radius: 5px; border: 1px solid rgb(150, 150, 150); box-shadow: none; box-sizing: inherit; font-family: consolas, monaco, &amp;quot;andale mono&amp;quot;, &amp;quot;ubuntu mono&amp;quot;, monospace; font-size: 12px; hyphens: none; line-height: 1.3; margin-bottom: 0.5em; margin-top: 0.5em; overflow: auto; padding: 10px; tab-size: 4; text-rendering: optimizelegibility; text-shadow: rgb(255, 255, 255) 0px 1px; white-space: pre-wrap; word-break: break-all;&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;first(split(last(split(triggerBody()[&#39;text&#39;], &#39;&amp;lt;entity name=&quot;&#39;)), &#39;&quot;&amp;gt;&#39;))
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
  The next step is to populate the&amp;nbsp;&lt;b&gt;Table name&lt;/b&gt;&amp;nbsp;parameter with
  the value from the &lt;b&gt;List rows&lt;/b&gt; above. Since there will only be one row,
  use first() function and take the&amp;nbsp;&lt;b&gt;entitysetname&lt;/b&gt; value. And
  populate the&amp;nbsp;&lt;b&gt;Fetch Xml Query&lt;/b&gt;&amp;nbsp;with the FetchXML from the input
  parameter.
&lt;/div&gt;
&lt;div&gt;
  &lt;div&gt;
    &lt;pre style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent; background: rgb(245, 242, 240); border-radius: 5px; border: 1px solid rgb(150, 150, 150); box-shadow: none; box-sizing: inherit; hyphens: none; line-height: 1.3; margin-bottom: 0.5em; margin-top: 0.5em; overflow: auto; padding: 10px; tab-size: 4; text-rendering: optimizelegibility; text-shadow: rgb(255, 255, 255) 0px 1px; word-break: break-all;&quot;&gt;&lt;span style=&quot;color: black; font-size: 12px; white-space: pre-wrap;&quot;&gt;first(outputs(&#39;List_Entities_by_Logical_Name&#39;)?[&#39;body/value&#39;])?[&#39;entitysetname&#39;]&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
  Finally, return the row count (length of the array)&amp;nbsp;from the output of
  the 2nd List rows action.
&lt;/div&gt;
&lt;div&gt;
  &lt;div&gt;
    &lt;pre style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent; background: rgb(245, 242, 240); border-radius: 5px; border: 1px solid rgb(150, 150, 150); box-shadow: none; box-sizing: inherit; color: black; font-family: consolas, monaco, &amp;quot;andale mono&amp;quot;, &amp;quot;ubuntu mono&amp;quot;, monospace; font-size: 12px; hyphens: none; line-height: 1.3; margin-bottom: 0.5em; margin-top: 0.5em; overflow: auto; padding: 10px; tab-size: 4; text-rendering: optimizelegibility; text-shadow: rgb(255, 255, 255) 0px 1px; white-space: pre-wrap; word-break: break-all;&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;length(outputs(&#39;List_rows_by_FetchXML&#39;)?[&#39;body/value&#39;])
&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
  Calling the child flow from the parent will result in something similar to the
  one below. The input is the FetchXML (List accounts with the name starting
  with A) and the result is row_count = 6.
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigZP8-vE36Qi3qgzLA9XX28O6VehZUvpe2Al87H_-QZGMJ0WydPBEX0u4-SaMtt7pPvxm0O07jGRfHiyG2H0vGRpS-teQQhkh9pBriRCoeU8UumKzqRXrVOHcf0f-s2bF6ZNo5LHKcmlTV51F0S5PhbazR-53wcbyzgWBID3Lk_lVZcE5LsWSrme3e4A/s636/Parent%20Flow.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;543&quot; data-original-width=&quot;636&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigZP8-vE36Qi3qgzLA9XX28O6VehZUvpe2Al87H_-QZGMJ0WydPBEX0u4-SaMtt7pPvxm0O07jGRfHiyG2H0vGRpS-teQQhkh9pBriRCoeU8UumKzqRXrVOHcf0f-s2bF6ZNo5LHKcmlTV51F0S5PhbazR-53wcbyzgWBID3Lk_lVZcE5LsWSrme3e4A/s16000/Parent%20Flow.png&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://linnzawwin.blogspot.com/feeds/2819336053094377261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://linnzawwin.blogspot.com/2022/11/dynamically-list-rows-from-any.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/2819336053094377261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/2819336053094377261'/><link rel='alternate' type='text/html' href='http://linnzawwin.blogspot.com/2022/11/dynamically-list-rows-from-any.html' title='Dynamically List Rows From Any Dataverse Table with FetchXML in Power Automate'/><author><name>Linn Zaw Win</name><uri>http://www.blogger.com/profile/16015532694415495453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaCUObunP3kiYNRu6pZ-J4ezoWDP-Jf1Cv010HLXr_bLFmB0bcZj8atUiBYmg37uDyBDzxPrHFX7EGESjgSMIOIBX7TR9VS9nZ179jpYpTkpsDtw09albFOTBEXTdw2OhtXLyZkfd4kBnOHYZmGSoge7m2XxXOVZvFJxuEiXnTmg7sRRc/s220/IMG_5259-Square%20-%20MVP.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQfuj_gZqAmbrth68HQWwuevLw6J8LtZ-1r3wDiJLFrNv8lOEuKM_bhURWFA4Oh0vH5nZzlFU6PRVwfiOE2eC5XSVIlqwtojMo-9h5I5yPH0MkW3kqr4Xka3ntSHxI-b0lPmEdTvFIfwA-P03xVN1fDjBnTzf061hHlkmY35tG5yFoMuCtwZV4ydNCKw/s72-w640-h318-c/Thumbnail.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3970629459363259828.post-5940133065312175010</id><published>2022-10-31T20:56:00.005+10:00</published><updated>2022-10-31T21:35:40.952+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="attachment"/><category scheme="http://www.blogger.com/atom/ns#" term="cloud flow"/><category scheme="http://www.blogger.com/atom/ns#" term="email"/><category scheme="http://www.blogger.com/atom/ns#" term="word template"/><title type='text'>Generate Document From Word Template and Send As Email Attachment Using Cloud Flow</title><content type='html'>&lt;meta content=&quot;summary_large_image&quot; name=&quot;twitter:card&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;In this blog post, you will learn how you can automate the generation of a document from a Word Template and sending it as an email attachment using Power Automate cloud flow.&quot; name=&quot;twitter:description&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgW5CR1MCiVNi12edm72L9ZnrRx38u1PJrYtcrdmrGqsCKlfifYGmatg_CUCWRG6DClNbGt_vUFQGMVL0YGGrZ9235i26gflRPfwQxsTR1nWNDRRd5GzUJ9YcCOA6XA1IAxhVN6VzochnRjGn45brqGwJ8E7H4pDb0nTQ6EvpZfUwhqWTskL51fv-vGMA/s1024/Thumbnail.png&quot; name=&quot;twitter:image&quot;&gt;&lt;/meta&gt;
&lt;div&gt;With Word templates in Dynamics 365 or a model-driven app, users can generate and download standardised documents automatically populated with data from a particular row. There is also a process action called “SetWordTemplate” that will attach the generated document from a word template as a note attachment on a record. The user can download the generated document, attach it to the email and send it out from the system.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgW5CR1MCiVNi12edm72L9ZnrRx38u1PJrYtcrdmrGqsCKlfifYGmatg_CUCWRG6DClNbGt_vUFQGMVL0YGGrZ9235i26gflRPfwQxsTR1nWNDRRd5GzUJ9YcCOA6XA1IAxhVN6VzochnRjGn45brqGwJ8E7H4pDb0nTQ6EvpZfUwhqWTskL51fv-vGMA/s1024/Thumbnail.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;465&quot; data-original-width=&quot;1024&quot; height=&quot;181&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgW5CR1MCiVNi12edm72L9ZnrRx38u1PJrYtcrdmrGqsCKlfifYGmatg_CUCWRG6DClNbGt_vUFQGMVL0YGGrZ9235i26gflRPfwQxsTR1nWNDRRd5GzUJ9YcCOA6XA1IAxhVN6VzochnRjGn45brqGwJ8E7H4pDb0nTQ6EvpZfUwhqWTskL51fv-vGMA/w400-h181/Thumbnail.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In this blog post, you will learn how you can automate the process above by generating a document from a Word Template and sending it as an email attachment using Power Automate cloud flow. This solution can be used when the system needs to automatically send out the pre-populated document on a specific trigger. (e.g., automatically send an in-principle approval letter to the applicant once the case status is changed to Approved)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I presented this solution at the Auckland Power Platform User Group and if you prefer to watch the demo, you can check out the recording on &lt;a href=&quot;https://youtu.be/VvyU97FpX1Q&quot; target=&quot;_blank&quot;&gt;YouTube&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are other different ways to achieve the same outcome but different ways have different pros/cons. You can use the &lt;a href=&quot;https://msolenacrm.blog/2022/09/28/power-automate-w-word-online-generate-document-updates/&quot; target=&quot;_blank&quot;&gt;Word Online (Business) connector to populate a Microsoft Word template&lt;/a&gt; but the flow needs to be updated if there is any addition/removal of the&amp;nbsp;fields on the template. By using the Word Templates in Dataverse, the user can manage/modify the Word Template without any change to the cloud flow. You can read more about &lt;a href=&quot;https://learn.microsoft.com/en-us/power-platform/admin/using-word-templates-dynamics-365?WT.mc_id=DX-MVP-5003873&quot; target=&quot;_blank&quot;&gt;creating Word Templates in&amp;nbsp;Microsoft Learn&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are some prerequisites for this solution.&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;The table needs to be &lt;a href=&quot;https://www.crmsoftwareblog.com/2017/01/crm-2016-word-templates-custom-entities-part-1/&quot; target=&quot;_blank&quot;&gt;enabled for Business Process Flows (BPF)&lt;/a&gt; or else, the table cannot be selected in the Target parameter of SetWordTemplate Action&amp;nbsp;&lt;/li&gt;&lt;li&gt;The table needs to be enabled for Attachments (including notes and files) or else, the SetWordTemplate action will be failed with the “Creating Entity with an invalid parent.” error&lt;/li&gt;&lt;li&gt;The table needs to be enabled for Activity or else, the table cannot be set as Regarding value in an Email&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;The solution involves x3 components.&lt;/div&gt;&lt;div&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Environment variable to store the name of the Word Template&lt;/li&gt;&lt;li&gt;Process action to call the&amp;nbsp;out-of-the-box SetWordTemplate action&lt;/li&gt;&lt;li&gt;Cloud flow to call the action above and send&amp;nbsp;the generated document as an email attachment&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;1. The environment variable is just Text data type variable to store the name of the Word Template which will be used in the cloud flow to pick up the correct template.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_2NYCa1ufdlSkCk5J-tMqFkg796e9BJhZ41roxeEpjfYxDi8batxv73U-MC3hHoLKyyZnK9oB_Eeq0mAgb45mE4s3W_wuqv1nrdpFSNoio9n07n6vxSdkzw-2lrZJYq0vdIdcF83qs6Acao9YSdjSfVmmwIqg8ZMUuqaXe6iNhGgg7AzWz1-CMmV2Ig/s504/Environment%20Variable.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;504&quot; data-original-width=&quot;340&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_2NYCa1ufdlSkCk5J-tMqFkg796e9BJhZ41roxeEpjfYxDi8batxv73U-MC3hHoLKyyZnK9oB_Eeq0mAgb45mE4s3W_wuqv1nrdpFSNoio9n07n6vxSdkzw-2lrZJYq0vdIdcF83qs6Acao9YSdjSfVmmwIqg8ZMUuqaXe6iNhGgg7AzWz1-CMmV2Ig/s16000/Environment%20Variable.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;2. Action to call the out-of-the-box SetWordTemplate action is a global (unbound) action with an Entity Reference type mandatory input parameter for Template and one Entity Reference type optional input parameter for each table (from which the documents are going to be autogenerated).&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX8UdT-YD5ahMBktwToeFsn3K0mvviyrbIV6_IhPDr274oeVOxM26R6Yb0Ur6JkioxMH-0Xw5wO_-Hzxy0Ha5PqoEG5RQz2kSA_OhSfrxi269j55RvQXI_4DM-6Xm8H1mW1OWd6n7QkjcehWzTE2RSH5YVQr4uA_yKb2pDZVyS4cm3PHgcFIWEc7iWog/s1065/Action%20SetWordTemplate.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;654&quot; data-original-width=&quot;1065&quot; height=&quot;394&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX8UdT-YD5ahMBktwToeFsn3K0mvviyrbIV6_IhPDr274oeVOxM26R6Yb0Ur6JkioxMH-0Xw5wO_-Hzxy0Ha5PqoEG5RQz2kSA_OhSfrxi269j55RvQXI_4DM-6Xm8H1mW1OWd6n7QkjcehWzTE2RSH5YVQr4uA_yKb2pDZVyS4cm3PHgcFIWEc7iWog/w640-h394/Action%20SetWordTemplate.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;For each table, add a condition to check if the input parameter contains data and populate into the Target parameter of the SetWordTemplate&amp;nbsp;action.&lt;div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6v4On2L1KXSQhh8GmcX2XNDI-WYXMHO337losFba73uQRNl0cMluGd1smYCTm9PQq8WnuCfgk2Kab2szMT20zQuEi_ZpiGe8_yvm4dpeJuW4kl4s1Rgt0s6l08P8hDuQX6U4XOjkmRvXI0djT57E8BNTApqLakpf-MoHCFR2oup0jT6DgI6uQMNh7zg/s637/Action%20SetWordTemplate%20Parameter.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;184&quot; data-original-width=&quot;637&quot; height=&quot;184&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6v4On2L1KXSQhh8GmcX2XNDI-WYXMHO337losFba73uQRNl0cMluGd1smYCTm9PQq8WnuCfgk2Kab2szMT20zQuEi_ZpiGe8_yvm4dpeJuW4kl4s1Rgt0s6l08P8hDuQX6U4XOjkmRvXI0djT57E8BNTApqLakpf-MoHCFR2oup0jT6DgI6uQMNh7zg/w640-h184/Action%20SetWordTemplate%20Parameter.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;3. These are all the steps included in the cloud flow which calls the custom Set Word Template action and send it as an email attachment.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Trigger and initialise variable&lt;/li&gt;&lt;li&gt;Populate Word template&lt;/li&gt;&lt;li&gt;Get Note attachment content&lt;/li&gt;&lt;li&gt;Send Email with attachment&lt;/li&gt;&lt;li&gt;Delete a Note attachment&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdySR-0w3LvZ6rr_UV40fUbBYTHX5SKOYxgVFkbYY8E-pVKVDlinNfG-vgrz63P8kXWb_F7FUH7lLkrqZH2Ia5SEeTjyIH7IaA4bDKXNrKy_QUloPSAvuP3zGDGEpWMknacYFocpLinFy6x6DkrtthQY6nJpk12rHViTFOUjJwIgF3hr40yJHEIb9qhw/s664/Application%20-%20Send%20Application%20Decision%20Letter.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;664&quot; data-original-width=&quot;623&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdySR-0w3LvZ6rr_UV40fUbBYTHX5SKOYxgVFkbYY8E-pVKVDlinNfG-vgrz63P8kXWb_F7FUH7lLkrqZH2Ia5SEeTjyIH7IaA4bDKXNrKy_QUloPSAvuP3zGDGEpWMknacYFocpLinFy6x6DkrtthQY6nJpk12rHViTFOUjJwIgF3hr40yJHEIb9qhw/s16000/Application%20-%20Send%20Application%20Decision%20Letter.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;1. Trigger and initialise variable&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhi_kRCgiYon4xEA71Sv-VZ1-vlmiwSN3c52AQRY5-_5GexKDjtxgxshf4o_c7KvACFLYFO9fFGQ6ExH9yAhs-9K9UQbTZMp-4GhMTPNPz9rvlCjLFpkO6pHEiAVQIO5chOj0i4I_ZGou78M54h47AVngYD7BG2NFrrBWvVsBTx4AyKanG5AEPGIA5ALg/s1084/Trigger%20and%20initialise%20variable.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1084&quot; data-original-width=&quot;616&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhi_kRCgiYon4xEA71Sv-VZ1-vlmiwSN3c52AQRY5-_5GexKDjtxgxshf4o_c7KvACFLYFO9fFGQ6ExH9yAhs-9K9UQbTZMp-4GhMTPNPz9rvlCjLFpkO6pHEiAVQIO5chOj0i4I_ZGou78M54h47AVngYD7BG2NFrrBWvVsBTx4AyKanG5AEPGIA5ALg/s16000/Trigger%20and%20initialise%20variable.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;The trigger can be anything depending on your business requirement. In this example, it triggers when the Status Reason (statuscode) is updated to Approved or Rejected. Four variables are initialised in the beginning of the flow.&amp;nbsp;Note ID is to keep the GUID of Note auto-generated by the&amp;nbsp;custom Set Word Template action to delete the Note at the end of the flow.&amp;nbsp;File Name,&amp;nbsp;Mime Type and&amp;nbsp;Document Body variables are used to keep the values of the attachment file from Note and set it to email attachment.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2. Populate Word template&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjR7qg8hAYXFt-pvV-qws62vx5c_BlklxOnoLQQgMrNxnBU6mzVQqjkZHqPtppWxR2PFtUix51LvDP3wuD0hG9xQ8garRhJ7d2zgJgj8MbFqxDMY2JZfPWLM2_WDntyia-KQv1VonjO5mNuNSgqkkpdjj0D0AltN2mExbrPidGO2WIF1VQ3TEZ6osKlRQ/s886/Populate%20Word%20template.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;886&quot; data-original-width=&quot;686&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjR7qg8hAYXFt-pvV-qws62vx5c_BlklxOnoLQQgMrNxnBU6mzVQqjkZHqPtppWxR2PFtUix51LvDP3wuD0hG9xQ8garRhJ7d2zgJgj8MbFqxDMY2JZfPWLM2_WDntyia-KQv1VonjO5mNuNSgqkkpdjj0D0AltN2mExbrPidGO2WIF1VQ3TEZ6osKlRQ/s16000/Populate%20Word%20template.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Depending on the value, different Word templates can be used to generate the document. In this example, the &lt;b&gt;Approval Letter Template&lt;/b&gt; is used when the &lt;b&gt;Status Reason&lt;/b&gt; of the &lt;b&gt;Application &lt;/b&gt;is &lt;b&gt;Approved&lt;/b&gt;. The GUID of the Document Template can be retrieved by the &lt;b&gt;List Rows&lt;/b&gt; action where the name of the template is same as the value in&amp;nbsp;&lt;b&gt;Approval Letter Template&lt;/b&gt;&amp;nbsp;environment variable.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To call the custom&amp;nbsp;Set Word Template action from the flow, we need to use the method mentioned in &lt;a href=&quot;https://linnzawwin.blogspot.com/2020/12/perform-boundunbound-action-with.html&quot; target=&quot;_blank&quot;&gt;this blog post&lt;/a&gt; to set the values of the EntityReference (Lookup) parameters as a JSON object. To make sure that the &quot;Perform an unbound action&quot; step is rendered as a generic steps, I set the Action Name as below.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;pre style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent; background: rgb(245, 242, 240); border-radius: 5px; border: 1px solid rgb(150, 150, 150); box-shadow: none; box-sizing: inherit; hyphens: none; line-height: 1.3; margin-bottom: 0.5em; margin-top: 0.5em; overflow: auto; padding: 10px; tab-size: 4; text-rendering: optimizelegibility; text-shadow: rgb(255, 255, 255) 0px 1px; word-break: break-all;&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-size: 12px; white-space: pre-wrap;&quot;&gt;trim(&#39;lzw_SetWordTemplate&#39;)&lt;/span&gt;&lt;span style=&quot;font-family: consolas, monaco, andale mono, ubuntu mono, monospace;&quot;&gt;&lt;span style=&quot;font-size: 12px; white-space: pre-wrap;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;The GUID of the&amp;nbsp;Document Template is the first object from the &lt;b&gt;List rows&lt;/b&gt; step above (which can be specified using the expression below. The Application GUID is part of the trigger output.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;pre style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent; background: rgb(245, 242, 240); border-radius: 5px; border: 1px solid rgb(150, 150, 150); box-shadow: none; box-sizing: inherit; hyphens: none; line-height: 1.3; margin-bottom: 0.5em; margin-top: 0.5em; overflow: auto; padding: 10px; tab-size: 4; text-rendering: optimizelegibility; text-shadow: rgb(255, 255, 255) 0px 1px; word-break: break-all;&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-size: 12px; white-space: pre-wrap;&quot;&gt;first(outputs(&#39;List_Document_Template_-_Application_Approval_Letter&#39;)?[&#39;body/value&#39;])?[&#39;documenttemplateid&#39;]&lt;/span&gt;&lt;span style=&quot;font-family: consolas, monaco, andale mono, ubuntu mono, monospace;&quot;&gt;&lt;span style=&quot;font-size: 12px; white-space: pre-wrap;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;3.&amp;nbsp;Get Note attachment content&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIBRE90dutopTFj7QsqURSBIjj0P11xzQOITj9pJyu1bYDhKXDnRYtAHHxYDFwouhTPXAvMAe0j1uGw8y-K0_XW-N2-lP-dY55IbyREYTdvqdxDfCUK__DmqxDg4bhCU-ro5JVlH-iBAZk4Hvh76Af0lsipFy1-DfpSm4scUY3_BhImdtJcRaxUkg2Cg/s1256/Get%20Note%20attachment%20content.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1256&quot; data-original-width=&quot;636&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIBRE90dutopTFj7QsqURSBIjj0P11xzQOITj9pJyu1bYDhKXDnRYtAHHxYDFwouhTPXAvMAe0j1uGw8y-K0_XW-N2-lP-dY55IbyREYTdvqdxDfCUK__DmqxDg4bhCU-ro5JVlH-iBAZk4Hvh76Af0lsipFy1-DfpSm4scUY3_BhImdtJcRaxUkg2Cg/s16000/Get%20Note%20attachment%20content.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;After the custom Set Word Template action, the populated document will be created as a Note attachment related to a record (Application in this example). The next step is to retrieve the content of the Note attachment and set to the variables. The List rows action will return an array, so the values of the first object can be retrieved by using the expressions below.&lt;/div&gt;&lt;div&gt;&lt;div&gt;Note ID&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;pre style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent; background: rgb(245, 242, 240); border-radius: 5px; border: 1px solid rgb(150, 150, 150); box-shadow: none; box-sizing: inherit; hyphens: none; line-height: 1.3; margin-bottom: 0.5em; margin-top: 0.5em; overflow: auto; padding: 10px; tab-size: 4; text-rendering: optimizelegibility; text-shadow: rgb(255, 255, 255) 0px 1px; word-break: break-all;&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-size: 12px; white-space: pre-wrap;&quot;&gt;first(outputs(&#39;List_Notes_-_Last_Created_for_Contact&#39;)?[&#39;body/value&#39;])?[&#39;annotationid&#39;]&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;font-family: Times New Roman; white-space: normal;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;File Name&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;pre style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent; background: rgb(245, 242, 240); border-radius: 5px; border: 1px solid rgb(150, 150, 150); box-shadow: none; box-sizing: inherit; hyphens: none; line-height: 1.3; margin-bottom: 0.5em; margin-top: 0.5em; overflow: auto; padding: 10px; tab-size: 4; text-rendering: optimizelegibility; text-shadow: rgb(255, 255, 255) 0px 1px; word-break: break-all;&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-size: 12px; white-space: pre-wrap;&quot;&gt;first(outputs(&#39;List_Notes_-_Last_Created_for_Contact&#39;)?[&#39;body/value&#39;])?[&#39;filename&#39;]&lt;/span&gt;&lt;span style=&quot;font-family: consolas, monaco, andale mono, ubuntu mono, monospace;&quot;&gt;&lt;span style=&quot;font-size: 12px; white-space: pre-wrap;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Mime Type&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;pre style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent; background: rgb(245, 242, 240); border-radius: 5px; border: 1px solid rgb(150, 150, 150); box-shadow: none; box-sizing: inherit; hyphens: none; line-height: 1.3; margin-bottom: 0.5em; margin-top: 0.5em; overflow: auto; padding: 10px; tab-size: 4; text-rendering: optimizelegibility; text-shadow: rgb(255, 255, 255) 0px 1px; word-break: break-all;&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-size: 12px; white-space: pre-wrap;&quot;&gt;first(outputs(&#39;List_Notes_-_Last_Created_for_Contact&#39;)?[&#39;body/value&#39;])?[&#39;mimetype&#39;]&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;font-family: Times New Roman; white-space: normal;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Document Body&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;pre style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent; background: rgb(245, 242, 240); border-radius: 5px; border: 1px solid rgb(150, 150, 150); box-shadow: none; box-sizing: inherit; hyphens: none; line-height: 1.3; margin-bottom: 0.5em; margin-top: 0.5em; overflow: auto; padding: 10px; tab-size: 4; text-rendering: optimizelegibility; text-shadow: rgb(255, 255, 255) 0px 1px; word-break: break-all;&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-size: 12px; white-space: pre-wrap;&quot;&gt;first(outputs(&#39;List_Notes_-_Last_Created_for_Contact&#39;)?[&#39;body/value&#39;])?[&#39;documentbody&#39;]&lt;/span&gt;&lt;span style=&quot;font-family: consolas, monaco, andale mono, ubuntu mono, monospace;&quot;&gt;&lt;span style=&quot;font-size: 12px; white-space: pre-wrap;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;4. Send Email with attachment&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiurMO63kUUVjsQu-avd3xyOJWd-rSUpZSm8vlK04vh5fYoADnyp_gPFvuz7TBVfipVIOyf7OwF0goU499pfKhHCkw_Bx3c4Hc_1bi9ei7su-UaNU0g6jb3jPlVgvTNHlJSGIE0RpKuPr5EqHjorSrIEqTq2buf4D1wfRNgIcAqk0GQlaRCydXjDtUxTg/s1540/Send%20Email.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1540&quot; data-original-width=&quot;646&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiurMO63kUUVjsQu-avd3xyOJWd-rSUpZSm8vlK04vh5fYoADnyp_gPFvuz7TBVfipVIOyf7OwF0goU499pfKhHCkw_Bx3c4Hc_1bi9ei7su-UaNU0g6jb3jPlVgvTNHlJSGIE0RpKuPr5EqHjorSrIEqTq2buf4D1wfRNgIcAqk0GQlaRCydXjDtUxTg/s16000/Send%20Email.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;The next step is to send an email with the attachment. The detailed information can be found in &lt;a href=&quot;https://linnzawwin.blogspot.com/2020/05/send-email-from-dynamics-365cds-with.html#RetrieveNotes&quot; target=&quot;_blank&quot;&gt;this blog post&lt;/a&gt;. For this example, a new email is created with&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Queue (with hardcoded GUID) as a sender&lt;/li&gt;&lt;li&gt;Contact from the Application as a recipient and&lt;/li&gt;&lt;li&gt;the Application itself as Regarding of an Email.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Then, Activity MIME Attachment is created with &quot;null&quot; value for&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Attachment (Attachments)&lt;/li&gt;&lt;li&gt;custom text value &quot;email&quot; for Entity&lt;/li&gt;&lt;li&gt;Email GUID from the step above to Item (Email Messages)&lt;/li&gt;&lt;li&gt;Document Body,&amp;nbsp;File Name,&amp;nbsp;Mime Type variables to respective columns&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;After that, SendEmail bound action is called with the IssueSend = Yes.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;5. Delete a Note attachment&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi480ujKgqcRqHm5Vm03oyD_U4EsItZ-U1iwJbQMynNuku_Z2jpPgzB9hUd8n31nOho67D6sMOvQr3mEAxmMhUkL7h4gHn3EmTUmVCuwshCs0xaIlRYQSUYoIpPLi1akJFzd9LsDFjov41GcgJ_qNzy2cz2IFcDIMzbl79inC4qNI_nTY5PzJoPdnJiGg/s618/Delete%20a%20Note%20attachment.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;196&quot; data-original-width=&quot;618&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi480ujKgqcRqHm5Vm03oyD_U4EsItZ-U1iwJbQMynNuku_Z2jpPgzB9hUd8n31nOho67D6sMOvQr3mEAxmMhUkL7h4gHn3EmTUmVCuwshCs0xaIlRYQSUYoIpPLi1akJFzd9LsDFjov41GcgJ_qNzy2cz2IFcDIMzbl79inC4qNI_nTY5PzJoPdnJiGg/s16000/Delete%20a%20Note%20attachment.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;The last step is to delete the Note attachment generated by the custom Set Word Template action.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If the requirement is to generate a PDF document (instead of Word document file) based on the Word template and send as an email, you can &lt;a href=&quot;https://2die4it.com/2019/08/20/generate-pdf-from-document-templates-in-cds-dynamics-365-ce-using-native-web-api-with-flow/&quot; target=&quot;_blank&quot;&gt;follow the instructions in this blog post&lt;/a&gt; to&amp;nbsp;invoke an HTTP request to&amp;nbsp;&lt;i&gt;{dynamicsURL}/api/data/v9.0/ExportPdfDocument&lt;/i&gt; API. The Web API endpoint ExportPdfDocument is part of the &lt;b&gt;&lt;i&gt;Export sales records to PDF&lt;/i&gt;&lt;/b&gt; functionality, so it might not be available in the Dataverse environment where&amp;nbsp;Dynamics 365 Sales module is not installed.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://linnzawwin.blogspot.com/feeds/5940133065312175010/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://linnzawwin.blogspot.com/2022/10/generate-document-from-word-template.html#comment-form' title='17 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/5940133065312175010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/5940133065312175010'/><link rel='alternate' type='text/html' href='http://linnzawwin.blogspot.com/2022/10/generate-document-from-word-template.html' title='Generate Document From Word Template and Send As Email Attachment Using Cloud Flow'/><author><name>Linn Zaw Win</name><uri>http://www.blogger.com/profile/16015532694415495453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaCUObunP3kiYNRu6pZ-J4ezoWDP-Jf1Cv010HLXr_bLFmB0bcZj8atUiBYmg37uDyBDzxPrHFX7EGESjgSMIOIBX7TR9VS9nZ179jpYpTkpsDtw09albFOTBEXTdw2OhtXLyZkfd4kBnOHYZmGSoge7m2XxXOVZvFJxuEiXnTmg7sRRc/s220/IMG_5259-Square%20-%20MVP.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgW5CR1MCiVNi12edm72L9ZnrRx38u1PJrYtcrdmrGqsCKlfifYGmatg_CUCWRG6DClNbGt_vUFQGMVL0YGGrZ9235i26gflRPfwQxsTR1nWNDRRd5GzUJ9YcCOA6XA1IAxhVN6VzochnRjGn45brqGwJ8E7H4pDb0nTQ6EvpZfUwhqWTskL51fv-vGMA/s72-w400-h181-c/Thumbnail.png" height="72" width="72"/><thr:total>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3970629459363259828.post-7888137902036664877</id><published>2022-09-19T20:23:00.004+10:00</published><updated>2022-09-19T20:29:09.388+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="label"/><category scheme="http://www.blogger.com/atom/ns#" term="model-driven apps"/><title type='text'>Formatting Section or Field Label as Bold/Italic in Model-driven App</title><content type='html'>&lt;meta content=&quot;summary_large_image&quot; name=&quot;twitter:card&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;You can add some styling to the labels of the controls (field, tab, section, grid, etc.) in model-driven apps by using the Unicode version of bold/italic characters.&quot; name=&quot;twitter:description&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiChomVKesT4mKR5E1_Op_oBsv8mtEBBvPcq4x1ZLI6j7W8ztQAwgUCa_H6yxobyTbO-6Yih0iCMKD6Q1MhKmb8qotJeI9XYvSn1TizYxwSYqWaSx5YB4wh83TuAUCU3fU9-qaa7YhzeSwsckupVNHhfppTGeEDYSHM4i7vHgDBGNcJT4GgIvsj8BW8og/s637/Formatting%20Section%20or%20Field%20Label%20as%20Bold%20Italic%20in%20Model-driven%20App.png&quot; name=&quot;twitter:image&quot;&gt;&lt;/meta&gt;
&lt;div&gt;
  In the form designer for Power Apps model-driven app (or Dynamics 365 app),
  there is no way to add some styling to the labels of the controls (field, tab,
  section, grid, etc.). But if you want to emphasise some of the words in your
  label, you can achieve some limited formatting by using the&amp;nbsp;Unicode version of bold/italic characters. You may also add some emojis
  &lt;a href=&quot;https://meganvwalker.com/using-emojis-in-optionset-fields/&quot; target=&quot;_blank&quot;&gt;like&amp;nbsp;emoji Meg&lt;/a&gt;.
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiChomVKesT4mKR5E1_Op_oBsv8mtEBBvPcq4x1ZLI6j7W8ztQAwgUCa_H6yxobyTbO-6Yih0iCMKD6Q1MhKmb8qotJeI9XYvSn1TizYxwSYqWaSx5YB4wh83TuAUCU3fU9-qaa7YhzeSwsckupVNHhfppTGeEDYSHM4i7vHgDBGNcJT4GgIvsj8BW8og/s637/Formatting%20Section%20or%20Field%20Label%20as%20Bold%20Italic%20in%20Model-driven%20App.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;469&quot; data-original-width=&quot;637&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiChomVKesT4mKR5E1_Op_oBsv8mtEBBvPcq4x1ZLI6j7W8ztQAwgUCa_H6yxobyTbO-6Yih0iCMKD6Q1MhKmb8qotJeI9XYvSn1TizYxwSYqWaSx5YB4wh83TuAUCU3fU9-qaa7YhzeSwsckupVNHhfppTGeEDYSHM4i7vHgDBGNcJT4GgIvsj8BW8og/s16000/Formatting%20Section%20or%20Field%20Label%20as%20Bold%20Italic%20in%20Model-driven%20App.png&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div&gt;
  Search something like &quot;bold text generator&quot; or &quot;italic text generator&quot; in your
  favourite search engine and enter one of those tools (e.g.
  &lt;a href=&quot;https://yaytext.com/bold-italic/&quot; target=&quot;_blank&quot;&gt;yaytext&lt;/a&gt;). Enter
  the text that you want to style and copy the version that you like.
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6Xabacj0Y7OvL3w1OnnwPcMHoqFJwLtwB0eGiilpDyAyCaLGOg7hvxelnASYuQ28hH6tSOu9akY13Yiie5hFROazY_P57tCHruky_5vWsMFeOXCdzlzY1ku3UFMh0i66-a_Js22H2CNWKLsxGRWBG_9qEHkCHVAMkDi_LJTOs19aWHSMKNnGmaRrwmg/s799/yayatext.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;397&quot; data-original-width=&quot;799&quot; height=&quot;318&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6Xabacj0Y7OvL3w1OnnwPcMHoqFJwLtwB0eGiilpDyAyCaLGOg7hvxelnASYuQ28hH6tSOu9akY13Yiie5hFROazY_P57tCHruky_5vWsMFeOXCdzlzY1ku3UFMh0i66-a_Js22H2CNWKLsxGRWBG_9qEHkCHVAMkDi_LJTOs19aWHSMKNnGmaRrwmg/w640-h318/yayatext.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;Paste it to the label input of the control in the form designer.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNTSNkEfP3b1jvIocfAU4i0YxKKGv9HKyGe92Ek1gjFUh7XQI6KLMC8LbXI9S30TBaE_1vYyszTld7ckbNg354ErCclUlxMv009UwO3iOlT_v9542FtvLhmk6JkAu9vmv0B70vtfk2AN_5rtKcjTK5w2BnnJo8OOYwMUbFbZICqzaZhAwCn67IGCxbJA/s490/Form%20Designer.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;490&quot; data-original-width=&quot;274&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNTSNkEfP3b1jvIocfAU4i0YxKKGv9HKyGe92Ek1gjFUh7XQI6KLMC8LbXI9S30TBaE_1vYyszTld7ckbNg354ErCclUlxMv009UwO3iOlT_v9542FtvLhmk6JkAu9vmv0B70vtfk2AN_5rtKcjTK5w2BnnJo8OOYwMUbFbZICqzaZhAwCn67IGCxbJA/s16000/Form%20Designer.png&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://linnzawwin.blogspot.com/feeds/7888137902036664877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://linnzawwin.blogspot.com/2022/09/formatting-section-or-field-label-as.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/7888137902036664877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/7888137902036664877'/><link rel='alternate' type='text/html' href='http://linnzawwin.blogspot.com/2022/09/formatting-section-or-field-label-as.html' title='Formatting Section or Field Label as Bold/Italic in Model-driven App'/><author><name>Linn Zaw Win</name><uri>http://www.blogger.com/profile/16015532694415495453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaCUObunP3kiYNRu6pZ-J4ezoWDP-Jf1Cv010HLXr_bLFmB0bcZj8atUiBYmg37uDyBDzxPrHFX7EGESjgSMIOIBX7TR9VS9nZ179jpYpTkpsDtw09albFOTBEXTdw2OhtXLyZkfd4kBnOHYZmGSoge7m2XxXOVZvFJxuEiXnTmg7sRRc/s220/IMG_5259-Square%20-%20MVP.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiChomVKesT4mKR5E1_Op_oBsv8mtEBBvPcq4x1ZLI6j7W8ztQAwgUCa_H6yxobyTbO-6Yih0iCMKD6Q1MhKmb8qotJeI9XYvSn1TizYxwSYqWaSx5YB4wh83TuAUCU3fU9-qaa7YhzeSwsckupVNHhfppTGeEDYSHM4i7vHgDBGNcJT4GgIvsj8BW8og/s72-c/Formatting%20Section%20or%20Field%20Label%20as%20Bold%20Italic%20in%20Model-driven%20App.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3970629459363259828.post-980715031178383104</id><published>2022-09-05T22:36:00.008+10:00</published><updated>2022-09-12T18:44:13.905+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="error"/><category scheme="http://www.blogger.com/atom/ns#" term="plugin"/><title type='text'>Debugging Pre Operation Plug-In Without Plug-In Trace Log</title><content type='html'>&lt;meta content=&quot;summary_large_image&quot; name=&quot;twitter:card&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;If you get a generic plug-in error with no plug-in trace log or no way to download the error log, you may be able to find more error details in the Network tab from the browser DevTools.&quot; name=&quot;twitter:description&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqix6hY-mBFF9K5Y5EfMkzEwlYbhcTHJ6rjHVsoRrizXNhBcQIgtCUwNSU3nIsVkZki1pcfaxWQENDP_nYKYmH04FOW0xnxw67cVYZJ70eStKbJemx4xj49jEKQq13PVcXvLUtAbB9ou9Wncj2gIOhdixTxeqLN9nfZzWbBX8C8vYrboq7yNzbJqvQ4w/s939/Thumbnail.png&quot; name=&quot;twitter:image&quot;&gt;&lt;/meta&gt;
&lt;div&gt;
  Recently, I developed a plugin which triggers on&amp;nbsp;pre-operation stage. As
  typical pre-operation plug-ins, the logic is to&amp;nbsp;intercept the
  InputParameters and modify them based on custom logic.
&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
  After deploying the plug-in to the Development environment, I just got a
  generic error as below when I tested by making a change that would trigger the
  plug-in. There is no arrow icon to expand for the detailed error message or no
  button to download the error log either.
&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;a
    href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqix6hY-mBFF9K5Y5EfMkzEwlYbhcTHJ6rjHVsoRrizXNhBcQIgtCUwNSU3nIsVkZki1pcfaxWQENDP_nYKYmH04FOW0xnxw67cVYZJ70eStKbJemx4xj49jEKQq13PVcXvLUtAbB9ou9Wncj2gIOhdixTxeqLN9nfZzWbBX8C8vYrboq7yNzbJqvQ4w/s939/Thumbnail.png&quot;
    imageanchor=&quot;1&quot;
    style=&quot;margin-left: 1em; margin-right: 1em;&quot;
    &gt;&lt;img
      border=&quot;0&quot;
      data-original-height=&quot;581&quot;
      data-original-width=&quot;939&quot;
      height=&quot;396&quot;
      src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqix6hY-mBFF9K5Y5EfMkzEwlYbhcTHJ6rjHVsoRrizXNhBcQIgtCUwNSU3nIsVkZki1pcfaxWQENDP_nYKYmH04FOW0xnxw67cVYZJ70eStKbJemx4xj49jEKQq13PVcXvLUtAbB9ou9Wncj2gIOhdixTxeqLN9nfZzWbBX8C8vYrboq7yNzbJqvQ4w/w640-h396/Thumbnail.png&quot;
      width=&quot;640&quot;
  /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
  When I checked the&amp;nbsp;Plug-In Trace Logs, there is no entry with an
  exception. I updated the plug-in trace log level in System Settings to
  &lt;b&gt;All&lt;/b&gt;&amp;nbsp;but there is no error message in my custom plug-in trace
  either.
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;a
    href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhe7Fvv5BSVFfM_huNogIcjeGYyH3L4ZwQpp-lRj-det4w6dW4_Lk1FAxXGh_IxJ5ad7GAWAComV7IRdFwHzaHfGJm8xgw1EEWKbkDdK1IcOvhZd-DvKkzDS08L881tE-StQpzQNXnABtVZXX9kCTWbFIFF6Kwj5nN6xEW866fu87XGwEYmo2NuyQhNVA/s1473/Plugin%20Trace%20Log.png&quot;
    style=&quot;margin-left: 1em; margin-right: 1em;&quot;
    &gt;&lt;img
      border=&quot;0&quot;
      data-original-height=&quot;843&quot;
      data-original-width=&quot;1473&quot;
      height=&quot;366&quot;
      src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhe7Fvv5BSVFfM_huNogIcjeGYyH3L4ZwQpp-lRj-det4w6dW4_Lk1FAxXGh_IxJ5ad7GAWAComV7IRdFwHzaHfGJm8xgw1EEWKbkDdK1IcOvhZd-DvKkzDS08L881tE-StQpzQNXnABtVZXX9kCTWbFIFF6Kwj5nN6xEW866fu87XGwEYmo2NuyQhNVA/w640-h366/Plugin%20Trace%20Log.png&quot;
      width=&quot;640&quot;
  /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
  There is no error in the plug-in trace log because the error is in the main
  operation due to invalid InputParameters after the completion of the custom
  plug-in and there was no error in the pre-operation plug-in. In that case,
  debugging using a&amp;nbsp;plug-in profiler would not be helpful either because
  the error happens after the plug-in triggers.
&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
  If you are in a similar situation as me and want to see the error message in
  the main operation,
&lt;/div&gt;
&lt;div&gt;
  &lt;ol style=&quot;text-align: left;&quot;&gt;
    &lt;li&gt;Open the DevTools of the browser, Open the Network tab&lt;/li&gt;
    &lt;li&gt;
      Clear if there are a lot of Network requests. After that, replicate the
      issue and click on the request (the red one) with&amp;nbsp;status 403
      (Forbidden) or status 500 (Internal Server Error)
    &lt;/li&gt;
    &lt;li&gt;In the Response tab, for that particular request&lt;/li&gt;
    &lt;li&gt;
      You will see the detailed message of the error. (In my case, setting a
      wrong object to the&amp;nbsp;PrincipalAccess property 🤦‍♂️)
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;a
    href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZG9M7peUDbRCHLo-YxSY8vPQZlu1OkieJ4HhXGlKcjBwdT1J8FJyoKvgbRv8_4bD_NceEu65kIJJGowfTHlxHy23dKYpr0Pp1KRDOeRT3hUlHivfbqQPzULe46G0ZAEMVRsncG2swz0s28EVOo6-68BGcgJtJFqEJdB_WxMxh61HZveSxyuDMgbjNQg/s1438/DevTools%20Error.png&quot;
    style=&quot;margin-left: 1em; margin-right: 1em;&quot;
    &gt;&lt;img
      border=&quot;0&quot;
      data-original-height=&quot;368&quot;
      data-original-width=&quot;1438&quot;
      height=&quot;164&quot;
      src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZG9M7peUDbRCHLo-YxSY8vPQZlu1OkieJ4HhXGlKcjBwdT1J8FJyoKvgbRv8_4bD_NceEu65kIJJGowfTHlxHy23dKYpr0Pp1KRDOeRT3hUlHivfbqQPzULe46G0ZAEMVRsncG2swz0s28EVOo6-68BGcgJtJFqEJdB_WxMxh61HZveSxyuDMgbjNQg/w640-h164/DevTools%20Error.png&quot;
      width=&quot;640&quot;
  /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
  This method can be used to&amp;nbsp;decipher some of those generic error messages
  like&amp;nbsp;&quot;An error has occurred.&quot;, &quot;You do not have {0} permission to access
  {1} records.&quot;, etc. without more detailed message or a button to download the
  log file. You can read more about it in
  &lt;a
    href=&quot;https://linnzawwin.blogspot.com/2020/01/model-driven-apps-get-descriptive-error.html#option3&quot;
    target=&quot;_blank&quot;
    &gt;my previous blog post&lt;/a
  &gt;.
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://linnzawwin.blogspot.com/feeds/980715031178383104/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://linnzawwin.blogspot.com/2022/09/debugging-pre-operation-plug-in-without.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/980715031178383104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/980715031178383104'/><link rel='alternate' type='text/html' href='http://linnzawwin.blogspot.com/2022/09/debugging-pre-operation-plug-in-without.html' title='Debugging Pre Operation Plug-In Without Plug-In Trace Log'/><author><name>Linn Zaw Win</name><uri>http://www.blogger.com/profile/16015532694415495453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaCUObunP3kiYNRu6pZ-J4ezoWDP-Jf1Cv010HLXr_bLFmB0bcZj8atUiBYmg37uDyBDzxPrHFX7EGESjgSMIOIBX7TR9VS9nZ179jpYpTkpsDtw09albFOTBEXTdw2OhtXLyZkfd4kBnOHYZmGSoge7m2XxXOVZvFJxuEiXnTmg7sRRc/s220/IMG_5259-Square%20-%20MVP.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqix6hY-mBFF9K5Y5EfMkzEwlYbhcTHJ6rjHVsoRrizXNhBcQIgtCUwNSU3nIsVkZki1pcfaxWQENDP_nYKYmH04FOW0xnxw67cVYZJ70eStKbJemx4xj49jEKQq13PVcXvLUtAbB9ou9Wncj2gIOhdixTxeqLN9nfZzWbBX8C8vYrboq7yNzbJqvQ4w/s72-w640-h396-c/Thumbnail.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3970629459363259828.post-6990395910757321438</id><published>2022-08-31T21:57:00.009+10:00</published><updated>2022-09-05T07:52:56.367+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cloud flow"/><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft Dataverse"/><category scheme="http://www.blogger.com/atom/ns#" term="Power Automate"/><category scheme="http://www.blogger.com/atom/ns#" term="trigger"/><title type='text'>Cloud Flows with Dataverse Trigger Not Working After Solution Import</title><content type='html'>&lt;meta content=&quot;summary_large_image&quot; name=&quot;twitter:card&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;If you are experiencing an issue with the Dataverse cloud flows which are not getting triggered after solution import, you can use a SQL query using SQL 4 CDS XrmToolBox Tool to identify the affected cloud flows which are missing a related CallbackRegistration data. You can also use a PowerShell script to turn off/on all the flows after solution import and part of the CI/CD pipeline to prevent this issue too.&quot; name=&quot;twitter:description&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgO-zSZ4KnnPSEqFCdXEdRZqTMLkc1E-ASpR5gtjDKETqot1TUpMaFGX6zqX_mcw9JcbkyPl6SQ4KclMVWxd4PACiSIvQalJGpM9TmF1Il7yVh1OgxLy6U8c_qTgQonINduCQgERKKA0op6c-XvozcnGuag4u2JvssOHjwWTPdl6zWTLEqBEck0PF9jaQ/s600/Turn%20Off%20and%20On%20Again.png&quot; name=&quot;twitter:image&quot;&gt;&lt;/meta&gt;


&lt;div&gt;
  &lt;div&gt;
    This post will explain how you can identify the root cause of the issue and
    resolve it if some of the cloud flows with Dataverse trigger are not getting triggered after solution import even though the status of the flow is &quot;On&quot;.&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;color: #0000ee; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;750&quot; data-original-width=&quot;750&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhU4rdDvzndEyhED-OTlNxP4JzDVyO6yTICH563FNGrIU_1VSr6kFrmo3EMj-pipCjq95TuGgBQKJMElqFKk6FmjKaPyn_mcViDnaJ8X81SiMGpar1SnTzHw6XbXSB8gD6AozV3wMTCbKQnb3L6rf8Q7QmM5lpAcDZQLBNlGsTPGP89oZmp5uWRvxqn5w/w400-h400/Turn%20Off%20and%20On%20Again.png&quot; style=&quot;color: #0000ee; text-align: center;&quot; width=&quot;400&quot; /&gt;&lt;/div&gt;&lt;div&gt;After one of the deployments, the test team reported that some of the cloud
    flows are not getting triggered when a row is added or updated in Dataverse.
    Most of the flows are working and it only happens for some of the flows, so
    it is not because of the &quot;&lt;a href=&quot;https://nishantrana.me/2021/05/11/set-custom-message-and-disable-background-processes-inside-the-administration-mode-for-sandbox-and-production-environment-power-platform/&quot; target=&quot;_blank&quot;&gt;Background operations&lt;/a&gt;&quot; being disabled in the environment in &quot;&lt;a href=&quot;https://debajmecrm.com/power-automate-flows-not-getting-triggered-for-environment/&quot; target=&quot;_blank&quot;&gt;Administration Mode&lt;/a&gt;&quot;. We checked the flow and the status of the flow is also &quot;On&quot;. There is no
    error message about the&amp;nbsp;problem with the flow&#39;s trigger. When we turn
    off the flow and turn it on, the changes in Dataverse start triggering the
    flow again. Upon further investigation, the affected cloud flows are missing
    a related row in CallbackRegistration table.&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;&lt;b&gt;What is&amp;nbsp;CallbackRegistration table?&lt;/b&gt;&lt;/div&gt;
  &lt;div&gt;
    There is no official documentation about&amp;nbsp;CallbackRegistration table but
    it stores the trigger information of the async background operations (async
    classic workflow, cloud flows but not async plugin) such as trigger message
    (e.g. Create, Update, Delete), Table name, Scope, Filtering Columns,
    Filtering Expression (e.g. statecode eq 0), Run as User, etc.
  &lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;
    In this case, the trigger information of the affected cloud flows in
    the&amp;nbsp;CallbackRegistration table were deleted&amp;nbsp;during the solution
    import somehow so that the flows were not getting triggered even though the
    flow status is &quot;On&quot;.
  &lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;
    &lt;b&gt;How do I find the affected cloud flows when I experience the same
      issue?&lt;/b&gt;
  &lt;/div&gt;
  &lt;div&gt;
    There were dozens of flows in our system, so we could not possibly test the
    trigger of all flows manually. I wrote a small SQL query to query all activated cloud flows (the ones with modern flow category in workflow table) and show the related CallbackRegistration data using &lt;a href=&quot;https://markcarrington.dev/sql-4-cds/&quot; target=&quot;_blank&quot;&gt;SQL 4 CDS XrmToolBox Tool&lt;/a&gt;. You can filter the flows based on the unique name of the solutions and non-Dataverse trigger flows (e.g. manual flow, recurring flow, flows with other triggers such as SharePoint, Outlook, etc.) can be excluded from the query with the name of the flows.&lt;div&gt;&lt;pre style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent; background: rgb(245, 242, 240); border-radius: 5px; border: 1px solid rgb(150, 150, 150); box-shadow: none; box-sizing: inherit; hyphens: none; line-height: 1.3; margin-bottom: 0.5em; margin-top: 0.5em; overflow: auto; padding: 10px; tab-size: 4; text-rendering: optimizelegibility; text-shadow: rgb(255, 255, 255) 0px 1px; word-break: break-all;&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-size: 12px; white-space: pre-wrap;&quot;&gt;SELECT friendlyname, workflowid, workflow.name, workflow.statecodename, callbackregistration.name, callbackregistration.entityname, callbackregistration.messagename, SUBSTRING(clientdata, CHARINDEX(&#39;triggers&#39;, clientdata), 70) from workflow
LEFT OUTER JOIN callbackregistration ON workflowid = callbackregistration.name
LEFT OUTER JOIN solutioncomponent ON workflowid = solutioncomponent.objectid
LEFT OUTER JOIN solution on solutioncomponent.solutionid = solution.solutionid
WHERE category = 5
AND statecode = 1
AND solution.uniquename IN (&#39;Solution1&#39;, &#39;PowerPlatformPlayground&#39;)
AND workflow.name NOT IN
(
&#39;Name of the Child Flow with Manaul Trigger 1&#39;,
&#39;Name of the Recurring Flow 2&#39;,
&#39;Name of the Flow with other trigger 3&#39;
)
ORDER BY callbackregistration.name, workflow.name&lt;/span&gt;&lt;span style=&quot;font-family: consolas, monaco, andale mono, ubuntu mono, monospace;&quot;&gt;&lt;span style=&quot;font-size: 12px; white-space: pre-wrap;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div&gt;In the screenshot below, cloud flows from row 1-13 do not have&amp;nbsp;related CallbackRegistration data. But based on the name of the flow or the trigger value in the clientdata, we can identify that all of the flows are instant flows with manual trigger except the flow in row 11 which has the SharePoint folder. If any of the flows with Dataverse trigger are missing related CallbackRegistration data (NULL value for the columns 5-7), it means those flows are not getting triggered even though the status is &quot;On&quot;.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjv0RHsAO9hqKdhyRj--058ywC_c5-HLxga1uvT4ZigI599X2O296-Dri7tcsl3dnDndx3VSN0McvVGTy1qv3KtubFW5P6Knk0mgU0LoBT8ubuvBcoo_aPwyLKeUd7yRE2mN8lX6d_RW1c8phytDY4U1NE0RcqHelhn3ndcsd-cVWcbgVENxrceeADP_Q/s1440/SQL%20Callback%20Reg.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;898&quot; data-original-width=&quot;1440&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjv0RHsAO9hqKdhyRj--058ywC_c5-HLxga1uvT4ZigI599X2O296-Dri7tcsl3dnDndx3VSN0McvVGTy1qv3KtubFW5P6Knk0mgU0LoBT8ubuvBcoo_aPwyLKeUd7yRE2mN8lX6d_RW1c8phytDY4U1NE0RcqHelhn3ndcsd-cVWcbgVENxrceeADP_Q/w640-h400/SQL%20Callback%20Reg.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;I am getting the following error while running the SQL query above in&amp;nbsp;SQL 4 CDS Tool.&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&quot;Conversion failed when converting from a character string to uniqueidentifier.&quot;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;It happens when the name column of the&amp;nbsp;CallbackRegistration table contains some text value other than the GUID of the workflow row ID. Since CallbackRegistration table is not documented, I am also not sure how it can be joined effectively to the workflow table (where the cloud flows are stored)&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8noRmKkv_wyYI57lt4gpwm3cNtoukw2W3lHjHzUdNkPr2sQ6xYR8fn3dsKLkaZI3q37T5obR9Y3x6DdH2u5AQdDRU3F8YRjHWb1shZo0r7HIGf3tqFQtiGFOvEWOJc9L5RX2qqqIx2LqxqocOywkIdrx0MZimYjslNh_D63DzF-oZlV_H87Twa4mBhQ/s672/Invalid%20Callback%20Registration%20Name.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;310&quot; data-original-width=&quot;672&quot; height=&quot;296&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8noRmKkv_wyYI57lt4gpwm3cNtoukw2W3lHjHzUdNkPr2sQ6xYR8fn3dsKLkaZI3q37T5obR9Y3x6DdH2u5AQdDRU3F8YRjHWb1shZo0r7HIGf3tqFQtiGFOvEWOJc9L5RX2qqqIx2LqxqocOywkIdrx0MZimYjslNh_D63DzF-oZlV_H87Twa4mBhQ/w640-h296/Invalid%20Callback%20Registration%20Name.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;If it happens in your environment, query the cloud flows and CallbackRegistration table in a separate query and compare manually in the Excel file.&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;pre style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent; background: rgb(245, 242, 240); border-radius: 5px; border: 1px solid rgb(150, 150, 150); box-shadow: none; box-sizing: inherit; hyphens: none; line-height: 1.3; margin-bottom: 0.5em; margin-top: 0.5em; overflow: auto; padding: 10px; tab-size: 4; text-rendering: optimizelegibility; text-shadow: rgb(255, 255, 255) 0px 1px; word-break: break-all;&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-size: 12px; white-space: pre-wrap;&quot;&gt;SELECT friendlyname, workflowid, workflow.name, workflow.statecodename, SUBSTRING(clientdata, CHARINDEX(&#39;triggers&#39;, clientdata), 70) from workflow
LEFT OUTER JOIN solutioncomponent ON workflowid = solutioncomponent.objectid
LEFT OUTER JOIN solution on solutioncomponent.solutionid = solution.solutionid
WHERE category = 5
AND statecode = 1
AND solution.uniquename IN (&#39;Solution1&#39;, &#39;PowerPlatformPlayground&#39;)
AND workflow.name NOT IN
(
&#39;Name of the Child Flow with Manaul Trigger 1&#39;,
&#39;Name of the Recurring Flow 2&#39;,
&#39;Name of the Flow with other trigger 3&#39;
)
ORDER BY friendlyname, workflow.name
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent; background: rgb(245, 242, 240); border-radius: 5px; border: 1px solid rgb(150, 150, 150); box-shadow: none; box-sizing: inherit; hyphens: none; line-height: 1.3; margin-bottom: 0.5em; margin-top: 0.5em; overflow: auto; padding: 10px; tab-size: 4; text-rendering: optimizelegibility; text-shadow: rgb(255, 255, 255) 0px 1px; word-break: break-all;&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span style=&quot;color: black; font-size: 12px; white-space: pre-wrap;&quot;&gt;SELECT name, entityname, messagename
FROM callbackregistration
ORDER BY name&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;I am not allowed to use XrmToolBox in my organisation. Is there any other option?&lt;/b&gt;&lt;/div&gt;&lt;div&gt;In that case, you can query the list of cloud flows and CallbackRegistration table with the WebAPI query below.&lt;/div&gt;&lt;div&gt;&lt;pre style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent; background: rgb(245, 242, 240); border-radius: 5px; border: 1px solid rgb(150, 150, 150); box-shadow: none; box-sizing: inherit; hyphens: none; line-height: 1.3; margin-bottom: 0.5em; margin-top: 0.5em; overflow: auto; padding: 10px; tab-size: 4; text-rendering: optimizelegibility; text-shadow: rgb(255, 255, 255) 0px 1px; word-break: break-all;&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span style=&quot;color: black; font-size: 12px; white-space: pre-wrap;&quot;&gt;https://«OrgName».«CrmRegion».dynamics.com/api/data/v9.2/workflows?$select=workflowid,name&amp;amp;$filter=category%20eq%205%20and%20statecode%20eq%200&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;pre style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent; background: rgb(245, 242, 240); border-radius: 5px; border: 1px solid rgb(150, 150, 150); box-shadow: none; box-sizing: inherit; hyphens: none; line-height: 1.3; margin-bottom: 0.5em; margin-top: 0.5em; overflow: auto; padding: 10px; tab-size: 4; text-rendering: optimizelegibility; text-shadow: rgb(255, 255, 255) 0px 1px; word-break: break-all;&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span style=&quot;color: black; font-size: 12px; white-space: pre-wrap;&quot;&gt;https://«OrgName».«CrmRegion».dynamics.com/api/data/v9.2/callbackregistrations?$select=name,entityname,message&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;If I encounter such an issue, shall I report it to Microsoft?&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Microsoft product team is aware of some scenarios where while importing the solution issue with Callback Registrations happens and they are working to fix those issues. Some of the scenarios are:&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;When an environment is copied.&lt;/li&gt;&lt;li&gt;Current Flow owner has limited privileges in the Org where the solution flow is imported.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Other than the scenarios above, if you encounter such an issue after solution import, you can&amp;nbsp;report it to Microsoft Support so that the product team can work together to get the details and find the reason and fix the issue for other scenarios as well.&lt;/div&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Until the issue is fixed how can I prevent it from happening in my solution import?&lt;/b&gt;&lt;/div&gt;&lt;div&gt;You can add a step in your CI/CD pipeline to &lt;a href=&quot;https://kanivalanraju.wordpress.com/2020/07/31/dynamics-365-ci-cd-turn-on-power-automate-ms-flow-using-powershell/&quot; target=&quot;_blank&quot;&gt;turn off all the flows from the solution and turn those back on&lt;/a&gt; after solution import.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Are there any other scenarios that could cause this issue?&lt;/b&gt;&lt;/div&gt;&lt;div&gt;I have not experienced it personally but there are some incidents where the old CallbackRegistration data of the cloud flows were not getting deleted during the solution import so that the new ones are not created. For that issue, a Microsoft Support ticket was raised and it was resolved by re-importing the solution again after the support team deleted the old CallbackRegistration data.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Summary&lt;/h3&gt;&lt;div&gt;If you are experiencing an issue with the Dataverse&amp;nbsp;cloud flows which are not getting triggered after solution import, you can use a SQL query&amp;nbsp;using SQL 4 CDS XrmToolBox Tool to identify the affected cloud flows which are missing a related CallbackRegistration data. You can also use a PowerShell script to turn off/on all the flows after solution import and part of the CI/CD pipeline to prevent this issue too.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://linnzawwin.blogspot.com/feeds/6990395910757321438/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://linnzawwin.blogspot.com/2022/08/cloud-flows-with-dataverse-trigger-not.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/6990395910757321438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/6990395910757321438'/><link rel='alternate' type='text/html' href='http://linnzawwin.blogspot.com/2022/08/cloud-flows-with-dataverse-trigger-not.html' title='Cloud Flows with Dataverse Trigger Not Working After Solution Import'/><author><name>Linn Zaw Win</name><uri>http://www.blogger.com/profile/16015532694415495453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaCUObunP3kiYNRu6pZ-J4ezoWDP-Jf1Cv010HLXr_bLFmB0bcZj8atUiBYmg37uDyBDzxPrHFX7EGESjgSMIOIBX7TR9VS9nZ179jpYpTkpsDtw09albFOTBEXTdw2OhtXLyZkfd4kBnOHYZmGSoge7m2XxXOVZvFJxuEiXnTmg7sRRc/s220/IMG_5259-Square%20-%20MVP.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhU4rdDvzndEyhED-OTlNxP4JzDVyO6yTICH563FNGrIU_1VSr6kFrmo3EMj-pipCjq95TuGgBQKJMElqFKk6FmjKaPyn_mcViDnaJ8X81SiMGpar1SnTzHw6XbXSB8gD6AozV3wMTCbKQnb3L6rf8Q7QmM5lpAcDZQLBNlGsTPGP89oZmp5uWRvxqn5w/s72-w400-h400-c/Turn%20Off%20and%20On%20Again.png" height="72" width="72"/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3970629459363259828.post-5770541640503762610</id><published>2022-06-30T21:49:00.214+10:00</published><updated>2022-07-09T16:46:54.072+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="canvas app"/><category scheme="http://www.blogger.com/atom/ns#" term="error"/><category scheme="http://www.blogger.com/atom/ns#" term="Power Apps"/><title type='text'>Error Handling and Show Error Message from API in Canvas App</title><content type='html'>&lt;meta content=&quot;summary_large_image&quot; name=&quot;twitter:card&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;Unlike traditional programming languages, error handling in Power Fx is a bit different and such kinds of errors from API can only be handled by enabling the formula-level error management experimental feature.&quot; name=&quot;twitter:description&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdCloQah-oBE5fth5LNtBxUwZgR7HN24J-Kq2gwSF_lcI7Uie33njupHryLfeqyNL9Hpkw8gF7cdGoFpoNaX8vXOtpJA2W0oJML8akt61bOZ2hsr8DyPvVw5apFPc6do-GKGqsxJppommC24PH1I4HjSj7pZbmZY8huQmaGDreXVNbTCFzvYYHlH9pRw/s640/Thumbnail.png&quot; name=&quot;twitter:image&quot;&gt;&lt;/meta&gt;
&lt;div&gt;This post will explain how you can handle errors from a connector (or
  custom connector) and show a proper error message from the response of the
  API.
&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdCloQah-oBE5fth5LNtBxUwZgR7HN24J-Kq2gwSF_lcI7Uie33njupHryLfeqyNL9Hpkw8gF7cdGoFpoNaX8vXOtpJA2W0oJML8akt61bOZ2hsr8DyPvVw5apFPc6do-GKGqsxJppommC24PH1I4HjSj7pZbmZY8huQmaGDreXVNbTCFzvYYHlH9pRw/s640/Thumbnail.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;396&quot; data-original-width=&quot;640&quot; height=&quot;248&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdCloQah-oBE5fth5LNtBxUwZgR7HN24J-Kq2gwSF_lcI7Uie33njupHryLfeqyNL9Hpkw8gF7cdGoFpoNaX8vXOtpJA2W0oJML8akt61bOZ2hsr8DyPvVw5apFPc6do-GKGqsxJppommC24PH1I4HjSj7pZbmZY8huQmaGDreXVNbTCFzvYYHlH9pRw/w400-h248/Thumbnail.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
  Whenever we use the Patch() function to create/update a row in Microsoft
  Dataverse, call an action of a (custom) connector or call a Power Automate cloud flow, there may be an error due
  to the server-side validation or an exception being thrown by the underlying
  API. In such a scenario, you can use the &lt;b&gt;IfError&lt;/b&gt; function to handle the
  error and show a proper message to the user.
&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;Example 1&lt;/b&gt;: A new row is created in the Test table in the Microsoft Dataverse with the Patch() function as in the formula below.&lt;/div&gt;&lt;div&gt;&lt;pre style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent; background: rgb(245, 242, 240); border-radius: 5px; border: 1px solid rgb(150, 150, 150); box-shadow: none; box-sizing: inherit; font-family: consolas, monaco, &amp;quot;andale mono&amp;quot;, &amp;quot;ubuntu mono&amp;quot;, monospace; font-size: 12px; hyphens: none; line-height: 1.3; margin-bottom: 0.5em; margin-top: 0.5em; overflow: auto; padding: 10px; tab-size: 4; text-rendering: optimizelegibility; text-shadow: rgb(255, 255, 255) 0px 1px; white-space: pre-wrap; word-break: break-all;&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span style=&quot;color: #0b5394;&quot;&gt;Patch&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(
    &lt;/span&gt;&lt;span style=&quot;color: #00b2cd;&quot;&gt;Tests&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;,
    &lt;/span&gt;&lt;span style=&quot;color: #0b5394;&quot;&gt;Defaults&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #00b2cd;&quot;&gt;Tests&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;),
    {Text: &quot;&lt;/span&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;Power Apps Test&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&quot;}
)&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;But there is an error from Microsoft Dataverse and the patch operation is failed with the following generic error message. Instead of having such a generic error message from the platform, we need to show a more meaningful error message (which describes more detailed information) to the user.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVkkAhkSZs8SsmegoeBKBo6sPpfFHrykUIAOZLmnIsF4E33ABQfYA3OcxJjqROEAS6nPbhSmK7jCbctwSfO6uHkEPewgGaQKr_SwR_MPmdFh-m_ljl5j3xsLcnntqfroSnZDQiT_QnJBHnJyObAnY4RTGCXPxon8iaw21zriHK-5_4Nt_G_y-7hODWFA/s649/Network%20Error.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;58&quot; data-original-width=&quot;649&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVkkAhkSZs8SsmegoeBKBo6sPpfFHrykUIAOZLmnIsF4E33ABQfYA3OcxJjqROEAS6nPbhSmK7jCbctwSfO6uHkEPewgGaQKr_SwR_MPmdFh-m_ljl5j3xsLcnntqfroSnZDQiT_QnJBHnJyObAnY4RTGCXPxon8iaw21zriHK-5_4Nt_G_y-7hODWFA/s16000/Network%20Error.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Example 2&lt;/b&gt;: Search action is called from the custom connector with the following formula.&lt;/div&gt;&lt;div&gt;&lt;pre style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent; background: rgb(245, 242, 240); border-radius: 5px; border: 1px solid rgb(150, 150, 150); box-shadow: none; box-sizing: inherit; font-family: consolas, monaco, &amp;quot;andale mono&amp;quot;, &amp;quot;ubuntu mono&amp;quot;, monospace; font-size: 12px; hyphens: none; line-height: 1.3; margin-bottom: 0.5em; margin-top: 0.5em; overflow: auto; padding: 10px; tab-size: 4; text-rendering: optimizelegibility; text-shadow: rgb(255, 255, 255) 0px 1px; white-space: pre-wrap; word-break: break-all;&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #0b5394;&quot;&gt;Set&lt;/span&gt;(
    varSearchResults,
    CustomConnector.&lt;/span&gt;&lt;span style=&quot;color: #0b5394;&quot;&gt;Search&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(
        &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;{SearchText: &quot;&lt;/span&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;Power Apps&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&quot;}
    )
)
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;But there is an error responded by the API that the custom connector is connecting to. If there is any error from the API, we need to show the detailed error message from the API and clear the search result from the previous search (if there is any).&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjG3PajGWb-wT9-NTm7bx4netYiBZP6b9IhUSd2d0iWRb2eDd4sSPTrTqvfsq_UucC7A-v8etwAtUx6XiuCnGsP6nRYoOPsH_YcAIR2GR6OSQAn-zyPavcGq-OJdMrSYHeu-QG9dduGMkpB7Tg65BrlHm9W9ou6yA5_F1KsoT4mrmj-4YvV3RI-RNxYBA/s649/Custom%20Connector%20Error.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;161&quot; data-original-width=&quot;649&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjG3PajGWb-wT9-NTm7bx4netYiBZP6b9IhUSd2d0iWRb2eDd4sSPTrTqvfsq_UucC7A-v8etwAtUx6XiuCnGsP6nRYoOPsH_YcAIR2GR6OSQAn-zyPavcGq-OJdMrSYHeu-QG9dduGMkpB7Tg65BrlHm9W9ou6yA5_F1KsoT4mrmj-4YvV3RI-RNxYBA/s16000/Custom%20Connector%20Error.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To handle those scenarios,&amp;nbsp;&lt;a href=&quot;https://powerapps.microsoft.com/en-us/blog/new-feature-error-handling-and-writing-null-values-to-databases/&quot; target=&quot;_blank&quot;&gt;Microsoft announced Error Handling as an experimental features&lt;/a&gt;&amp;nbsp;in March 2018. You can read more details in &lt;a href=&quot;https://docs.microsoft.com/en-us/power-platform/power-fx/reference/function-iferror?WT.mc_id=DX-MVP-5003873&quot; target=&quot;_blank&quot;&gt;this Error Power Fx Formula reference article&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: #38225d; padding: 20px;&quot;&gt;
	&lt;b style=&quot;color: #e2daf1;&quot;&gt;🛈&amp;nbsp;Note&lt;/b&gt;
	&lt;br /&gt;
	&lt;br /&gt;&lt;span style=&quot;color: #e2daf1;&quot;&gt;IfError function is part of an experimental feature and are subject to change.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;&lt;span style=&quot;color: #e2daf1;&quot;&gt;That function is available only when the &lt;i&gt;Formula-level error management&lt;/i&gt; experimental feature in &lt;a href=&quot;https://docs.microsoft.com/en-us/power-apps/maker/canvas-apps/working-with-experimental-preview?WT.mc_id=DX-MVP-5003873#controlling-which-features-are-enabled&quot; target=&quot;_blank&quot;&gt;Settings &amp;gt; Upcoming features &amp;gt; Experimental&lt;/a&gt; is turned on. &lt;i&gt;(Yes, you read it right. It is still an *&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;&lt;span style=&quot;color: #e2daf1;&quot;&gt;&lt;i&gt;experimental* feature after more than 4 years and counting.)&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGFEWdIBmeKaYsMG7uNaesVjD6vfWAAgoBgrX2MS5TtbccXgS1sijiPEDwhC3LCnRx31fyw5I49OgPzXzXCmz3-kYGW_QIiCGQeWITUj8JeUyM-6ugqgftjhDCrBQepx8AaEBUFj7nwL_STtVXIpoXj71fV8IlXun-BQQe-CzOEJ9ai4kg3juiNCM1wQ/s642/Experimental%20Feature.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;258&quot; data-original-width=&quot;642&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGFEWdIBmeKaYsMG7uNaesVjD6vfWAAgoBgrX2MS5TtbccXgS1sijiPEDwhC3LCnRx31fyw5I49OgPzXzXCmz3-kYGW_QIiCGQeWITUj8JeUyM-6ugqgftjhDCrBQepx8AaEBUFj7nwL_STtVXIpoXj71fV8IlXun-BQQe-CzOEJ9ai4kg3juiNCM1wQ/s16000/Experimental%20Feature.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For&amp;nbsp;&lt;b&gt;Example 1&lt;/b&gt;&amp;nbsp;(error in&amp;nbsp;&lt;b&gt;Patch&lt;/b&gt;&amp;nbsp;function), we can use the formula below with &lt;b&gt;IfError&lt;/b&gt; function to show a custom error message if there is an error in the&amp;nbsp;&lt;b&gt;Patch()&lt;/b&gt;&amp;nbsp;function.&amp;nbsp;The IfError function tests the formula in the first parameter. If there is an error, it returns the formula in the second parameter. In our case, there is nothing to return so the &lt;b&gt;Notify()&lt;/b&gt; function is used to show a custom error message with&amp;nbsp;&lt;b&gt;&lt;i&gt;NotificationType.Error&lt;/i&gt;&lt;/b&gt; for 5000 milliseconds (5 seconds).&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;pre style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent; background: rgb(245, 242, 240); border-radius: 5px; border: 1px solid rgb(150, 150, 150); box-shadow: none; box-sizing: inherit; hyphens: none; line-height: 1.3; margin-bottom: 0.5em; margin-top: 0.5em; overflow: auto; padding: 10px; tab-size: 4; text-rendering: optimizelegibility; text-shadow: rgb(255, 255, 255) 0px 1px; word-break: break-all;&quot;&gt;&lt;code class=&quot;language-markup&quot; style=&quot;font-family: consolas, monaco, &amp;quot;andale mono&amp;quot;, &amp;quot;ubuntu mono&amp;quot;, monospace; font-size: 12px; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;color: #0b5394;&quot;&gt;IfError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0b5394;&quot;&gt;
    Patch&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(
        &lt;/span&gt;&lt;span style=&quot;color: #00b2cd;&quot;&gt;Tests&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;,
        &lt;/span&gt;&lt;span style=&quot;color: #0b5394;&quot;&gt;Defaults&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #00b2cd;&quot;&gt;Tests&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;),
        {Text: &quot;&lt;/span&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;Power Apps Test&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&quot;}
    )&lt;/span&gt;&lt;/code&gt;&lt;span style=&quot;font-size: 12px; white-space: pre-wrap;&quot;&gt;,
    &lt;span style=&quot;color: #0b5394;&quot;&gt;Notify&lt;/span&gt;(
        &quot;&lt;span style=&quot;color: #cc0000;&quot;&gt;There is an error while creating a row in Test table.&lt;/span&gt;&quot;,
        &lt;span style=&quot;color: #00b2cd;&quot;&gt;NotificationType&lt;/span&gt;.Error,
        5000
    ),
    &lt;span style=&quot;color: #7f6000;&quot;&gt;false&lt;/span&gt;
);&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;The following error message will be shown when there is an error in the &lt;b&gt;Patch()&lt;/b&gt; function.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGkeMYsguQd_uq3UH_qs4zifr5vHVS3X7Ec4ZRWFGJmDu21y72913JLBkXIMIyJsoXUbjCXtb7MMiUdkn-yrHUB5yOWNJyY-mwmvLqnHX_GstcNOciEtJP9r-X5W1BSabdIS3ixXjLA5YVd_jgdLSqBUD8x5a111-hHgrM4ZaFOt-LO1vGWHWsfFfInQ/s649/Custom%20Error.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;59&quot; data-original-width=&quot;649&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGkeMYsguQd_uq3UH_qs4zifr5vHVS3X7Ec4ZRWFGJmDu21y72913JLBkXIMIyJsoXUbjCXtb7MMiUdkn-yrHUB5yOWNJyY-mwmvLqnHX_GstcNOciEtJP9r-X5W1BSabdIS3ixXjLA5YVd_jgdLSqBUD8x5a111-hHgrM4ZaFOt-LO1vGWHWsfFfInQ/s16000/Custom%20Error.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Instead of just catching and showing the custom error, you can use the&amp;nbsp;&lt;b&gt;FirstError&lt;/b&gt; to get the error details from the API. (Use&amp;nbsp;&lt;b&gt;AllErrors&lt;/b&gt; table if there is more than one error. Read &lt;a href=&quot;https://docs.microsoft.com/en-us/power-platform/power-fx/reference/function-iferror?WT.mc_id=DX-MVP-5003873#firsterror--allerrors&quot; target=&quot;_blank&quot;&gt;this Microsoft Documentation&lt;/a&gt; for more details). You can check out the&amp;nbsp;very useful video by&amp;nbsp;&lt;a href=&quot;https://www.linkedin.com/in/topness/&quot; target=&quot;_blank&quot;&gt;Phil Topness&lt;/a&gt;&amp;nbsp;on &lt;a href=&quot;https://youtu.be/QipMDDRl7Uc&quot; target=&quot;_blank&quot;&gt;Advanced Connector Error Handling for Canvas Apps&lt;/a&gt; which is part of the Power CAT Live series. The video was recorded more than a year ago, so the ErrorInfo used in the video has been changed and&amp;nbsp;&lt;b&gt;FirstError&lt;/b&gt;&amp;nbsp;needs to be used instead (That explains why this is still an experimental feature). In the formula below, the response from the Dataverse connector (&lt;b&gt;&lt;i&gt;FirstError.Details.HttpResponse&lt;/i&gt;&lt;/b&gt;) is used to show as an error message instead of the custom text.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;pre style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent; background: rgb(245, 242, 240); border-radius: 5px; border: 1px solid rgb(150, 150, 150); box-shadow: none; box-sizing: inherit; hyphens: none; line-height: 1.3; margin-bottom: 0.5em; margin-top: 0.5em; overflow: auto; padding: 10px; tab-size: 4; text-rendering: optimizelegibility; text-shadow: rgb(255, 255, 255) 0px 1px; word-break: break-all;&quot;&gt;&lt;code class=&quot;language-markup&quot; style=&quot;font-family: consolas, monaco, &amp;quot;andale mono&amp;quot;, &amp;quot;ubuntu mono&amp;quot;, monospace; font-size: 12px; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;color: #0b5394;&quot;&gt;IfError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0b5394;&quot;&gt;
    Patch&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(
        &lt;/span&gt;&lt;span style=&quot;color: #00b2cd;&quot;&gt;Tests&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;,
        &lt;/span&gt;&lt;span style=&quot;color: #0b5394;&quot;&gt;Defaults&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #00b2cd;&quot;&gt;Tests&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;),
        {Text: &quot;&lt;/span&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;Power Apps Test&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&quot;}
    )&lt;/span&gt;&lt;/code&gt;&lt;span style=&quot;font-size: 12px; white-space: pre-wrap;&quot;&gt;,
    &lt;span style=&quot;color: #0b5394;&quot;&gt;Notify&lt;/span&gt;(
        FirstError.Details.HttpResponse,
        &lt;span style=&quot;color: #00b2cd;&quot;&gt;NotificationType&lt;/span&gt;.Error,
        5000
    ),
    &lt;span style=&quot;color: #7f6000;&quot;&gt;false&lt;/span&gt;
);&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;The error message from the API is returned and we can now see that the error message is from the real-time workflow. However, there is a lot of other information from the HttpResponse and we need to extract the message part of the response JSON.&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEKs9dVrL_6GvwTtkfg3Hdsbd2J3_Rsv1gvevCDZ96l0aXtP4VCsVMmGUt3EzPf_y4wAAnTbS7R3nkVsTQ8y-XNIkGYLddZpCUXSCjw2ZYFTYk48TD27qyRm5PQRgIw9gMP9VidXQGhm4fy6vpckjuLwOZtRwi-pM4h4nLeJpGHrb1W8G7K7knKA_Mng/s649/FirstError%20Message.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;161&quot; data-original-width=&quot;649&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEKs9dVrL_6GvwTtkfg3Hdsbd2J3_Rsv1gvevCDZ96l0aXtP4VCsVMmGUt3EzPf_y4wAAnTbS7R3nkVsTQ8y-XNIkGYLddZpCUXSCjw2ZYFTYk48TD27qyRm5PQRgIw9gMP9VidXQGhm4fy6vpckjuLwOZtRwi-pM4h4nLeJpGHrb1W8G7K7knKA_Mng/s16000/FirstError%20Message.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Since there is no parse JSON in Power Fx, we can use &lt;a href=&quot;https://www.inogic.com/blog/2022/03/parse-json-in-canvas-app-using-regex/&quot; target=&quot;_blank&quot;&gt;this method mentioned in the blog post&lt;/a&gt; by &lt;a href=&quot;https://www.linkedin.com/company/inogicindia/&quot; target=&quot;_blank&quot;&gt;Inogic&lt;/a&gt;&amp;nbsp;to parse JSON from a string using the Match function.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;pre style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent; background: rgb(245, 242, 240); border-radius: 5px; border: 1px solid rgb(150, 150, 150); box-shadow: none; box-sizing: inherit; hyphens: none; line-height: 1.3; margin-bottom: 0.5em; margin-top: 0.5em; overflow: auto; padding: 10px; tab-size: 4; text-rendering: optimizelegibility; text-shadow: rgb(255, 255, 255) 0px 1px; word-break: break-all;&quot;&gt;&lt;code class=&quot;language-markup&quot; style=&quot;font-family: consolas, monaco, &amp;quot;andale mono&amp;quot;, &amp;quot;ubuntu mono&amp;quot;, monospace; font-size: 12px; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;color: #0b5394;&quot;&gt;IfError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0b5394;&quot;&gt;
    Patch&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(
        &lt;/span&gt;&lt;span style=&quot;color: #00b2cd;&quot;&gt;Tests&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;,
        &lt;/span&gt;&lt;span style=&quot;color: #0b5394;&quot;&gt;Defaults&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #00b2cd;&quot;&gt;Tests&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;),
        {Text: &quot;&lt;/span&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;Power Apps Test&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&quot;}
    )&lt;/span&gt;&lt;/code&gt;&lt;span style=&quot;font-size: 12px; white-space: pre-wrap;&quot;&gt;,
    &lt;span style=&quot;color: #0b5394;&quot;&gt;Notify&lt;/span&gt;(
        &lt;span style=&quot;color: #0b5394;&quot;&gt;Match&lt;/span&gt;(
            FirstError.Details.HttpResponse,
            &lt;span style=&quot;color: #cc0000;&quot;&gt;&quot;\&quot;&quot;code&quot;&quot;:&quot;&quot;(?&amp;lt;code&amp;gt;[^&quot;&quot;]*)&quot;&quot;,&quot;&quot;message&quot;&quot;:&quot;&quot;(?&amp;lt;message&amp;gt;[^&quot;&quot;]*)&quot;&lt;/span&gt;
        ).message,
        &lt;span style=&quot;color: #00b2cd;&quot;&gt;NotificationType&lt;/span&gt;.Error,
        5000
    ),
    &lt;span style=&quot;color: #7f6000;&quot;&gt;false&lt;/span&gt;
);&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;Now, we can show the error message from the real-time workflow without any other error details.&lt;/div&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiERAAJoQb-SjnKztyyPy2n2XLgz7icBXAvmYOGsmvY145845g4DQ9XFEQkx78VwNJON6ROP3BlhiRWMOIZfJ5RJFhayW8c6NKVuzPfTpZu0z2Y7dcCV8OMY_8Jyqs6Y-K4mD3Q7yuWP9szoBesJfLRGJj1Qg0ae5qjkUoeMxzGyBXY4i3uxEHq2sPB0w/s649/Error%20Message%20Only.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;56&quot; data-original-width=&quot;649&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiERAAJoQb-SjnKztyyPy2n2XLgz7icBXAvmYOGsmvY145845g4DQ9XFEQkx78VwNJON6ROP3BlhiRWMOIZfJ5RJFhayW8c6NKVuzPfTpZu0z2Y7dcCV8OMY_8Jyqs6Y-K4mD3Q7yuWP9szoBesJfLRGJj1Qg0ae5qjkUoeMxzGyBXY4i3uxEHq2sPB0w/s16000/Error%20Message%20Only.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;Other than showing an error notification, there is also another way to handle the error if the data from the API is bound to a gallery or a data table. If the search data from&amp;nbsp;&lt;b&gt;Example 2&lt;/b&gt;&amp;nbsp;is bound to the gallery and there is an error from the custom connector, you might want to clear the search result from the previous search and show a proper message.&lt;/div&gt;
&lt;div&gt;&lt;pre style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent; background: rgb(245, 242, 240); border-radius: 5px; border: 1px solid rgb(150, 150, 150); box-shadow: none; box-sizing: inherit; font-family: consolas, monaco, &amp;quot;andale mono&amp;quot;, &amp;quot;ubuntu mono&amp;quot;, monospace; font-size: 12px; hyphens: none; line-height: 1.3; margin-bottom: 0.5em; margin-top: 0.5em; overflow: auto; padding: 10px; tab-size: 4; text-rendering: optimizelegibility; text-shadow: rgb(255, 255, 255) 0px 1px; white-space: pre-wrap; word-break: break-all;&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #0b5394;&quot;&gt;Set&lt;/span&gt;(varSearchResults, Blank());
&lt;span style=&quot;color: #0b5394;&quot;&gt;Set&lt;/span&gt;(varMessage, &lt;span style=&quot;color: #cc0000;&quot;&gt;&quot;Loading...&quot;&lt;/span&gt;);
&lt;span style=&quot;color: #0b5394;&quot;&gt;Set&lt;/span&gt;(
    varSearchResults,
    &lt;span style=&quot;color: #0b5394;&quot;&gt;IfError&lt;/span&gt;(
        CustomConnector.&lt;/span&gt;&lt;span style=&quot;color: #0b5394;&quot;&gt;Search&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(
            &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;{SearchText: &quot;&lt;/span&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;Power Apps&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&quot;}
        ),
        &lt;/span&gt;&lt;span style=&quot;color: #0b5394;&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(
            varMessage,
            &lt;/span&gt;&lt;span style=&quot;color: #0b5394;&quot;&gt;Match&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(
                FirstError.Details.HttpResponse,
                &lt;/span&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;&quot;\&quot;&quot;code&quot;&quot;:&quot;&quot;(?&amp;lt;code&amp;gt;[^&quot;&quot;]*)&quot;&quot;,&quot;&quot;message&quot;&quot;:&quot;&quot;(?&amp;lt;message&amp;gt;[^&quot;&quot;]*)&quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;
            ).message
        ),
        If (
            (&lt;/span&gt;&lt;span style=&quot;color: #0b5394;&quot;&gt;CountRows&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #00b2cd;&quot;&gt;varSearchResults&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;) &amp;gt; 0),&lt;br /&gt;            &lt;/span&gt;&lt;span style=&quot;color: #0b5394;&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(varMessage, &lt;/span&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;),
            &lt;/span&gt;&lt;span style=&quot;color: #0b5394;&quot;&gt;Set&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(varMessage, &lt;/span&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;&quot;No data available&quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;});
        );
    );
);
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;In this example, the gallery is bound to the&amp;nbsp;varSearchResults and varMessage is set to the value of a label in the middle of the gallery. The formula above is triggered OnSelect of the Search button. Before the search, clear the previous search results and show the &quot;Loading...&quot; message to the user by setting the varMessage. If there is any error from the custom connector, the error message will be displayed on the label. If there is no error but there is no data returned from the search API, the label will show a &quot;No data available&quot; message.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Summary&lt;/h3&gt;&lt;div&gt;Unlike traditional programming languages, error handling in Power Fx is a bit different and such kinds of errors from API can only be handled by enabling the formula-level error management experimental feature.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://linnzawwin.blogspot.com/feeds/5770541640503762610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://linnzawwin.blogspot.com/2022/06/error-handling-and-show-error-message.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/5770541640503762610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/5770541640503762610'/><link rel='alternate' type='text/html' href='http://linnzawwin.blogspot.com/2022/06/error-handling-and-show-error-message.html' title='Error Handling and Show Error Message from API in Canvas App'/><author><name>Linn Zaw Win</name><uri>http://www.blogger.com/profile/16015532694415495453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaCUObunP3kiYNRu6pZ-J4ezoWDP-Jf1Cv010HLXr_bLFmB0bcZj8atUiBYmg37uDyBDzxPrHFX7EGESjgSMIOIBX7TR9VS9nZ179jpYpTkpsDtw09albFOTBEXTdw2OhtXLyZkfd4kBnOHYZmGSoge7m2XxXOVZvFJxuEiXnTmg7sRRc/s220/IMG_5259-Square%20-%20MVP.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdCloQah-oBE5fth5LNtBxUwZgR7HN24J-Kq2gwSF_lcI7Uie33njupHryLfeqyNL9Hpkw8gF7cdGoFpoNaX8vXOtpJA2W0oJML8akt61bOZ2hsr8DyPvVw5apFPc6do-GKGqsxJppommC24PH1I4HjSj7pZbmZY8huQmaGDreXVNbTCFzvYYHlH9pRw/s72-w400-h248-c/Thumbnail.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3970629459363259828.post-3426640798267927386</id><published>2022-04-30T18:21:00.415+10:00</published><updated>2022-07-21T06:58:12.515+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="icon"/><category scheme="http://www.blogger.com/atom/ns#" term="maker portal"/><category scheme="http://www.blogger.com/atom/ns#" term="model-driven apps"/><title type='text'>How to Set Model-driven App Custom Table Icons in Dataverse</title><content type='html'>&lt;meta content=&quot;summary_large_image&quot; name=&quot;twitter:card&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;This post will explain how you can set the icon for a Microsoft Dataverse custom table (entity icon) in the Power Apps maker portal.&quot; name=&quot;twitter:description&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmf9AvwhOes5Mw0Mr0DhxQAgY8LpDKCflNQmymMO78Dp-aVKGQk7pcNelq45Th8McOdDvfxoQyJ6a9-FuG6eD52KfkrqHfpYqK8QkAZ4pZsZCAUUBRWWLklp85Bk2rez6piu3N0rQf7CrkuhGZMgB77H8-DXyQcL61ygqPZeK2JFotRx9v_DKDkQ9JoA/s670/Thumbnail.png&quot; name=&quot;twitter:image&quot;&gt;&lt;/meta&gt;
&lt;div&gt;This post will explain how you can set the icon for a Microsoft Dataverse custom table (entity icon) in the Power Apps maker portal.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When the custom tables are created for Dynamics 365 and model-driven app projects, updating the icon of the table is important because it is automatically assigned a puzzle piece 🧩 icon by default. The icon of the table will be displayed in the sitemap, as the lookup value icon and in the primary image area for the Create form before the data is saved for the very first time. If the table does not have a child relationship (will never be used as a lookup), the table is not added to the sitemap and there is no primary image column, setting the icon is optional because the user will not see the default puzzle piece 🧩 icon or the custom icon anyway.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmf9AvwhOes5Mw0Mr0DhxQAgY8LpDKCflNQmymMO78Dp-aVKGQk7pcNelq45Th8McOdDvfxoQyJ6a9-FuG6eD52KfkrqHfpYqK8QkAZ4pZsZCAUUBRWWLklp85Bk2rez6piu3N0rQf7CrkuhGZMgB77H8-DXyQcL61ygqPZeK2JFotRx9v_DKDkQ9JoA/s670/Thumbnail.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;481&quot; data-original-width=&quot;670&quot; height=&quot;288&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmf9AvwhOes5Mw0Mr0DhxQAgY8LpDKCflNQmymMO78Dp-aVKGQk7pcNelq45Th8McOdDvfxoQyJ6a9-FuG6eD52KfkrqHfpYqK8QkAZ4pZsZCAUUBRWWLklp85Bk2rez6piu3N0rQf7CrkuhGZMgB77H8-DXyQcL61ygqPZeK2JFotRx9v_DKDkQ9JoA/w400-h288/Thumbnail.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;strike&gt;Microsoft Documentation has the instructions on how to &lt;a href=&quot;https://docs.microsoft.com/en-us/power-apps/maker/model-driven-apps/change-custom-entity-icons?WT.mc_id=DX-MVP-5003873&quot; target=&quot;_blank&quot;&gt;change model-driven app custom table icons&lt;/a&gt;&amp;nbsp;but the documentation was last updated on 16 Feb 2022 and the steps are all about &quot;Switch to classic&quot; and updating the icon in the&amp;nbsp;classic solution explorer&lt;/strike&gt; (the Docs has been updated on 20 Jul 2022 and the steps on updating the icon on the maker portal). Going to the classic solution explorer could be confusing for the user because the Web Client icons (16x16 and 32x32) are no longer valid since the deprecation of the legacy web client and all we need to set is the .svg icon for the Unified Interface.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here are the steps to&amp;nbsp;set the icon for a table in the Power Apps maker portal.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;1. Open Solution&lt;/b&gt;&lt;/div&gt;&lt;div&gt;From the Power Apps maker&amp;nbsp;portal, open the unmanaged solution with the tables where icons need to be set (or the solution where the new table will be created).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;2a. Table Properties (New Table)&lt;/b&gt;&lt;/div&gt;&lt;div&gt;For a new table, expand the &quot;Advanced options&quot; before clicking Save to &lt;b&gt;&lt;i&gt;Choose table image&lt;/i&gt;&lt;/b&gt;.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuljCUHpP6-gmzIVw8mO43DWfznuopIKGZ4_vfo6XO0jo0txXb39j3fIt5IlNKHIzYzUvl-vlhWvcZVgip_IkfBqLORSctPSvPU0_VD1Bx7GpfvPS6DnVblfXmNgLe6JR8bT-Yo9NY3c4Ov4QF3n1xQSRugQbyA3T5x8GxmZqr8cejHyy8Ls2_Ot1llg/s1279/New%20Table.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;829&quot; data-original-width=&quot;1279&quot; height=&quot;414&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuljCUHpP6-gmzIVw8mO43DWfznuopIKGZ4_vfo6XO0jo0txXb39j3fIt5IlNKHIzYzUvl-vlhWvcZVgip_IkfBqLORSctPSvPU0_VD1Bx7GpfvPS6DnVblfXmNgLe6JR8bT-Yo9NY3c4Ov4QF3n1xQSRugQbyA3T5x8GxmZqr8cejHyy8Ls2_Ot1llg/w640-h414/New%20Table.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;2b. Table Properties (Existing Table)&lt;/b&gt;&lt;/div&gt;For an existing table, click on the Properties on the table page to open the &lt;b&gt;&lt;i&gt;Properties&lt;/i&gt;&lt;/b&gt;&amp;nbsp;panel.&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHBkjSU8gnmUmLZwPIim0BwnVLuqhIwPd79DKjNPKlepQOVtOlLOprRrSLvOSO_e5VP_DH2VGfoiUru7yK-FA4mQHHLpha32FAJV2VhYLlDXM4edM-Vr7FZ2oJLKijHvqm06_q7mIc6mC9Stl8BFlAeBJY2neQJjETGRjbs45sGBX3MaV3-chZ7p87LQ/s1262/Edit%20Table.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;658&quot; data-original-width=&quot;1262&quot; height=&quot;334&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHBkjSU8gnmUmLZwPIim0BwnVLuqhIwPd79DKjNPKlepQOVtOlLOprRrSLvOSO_e5VP_DH2VGfoiUru7yK-FA4mQHHLpha32FAJV2VhYLlDXM4edM-Vr7FZ2oJLKijHvqm06_q7mIc6mC9Stl8BFlAeBJY2neQJjETGRjbs45sGBX3MaV3-chZ7p87LQ/w640-h334/Edit%20Table.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;(Note: If you are still seeing the old table UI in your maker portal in your region and not as the screenshot above, click on Settings from the top menu)&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj90__VTRjcQvjJ_nOHDOIoKfWplteAojtOvwu1tWOSoq_mWC_Y-rbD71PN_T2owTr7yYmWuObUbBzdQNWDJXP9qxdlpMxV07sNfuH69uhfnx5efaOz15yE8DtwR80M6kDQYN_TvSfl2G2ihJ6-aOwN0Im7nHaroGtIOu1U0t0fAaNAJPOjUjxWhaUcBg/s1095/Old%20Table%20UI.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;259&quot; data-original-width=&quot;1095&quot; height=&quot;95&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj90__VTRjcQvjJ_nOHDOIoKfWplteAojtOvwu1tWOSoq_mWC_Y-rbD71PN_T2owTr7yYmWuObUbBzdQNWDJXP9qxdlpMxV07sNfuH69uhfnx5efaOz15yE8DtwR80M6kDQYN_TvSfl2G2ihJ6-aOwN0Im7nHaroGtIOu1U0t0fAaNAJPOjUjxWhaUcBg/w400-h95/Old%20Table%20UI.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;The table properties panel is the same as the one for a new table. You can expand the &quot;Advanced options&quot; and &lt;b&gt;&lt;i&gt;Choose table image&lt;/i&gt;&lt;/b&gt;.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRau7_by8fxFS2qUoRMCdrH4reHk4cnN_Dx5XVPCxdKpvVx-8rWErppswAwhu1_SeUuAHfnLCej9zuNqftkRJXKn35HAD8sIT1evv8ZB3OW5oicooCv5_qHVRfin5DXIbN0Wyx5ZXiGL4zCOpEJ4KNfzw4YNvIGOG8W4sImom_Yw7cd7ORbZvRXPYNvA/s899/Edit%20Table%20Properties.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;899&quot; data-original-width=&quot;620&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRau7_by8fxFS2qUoRMCdrH4reHk4cnN_Dx5XVPCxdKpvVx-8rWErppswAwhu1_SeUuAHfnLCej9zuNqftkRJXKn35HAD8sIT1evv8ZB3OW5oicooCv5_qHVRfin5DXIbN0Wyx5ZXiGL4zCOpEJ4KNfzw4YNvIGOG8W4sImom_Yw7cd7ORbZvRXPYNvA/w442-h640/Edit%20Table%20Properties.png&quot; width=&quot;442&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;3a. Choose Table Image (New web resource)&lt;/b&gt;&lt;/div&gt;&lt;div&gt;If the icon image does not exist in the environment, a new web resource can be uploaded by clicking on the &quot;&lt;b&gt;New image web resource&lt;/b&gt;&quot; button. Once the new image web resource is uploaded, the table image will be poulated with the newly uploaded image web resource.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTFYAmF2e2EAzmsuCWM7H400bChbE47yapSWH6RqqoJNsddRSlWtME73junI0hQdzMPcT3bXmfyybFqdQ85wXg6ffh9wCRstlFsbJNVnfUf1WqMTsgiU7tttrFpJCxJGz-RIBap7EH0GC-hLVxJAKn8A206YY-5rcts5eHjDHjipZgJmUyLP7qOPT4Lg/s736/New%20image%20web%20resource.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;591&quot; data-original-width=&quot;736&quot; height=&quot;514&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTFYAmF2e2EAzmsuCWM7H400bChbE47yapSWH6RqqoJNsddRSlWtME73junI0hQdzMPcT3bXmfyybFqdQ85wXg6ffh9wCRstlFsbJNVnfUf1WqMTsgiU7tttrFpJCxJGz-RIBap7EH0GC-hLVxJAKn8A206YY-5rcts5eHjDHjipZgJmUyLP7qOPT4Lg/w640-h514/New%20image%20web%20resource.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;3b. Choose Table Image (Existing web resource)&lt;/b&gt;&lt;/div&gt;&lt;div&gt;If the icon image is already existing in the environment, the web resource can be searched by the &lt;b&gt;&lt;i&gt;Display Name&lt;/i&gt;&lt;/b&gt; or selected from the list.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVJWMacMbfDbABmYw6msxshhsgd7_FOHmorMtLVDSzIvS7xYPuAtFXqh8gRzfbS_cpKTKsY0i4Zq-cPTjiIXMJjTLdcoCqS7MItaS1kRqMhj1pBbqZbBDbvMxkZ-1gayhqy63zj0z9lOvmRdfuFs3v9bTicZpwIlnfaXVe2I79slIL_d3Fyf0_KyUwpw/s649/Search%20Image%20Web%20Resource.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;496&quot; data-original-width=&quot;649&quot; height=&quot;490&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVJWMacMbfDbABmYw6msxshhsgd7_FOHmorMtLVDSzIvS7xYPuAtFXqh8gRzfbS_cpKTKsY0i4Zq-cPTjiIXMJjTLdcoCqS7MItaS1kRqMhj1pBbqZbBDbvMxkZ-1gayhqy63zj0z9lOvmRdfuFs3v9bTicZpwIlnfaXVe2I79slIL_d3Fyf0_KyUwpw/w640-h490/Search%20Image%20Web%20Resource.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Once the table is saved after selecting the table image, the new icon will be visible in the sitemap, lookup value, primary image, etc.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf5wcfDlEVVfsLPOfrpOAwY6-TcIEibFA70ccscIHQsRafm3u7CfCccfBX6zgPCqr_YP688Gd_xe9y1IiycA94KhUwux7Knlm4m4DZ6u6s3nBh6eaG_tSDjRWRY8c3PhMPDJywhu0tZnPzP1RVJv3Gfc4pmc6LzF68SPpyXRHAUWOP2CAsBggGYS3phA/s475/New%20Icon.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;250&quot; data-original-width=&quot;475&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf5wcfDlEVVfsLPOfrpOAwY6-TcIEibFA70ccscIHQsRafm3u7CfCccfBX6zgPCqr_YP688Gd_xe9y1IiycA94KhUwux7Knlm4m4DZ6u6s3nBh6eaG_tSDjRWRY8c3PhMPDJywhu0tZnPzP1RVJv3Gfc4pmc6LzF68SPpyXRHAUWOP2CAsBggGYS3phA/s16000/New%20Icon.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Tools&lt;/h3&gt;&lt;div&gt;&lt;b&gt;&lt;a href=&quot;https://www.xrmtoolbox.com/plugins/MscrmTools.Iconator/&quot; target=&quot;_blank&quot;&gt;Iconator&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;This is an XrmToolBox tool that allows you to update the table image. The tool also allows the maker to upload the new image web resources. The tool is handy when the table image needs to be set for multiple tables.&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Add Image(s) functionality allows the maker&amp;nbsp;to bulk upload the images and add them to the solution.&lt;/li&gt;&lt;li&gt;Load Entities and Images from solution functionality will only show the image web resources from the selected solution which makes it easier to search than scrolling through the whole web resources list.&lt;/li&gt;&lt;li&gt;The preview images are shown so that it is easier for the&amp;nbsp;maker to find and select the right icon&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiN7m0D5fh-3jg8KjcNn4kq4vwxL7_mq2VMvF0nyPARICTEu_ldj0dNgm7JmQCmWFNTVfZ7V0j1ec2xtnXFV3CONaZrgrwdfdn-h4TGNUL1SBQEeLlkp5SSzvQU0OoXZmGhrZYrC9ugIZ6H888JyVoopM2zF8msNenRRmIb8m7oNKLb8Vd95En7FmNrRw/s819/Iconator.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;431&quot; data-original-width=&quot;819&quot; height=&quot;336&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiN7m0D5fh-3jg8KjcNn4kq4vwxL7_mq2VMvF0nyPARICTEu_ldj0dNgm7JmQCmWFNTVfZ7V0j1ec2xtnXFV3CONaZrgrwdfdn-h4TGNUL1SBQEeLlkp5SSzvQU0OoXZmGhrZYrC9ugIZ6H888JyVoopM2zF8msNenRRmIb8m7oNKLb8Vd95En7FmNrRw/w640-h336/Iconator.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;The only&amp;nbsp;drawback of this tool is not being able to specify the folder path for the web resource when the new images are added. For that case, use the&amp;nbsp;&lt;a href=&quot;WebResourcesManager&quot; target=&quot;_blank&quot;&gt;WebResources Manager&lt;/a&gt;&amp;nbsp;tool to upload the images into a particular folder path and use the Iconator to select the table images.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKndRmovj_fREQv9MoZH3sqlIHNfI-_A-nbikwDziJkmB4OCZUCfPw5EmfYLY7B0ct_nJSDlLvnn7vwfU58xhy25ijogdK5aeel0eZNzhvFty6-Iv87J1en6nispyokaCq1nWvlWGosjipBc9wE9_y5Tq-GpGY41IriuNaM4fLt20YJ_t6VUbPl3FtbA/s485/WebResources%20Manager.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;311&quot; data-original-width=&quot;485&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKndRmovj_fREQv9MoZH3sqlIHNfI-_A-nbikwDziJkmB4OCZUCfPw5EmfYLY7B0ct_nJSDlLvnn7vwfU58xhy25ijogdK5aeel0eZNzhvFty6-Iv87J1en6nispyokaCq1nWvlWGosjipBc9wE9_y5Tq-GpGY41IriuNaM4fLt20YJ_t6VUbPl3FtbA/s16000/WebResources%20Manager.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a href=&quot;https://www.xrmtoolbox.com/plugins/SirKato.XrmToolBox.IconGallery/&quot; target=&quot;_blank&quot;&gt;Icon Gallery&lt;/a&gt;&lt;br /&gt;&lt;div&gt;This is an XrmToolBox tool that allows you to preview the image web resources from the environment. This can be useful if the maker wants to preview the image before selecting it as a table image in the maker portal.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-6SdhnfjnmQsOVZ0-jSemIDlGM55EcxpivsXVXoujA99nnF6GvYqaaVxrRS5LfFurnV-tkZYAG_CdLkQB1I6PP3ileDBbxZZZ05Mvp3mwJ3u77nZxiyosWcDQxe2UCr9g65O_CqICurteAWwApvXcqTD3kFhdkZhpUtk2a-CtJgzAsQxpuUlXgavp-g/s722/Icon%20Gallery.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;261&quot; data-original-width=&quot;722&quot; height=&quot;232&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-6SdhnfjnmQsOVZ0-jSemIDlGM55EcxpivsXVXoujA99nnF6GvYqaaVxrRS5LfFurnV-tkZYAG_CdLkQB1I6PP3ileDBbxZZZ05Mvp3mwJ3u77nZxiyosWcDQxe2UCr9g65O_CqICurteAWwApvXcqTD3kFhdkZhpUtk2a-CtJgzAsQxpuUlXgavp-g/w640-h232/Icon%20Gallery.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;Download Icons&lt;/h3&gt;&lt;div&gt;Here are a few places where you can generate/download .svg icons.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;a href=&quot;https://github.com/P3N-101/icon-menu-builder&quot; target=&quot;_blank&quot;&gt;Icon Menu Builder for Power Apps v2&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;This is a Power Apps canvas app (available to be downloaded as a managed solution) which allows you to search over 45K free icons from multiple icon sets. You can change the foreground and background colours before downloading it as an .svg file.&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWyRoyhH4rXNCJ6tySxLxDpMsFivw58pV16RBlKq-Umxe4nfBdNKM5HuTulfEos6ChtuqfYy7qN9XU4n__f7K7EEG4BWnwRgdN-YGJraUtZKPiolny9jy5vytyKjVjRKHfiA56y6UAwz3TeBerrE7pvUYNKWzYY9DhN2NkGWH-EKA0VYI4D59VKrCskQ/s2258/Icon%20Menu%20Builder.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1211&quot; data-original-width=&quot;2258&quot; height=&quot;344&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWyRoyhH4rXNCJ6tySxLxDpMsFivw58pV16RBlKq-Umxe4nfBdNKM5HuTulfEos6ChtuqfYy7qN9XU4n__f7K7EEG4BWnwRgdN-YGJraUtZKPiolny9jy5vytyKjVjRKHfiA56y6UAwz3TeBerrE7pvUYNKWzYY9DhN2NkGWH-EKA0VYI4D59VKrCskQ/w640-h344/Icon%20Menu%20Builder.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://www.matthewdevaney.com/2000-free-power-apps-icons/&quot; target=&quot;_blank&quot;&gt;Fluent UI Icon Power BI Dashboard&lt;/a&gt;&lt;/div&gt;&lt;div&gt;This Power BI Dashboard by&amp;nbsp;&lt;a href=&quot;https://www.linkedin.com/in/matthew-devaney-6499271b7/&quot; target=&quot;_blank&quot;&gt;Matthew Devaney&lt;/a&gt;&amp;nbsp;allows you to search from&amp;nbsp;2,000 free Power Apps icons in over 30 different colours from the free icon set provided by Microsoft as part of the Fluent UI system. After selecting the icon and the colour, the SVG code can be copied into any of the text editing applications (Notepad++, etc.) and saved as an .svg file.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1Vha6D6R76mmaUWprtiEjDYkq-ihjaUW6kuaj3z3K6bjlia6a-ufgO-cxcpKPCmNzesGMqzSIpObkDHb8cW1Il0_zp5XTjf1s1GtRrjvzsMYun-rwM8JhUcdV1ByQxaDO38CB9xk1nOm0oyhaZb3mJHm5kjCvjMgU5C0GtJC-YZXYhW598QRYoRxJkw/s1085/Fluent%20UI%20Icon%20Power%20BI%20Dashboard.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;759&quot; data-original-width=&quot;1085&quot; height=&quot;448&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1Vha6D6R76mmaUWprtiEjDYkq-ihjaUW6kuaj3z3K6bjlia6a-ufgO-cxcpKPCmNzesGMqzSIpObkDHb8cW1Il0_zp5XTjf1s1GtRrjvzsMYun-rwM8JhUcdV1ByQxaDO38CB9xk1nOm0oyhaZb3mJHm5kjCvjMgU5C0GtJC-YZXYhW598QRYoRxJkw/w640-h448/Fluent%20UI%20Icon%20Power%20BI%20Dashboard.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://www.syncfusion.com/downloads/metrostudio&quot; target=&quot;_blank&quot;&gt;Metro Studio&lt;/a&gt;&lt;/div&gt;&lt;div&gt;This tool has a collection of over 7,000 flat and wireframe icon templates that can be easily customised to create thousands of unique icons. It also supports creating custom icon font packages from selected sets of icons&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYYfPbYBwQWnqnlgdFcoIE-QtU2jgJk6_xsSxU23G9NahkenGGcGPf8pjeCDFD6xdkyvnpvr-XcBfHNCZk4stqfCukauhe9DYallx-Qe1ECzYryaYUzmn36HTFc-tt0mN6J08UmMSuriWCyCWeZfEAuQdh81LFuE9xlNvf5strqMDxsWTDVL0kgNOL0g/s1280/Metro%20Studio.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;720&quot; data-original-width=&quot;1280&quot; height=&quot;360&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYYfPbYBwQWnqnlgdFcoIE-QtU2jgJk6_xsSxU23G9NahkenGGcGPf8pjeCDFD6xdkyvnpvr-XcBfHNCZk4stqfCukauhe9DYallx-Qe1ECzYryaYUzmn36HTFc-tt0mN6J08UmMSuriWCyCWeZfEAuQdh81LFuE9xlNvf5strqMDxsWTDVL0kgNOL0g/w640-h360/Metro%20Studio.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://www.flicon.io/&quot;&gt;Flicon&lt;/a&gt;&lt;/div&gt;&lt;div&gt;This site allows you to search from Microsoft Office and Fabric Icons and download them as .svg files.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuIzB5pF_-dwo99I4nBaC9n4CF3T7I1UB94wJa0ux3WH__FfFrO9zN7ZVJv3DbrOFkdUUzLRWVa6ImUQeLJnh66rgO0by36BkOMe98r-D4yISeAS69IFIYj2Sbn2ZOMwCVFvTxLAd7YncaU7q-SlBk9gyGzfXyWnzjrqvXm-aATYLKV8csn0rI28OByg/s1001/Flicon.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;696&quot; data-original-width=&quot;1001&quot; height=&quot;444&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuIzB5pF_-dwo99I4nBaC9n4CF3T7I1UB94wJa0ux3WH__FfFrO9zN7ZVJv3DbrOFkdUUzLRWVa6ImUQeLJnh66rgO0by36BkOMe98r-D4yISeAS69IFIYj2Sbn2ZOMwCVFvTxLAd7YncaU7q-SlBk9gyGzfXyWnzjrqvXm-aATYLKV8csn0rI28OByg/w640-h444/Flicon.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href=&quot;https://www.iconfinder.com&quot; target=&quot;_blank&quot;&gt;Iconfinder&lt;/a&gt;&lt;br /&gt;&lt;div&gt;This site offers both Free and Premium icons. For free icons, just make sure you read the&amp;nbsp;licence agreement of the icon and credit the icon designer when necessary.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjf3aI8TY_VmiC9qYskwCJ9nvCWjX4dasv_WChGcmMdcgDksLcuV5TU5uKbwzVK-xuSNeVeJC8Hla1C5BAe4mWbn_K0CjcC3ZwRQtX6ZD9yz9NuIg5udfWpBbigQH9ztEZGntZ5PQAfkUBD5hxMVX9Z9Zha1QUkC8hqccOQKVz2H87Wng5QRNNkuyoFNA/s1920/Iconfinder.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;992&quot; data-original-width=&quot;1920&quot; height=&quot;330&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjf3aI8TY_VmiC9qYskwCJ9nvCWjX4dasv_WChGcmMdcgDksLcuV5TU5uKbwzVK-xuSNeVeJC8Hla1C5BAe4mWbn_K0CjcC3ZwRQtX6ZD9yz9NuIg5udfWpBbigQH9ztEZGntZ5PQAfkUBD5hxMVX9Z9Zha1QUkC8hqccOQKVz2H87Wng5QRNNkuyoFNA/w640-h330/Iconfinder.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Premium Icon Sites&lt;/div&gt;&lt;div&gt;The following icon sites allow the premium members (with a monthly or yearly subscription) to download the&amp;nbsp;unlimited icons in .svg format.&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;a href=&quot;https://www.flaticon.com/&quot;&gt;Flaticon&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://thenounproject.com/&quot; target=&quot;_blank&quot;&gt;Noun Project&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://www.microsoft.com/en-nz/microsoft-365/powerpoint&quot; target=&quot;_blank&quot;&gt;Microsoft PowerPoint&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Microsoft PowerPoint has an option to&amp;nbsp;select an image object, select &quot;Save as Picture&quot; from the menu and there is an option to save it as an .svg file. You need to be careful to ensure the combined shapes are roughly square. (Thanks to Alex for the tip)&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEzTwMNouY_J1kQMZCTcs7_5a6BTg37dawnNOXv__DV05Shg9EWvRtpN8EJMhgMdJmGWeF1TOi4QvO9nQnrv-VjZo8i2Zm8jMUCvhW-xEHtcb4oKYA1amEV7Ii2zx0ygklla3-YKiQd9ZH_MUVA9w5NmQBiBFMVx87S1eQSIgtqi3cCpQRL0WyqU0o0g/s852/Microsoft%20PowerPoint.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;585&quot; data-original-width=&quot;852&quot; height=&quot;440&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEzTwMNouY_J1kQMZCTcs7_5a6BTg37dawnNOXv__DV05Shg9EWvRtpN8EJMhgMdJmGWeF1TOi4QvO9nQnrv-VjZo8i2Zm8jMUCvhW-xEHtcb4oKYA1amEV7Ii2zx0ygklla3-YKiQd9ZH_MUVA9w5NmQBiBFMVx87S1eQSIgtqi3cCpQRL0WyqU0o0g/w640-h440/Microsoft%20PowerPoint.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Do you know any other tool or website to generate/download free icons? Please comment on this post and I will update the post to include those options.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://linnzawwin.blogspot.com/feeds/3426640798267927386/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://linnzawwin.blogspot.com/2022/04/how-to-change-model-driven-app-custom.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/3426640798267927386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/3426640798267927386'/><link rel='alternate' type='text/html' href='http://linnzawwin.blogspot.com/2022/04/how-to-change-model-driven-app-custom.html' title='How to Set Model-driven App Custom Table Icons in Dataverse'/><author><name>Linn Zaw Win</name><uri>http://www.blogger.com/profile/16015532694415495453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaCUObunP3kiYNRu6pZ-J4ezoWDP-Jf1Cv010HLXr_bLFmB0bcZj8atUiBYmg37uDyBDzxPrHFX7EGESjgSMIOIBX7TR9VS9nZ179jpYpTkpsDtw09albFOTBEXTdw2OhtXLyZkfd4kBnOHYZmGSoge7m2XxXOVZvFJxuEiXnTmg7sRRc/s220/IMG_5259-Square%20-%20MVP.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmf9AvwhOes5Mw0Mr0DhxQAgY8LpDKCflNQmymMO78Dp-aVKGQk7pcNelq45Th8McOdDvfxoQyJ6a9-FuG6eD52KfkrqHfpYqK8QkAZ4pZsZCAUUBRWWLklp85Bk2rez6piu3N0rQf7CrkuhGZMgB77H8-DXyQcL61ygqPZeK2JFotRx9v_DKDkQ9JoA/s72-w400-h288-c/Thumbnail.png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3970629459363259828.post-4613450572435305047</id><published>2022-03-30T06:52:00.001+10:00</published><updated>2022-03-31T04:27:38.027+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Custom Control"/><category scheme="http://www.blogger.com/atom/ns#" term="Grid View"/><category scheme="http://www.blogger.com/atom/ns#" term="model-driven apps"/><title type='text'>Disable Hyperlink for Lookup Columns in Grid Views of Model-driven Apps</title><content type='html'>&lt;meta content=&quot;summary_large_image&quot; name=&quot;twitter:card&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;With this latest update to the Power Apps grid control, you can turn off clickable lookups in the grid views of model-driven apps.&quot; name=&quot;twitter:description&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ1NXdJAFhdDsMOVyEou7Hnp36gACBzhjJe1IfSdi6BSpBE1WXM6iyTUMmMQdbm5e7P8MNLkYE4qW7hnWSK2mwh1A4ZZ-Mr-_oYl-RfptuauQ7MvOIWTaOh-CjKN1EFFZ8Z86tJysX5xIjV2pmHgu5140Gk5hnD7F1KKBXUWXvNP9FDgdDD-ruCyMu7A/s1105/Lookup%20Hyperlink.png&quot; name=&quot;twitter:image&quot;&gt;&lt;/meta&gt;
&lt;div&gt;This post will explain how you can turn off clickable lookups in the grid views of model-driven apps.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Microsoft has recently rolled out the new update for&amp;nbsp;Power Apps Read-Only Grid which has a new property called &quot;Navigation types allowed&quot;. This property will allow the system customiser to disable&amp;nbsp;clickable hyperlinks for the lookup column values and only show them as text. According to Microsoft, the correct terminology for clickable hyperlinks is navigation. The clickable hyperlinks for the primary name column of the table which opens the form of the current row (e.g. Full Name in Contact) are called Primary Navigation and clickable hyperlinks for the lookup columns which opens the form of the related tables for those lookup values are called secondary navigation.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #38225d; padding: 20px;&quot;&gt;
	&lt;b style=&quot;color: #e2daf1;&quot;&gt;🛈&amp;nbsp;Note&lt;/b&gt;
	&lt;br /&gt;
	&lt;br /&gt;&lt;span style=&quot;color: #e2daf1;&quot;&gt;The new update was rolled out to the environments in&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;&lt;span style=&quot;color: #e2daf1;&quot;&gt;Australia region last weekend (26 Mar) and it should already be available in the following regions as well. (&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: #e2daf1;&quot;&gt;South America, Canada, India, France, South Africa, Germany, Switzerland, Japan, Asia Pacific, Great Britain, United Arab Emirates)&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: #38225d; padding: 20px;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #e2daf1;&quot;&gt;According to Microsoft&#39;s usual d&lt;/span&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;&lt;span style=&quot;color: #e2daf1;&quot;&gt;eployment schedule, it should be available&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: #e2daf1;&quot;&gt;&amp;nbsp;in&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: #e2daf1;&quot;&gt;Europe region&lt;/span&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;&lt;span style=&quot;color: #e2daf1;&quot;&gt;&amp;nbsp;after the weekend of (2 Apr)&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;&lt;span style=&quot;color: #e2daf1;&quot;&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;&lt;span style=&quot;color: #e2daf1;&quot;&gt;North America region after the weekend of (9 Apr), China region after the weekend of (16 Apr). Not sure it will be rolled out for&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;&lt;span style=&quot;color: #e2daf1;&quot;&gt;GCC but if so, it will be in the&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #e2daf1;&quot;&gt;weekend of (23 Apr).&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;With this roll-out, there is a bug that disables&amp;nbsp;clickable hyperlinks in some of the existing views without changing anything in those views. Microsoft product team is working on the fix for it and if you are experiencing that issue and want to apply a quick hotfix before that, follow the steps until Step 4 and keep the &quot;Navigation types allowed&quot; property as a default value &quot;All&quot;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ1NXdJAFhdDsMOVyEou7Hnp36gACBzhjJe1IfSdi6BSpBE1WXM6iyTUMmMQdbm5e7P8MNLkYE4qW7hnWSK2mwh1A4ZZ-Mr-_oYl-RfptuauQ7MvOIWTaOh-CjKN1EFFZ8Z86tJysX5xIjV2pmHgu5140Gk5hnD7F1KKBXUWXvNP9FDgdDD-ruCyMu7A/s1105/Lookup%20Hyperlink.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;653&quot; data-original-width=&quot;1105&quot; height=&quot;378&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ1NXdJAFhdDsMOVyEou7Hnp36gACBzhjJe1IfSdi6BSpBE1WXM6iyTUMmMQdbm5e7P8MNLkYE4qW7hnWSK2mwh1A4ZZ-Mr-_oYl-RfptuauQ7MvOIWTaOh-CjKN1EFFZ8Z86tJysX5xIjV2pmHgu5140Gk5hnD7F1KKBXUWXvNP9FDgdDD-ruCyMu7A/w640-h378/Lookup%20Hyperlink.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;In the grid views, the value of the lookup columns is shown as hyperlinks by default. This is useful when the user wants to open the form of the related table (e.g. Company or Owner in the above screenshot) directly from the Contact view. But sometimes, the users want to disable those hyperlinks for the lookup values because it can be a bit confusing and it opens up a different form when the user wrongly clicks on the lookup values especially if the lookup column is the first column (instead of the primary name column).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. To change that behaviour, add Custom Controls to the view. This can be done in multiple places.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;a. Add Control to the Table to apply for all main views of the table.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjo00JFwZldwF6d2-eS3DMNsPChuZzjjLKqv_9ZT4dwKGvfmk8nxJJzfoHw0KDwTwGplAjPZ7IungmKWWJJPFLXbs-iz_rJYeQudkgYUrupEWZjK8B76L9FcAuycTg2zJ0tWwZm2qAMEYqimbm9VzvlF38-LhyVhX0c0fIaRSAbg0rFYOuCPpePn8BpRg/s1055/Add%20Custom%20Control%20Table.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;233&quot; data-original-width=&quot;1055&quot; height=&quot;141&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjo00JFwZldwF6d2-eS3DMNsPChuZzjjLKqv_9ZT4dwKGvfmk8nxJJzfoHw0KDwTwGplAjPZ7IungmKWWJJPFLXbs-iz_rJYeQudkgYUrupEWZjK8B76L9FcAuycTg2zJ0tWwZm2qAMEYqimbm9VzvlF38-LhyVhX0c0fIaRSAbg0rFYOuCPpePn8BpRg/w640-h141/Add%20Custom%20Control%20Table.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;b. Add Custom Controls to a view to apply the change only for a particular view.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNrR5ern-YBKLK_PouWVm-uusoC48vzutd60oGW8lw9OWm_GI3a0PufxkR9TEAyG1fHA7tTe17gEOA1wPtVj-KWKkdUUN21IhoXNkp94sIgZ57GvEclmMRCFNdd7bdtHL8hH-aqJhd2fnrsEkHMwpi9wIvdwvAhJowHZ5RQA8qG7y3uIUKXGZk7c3p6A/s946/Add%20Custom%20Control%20View.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;274&quot; data-original-width=&quot;946&quot; height=&quot;186&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNrR5ern-YBKLK_PouWVm-uusoC48vzutd60oGW8lw9OWm_GI3a0PufxkR9TEAyG1fHA7tTe17gEOA1wPtVj-KWKkdUUN21IhoXNkp94sIgZ57GvEclmMRCFNdd7bdtHL8hH-aqJhd2fnrsEkHMwpi9wIvdwvAhJowHZ5RQA8qG7y3uIUKXGZk7c3p6A/w640-h186/Add%20Custom%20Control%20View.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;c. Add Custom Controls to a subgrid to apply the changes only to that subgrid on the form&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDkvNNDh-wTdWsren-xS_Y68BtwHn0dZINzTmdYBzoce4UjvJbh-rRlKNcnKZiycCnZYhZIFZXGmc8n0El5-fIV6BNgLa7kSMK58nJuXfjozQ5GZQxfQrJ1GJdo7Qv_UIFA9nOKPMY5pGmMoOCu0w2MbU3cSpODk3-HgX28cxcW5EFs3twRVeNVEBcOA/s677/Add%20Custom%20Control%20Subgrid.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;677&quot; data-original-width=&quot;494&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDkvNNDh-wTdWsren-xS_Y68BtwHn0dZINzTmdYBzoce4UjvJbh-rRlKNcnKZiycCnZYhZIFZXGmc8n0El5-fIV6BNgLa7kSMK58nJuXfjozQ5GZQxfQrJ1GJdo7Qv_UIFA9nOKPMY5pGmMoOCu0w2MbU3cSpODk3-HgX28cxcW5EFs3twRVeNVEBcOA/s16000/Add%20Custom%20Control%20Subgrid.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2. Add Control&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTkc-dCPj6gHUxbzv88eRdUg3pS7CHrKlMySk4NPHIjTfy22cbk-wLS9Y8fYcvDIMiFWfjL16eyK18TogxJKY7g2yHew9Edd8wi4HlM5pKeK8dOLoyFBoFGYVj1g8hXMHKD0edJd0k7-mRuhGdSZJvIXjoqQvBLlI9VWwWiGas8_Km5tolnrWRYZF8Bg/s673/Add%20Control.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;673&quot; data-original-width=&quot;508&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTkc-dCPj6gHUxbzv88eRdUg3pS7CHrKlMySk4NPHIjTfy22cbk-wLS9Y8fYcvDIMiFWfjL16eyK18TogxJKY7g2yHew9Edd8wi4HlM5pKeK8dOLoyFBoFGYVj1g8hXMHKD0edJd0k7-mRuhGdSZJvIXjoqQvBLlI9VWwWiGas8_Km5tolnrWRYZF8Bg/s16000/Add%20Control.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;3. Select Power Apps Read-Only Grid&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOsGkF1pRoWrKHKvDyIQE-Ityjt7uAbgJP5Q3_J5hZvP5ulrf94FvlL0YKdNHJ3uQeoX_2Qz-NYd8OkqYP4Zm3WpuEeKUju8yw_3n2SEn9zUwPVeD3qz14toRzHADkcm777tDrSKHP5CGVRF_bh0V1J0lWjmLnj57Wd9F9piWuM7TDOjoS8Js9ebd6uQ/s495/Select%20Power%20Apps%20Read-Only%20Grid.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;451&quot; data-original-width=&quot;495&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOsGkF1pRoWrKHKvDyIQE-Ityjt7uAbgJP5Q3_J5hZvP5ulrf94FvlL0YKdNHJ3uQeoX_2Qz-NYd8OkqYP4Zm3WpuEeKUju8yw_3n2SEn9zUwPVeD3qz14toRzHADkcm777tDrSKHP5CGVRF_bh0V1J0lWjmLnj57Wd9F9piWuM7TDOjoS8Js9ebd6uQ/s16000/Select%20Power%20Apps%20Read-Only%20Grid.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;4.&amp;nbsp;Select Devices to Show the Custom Control&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3fAmwHqbMj7Y4C4DOP0pUwAzLBj_uRUWX0JWD1NYSkPUaG6ucwKjOTcANBd0p9ytyfhNJmkHgKffdv8LxA4Xm590JpVctLynbXmr4-qeomlcdM5fAAloxGkqAoYqaENyMCm1G4USGkUKbHAC3uY_dyWeOSEbgKUFn4sftRu-sE2OGuGCd02c8YPrAWQ/s676/Select%20Devices%20to%20Show%20the%20Custom%20Control.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;676&quot; data-original-width=&quot;515&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3fAmwHqbMj7Y4C4DOP0pUwAzLBj_uRUWX0JWD1NYSkPUaG6ucwKjOTcANBd0p9ytyfhNJmkHgKffdv8LxA4Xm590JpVctLynbXmr4-qeomlcdM5fAAloxGkqAoYqaENyMCm1G4USGkUKbHAC3uY_dyWeOSEbgKUFn4sftRu-sE2OGuGCd02c8YPrAWQ/s16000/Select%20Devices%20to%20Show%20the%20Custom%20Control.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;5.&amp;nbsp;Change Navigation Types Allowed to &quot;Primary only&quot;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEickZ-qU58VsylV0ellk5eRuhFkCQ9XUHlw0-XUvvyB864kBYSbBRduQMgaM8iFepDfdIYl56FFGBuePvYMdNK3mj2-oZWvy5BjQ18oFXA8XgLCHrhK-4QoLShTIpNUGovq76uzxNnagaA6cYbfDexmNPcHO1J3IFc95UIqkeA3gK2zJsumnQk0ZzLUkA/s514/Change%20Navigation%20Types%20Allowed%20to%20Primary%20only.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;443&quot; data-original-width=&quot;514&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEickZ-qU58VsylV0ellk5eRuhFkCQ9XUHlw0-XUvvyB864kBYSbBRduQMgaM8iFepDfdIYl56FFGBuePvYMdNK3mj2-oZWvy5BjQ18oFXA8XgLCHrhK-4QoLShTIpNUGovq76uzxNnagaA6cYbfDexmNPcHO1J3IFc95UIqkeA3gK2zJsumnQk0ZzLUkA/s16000/Change%20Navigation%20Types%20Allowed%20to%20Primary%20only.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;6. Save and publish the changes.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After that, the values for the lookup columns are no longer clickable and only the primary navigation (Primary Name column) is shown as a hyperlink to open the selected row.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtahTLOVVNYPb3chKVJUQeBKKNyA3NH-JTx8fCG6FpoaY6J70BBPR7HRhlP3dXtt9O7GuU6aEmE7DxSC8_fpY-emiS-kMTdCNHHAd-i3OO7V-GqqRjf0Qv6Xu471KyOwllrp7dlkbvS4Dj5BjBRdx2YKrKaF2gx8fGodBnPmiCZpcdnxBugk9Hko-BRQ/s1025/Lookup%20Text.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;655&quot; data-original-width=&quot;1025&quot; height=&quot;408&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtahTLOVVNYPb3chKVJUQeBKKNyA3NH-JTx8fCG6FpoaY6J70BBPR7HRhlP3dXtt9O7GuU6aEmE7DxSC8_fpY-emiS-kMTdCNHHAd-i3OO7V-GqqRjf0Qv6Xu471KyOwllrp7dlkbvS4Dj5BjBRdx2YKrKaF2gx8fGodBnPmiCZpcdnxBugk9Hko-BRQ/w640-h408/Lookup%20Text.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Summary&lt;/h3&gt;&lt;div&gt;Microsoft is investing a lot on Power Apps grid control to support the latest Microsoft accessibility standards and adding up more and more features to allow the makers to configure based on the needs of the users. With this latest update, you can turn off clickable lookups in the grid views of model-driven apps.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://linnzawwin.blogspot.com/feeds/4613450572435305047/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://linnzawwin.blogspot.com/2022/03/disable-hyperlink-for-lookup-columns-in.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/4613450572435305047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/4613450572435305047'/><link rel='alternate' type='text/html' href='http://linnzawwin.blogspot.com/2022/03/disable-hyperlink-for-lookup-columns-in.html' title='Disable Hyperlink for Lookup Columns in Grid Views of Model-driven Apps'/><author><name>Linn Zaw Win</name><uri>http://www.blogger.com/profile/16015532694415495453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaCUObunP3kiYNRu6pZ-J4ezoWDP-Jf1Cv010HLXr_bLFmB0bcZj8atUiBYmg37uDyBDzxPrHFX7EGESjgSMIOIBX7TR9VS9nZ179jpYpTkpsDtw09albFOTBEXTdw2OhtXLyZkfd4kBnOHYZmGSoge7m2XxXOVZvFJxuEiXnTmg7sRRc/s220/IMG_5259-Square%20-%20MVP.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ1NXdJAFhdDsMOVyEou7Hnp36gACBzhjJe1IfSdi6BSpBE1WXM6iyTUMmMQdbm5e7P8MNLkYE4qW7hnWSK2mwh1A4ZZ-Mr-_oYl-RfptuauQ7MvOIWTaOh-CjKN1EFFZ8Z86tJysX5xIjV2pmHgu5140Gk5hnD7F1KKBXUWXvNP9FDgdDD-ruCyMu7A/s72-w640-h378-c/Lookup%20Hyperlink.png" height="72" width="72"/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3970629459363259828.post-4824378216344466141</id><published>2022-03-07T22:19:00.001+10:00</published><updated>2022-03-08T18:39:58.079+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="Offline"/><category scheme="http://www.blogger.com/atom/ns#" term="WebAPI"/><title type='text'>Filter by Lookup with retrieveMultipleRecords JavaScript WebApi in Offline Mode</title><content type='html'>&lt;meta content=&quot;summary_large_image&quot; name=&quot;twitter:card&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;This post will explain how filtering using the lookup column is different between a normal online scenario and a mobile offline scenario in Xrm.WebApi.retrieveMultipleRecords.&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjUrzaRT6XDihcFILqCNs5yxUA5SZTE9d_mRWbVI7JMTnnSAPAIQDkwpAA_t4Izzw3oim893DenZAs6zMbqRTUp0znXPV6qTv1R0e0O4YDlU6May-28V424Gmf3132H7XxOI4V1v5dAhQrXuqzjFctiS2Y_fGsoTfoT-TbLFxz5By5KJYXbm6O01jt_og&quot; name=&quot;twitter:image&quot;&gt;&lt;/meta&gt;
&lt;div&gt;
  This post will explain how filtering using the lookup column is different
  between a normal online scenario and a mobile offline scenario
  in&amp;nbsp;Xrm.WebApi.retrieveMultipleRecords. You will also learn about how to
  write a script to support both scenarios.
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjUrzaRT6XDihcFILqCNs5yxUA5SZTE9d_mRWbVI7JMTnnSAPAIQDkwpAA_t4Izzw3oim893DenZAs6zMbqRTUp0znXPV6qTv1R0e0O4YDlU6May-28V424Gmf3132H7XxOI4V1v5dAhQrXuqzjFctiS2Y_fGsoTfoT-TbLFxz5By5KJYXbm6O01jt_og=s756&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;503&quot; data-original-width=&quot;756&quot; height=&quot;266&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjUrzaRT6XDihcFILqCNs5yxUA5SZTE9d_mRWbVI7JMTnnSAPAIQDkwpAA_t4Izzw3oim893DenZAs6zMbqRTUp0znXPV6qTv1R0e0O4YDlU6May-28V424Gmf3132H7XxOI4V1v5dAhQrXuqzjFctiS2Y_fGsoTfoT-TbLFxz5By5KJYXbm6O01jt_og=w400-h266&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;
  Before setting up the
  &lt;a href=&quot;https://docs.microsoft.com/en-us/dynamics365/mobile-app/setup-mobile-offline?WT.mc_id=DX-MVP-5003873&quot; target=&quot;_blank&quot;&gt;Dynamics 365 app&lt;/a&gt;
  or
  &lt;a href=&quot;https://docs.microsoft.com/en-us/powerapps/mobile/setup-mobile-offline?WT.mc_id=DX-MVP-5003873&quot; target=&quot;_blank&quot;&gt;Power Apps model-driven app&lt;/a&gt;&amp;nbsp;in offline mode, it is important to read through
  &lt;a href=&quot;https://docs.microsoft.com/en-us/dynamics365/mobile-app/mobile-offline-capabilities?WT.mc_id=DX-MVP-5003873&quot; target=&quot;_blank&quot;&gt;this Microsoft Docs article&lt;/a&gt;
  to understand the capabilities, tips, and limitations. Even if you understand
  all those capabilities and limitations mentioned in the articles, you will
  still encounter unexpected issues when you start testing the app in offline
  mode. This is one of the caveats that you should be aware of.
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;In the example below, there are x4 Accounts and the requirement is to query the name of the &lt;b&gt;Active&lt;/b&gt; Account which has &quot;&lt;b&gt;&lt;i&gt;Sample User A1&lt;/i&gt;&lt;/b&gt;&quot; (with GUID &lt;b&gt;&lt;i&gt;033bbb38-611c-ec11-b6e7-000d3acb20df&lt;/i&gt;&lt;/b&gt;) as the &lt;b&gt;Primary Contact&lt;/b&gt;&amp;nbsp;using JavaScript. For that query, only one row of data will be returned because there is no other Account that matches the criteria above.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjlfW2NiwN3g__p_jS-AmLzUvzHQyKwLuTvheD-2QPgdnlk4d-Y_dQzlWjPFb0dB4JGRH-BWzYJ8u8rAfjSGekicQdFe3WajDXzKSjGBTIONGeoFC_U2HQHQSG7MYc_IbYuLOgAG45TZiNx6dW3GaRtZlO_nnb1RUhgqX4OwnObj4GzKHdcCXhDsH5-aQ=s722&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;266&quot; data-original-width=&quot;722&quot; height=&quot;236&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjlfW2NiwN3g__p_jS-AmLzUvzHQyKwLuTvheD-2QPgdnlk4d-Y_dQzlWjPFb0dB4JGRH-BWzYJ8u8rAfjSGekicQdFe3WajDXzKSjGBTIONGeoFC_U2HQHQSG7MYc_IbYuLOgAG45TZiNx6dW3GaRtZlO_nnb1RUhgqX4OwnObj4GzKHdcCXhDsH5-aQ=w640-h236&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;For such requirements, the filter would be &quot;&lt;b&gt;&lt;i&gt;_primarycontactid_value eq 033bbb38-611c-ec11-b6e7-000d3acb20df&lt;/i&gt;&lt;/b&gt;&quot;. Even thought the logical name of the&amp;nbsp;&lt;b&gt;Primary Contact&lt;/b&gt;&amp;nbsp;is &lt;b&gt;&lt;i&gt;primarycontactid&lt;/i&gt;&lt;/b&gt;, the filter needs to use&amp;nbsp;&lt;i&gt;_{navigation property name}_value&lt;/i&gt; as mentioned in &lt;a href=&quot;https://docs.microsoft.com/en-us/powerapps/developer/data-platform/webapi/web-api-types-operations#lookup-properties&quot; target=&quot;_blank&quot;&gt;this Microsoft Docs article&lt;/a&gt;. (read more at &lt;a href=&quot;https://bengribaudo.com/blog/2021/05/18/5749/dataverse-web-api-tip-lookup-property-annotations&quot; target=&quot;_blank&quot;&gt;this blog post&lt;/a&gt; by&amp;nbsp;&lt;a href=&quot;https://www.linkedin.com/in/bengribaudo&quot; target=&quot;_blank&quot;&gt;Ben Gribaudo&lt;/a&gt;)&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;pre style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent; background: rgb(245, 242, 240); border-radius: 5px; border: 1px solid rgb(150, 150, 150); box-shadow: none; box-sizing: inherit; font-family: consolas, monaco, &amp;quot;andale mono&amp;quot;, &amp;quot;ubuntu mono&amp;quot;, monospace; font-size: 12px; hyphens: none; line-height: 1.3; margin-bottom: 0.5em; margin-top: 0.5em; overflow: auto; padding: 10px; tab-size: 4; text-rendering: optimizelegibility; text-shadow: rgb(255, 255, 255) 0px 1px; white-space: pre-wrap; word-break: break-all;&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;Xrm.WebApi.retrieveMultipleRecords(&quot;account&quot;, 
&quot;?$select=name,_primarycontactid_value&amp;amp;&quot; + 
&quot;$filter=_primarycontactid_value eq 033bbb38-611c-ec11-b6e7-000d3acb20df and statecode eq 0&quot;).then(
	function success(result) 
	{
		Xrm.Navigation.openAlertDialog( { text: &quot;Count: &quot; + result.entities.length + &quot; | &quot; + 
		result.entities[0][&quot;name&quot;] }); 
	}
);
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;The script above will show the alert as &quot;Count: 1 | Test A&quot; correctly when the script is triggered on the browser (online scenario).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But when the same script is triggered on the mobile with offline mode (with all Accounts and Contacts synced), the count is shown as 4. That means the whole&amp;nbsp;&lt;b&gt;&lt;i&gt;$filter&lt;/i&gt;&lt;/b&gt; part is ignored and the query returns all rows in the table. After checking out the &lt;a href=&quot;https://docs.microsoft.com/en-us/powerapps/developer/model-driven-apps/clientapi/reference/xrm-webapi/retrievemultiplerecords?WT.mc_id=DX-MVP-5003873#retrieve-or-filter-by-lookup-properties&quot; target=&quot;_blank&quot;&gt;documentation for&amp;nbsp;Xrm.WebApi.retrieveMultipleRecords&lt;/a&gt;, I realised that &lt;i&gt;_&amp;lt;name&amp;gt;_value&lt;/i&gt; syntax option is not supported&amp;nbsp;for mobile clients in offline mode. For offline mode,&amp;nbsp;the single-value navigation property name (e.g.&amp;nbsp;&lt;b&gt;&lt;i&gt;primarycontactid&lt;/i&gt;&lt;/b&gt;) should be used for both retrieving ($select) and filtering ($filter).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Solution 1&lt;/b&gt;&lt;/div&gt;&lt;div&gt;To make the script work in both scenarios, the filter syntax needs to be changed by checking if the mobile client is in offline mode or not. For that case, we can use &lt;a href=&quot;https://docs.microsoft.com/en-us/powerapps/developer/model-driven-apps/clientapi/reference/xrm-utility/getglobalcontext/client?WT.mc_id=DX-MVP-5003873#isoffline&quot; target=&quot;_blank&quot;&gt;isOffline() method from getGlobalContext.client&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;pre style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent; background: rgb(245, 242, 240); border-radius: 5px; border: 1px solid rgb(150, 150, 150); box-shadow: none; box-sizing: inherit; hyphens: none; line-height: 1.3; margin-bottom: 0.5em; margin-top: 0.5em; overflow: auto; padding: 10px; tab-size: 4; text-rendering: optimizelegibility; text-shadow: rgb(255, 255, 255) 0px 1px; word-break: break-all;&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span style=&quot;font-size: 12px; white-space: pre-wrap; color: black;&quot;&gt;let filterQuery = &quot;$filter=_primarycontactid_value eq 033bbb38-611c-ec11-b6e7-000d3acb20df and &quot;;
if (Xrm.Utility.getGlobalContext().client.isOffline())
{			
	filterQuery = &quot;$filter=primarycontactid eq 033bbb38-611c-ec11-b6e7-000d3acb20df and &quot;
}
Xrm.WebApi.retrieveMultipleRecords(&quot;account&quot;, 
&quot;?$select=name,_primarycontactid_value&amp;amp;&quot; + filterQuery
filterQuery + &quot;statecode eq 0&quot;).then(
	function success(result) 
	{
		Xrm.Navigation.openAlertDialog( { text: &quot;Count: &quot; + result.entities.length + &quot; | &quot; + 
		result.entities[0][&quot;name&quot;]  + &quot; | &quot; + 
		result.entities[0][&quot;_primarycontactid_value&quot;] });
	}
);&lt;/span&gt;&lt;span style=&quot;font-family: consolas, monaco, andale mono, ubuntu mono, monospace;&quot;&gt;&lt;span style=&quot;font-size: 12px; white-space: pre-wrap;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;Even though the&amp;nbsp;single-value navigation property name (e.g. primarycontactid) is used for retrieving in ($select), &lt;i&gt;_&amp;lt;name&amp;gt;_value&lt;/i&gt;&amp;nbsp;syntax needs to be used for reading the value from the response (e.g.&amp;nbsp;&lt;b&gt;&lt;i&gt;result.entities[0][&quot;_primarycontactid_value&quot;]&lt;/i&gt;&lt;/b&gt; ) 🤷‍♂️&lt;/div&gt;&lt;div&gt;&lt;div&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Solution 2&lt;/b&gt;&lt;/div&gt;&lt;div&gt;To make the script work in both scenarios without using different $filter syntax, you can &lt;a href=&quot;https://docs.microsoft.com/en-us/powerapps/developer/model-driven-apps/clientapi/reference/xrm-webapi/retrievemultiplerecords?WT.mc_id=DX-MVP-5003873#basic-retrieve-multiple-with-fetchxml&quot; target=&quot;_blank&quot;&gt;query using FetchXML&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;pre style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent; background: rgb(245, 242, 240); border-radius: 5px; border: 1px solid rgb(150, 150, 150); box-shadow: none; box-sizing: inherit; hyphens: none; line-height: 1.3; margin-bottom: 0.5em; margin-top: 0.5em; overflow: auto; padding: 10px; tab-size: 4; text-rendering: optimizelegibility; text-shadow: rgb(255, 255, 255) 0px 1px; word-break: break-all;&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&lt;span style=&quot;font-size: 12px; white-space: pre-wrap; color: black;&quot;&gt;let fetchXml = &quot;&amp;lt;fetch&amp;gt;&quot; + 
	&quot;&amp;lt;entity name=&#39;account&#39;&amp;gt;&quot; + 
		&quot;&amp;lt;attribute name=&#39;name&#39;/&amp;gt;&quot; + 
		&quot;&amp;lt;attribute name=&#39;primarycontactid&#39;/&amp;gt;&quot; + 
		&quot;&amp;lt;filter type=&#39;and&#39;&amp;gt;&quot; + 
			&quot;&amp;lt;condition attribute=&#39;primarycontactid&#39; operator=&#39;eq&#39; value=&#39;033bbb38-611c-ec11-b6e7-000d3acb20df&#39;/&amp;gt;&quot; + 
			&quot;&amp;lt;condition attribute=&#39;statecode&#39; operator=&#39;eq&#39; value=&#39;0&#39;/&amp;gt;&quot; + 
		&quot;&amp;lt;/filter&amp;gt;&quot; + 
	&quot;&amp;lt;/entity&amp;gt;&quot; + 
&quot;&amp;lt;/fetch&amp;gt;&quot;;
Xrm.WebApi.retrieveMultipleRecords(&quot;account&quot;, &quot;?fetchXml=&quot; + fetchXml).then(
	function success(result)
	{
		Xrm.Navigation.openAlertDialog({ text: &quot;Count: &quot; + result.entities.length + &quot; | &quot; + 
		result.entities[0][&quot;name&quot;]  + &quot; | &quot; + 
		result.entities[0][&quot;_primarycontactid_value&quot;] });
	}
);&lt;/span&gt;&lt;span style=&quot;font-family: consolas, monaco, andale mono, ubuntu mono, monospace;&quot;&gt;&lt;span style=&quot;font-size: 12px; white-space: pre-wrap;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;The same FetchXML query will work without any issue in both online and offline scenarios.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;Summary&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Setting up the model-driven app in offline mode is never smooth especially when the configurations and customisations were not initially designed with the mobile offline capabilities and limitations in mind. Reserving enough time is important not only to test the app thoroughly in the offline mode and identify the issues like these but also to update the scripts and make sure the app is working well in both online and offline scenarios.&lt;/div&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://linnzawwin.blogspot.com/feeds/4824378216344466141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://linnzawwin.blogspot.com/2022/03/filter-by-lookup-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/4824378216344466141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/4824378216344466141'/><link rel='alternate' type='text/html' href='http://linnzawwin.blogspot.com/2022/03/filter-by-lookup-with.html' title='Filter by Lookup with retrieveMultipleRecords JavaScript WebApi in Offline Mode'/><author><name>Linn Zaw Win</name><uri>http://www.blogger.com/profile/16015532694415495453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaCUObunP3kiYNRu6pZ-J4ezoWDP-Jf1Cv010HLXr_bLFmB0bcZj8atUiBYmg37uDyBDzxPrHFX7EGESjgSMIOIBX7TR9VS9nZ179jpYpTkpsDtw09albFOTBEXTdw2OhtXLyZkfd4kBnOHYZmGSoge7m2XxXOVZvFJxuEiXnTmg7sRRc/s220/IMG_5259-Square%20-%20MVP.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEjUrzaRT6XDihcFILqCNs5yxUA5SZTE9d_mRWbVI7JMTnnSAPAIQDkwpAA_t4Izzw3oim893DenZAs6zMbqRTUp0znXPV6qTv1R0e0O4YDlU6May-28V424Gmf3132H7XxOI4V1v5dAhQrXuqzjFctiS2Y_fGsoTfoT-TbLFxz5By5KJYXbm6O01jt_og=s72-w400-h266-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3970629459363259828.post-2046879200954679489</id><published>2022-02-20T20:55:00.003+10:00</published><updated>2022-02-20T20:55:20.287+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cloud flow"/><category scheme="http://www.blogger.com/atom/ns#" term="Document"/><category scheme="http://www.blogger.com/atom/ns#" term="Dyn365CE"/><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft Dataverse"/><category scheme="http://www.blogger.com/atom/ns#" term="Portal"/><category scheme="http://www.blogger.com/atom/ns#" term="Power Automate"/><category scheme="http://www.blogger.com/atom/ns#" term="sharepoint"/><title type='text'>Managing Public SharePoint Documents for Power Apps Portal and Internal Documents Using Cloud Flow (Part 8 of 8)</title><content type='html'>&lt;meta content=&quot;summary_large_image&quot; name=&quot;twitter:card&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;When the SharePoint integration from Power Apps portals is enabled, the users can see all the SharePoint documents related to the record but we can upload the documents for internal purpose to the secondary &lt;b&gt;Document Location&lt;/b&gt;&amp;nbsp;and keep those hidden from the Portal user.&quot; name=&quot;twitter:description&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgoTcLzBnITeoTSvKOFI73RIcefXAVQ4r3mDbSPgmy-DvrDNPahvaNwqj9SpYiNRD8Mus4k6WDCkQkU6MObEtXrlEkknHpvQsUjx5wpNyrAFBfB0scOtl_lYWmS0NoI2JxhEYGCu9Uu7l4rydAWSmEeL6415ewtI213IZ3eW-CnNH4K9EQfy6bNgUsxbQ&quot; name=&quot;twitter:image&quot;&gt;&lt;/meta&gt;
&lt;div&gt;
  This is the eighth post in a series of Automating SharePoint Integration with
  Dataverse using Power Automate. You can check out the other posts via these
  links (&lt;a
    href=&quot;https://linnzawwin.blogspot.com/2021/08/automatically-create-sharepoint.html&quot;
    target=&quot;_blank&quot;
    &gt;Part 1&lt;/a
  &gt;,
  &lt;a
    href=&quot;https://linnzawwin.blogspot.com/2021/09/trigger-oncreate-cloud-flow-for.html&quot;
    target=&quot;_blank&quot;
    &gt;Part 2&lt;/a
  &gt;,
  &lt;a
    href=&quot;https://linnzawwin.blogspot.com/2021/09/automatically-create-sharepoint-folder.html&quot;
    target=&quot;_blank&quot;
    &gt;Part 3&lt;/a
  &gt;,
  &lt;a
    href=&quot;https://linnzawwin.blogspot.com/2021/11/automatically-create-sharepoint.html&quot;
    target=&quot;_blank&quot;
    &gt;Part 4&lt;/a
  &gt;,
  &lt;a
    href=&quot;https://linnzawwin.blogspot.com/2022/01/sharepoint-url-shortcut-on-form-and.html&quot;
    target=&quot;_blank&quot;
    &gt;Part 5&lt;/a
  &gt;,
  &lt;a
    href=&quot;https://linnzawwin.blogspot.com/2022/02/automatically-move-dataverse-email.html&quot;
    target=&quot;_blank&quot;
    &gt;Part 6&lt;/a
  &gt;,
  &lt;a
    href=&quot;https://linnzawwin.blogspot.com/2022/02/automatically-move-dataverse-email.html&quot;
    target=&quot;_blank&quot;
    &gt;Part 7&lt;/a
  &gt;)
&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
  Power Apps portal has the
  &lt;a
    href=&quot;https://docs.microsoft.com/en-us/powerapps/maker/portals/manage-sharepoint-documents?WT.mc_id=DX-MVP-5003873&quot;
    target=&quot;_blank&quot;
    &gt;capability to&amp;nbsp;upload and display documents to and from SharePoint&lt;/a
  &gt;
  directly to the Document Library related to a record. But sometimes, there is
  a requirement to manage two types of documents, one for the public documents
  visible to the portal user and the private documents which are supposed to be
  visible only for the internal Dynamics 365/Power Apps users. This can be
  achieved by uploading the public documents for the portal user to the
  &lt;b&gt;Document Location&lt;/b&gt; which is created first and the private documents for
  the internal users can be uploaded to the second &lt;b&gt;Document Location&lt;/b&gt;.
  (Special thanks to&amp;nbsp;&lt;a
    href=&quot;https://www.linkedin.com/in/ggonzalez2&quot;
    target=&quot;_blank&quot;
    &gt;Gus Gonzalez&lt;/a
  &gt;
  for sharing this solution by
  &lt;a href=&quot;https://www.linkedin.com/in/nicholashayduk&quot; target=&quot;_blank&quot;
    &gt;Nicholas Hayduk&lt;/a
  &gt;.)
&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
  We can automate this solution by automatically creating the x2
  &lt;b&gt;Document Locations&lt;/b&gt; with a cloud flow as soon as the record is created.
  In the&amp;nbsp;&lt;a
    href=&quot;https://linnzawwin.blogspot.com/2021/08/automatically-create-sharepoint.html&quot;
    target=&quot;_blank&quot;
    &gt;Part 1&lt;/a
  &gt;&amp;nbsp;post,&amp;nbsp;I have explained how to automatically create&amp;nbsp;SharePoint
  &lt;b&gt;Document Location&lt;/b&gt; OnCreate of the record. This is the extension the
  previous solution with the additional steps to create the second
  &lt;b&gt;Document Location&lt;/b&gt;.
&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;a
    href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgoTcLzBnITeoTSvKOFI73RIcefXAVQ4r3mDbSPgmy-DvrDNPahvaNwqj9SpYiNRD8Mus4k6WDCkQkU6MObEtXrlEkknHpvQsUjx5wpNyrAFBfB0scOtl_lYWmS0NoI2JxhEYGCu9Uu7l4rydAWSmEeL6415ewtI213IZ3eW-CnNH4K9EQfy6bNgUsxbQ=s1265&quot;
    style=&quot;margin-left: 1em; margin-right: 1em;&quot;
    &gt;&lt;img
      border=&quot;0&quot;
      data-original-height=&quot;1042&quot;
      data-original-width=&quot;1265&quot;
      height=&quot;528&quot;
      src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgoTcLzBnITeoTSvKOFI73RIcefXAVQ4r3mDbSPgmy-DvrDNPahvaNwqj9SpYiNRD8Mus4k6WDCkQkU6MObEtXrlEkknHpvQsUjx5wpNyrAFBfB0scOtl_lYWmS0NoI2JxhEYGCu9Uu7l4rydAWSmEeL6415ewtI213IZ3eW-CnNH4K9EQfy6bNgUsxbQ=w640-h528&quot;
      width=&quot;640&quot;
  /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
  These are all the steps included in the cloud flow for this solution. The
  following cloud flow is triggered on create of the Contact and creates the
  public&amp;nbsp;&lt;b&gt;Document Location&lt;/b&gt;&amp;nbsp;for the portal user as in
  the&amp;nbsp;&lt;a
    href=&quot;https://linnzawwin.blogspot.com/2021/08/automatically-create-sharepoint.html&quot;
    target=&quot;_blank&quot;
    &gt;Part 1&lt;/a
  &gt;&amp;nbsp;post and then, creates the private&amp;nbsp;&lt;b&gt;Document Location&lt;/b
  &gt;&amp;nbsp;for the internal users.
&lt;/div&gt;
&lt;div&gt;
  &lt;ol style=&quot;text-align: left;&quot;&gt;
    &lt;li&gt;&lt;a href=&quot;#Public&quot;&gt;Create Public Document Location&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#Private&quot;&gt;Create Private Document Location&lt;/a&gt;&lt;/li&gt;
  &lt;/ol&gt;
  &lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
    &lt;a
      href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgx3RUFUbrKOu8qbGBkyLZmPglzlsDVpmuyUL-V0RJXor-0Iphjkug891jIkR5x5eDtIS6JMZARWe-EyKP_H0vE-biQg7uEZInM1SmYX-I1Lwaq49IDd8sikmkUyPV5E8b2dKGZjwI3sX4o3_rhkg6pdJX62tIR-DkF74S4zzKRkmf0dl_gbE_jmwJAWw=s1065&quot;
      style=&quot;margin-left: 1em; margin-right: 1em;&quot;
      &gt;&lt;img
        border=&quot;0&quot;
        data-original-height=&quot;1065&quot;
        data-original-width=&quot;616&quot;
        src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgx3RUFUbrKOu8qbGBkyLZmPglzlsDVpmuyUL-V0RJXor-0Iphjkug891jIkR5x5eDtIS6JMZARWe-EyKP_H0vE-biQg7uEZInM1SmYX-I1Lwaq49IDd8sikmkUyPV5E8b2dKGZjwI3sX4o3_rhkg6pdJX62tIR-DkF74S4zzKRkmf0dl_gbE_jmwJAWw=s16000&quot;
    /&gt;&lt;/a&gt;
  &lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
  &lt;div&gt;
    &lt;div&gt;
      &lt;a href=&quot;#Public&quot;&gt;🔗&lt;/a&gt;
      &lt;a name=&quot;Public&quot;&gt;1. Create Public Document Location&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhr6-xOM19kFT77ezD4nlyhYeTK2lSGysWutmtSaxzVzVxDTp8GUaLC1USU7aikztVMgfHbGT-mhsv2vpzNwM7LuKZcr5nA3GOVlMr3g8WdFcImKxoKGkggzn-tAxSkTTLAZNy60PfCseRAHJ-NS6wiiHak8zGZ-AWt9n-K1LtGX7r1YJ8FLD2Yl_--GA=s1429&quot;
        style=&quot;margin-left: 1em; margin-right: 1em;&quot;
        &gt;&lt;img
          border=&quot;0&quot;
          data-original-height=&quot;1429&quot;
          data-original-width=&quot;609&quot;
          src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhr6-xOM19kFT77ezD4nlyhYeTK2lSGysWutmtSaxzVzVxDTp8GUaLC1USU7aikztVMgfHbGT-mhsv2vpzNwM7LuKZcr5nA3GOVlMr3g8WdFcImKxoKGkggzn-tAxSkTTLAZNy60PfCseRAHJ-NS6wiiHak8zGZ-AWt9n-K1LtGX7r1YJ8FLD2Yl_--GA=s16000&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
    &lt;div&gt;
      The first part of the cloud flow is almost the same as the the&amp;nbsp;&lt;a
        href=&quot;https://linnzawwin.blogspot.com/2021/08/automatically-create-sharepoint.html&quot;
        target=&quot;_blank&quot;
        &gt;Part 1&lt;/a
      &gt;&amp;nbsp;post except the SharePoint folder path and Relative URL with
      &quot;_Public&quot; postfix (as highlighted in the screenshot above).
    &lt;/div&gt;
    &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
    &lt;div&gt;
      &lt;a href=&quot;#Private&quot;&gt;🔗&lt;/a&gt;
      &lt;a name=&quot;Private&quot;&gt;2. Create Private Document Location&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgfm-835eNnLGVtFfaNElEePrSBUeoxwpkBOIUmHe6Z1KD24fdSyH99C1A3IDciLIDe5bEoPd7ka2opd_jqJEHTBe8zcAXYbfrLWMkpGyEUyeL6TD1-AXHpjZOp7cv_3ruMfZBvs-LjyzqPDu0gZNqLxRSBZmy6Tu2rRbdkBgURfILjH7NxxJZLPJGdbg=s682&quot;
        style=&quot;margin-left: 1em; margin-right: 1em;&quot;
        &gt;&lt;img
          border=&quot;0&quot;
          data-original-height=&quot;682&quot;
          data-original-width=&quot;615&quot;
          src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgfm-835eNnLGVtFfaNElEePrSBUeoxwpkBOIUmHe6Z1KD24fdSyH99C1A3IDciLIDe5bEoPd7ka2opd_jqJEHTBe8zcAXYbfrLWMkpGyEUyeL6TD1-AXHpjZOp7cv_3ruMfZBvs-LjyzqPDu0gZNqLxRSBZmy6Tu2rRbdkBgURfILjH7NxxJZLPJGdbg=s16000&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
    After creating the first &lt;b&gt;Document Location&lt;/b&gt;, delay the flow for 5
    seconds to make sure that the timestamp of the second&amp;nbsp;&lt;b
      &gt;Document Location&amp;nbsp;&lt;/b
    &gt;is different from the first one. The steps for creating a SharePoint folder
    and &lt;b&gt;Document Location&lt;/b&gt; are almost exactly the ones as the public one
    except the &quot;_Private&quot; postfix (as highlighted in the screenshot).
  &lt;/div&gt;
  &lt;div&gt;
    &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
    &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;a
    href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhCX-f1kaevtFRWXZxVgIQDCGJBUsovYXn78jV2X1JXF9j4d64lRQNJzDnsflf5g6Pt9LVVNAvS90N8IOx0S_Sw4eHF0MlA3rJApsVkJG8mNDQKIvd5oAjyYaoKcX_9BsP3VqpQDlnJ2KeL8orsYSDyp38VoBf_F7H7ZKYyZlM0V5GheSqB5tPoYvA43w=s1041&quot;
    style=&quot;margin-left: 1em; margin-right: 1em;&quot;
    &gt;&lt;img
      border=&quot;0&quot;
      data-original-height=&quot;1041&quot;
      data-original-width=&quot;765&quot;
      height=&quot;640&quot;
      src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhCX-f1kaevtFRWXZxVgIQDCGJBUsovYXn78jV2X1JXF9j4d64lRQNJzDnsflf5g6Pt9LVVNAvS90N8IOx0S_Sw4eHF0MlA3rJApsVkJG8mNDQKIvd5oAjyYaoKcX_9BsP3VqpQDlnJ2KeL8orsYSDyp38VoBf_F7H7ZKYyZlM0V5GheSqB5tPoYvA43w=w470-h640&quot;
      width=&quot;470&quot;
  /&gt;&lt;/a&gt;
&lt;/div&gt;
After creating two &lt;b&gt;Document Locations&lt;/b&gt;, the documents uploaded to the
first &lt;b&gt;Document Location&lt;/b&gt;&amp;nbsp;(red highlighted ones) can be visible on the
portal and the documents uploaded to the second&amp;nbsp;&lt;b&gt;Document Location&lt;/b
&gt;&amp;nbsp;(green highlighted ones) can be visible only to the
internal&amp;nbsp;Dynamics 365/Power Apps users.&amp;nbsp;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
  The user can see the documents from both location by manually selecting &quot;All
  Locations&quot; from the &lt;b&gt;Document Location&lt;/b&gt; menu but that selection cannot be
  default. When the internal user opens the Documents tab, the
  &lt;b&gt;Document Location&lt;/b&gt; in the first menu item is shown (e.g. Private
  Documents in this case when the &lt;b&gt;Document Location&lt;/b&gt; name is sorted
  alphabetically).&lt;br /&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;
    &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
    &lt;div&gt;
      &lt;div&gt;
        &lt;h3&gt;Summary&lt;/h3&gt;
        &lt;div&gt;
          &lt;div&gt;
            When the SharePoint integration from Power Apps portals is enabled,
            the users can see all the SharePoint documents related to the record
            but we can upload the documents for internal purpose to the
            secondary &lt;b&gt;Document Location&lt;/b&gt;&amp;nbsp;and keep those hidden from
            the Portal user.
          &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://linnzawwin.blogspot.com/feeds/2046879200954679489/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://linnzawwin.blogspot.com/2022/02/managing-public-sharepoint-documents.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/2046879200954679489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3970629459363259828/posts/default/2046879200954679489'/><link rel='alternate' type='text/html' href='http://linnzawwin.blogspot.com/2022/02/managing-public-sharepoint-documents.html' title='Managing Public SharePoint Documents for Power Apps Portal and Internal Documents Using Cloud Flow (Part 8 of 8)'/><author><name>Linn Zaw Win</name><uri>http://www.blogger.com/profile/16015532694415495453</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaCUObunP3kiYNRu6pZ-J4ezoWDP-Jf1Cv010HLXr_bLFmB0bcZj8atUiBYmg37uDyBDzxPrHFX7EGESjgSMIOIBX7TR9VS9nZ179jpYpTkpsDtw09albFOTBEXTdw2OhtXLyZkfd4kBnOHYZmGSoge7m2XxXOVZvFJxuEiXnTmg7sRRc/s220/IMG_5259-Square%20-%20MVP.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEgoTcLzBnITeoTSvKOFI73RIcefXAVQ4r3mDbSPgmy-DvrDNPahvaNwqj9SpYiNRD8Mus4k6WDCkQkU6MObEtXrlEkknHpvQsUjx5wpNyrAFBfB0scOtl_lYWmS0NoI2JxhEYGCu9Uu7l4rydAWSmEeL6415ewtI213IZ3eW-CnNH4K9EQfy6bNgUsxbQ=s72-w640-h528-c" height="72" width="72"/><thr:total>3</thr:total></entry></feed>