<?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-2491204017359768357</id><updated>2026-03-09T21:43:07.450+09:00</updated><category term="CRM 2011"/><category term="Rich Text box"/><category term="CRM 2011 Rollup 12"/><category term="CRM 2011 Rollup 14"/><category term="JavaScript issues"/><category term="Roll up 12"/><category term="TincyMCE"/><title type='text'>chamara iresh&#39;s Blog</title><subtitle type='html'>Dynamic CRM</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://chamarairesh.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://chamarairesh.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Chamara Iresh</name><uri>http://www.blogger.com/profile/04695612052896290711</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//3.bp.blogspot.com/-Wfsm4TxTxO0/XiPTZjrj-cI/AAAAAAAAvCw/ONKFubGdBw41mPb1Xp89d9eMkvXaV0TkQCK4BGAYYCw/s220/20190817_151917.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>76</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2491204017359768357.post-7269441495174775177</id><published>2025-07-12T19:39:00.003+09:00</published><updated>2025-07-12T19:39:47.145+09:00</updated><title type='text'>Mastering Microsoft Dynamics 365 CRM Plugins: The Ultimate Deep Dive</title><content type='html'>&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/AVvXsEjlxID9HWRxc8-JCnAfVykwq0YjTb-O8zCHfXVY1lA-zP_LOW5BMLAuKxjl9wPmQDw0Z1E5Fh4xvEgOESGSasTjap8zFEToEugIIlXuH-sAqGKFz8NECSM8lZwiDkubZvwm1GDnZqDD4iStchH1dFSwHSSvbYZApYv3bjxtERoR0lOxS-Ef4Ed4ykWzcD-o/s1536/46f0dea3-5ede-444e-95af-b25a612e1d5a.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;1024&quot; data-original-width=&quot;1536&quot; height=&quot;426&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlxID9HWRxc8-JCnAfVykwq0YjTb-O8zCHfXVY1lA-zP_LOW5BMLAuKxjl9wPmQDw0Z1E5Fh4xvEgOESGSasTjap8zFEToEugIIlXuH-sAqGKFz8NECSM8lZwiDkubZvwm1GDnZqDD4iStchH1dFSwHSSvbYZApYv3bjxtERoR0lOxS-Ef4Ed4ykWzcD-o/w640-h426/46f0dea3-5ede-444e-95af-b25a612e1d5a.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p class=&quot;pw-post-body-paragraph lq lr fr ls b lt lu lv lw lx ly lz ma mb mc md me mf mg mh mi mj mk ml mm mn fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;2a02&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;span style=&quot;letter-spacing: -0.003em;&quot;&gt;Microsoft Dynamics 365 is an incredibly powerful platform, and plugins are one of its best-kept secrets for unlocking real business transformation. If you’ve ever wondered how to enforce complex validation, perform lightning-fast integrations, or inject truly custom business logic at just the right moment — plugins are your answer. After a decade of developing, troubleshooting, and optimising plugins for enterprises and startups alike, here’s a comprehensive guide on everything you need to know, distilled from years in the trenches.&lt;/span&gt;&lt;/p&gt;&lt;h2 class=&quot;mo mp fr bf mq mr ms mt mu mv mw mx my mb mz na nb mf nc nd ne mj nf ng nh ni bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;211e&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;What Exactly is a Dynamics 365 Plugin?&lt;/h2&gt;&lt;p class=&quot;pw-post-body-paragraph lq lr fr ls b lt nj lv lw lx nk lz ma mb nl md me mf nm mh mi mj nn ml mm mn fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;f085&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;At its core, a Dynamics 365 plugin is a custom .NET class that runs when a specific event happens in the Dataverse platform. Think of plugins as your own logic, running invisibly on the server, responding instantly to changes like creating, updating, or deleting a record. While Microsoft calls these “extensibility points,” I see them as strategic hooks to make the system behave precisely the way your business demands.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph lq lr fr ls b lt lu lv lw lx ly lz ma mb mc md me mf mg mh mi mj mk ml mm mn fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;c689&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Why should you care? Because plugins can do what no other tool in Dynamics can: enforce rules and logic at the data layer, right inside the transaction. This means the rules are always enforced, regardless of whether data is entered through the user interface, an Excel import, or a third-party integration. When built well, plugins are fast, reliable, and can even interact with external systems in real time.&lt;/p&gt;&lt;h2 class=&quot;mo mp fr bf mq mr ms mt mu mv mw mx my mb mz na nb mf nc nd ne mj nf ng nh ni bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;28c7&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;Real-World Plugin Use Cases&lt;/h2&gt;&lt;ul class=&quot;&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;lq lr fr ls b lt nj lv lw lx nk lz ma mb nl md me mf nm mh mi mj nn ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;bbdf&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 0.94em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Advanced Validation:&lt;/span&gt;&amp;nbsp;For example, enforcing discount rules or compliance checks that are simply too complex for Business Rules or Power Automate flows.&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;f64a&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Live Integration:&lt;/span&gt;&amp;nbsp;Instantly syncing data to an ERP, or checking an external fraud service before allowing a new lead to save.&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;83ce&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Automated Decisions:&lt;/span&gt;&amp;nbsp;Routing records to the right team, calculating bonuses, or auto-populating related data, all before the user even sees the change.&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;3fc5&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Transactional Consistency:&lt;/span&gt;&amp;nbsp;Ensuring that if anything goes wrong, all changes are rolled back together.&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&quot;mo mp fr bf mq mr ms mt mu mv mw mx my mb mz na nb mf nc nd ne mj nf ng nh ni bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;f63a&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;Understanding the Plugin Execution Pipeline&lt;/h2&gt;&lt;p class=&quot;pw-post-body-paragraph lq lr fr ls b lt nj lv lw lx nk lz ma mb nl md me mf nm mh mi mj nn ml mm mn fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;71a1&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;Mastering plugins starts with understanding the event pipeline. Here’s how Dynamics 365 processes an operation, and where your code can plug in:&lt;/p&gt;&lt;h2 class=&quot;mo mp fr bf mq mr ms mt mu mv mw mx my mb mz na nb mf nc nd ne mj nf ng nh ni bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;bfb9&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;Stages in the Pipeline&lt;/h2&gt;&lt;ul class=&quot;&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;lq lr fr ls b lt nj lv lw lx nk lz ma mb nl md me mf nm mh mi mj nn ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;1a6d&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 0.94em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Pre-Validation:&lt;/span&gt;&amp;nbsp;The very first gate, running before security checks and outside the main transaction. Use this for quick early validation.&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;8d54&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Pre-Operation:&lt;/span&gt;&amp;nbsp;Runs just before the record is saved, inside the database transaction. Here, you can change data before it’s committed — great for setting default values or enforcing business logic.&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;e24b&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Main Operation:&lt;/span&gt;&amp;nbsp;This is the core platform event (like actually creating the record). Custom code cannot run here.&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;f747&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Post-Operation:&lt;/span&gt;&amp;nbsp;Executes after the record is saved but still inside the transaction (if sync), or right after commit (if async). Perfect for tasks like creating related records, sending notifications, or updating other data based on the saved result.&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&quot;mo mp fr bf mq mr ms mt mu mv mw mx my mb mz na nb mf nc nd ne mj nf ng nh ni bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;d97b&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;Synchronous vs Asynchronous Plugins&lt;/h2&gt;&lt;ul class=&quot;&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;lq lr fr ls b lt nj lv lw lx nk lz ma mb nl md me mf nm mh mi mj nn ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;7666&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 0.94em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Synchronous&lt;/span&gt;&amp;nbsp;plugins run in real-time; the user waits for them to finish. These are ideal for validation and actions that must complete before saving.&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;e0ca&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Asynchronous&lt;/span&gt;&amp;nbsp;plugins run in the background, after the data is saved. These are great for tasks like calling web services or updating external systems, as they do not impact the user’s experience.&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&quot;mo mp fr bf mq mr ms mt mu mv mw mx my mb mz na nb mf nc nd ne mj nf ng nh ni bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;cc0c&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;Transaction and Rollback&lt;/h2&gt;&lt;p class=&quot;pw-post-body-paragraph lq lr fr ls b lt nj lv lw lx nk lz ma mb nl md me mf nm mh mi mj nn ml mm mn fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;9580&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;A crucial point:&amp;nbsp;&lt;/span&gt;synchronous plugins in Pre-Operation and Post-Operation are part of a single transaction. If a plugin fails, the entire operation rolls back. Asynchronous plugins, on the other hand, cannot roll back the original data change.&lt;/p&gt;&lt;h2 class=&quot;mo mp fr bf mq mr ms mt mu mv mw mx my mb mz na nb mf nc nd ne mj nf ng nh ni bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;dba1&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;Depth and Preventing Infinite Loops&lt;/h2&gt;&lt;p class=&quot;pw-post-body-paragraph lq lr fr ls b lt nj lv lw lx nk lz ma mb nl md me mf nm mh mi mj nn ml mm mn fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;c370&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;Plugins can trigger other plugins, and Dynamics tracks this with a Depth property. If your plugin is triggered by another plugin’s update, Depth increases. To avoid infinite loops, always check the Depth and consider returning early if it’s above a certain threshold.&lt;/p&gt;&lt;h2 class=&quot;mo mp fr bf mq mr ms mt mu mv mw mx my mb mz na nb mf nc nd ne mj nf ng nh ni bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;e87f&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;Images: Pre-Image and Post-Image&lt;/h2&gt;&lt;p class=&quot;pw-post-body-paragraph lq lr fr ls b lt nj lv lw lx nk lz ma mb nl md me mf nm mh mi mj nn ml mm mn fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;ac70&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;Plugins can access snapshots of the record before and after the change. Register a Pre-Image to see the original values, or a Post-Image to get final values after save. This is essential for comparing changes.&lt;/p&gt;&lt;h2 class=&quot;mo mp fr bf mq mr ms mt mu mv mw mx my mb mz na nb mf nc nd ne mj nf ng nh ni bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;fc20&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;Filtering Attributes&lt;/h2&gt;&lt;p class=&quot;pw-post-body-paragraph lq lr fr ls b lt nj lv lw lx nk lz ma mb nl md me mf nm mh mi mj nn ml mm mn fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;9c98&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;When registering Update-step plugins, specify the fields that should trigger your logic. This makes your plugin more efficient and prevents unnecessary executions.&lt;/p&gt;&lt;h2 class=&quot;mo mp fr bf mq mr ms mt mu mv mw mx my mb mz na nb mf nc nd ne mj nf ng nh ni bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;dd5e&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;Synchronous vs Asynchronous Plugins: When to Use Each&lt;/h2&gt;&lt;p class=&quot;pw-post-body-paragraph lq lr fr ls b lt nj lv lw lx nk lz ma mb nl md me mf nm mh mi mj nn ml mm mn fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;a029&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;Ask yourself:&lt;/p&gt;&lt;ul class=&quot;&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;lq lr fr ls b lt lu lv lw lx ly lz ma mb mc md me mf mg mh mi mj mk ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;747f&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 2.14em; padding-left: 0px;&quot;&gt;Do you need to stop the save if something goes wrong? Use synchronous.&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;f6d3&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Is your logic time-consuming or depends on slow external systems? Go with asynchronous.&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;1d0f&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Do you need to provide instant feedback to users? Only synchronous plugins (or real-time workflows) can display error messages instantly.&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;c987&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Is it okay if the operation completes and your custom logic happens shortly after? Asynchronous is ideal.&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;pw-post-body-paragraph lq lr fr ls b lt lu lv lw lx ly lz ma mb mc md me mf mg mh mi mj mk ml mm mn fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;7817&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;In most enterprise systems, a mix of sync and async plugins keeps things both robust and performant.&lt;/p&gt;&lt;h2 class=&quot;mo mp fr bf mq mr ms mt mu mv mw mx my mb mz na nb mf nc nd ne mj nf ng nh ni bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;773f&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;Plugins vs. Other Tools&lt;/h2&gt;&lt;p class=&quot;pw-post-body-paragraph lq lr fr ls b lt nj lv lw lx nk lz ma mb nl md me mf nm mh mi mj nn ml mm mn fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;7a43&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;How do plugins compare to Power Automate, Business Rules, and JavaScript?&lt;/p&gt;&lt;ul class=&quot;&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;lq lr fr ls b lt lu lv lw lx ly lz ma mb mc md me mf mg mh mi mj mk ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;a7f3&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 2.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Plugins&lt;/span&gt;&amp;nbsp;are best for complex, transactional, or high-performance logic.&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;75da&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Power Automate&lt;/span&gt;&amp;nbsp;is great for cross-system automation, but it is always asynchronous and cannot cancel a save.&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;2dff&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Business Rules&lt;/span&gt;&amp;nbsp;are quick for simple field logic on forms but don’t work in all scenarios.&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;86d6&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;JavaScript&lt;/span&gt;&amp;nbsp;is for UI interactions only, and never runs on imports or integrations.&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;pw-post-body-paragraph lq lr fr ls b lt lu lv lw lx ly lz ma mb mc md me mf mg mh mi mj mk ml mm mn fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;cbbe&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Writing Your First Plugin: Key Components&lt;/p&gt;&lt;h2 class=&quot;mo mp fr bf mq mr ms mt mu mv mw mx my mb mz na nb mf nc nd ne mj nf ng nh ni bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;b49e&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;The IPlugin Interface&lt;/h2&gt;&lt;p class=&quot;pw-post-body-paragraph lq lr fr ls b lt nj lv lw lx nk lz ma mb nl md me mf nm mh mi mj nn ml mm mn fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;69da&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;Every plugin implements the&amp;nbsp;&lt;code class=&quot;cx nw nx ny nz b&quot; style=&quot;background-color: #f2f2f2; box-sizing: inherit; font-family: source-code-pro, Menlo, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 15px; padding: 2px 4px;&quot;&gt;IPlugin&lt;/code&gt;&amp;nbsp;interface and its&amp;nbsp;&lt;code class=&quot;cx nw nx ny nz b&quot; style=&quot;background-color: #f2f2f2; box-sizing: inherit; font-family: source-code-pro, Menlo, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 15px; padding: 2px 4px;&quot;&gt;Execute(IServiceProvider serviceProvider)&lt;/code&gt;&amp;nbsp;method. This is where everything happens.&lt;/p&gt;&lt;pre class=&quot;oa ob oc od oe of nz og bp oh bb bk&quot; style=&quot;background: rgb(249, 249, 249); border-radius: 4px; border: 1px solid rgb(229, 229, 229); box-sizing: inherit; color: #242424; font-family: source-code-pro, Menlo, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; margin: 56px 0px 0px; overflow-x: auto; padding: 32px;&quot;&gt;&lt;span class=&quot;oi mp fr nz b bg oj ok m ol om&quot; data-selectable-paragraph=&quot;&quot; id=&quot;004f&quot; style=&quot;box-sizing: inherit; display: block; font-size: 14px; letter-spacing: -0.022em; line-height: 1.4; margin-bottom: -0.2em; margin-top: -0.2em; min-width: fit-content;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: inherit; color: #aa0d91;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: inherit; color: #aa0d91;&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;hljs-title&quot; style=&quot;box-sizing: inherit; color: #1c00cf;&quot;&gt;MyPlugin&lt;/span&gt; : &lt;span class=&quot;hljs-title&quot; style=&quot;box-sizing: inherit; color: #1c00cf;&quot;&gt;IPlugin&lt;/span&gt;&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;{&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;    &lt;span class=&quot;hljs-function&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: inherit; color: #aa0d91;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: inherit; color: #aa0d91;&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title&quot; style=&quot;box-sizing: inherit; color: #1c00cf;&quot;&gt;Execute&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot; style=&quot;box-sizing: inherit; color: #5c2699;&quot;&gt;IServiceProvider serviceProvider&lt;/span&gt;)&lt;/span&gt;&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;    {&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;        &lt;span class=&quot;hljs-comment&quot; style=&quot;box-sizing: inherit; color: #007400;&quot;&gt;// Plugin logic here&lt;/span&gt;&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;    }&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;h2 class=&quot;mo mp fr bf mq mr ms mt mu mv mw mx my mb mz na nb mf nc nd ne mj nf ng nh ni bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;536d&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;Accessing Context and Services&lt;/h2&gt;&lt;ul class=&quot;&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;lq lr fr ls b lt nj lv lw lx nk lz ma mb nl md me mf nm mh mi mj nn ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;6001&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 0.94em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;IPluginExecutionContext:&lt;/span&gt;&amp;nbsp;Gives you all the event info — what triggered the plugin, which entity, what stage, what data.&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;738f&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;IOrganizationService:&lt;/span&gt;&amp;nbsp;Use this to read or write data in Dataverse.&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;37c9&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;ITracingService:&lt;/span&gt;&amp;nbsp;Your best friend for debugging — trace messages appear in Plugin Trace Logs or System Jobs.&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;pw-post-body-paragraph lq lr fr ls b lt lu lv lw lx ly lz ma mb mc md me mf mg mh mi mj mk ml mm mn fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;ac8f&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Typical plugin setup:&lt;/p&gt;&lt;pre class=&quot;oa ob oc od oe of nz og bp oh bb bk&quot; style=&quot;background: rgb(249, 249, 249); border-radius: 4px; border: 1px solid rgb(229, 229, 229); box-sizing: inherit; color: #242424; font-family: source-code-pro, Menlo, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; margin: 56px 0px 0px; overflow-x: auto; padding: 32px;&quot;&gt;&lt;span class=&quot;oi mp fr nz b bg oj ok m ol om&quot; data-selectable-paragraph=&quot;&quot; id=&quot;b055&quot; style=&quot;box-sizing: inherit; display: block; font-size: 14px; letter-spacing: -0.022em; line-height: 1.4; margin-bottom: -0.2em; margin-top: -0.2em; min-width: fit-content;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: inherit; color: #aa0d91;&quot;&gt;var&lt;/span&gt; context = (IPluginExecutionContext)serviceProvider.GetService(&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: inherit; color: #aa0d91;&quot;&gt;typeof&lt;/span&gt;(IPluginExecutionContext));&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: inherit; color: #aa0d91;&quot;&gt;var&lt;/span&gt; serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: inherit; color: #aa0d91;&quot;&gt;typeof&lt;/span&gt;(IOrganizationServiceFactory));&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: inherit; color: #aa0d91;&quot;&gt;var&lt;/span&gt; service = serviceFactory.CreateOrganizationService(context.UserId);&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: inherit; color: #aa0d91;&quot;&gt;var&lt;/span&gt; tracing = (ITracingService)serviceProvider.GetService(&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: inherit; color: #aa0d91;&quot;&gt;typeof&lt;/span&gt;(ITracingService));&lt;/span&gt;&lt;/pre&gt;&lt;h2 class=&quot;mo mp fr bf mq mr ms mt mu mv mw mx my mb mz na nb mf nc nd ne mj nf ng nh ni bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;d44a&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;Implementing Logic&lt;/h2&gt;&lt;ul class=&quot;&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;lq lr fr ls b lt nj lv lw lx nk lz ma mb nl md me mf nm mh mi mj nn ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;a1e0&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 0.94em; padding-left: 0px;&quot;&gt;Check that the event is the one you want (e.g.&amp;nbsp;&lt;code class=&quot;cx nw nx ny nz b&quot; style=&quot;background-color: #f2f2f2; box-sizing: inherit; font-family: source-code-pro, Menlo, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 15px; padding: 2px 4px;&quot;&gt;context.MessageName == &quot;Create&quot;&lt;/code&gt;).&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;5d85&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Validate or transform data as needed.&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;d3ea&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Perform CRUD operations with&amp;nbsp;&lt;code class=&quot;cx nw nx ny nz b&quot; style=&quot;background-color: #f2f2f2; box-sizing: inherit; font-family: source-code-pro, Menlo, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 15px; padding: 2px 4px;&quot;&gt;IOrganizationService&lt;/code&gt;.&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;2eec&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Trace key steps for diagnostics.&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&quot;mo mp fr bf mq mr ms mt mu mv mw mx my mb mz na nb mf nc nd ne mj nf ng nh ni bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;53d2&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;Exception Handling&lt;/h2&gt;&lt;p class=&quot;pw-post-body-paragraph lq lr fr ls b lt nj lv lw lx nk lz ma mb nl md me mf nm mh mi mj nn ml mm mn fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;7d1f&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;To cancel a save or surface a user-friendly error, throw an&amp;nbsp;&lt;code class=&quot;cx nw nx ny nz b&quot; style=&quot;background-color: #f2f2f2; box-sizing: inherit; font-family: source-code-pro, Menlo, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 15px; padding: 2px 4px;&quot;&gt;InvalidPluginExecutionException&lt;/code&gt;&amp;nbsp;with a message. Always trace exceptions for easier support.&lt;/p&gt;&lt;h2 class=&quot;mo mp fr bf mq mr ms mt mu mv mw mx my mb mz na nb mf nc nd ne mj nf ng nh ni bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;2744&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;Registering Plugins&lt;/h2&gt;&lt;p class=&quot;pw-post-body-paragraph lq lr fr ls b lt nj lv lw lx nk lz ma mb nl md me mf nm mh mi mj nn ml mm mn fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;e3dd&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;Use the Plugin Registration Tool to upload your assembly, then register “steps” to define which event, entity, and stage should trigger your plugin. Include the plugin in your Solution so it can be deployed across environments.&lt;/p&gt;&lt;h2 class=&quot;mo mp fr bf mq mr ms mt mu mv mw mx my mb mz na nb mf nc nd ne mj nf ng nh ni bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;179e&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;Plugin Best Practices&lt;/h2&gt;&lt;ul class=&quot;&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;lq lr fr ls b lt nj lv lw lx nk lz ma mb nl md me mf nm mh mi mj nn ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;d793&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 0.94em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Keep plugins stateless and thread-safe.&lt;/span&gt;&amp;nbsp;Never use static variables for data you care about across plugin runs.&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;dc6e&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Early returns.&lt;/span&gt;&amp;nbsp;Always check if the context fits your logic — exit early if not.&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;5859&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Avoid long-running code in synchronous plugins.&lt;/span&gt;&amp;nbsp;Any delay here holds up users.&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;8efc&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Filter attributes for updates.&lt;/span&gt;&amp;nbsp;Register plugins to fire only on fields that matter.&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;abc3&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Never run batch operations or spawn threads inside plugins.&lt;/span&gt;&amp;nbsp;If you need bulk processing, do it outside plugins or break it into smaller operations.&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;7f45&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Query only what you need.&lt;/span&gt;&amp;nbsp;Minimize data retrieval for performance.&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;f14a&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Avoid updating the same record in Post-Operation.&lt;/span&gt;&amp;nbsp;This creates potential loops.&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;1431&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Use transactions wisely.&lt;/span&gt;&amp;nbsp;Know that a sync plugin failure will roll back all changes.&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;3708&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Trace smartly.&lt;/span&gt;&amp;nbsp;Use&amp;nbsp;&lt;code class=&quot;cx nw nx ny nz b&quot; style=&quot;background-color: #f2f2f2; box-sizing: inherit; font-family: source-code-pro, Menlo, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 15px; padding: 2px 4px;&quot;&gt;ITracingService.Trace&lt;/code&gt;&amp;nbsp;for entry, exit, and exceptions—don’t overdo it in production.&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;9bed&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Cache carefully.&lt;/span&gt;&amp;nbsp;For reference data, use thread-safe, short-lived caches. Never cache large datasets in memory.&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;1e42&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;External API calls.&lt;/span&gt;&amp;nbsp;Always set timeouts, handle errors, and do this asynchronously if possible.&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;6f2d&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Use secure config for secrets.&lt;/span&gt;&amp;nbsp;Store API keys and sensitive info in Secure Configuration at plugin registration, not in code.&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;f306&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Prevent infinite loops.&lt;/span&gt;&amp;nbsp;Use Depth checks, or flag attributes if needed.&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&quot;mo mp fr bf mq mr ms mt mu mv mw mx my mb mz na nb mf nc nd ne mj nf ng nh ni bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;c2a4&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;Advanced Techniques for Senior Developers&lt;/h2&gt;&lt;ul class=&quot;&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;lq lr fr ls b lt nj lv lw lx nk lz ma mb nl md me mf nm mh mi mj nn ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;1a94&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 0.94em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Custom Actions and APIs:&lt;/span&gt;&amp;nbsp;Create your own Dataverse messages with input/output parameters, then use plugins to implement the logic. This is perfect for reusable business operations.&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;271f&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Plugin Isolation/Sandbox:&lt;/span&gt;&amp;nbsp;All plugins in the cloud run in a secure sandbox with limited permissions, no file system or registry access, and capped memory. Respect these boundaries.&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;415c&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Generic plugins:&lt;/span&gt;&amp;nbsp;Handle logic for multiple entities in a single class by switching based on the context.&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;b77b&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Impersonation:&lt;/span&gt;&amp;nbsp;You can run plugins as a specific user (for special permissions). Useful for system-level operations.&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;29a8&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Integration with external systems:&lt;/span&gt;&amp;nbsp;Consider webhooks or offloading heavy work to Azure Functions for maximum scalability and minimum user impact.&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;0fc7&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Monitoring:&lt;/span&gt;&amp;nbsp;Leverage Plugin Trace Logs and custom telemetry (for example, using Application Insights) to track performance and errors.&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&quot;mo mp fr bf mq mr ms mt mu mv mw mx my mb mz na nb mf nc nd ne mj nf ng nh ni bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;dc71&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;Automating Plugin Deployment: spkl and DevOps&lt;/h2&gt;&lt;p class=&quot;pw-post-body-paragraph lq lr fr ls b lt nj lv lw lx nk lz ma mb nl md me mf nm mh mi mj nn ml mm mn fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;a835&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;Manual plugin registration is error-prone and doesn’t scale. Modern teams use tools like spkl (Sparkle) to automate deployment in CI/CD pipelines. You define registration details in a config file and use spkl to push your assemblies and steps. This keeps everything in source control and repeatable across environments. Microsoft’s Power Platform CLI is another great tool for managing solutions and plugin projects automatically.&lt;/p&gt;&lt;h2 class=&quot;mo mp fr bf mq mr ms mt mu mv mw mx my mb mz na nb mf nc nd ne mj nf ng nh ni bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;c2ef&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;Testing and Debugging Plugins&lt;/h2&gt;&lt;p class=&quot;pw-post-body-paragraph lq lr fr ls b lt nj lv lw lx nk lz ma mb nl md me mf nm mh mi mj nn ml mm mn fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;39d1&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;Unit testing plugins is a huge productivity booster. Frameworks like&amp;nbsp;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;FakeXrmEasy&amp;nbsp;&lt;/span&gt;allow you to simulate plugin contexts and test your logic in isolation. For live debugging, use the Plugin Registration Tool’s Profiler to capture and replay plugin executions in Visual Studio — especially invaluable for tracking down tough bugs in complex solutions.&lt;/p&gt;&lt;h2 class=&quot;mo mp fr bf mq mr ms mt mu mv mw mx my mb mz na nb mf nc nd ne mj nf ng nh ni bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;15cf&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;Common Pitfalls and How to Avoid Them&lt;/h2&gt;&lt;ul class=&quot;&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;lq lr fr ls b lt nj lv lw lx nk lz ma mb nl md me mf nm mh mi mj nn ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;c780&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 0.94em; padding-left: 0px;&quot;&gt;Infinite loops (Depth checks and careful design)&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;8b7e&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Null reference errors (Always check if fields exist before using them)&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;c9ff&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Misregistered steps (Double-check your registrations)&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;36fd&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Security exceptions (Run plugins under the correct user or with the right privileges)&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;3e1a&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Performance issues (Keep plugins fast, use filtering attributes)&lt;/li&gt;&lt;li class=&quot;lq lr fr ls b lt nr lv lw lx ns lz ma mb nt md me mf nu mh mi mj nv ml mm mn no np nq bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;c9ea&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Bulk data handling (Plugins must handle high-volume scenarios gracefully)&lt;/li&gt;&lt;/ul&gt;&lt;h3 style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em; text-align: left;&quot;&gt;Latest Features and Innovations&lt;/h3&gt;&lt;p class=&quot;pw-post-body-paragraph lq lr fr ls b lt nj lv lw lx nk lz ma mb nl md me mf nm mh mi mj nn ml mm mn fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;a7f5&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;The plugin model keeps evolving. With features like Custom APIs, seamless Azure integration, and robust DevOps tooling, it’s easier than ever to build maintainable, enterprise-ready logic in Dataverse.&lt;/p&gt;&lt;h2 class=&quot;mo mp fr bf mq mr ms mt mu mv mw mx my mb mz na nb mf nc nd ne mj nf ng nh ni bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;38b5&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;Final Thoughts&lt;/h2&gt;&lt;p class=&quot;pw-post-body-paragraph lq lr fr ls b lt nj lv lw lx nk lz ma mb nl md me mf nm mh mi mj nn ml mm mn fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;5980&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;Mastering plugins is a journey — from writing your first validation handler to architecture complex integrations that power the world’s largest enterprises. The techniques and tips here come from real projects, real support escalations, and plenty of lessons learned the hard way. If you embrace best practices, automate your deployments, and always keep performance in mind, plugins will be your secret weapon for building systems that truly deliver.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph lq lr fr ls b lt lu lv lw lx ly lz ma mb mc md me mf mg mh mi mj mk ml mm mn fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;3ec3&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;em class=&quot;on&quot; style=&quot;box-sizing: inherit;&quot;&gt;Happy coding, and may your plugins always be fast, safe, and bug-free!&lt;/em&gt;&lt;/p&gt;&lt;div style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; text-align: left; word-break: break-word;&quot;&gt;&lt;span class=&quot;ls fs&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;b&gt;Want more deep dives on Dynamics 365 development? Let me know what topics to cover next!&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chamarairesh.blogspot.com/feeds/7269441495174775177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2491204017359768357/7269441495174775177' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/7269441495174775177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/7269441495174775177'/><link rel='alternate' type='text/html' href='http://chamarairesh.blogspot.com/2025/07/mastering-microsoft-dynamics-365-crm.html' title='Mastering Microsoft Dynamics 365 CRM Plugins: The Ultimate Deep Dive'/><author><name>Chamara Iresh</name><uri>http://www.blogger.com/profile/04695612052896290711</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//3.bp.blogspot.com/-Wfsm4TxTxO0/XiPTZjrj-cI/AAAAAAAAvCw/ONKFubGdBw41mPb1Xp89d9eMkvXaV0TkQCK4BGAYYCw/s220/20190817_151917.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlxID9HWRxc8-JCnAfVykwq0YjTb-O8zCHfXVY1lA-zP_LOW5BMLAuKxjl9wPmQDw0Z1E5Fh4xvEgOESGSasTjap8zFEToEugIIlXuH-sAqGKFz8NECSM8lZwiDkubZvwm1GDnZqDD4iStchH1dFSwHSSvbYZApYv3bjxtERoR0lOxS-Ef4Ed4ykWzcD-o/s72-w640-h426-c/46f0dea3-5ede-444e-95af-b25a612e1d5a.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2491204017359768357.post-6895536750316811673</id><published>2025-07-11T00:01:00.004+09:00</published><updated>2025-07-11T00:02:09.223+09:00</updated><title type='text'>Model Context Protocol (MCP) + Dataverse: The Next Leap for AI and the Power Platform</title><content type='html'>&lt;p&gt;&lt;span face=&quot;source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif&quot; style=&quot;background-color: white; color: #242424; font-size: 20px; letter-spacing: -0.003em;&quot;&gt;&lt;img src=&quot;https://miro.medium.com/v2/resize:fit:630/1*UyewnPPgeVf4pf4YBYpo_A.png&quot; /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span face=&quot;source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif&quot; style=&quot;background-color: white; color: #242424; font-size: 20px; letter-spacing: -0.003em;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span face=&quot;source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif&quot; style=&quot;background-color: white; color: #242424; font-size: 20px; letter-spacing: -0.003em;&quot;&gt;If you’re even a little bit invested in Power Platform, you’ve probably seen the Model Context Protocol (MCP) popping up in community posts, new features, and the Microsoft docs. If you’re wondering, “Is this just another buzzword, or does it actually make my life easier?” — this post is for you!&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span face=&quot;source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif&quot; style=&quot;background-color: white; color: #242424; font-size: 20px; letter-spacing: -0.003em;&quot;&gt;Let’s break down&lt;/span&gt;&lt;span face=&quot;source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif&quot; style=&quot;background-color: white; color: #242424; font-size: 20px; letter-spacing: -0.003em;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;uq la&quot; face=&quot;source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif&quot; style=&quot;box-sizing: inherit; color: #242424; font-size: 20px; font-weight: 700; letter-spacing: -0.003em;&quot;&gt;what MCP is, what you can do with it (hint: a lot!), and why this matters for every maker, developer, and AI enthusiast on the platform&lt;/span&gt;&lt;span face=&quot;source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif&quot; style=&quot;background-color: white; color: #242424; font-size: 20px; letter-spacing: -0.003em;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;&lt;h2 class=&quot;vm vn pt bf vo vp vq vr le vs vt vu li uz vv vw vx vd vy vz wa vh wb wc wd we bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;aea9&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;What is Model Context Protocol (MCP)?&lt;/h2&gt;&lt;p class=&quot;pw-post-body-paragraph uo up pt uq b ur wf ut uu uv wg ux uy uz wh vb vc vd wi vf vg vh wj vj vk vl ew bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;2e56&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;MCP is a&amp;nbsp;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;new open protocol from Microsoft&lt;/span&gt;&amp;nbsp;that lets Large Language Model (LLM) applications — like Copilot Studio, Claude, VS Code Copilot —&amp;nbsp;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;connect securely and natively to enterprise data&lt;/span&gt;&amp;nbsp;sources like Dataverse. This means that your AI agents can “see” and work with your real Dataverse data, safely and efficiently, with&amp;nbsp;&lt;em class=&quot;ws&quot; style=&quot;box-sizing: inherit;&quot;&gt;no custom connectors or APIs needed&lt;/em&gt;.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph uo up pt uq b ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl ew bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;2b00&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;&lt;em class=&quot;ws&quot; style=&quot;box-sizing: inherit;&quot;&gt;Learn more:&lt;/em&gt;&lt;/span&gt;&lt;em class=&quot;ws&quot; style=&quot;box-sizing: inherit;&quot;&gt;&amp;nbsp;&lt;/em&gt;&lt;a class=&quot;ag xb&quot; href=&quot;https://learn.microsoft.com/en-us/power-apps/maker/data-platform/data-platform-mcp&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;&lt;em class=&quot;ws&quot; style=&quot;box-sizing: inherit;&quot;&gt;Connect to Dataverse with Model Context Protocol (preview)&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;&lt;h2 class=&quot;vm vn pt bf vo vp vq vr le vs vt vu li uz vv vw vx vd vy vz wa vh wb wc wd we bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;c5ab&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;Why Does MCP Matter?&lt;/h2&gt;&lt;ul style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;uo up pt uq b ur wf ut uu uv wg ux uy uz wh vb vc vd wi vf vg vh wj vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;8e89&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 0.94em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;No more manual queries&lt;/span&gt;: Just ask questions in natural language — “How many leads are active?” or “Show me a chart of cases by city” — and your agent (Claude, Copilot, etc.) does the heavy lifting.&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;5ec8&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Instant insights and updates&lt;/span&gt;: You can fetch, update, and create Dataverse records as simply as sending a chat message.&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;aad9&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Build bots and automations faster&lt;/span&gt;: Tools like Copilot Studio can now “think” in real time with your data — great for building conversational agents and process automations.&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;6ce7&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Less code, more power&lt;/span&gt;: You can do all of this without needing to write FetchXML, SQL, or custom code.&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;bfa3&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Future-proof integration&lt;/span&gt;: Any AI or LLM tool supporting MCP can plug into your Dataverse data — opening up a huge ecosystem of smart, connected tools.&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&quot;vm vn pt bf vo vp vq vr le vs vt vu li uz vv vw vx vd vy vz wa vh wb wc wd we bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;3713&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;What Can You Actually Do with MCP + Dataverse?&lt;/h2&gt;&lt;p class=&quot;pw-post-body-paragraph uo up pt uq b ur wf ut uu uv wg ux uy uz wh vb vc vd wi vf vg vh wj vj vk vl ew bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;bd36&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;Here’s just a&amp;nbsp;&lt;em class=&quot;ws&quot; style=&quot;box-sizing: inherit;&quot;&gt;taste&lt;/em&gt;&amp;nbsp;of what’s possible right now (and it’s still just in preview!):&lt;/p&gt;&lt;ul style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;uo up pt uq b ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;f3d6&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 2.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;List all your tables&lt;/span&gt;:&amp;nbsp;&lt;em class=&quot;ws&quot; style=&quot;box-sizing: inherit;&quot;&gt;“Show me all tables in Dataverse.”&lt;/em&gt;&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;281b&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Describe schema&lt;/span&gt;:&amp;nbsp;&lt;em class=&quot;ws&quot; style=&quot;box-sizing: inherit;&quot;&gt;“Describe the account table.”&lt;/em&gt;&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;03dc&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Read/query data&lt;/span&gt;:&amp;nbsp;&lt;em class=&quot;ws&quot; style=&quot;box-sizing: inherit;&quot;&gt;“How many contacts live in London?”&lt;/em&gt;&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;b6b0&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Create/update records&lt;/span&gt;:&amp;nbsp;&lt;em class=&quot;ws&quot; style=&quot;box-sizing: inherit;&quot;&gt;“Add a new contact: John Smith, email john@contoso.com.”&lt;/em&gt;&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;e96f&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Build charts instantly&lt;/span&gt;:&amp;nbsp;&lt;em class=&quot;ws&quot; style=&quot;box-sizing: inherit;&quot;&gt;“Create a pie chart showing opportunities by owner.”&lt;/em&gt;&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;a6ca&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Integrate knowledge sources&lt;/span&gt;:&amp;nbsp;&lt;em class=&quot;ws&quot; style=&quot;box-sizing: inherit;&quot;&gt;“What’s the latest update from the product knowledge base?”&lt;/em&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;pw-post-body-paragraph uo up pt uq b ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl ew bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;5b66&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Basically, you can&amp;nbsp;&lt;em class=&quot;ws&quot; style=&quot;box-sizing: inherit;&quot;&gt;talk to your database&lt;/em&gt;, and it talks back with real answers, records, or charts — no code, just conversation.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph uo up pt uq b ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl ew bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;bf21&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;How to Set Up MCP with Dataverse (Step by Step)&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph uo up pt uq b ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl ew bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;65f8&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;This is easier than you think. Here’s the process, based on&amp;nbsp;&lt;a class=&quot;ag xb&quot; href=&quot;https://learn.microsoft.com/en-us/power-apps/maker/data-platform/data-platform-mcp&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;Microsoft’s official docs&lt;/a&gt;&amp;nbsp;:&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph uo up pt uq b ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl ew bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;50be&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Prerequisites:&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;uo up pt uq b ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;664e&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 2.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Dataverse environment&lt;/span&gt;&amp;nbsp;(Power Platform, Power Apps, or Power Automate)&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;a004&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;VS Code&lt;/span&gt;&amp;nbsp;installed (for advanced setup)&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;9755&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Claude Desktop&lt;/span&gt;&amp;nbsp;(optional, but great as an MCP client)&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;804b&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;.NET SDK 8.0&lt;/span&gt;&amp;nbsp;(for the MCP server local proxy)&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;ad31&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Your Dataverse tenant ID&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;5cdc&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Dataverse connection&lt;/span&gt;&amp;nbsp;(created in Power Automate)&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&quot;vm vn pt bf vo vp vq vr le vs vt vu li uz vv vw vx vd vy vz wa vh wb wc wd we bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;8417&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;What Tools Are Available?&lt;/h2&gt;&lt;p class=&quot;pw-post-body-paragraph uo up pt uq b ur wf ut uu uv wg ux uy uz wh vb vc vd wi vf vg vh wj vj vk vl ew bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;2187&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;From the&amp;nbsp;&lt;a class=&quot;ag xb&quot; href=&quot;https://learn.microsoft.com/en-us/power-apps/maker/data-platform/data-platform-mcp&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;official documentation&lt;/a&gt;, Dataverse MCP tools include:&lt;/p&gt;&lt;ul style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;uo up pt uq b ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;5f24&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 2.14em; padding-left: 0px;&quot;&gt;&lt;code class=&quot;ei ahi ahj ahk ahl b&quot; style=&quot;background-color: #f2f2f2; box-sizing: inherit; font-family: source-code-pro, Menlo, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 15px; padding: 2px 4px;&quot;&gt;create_record&lt;/code&gt;&amp;nbsp;— Insert a row into a table&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;8d40&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;code class=&quot;ei ahi ahj ahk ahl b&quot; style=&quot;background-color: #f2f2f2; box-sizing: inherit; font-family: source-code-pro, Menlo, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 15px; padding: 2px 4px;&quot;&gt;describe_table&lt;/code&gt;&amp;nbsp;— Get table schema&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;0d94&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;code class=&quot;ei ahi ahj ahk ahl b&quot; style=&quot;background-color: #f2f2f2; box-sizing: inherit; font-family: source-code-pro, Menlo, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 15px; padding: 2px 4px;&quot;&gt;execute_prompt&lt;/code&gt;&amp;nbsp;— Run a predefined prompt&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;3f30&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;code class=&quot;ei ahi ahj ahk ahl b&quot; style=&quot;background-color: #f2f2f2; box-sizing: inherit; font-family: source-code-pro, Menlo, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 15px; padding: 2px 4px;&quot;&gt;list_knowledge_sources&lt;/code&gt;&amp;nbsp;— Show available knowledge sources&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;32a2&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;code class=&quot;ei ahi ahj ahk ahl b&quot; style=&quot;background-color: #f2f2f2; box-sizing: inherit; font-family: source-code-pro, Menlo, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 15px; padding: 2px 4px;&quot;&gt;list_prompts&lt;/code&gt;&amp;nbsp;— List prompts&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;b1e5&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;code class=&quot;ei ahi ahj ahk ahl b&quot; style=&quot;background-color: #f2f2f2; box-sizing: inherit; font-family: source-code-pro, Menlo, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 15px; padding: 2px 4px;&quot;&gt;list_tables&lt;/code&gt;&amp;nbsp;— List available tables&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;5d4f&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;code class=&quot;ei ahi ahj ahk ahl b&quot; style=&quot;background-color: #f2f2f2; box-sizing: inherit; font-family: source-code-pro, Menlo, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 15px; padding: 2px 4px;&quot;&gt;read_query&lt;/code&gt;&amp;nbsp;— Read data from tables&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;df57&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;code class=&quot;ei ahi ahj ahk ahl b&quot; style=&quot;background-color: #f2f2f2; box-sizing: inherit; font-family: source-code-pro, Menlo, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 15px; padding: 2px 4px;&quot;&gt;retrieve_knowledge&lt;/code&gt;&amp;nbsp;— Query a knowledge source&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;3ece&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;code class=&quot;ei ahi ahj ahk ahl b&quot; style=&quot;background-color: #f2f2f2; box-sizing: inherit; font-family: source-code-pro, Menlo, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 15px; padding: 2px 4px;&quot;&gt;update_record&lt;/code&gt;&amp;nbsp;— Update a record&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;pw-post-body-paragraph uo up pt uq b ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl ew bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;58ca&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;You can&amp;nbsp;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;enable/disable each tool&lt;/span&gt;&amp;nbsp;in your MCP config, so you’re always in control.&lt;/p&gt;&lt;h2 class=&quot;vm vn pt bf vo vp vq vr le vs vt vu li uz vv vw vx vd vy vz wa vh wb wc wd we bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;fd4f&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;Limitations &amp;amp; Tips&lt;/h2&gt;&lt;ul style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;uo up pt uq b ur wf ut uu uv wg ux uy uz wh vb vc vd wi vf vg vh wj vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;9858&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 0.94em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Preview Feature&lt;/span&gt;: As of mid-2025, MCP with Dataverse is still in preview — don’t use in production just yet!&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;1e75&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Security&lt;/span&gt;: Make sure you understand the permissions you grant your AI client.&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;28f5&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Customization&lt;/span&gt;: Tune which tools you expose, and set your own prompts/knowledge sources for maximum flexibility.&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&quot;vm vn pt bf vo vp vq vr le vs vt vu li uz vv vw vx vd vy vz wa vh wb wc wd we bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;b8df&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;Conclusion&lt;/h2&gt;&lt;p class=&quot;pw-post-body-paragraph uo up pt uq b ur wf ut uu uv wg ux uy uz wh vb vc vd wi vf vg vh wj vj vk vl ew bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;5a78&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;Model Context Protocol (MCP) is the next frontier for Power Platform, AI, and no-code/low-code automation. You can connect any MCP-enabled AI client (Copilot, Claude, custom bots) to Dataverse and get natural, conversational access to your enterprise data.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph uo up pt uq b ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl ew bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;3c62&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;No more clunky queries. No more endless charts. Just instant answers, insights, and updates — straight from your data, with the power of AI.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph uo up pt uq b ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl ew bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;263b&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;A big&amp;nbsp;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;thank you&lt;/span&gt;&amp;nbsp;to the amazing video guide creator&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;Nathan Rose — your step-by-step walkthrough made the whole process so much more approachable and fun for the community.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph uo up pt uq b ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl ew bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;35af&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;a class=&quot;ag xb&quot; href=&quot;https://youtu.be/IkBRy8bVtrc?si=CZFlaY36Ojap15GM&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;https://youtu.be/IkBRy8bVtrc?si=CZFlaY36Ojap15GM&lt;/a&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://chamarairesh.blogspot.com/feeds/6895536750316811673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2491204017359768357/6895536750316811673' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/6895536750316811673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/6895536750316811673'/><link rel='alternate' type='text/html' href='http://chamarairesh.blogspot.com/2025/07/model-context-protocol-mcp-dataverse.html' title='Model Context Protocol (MCP) + Dataverse: The Next Leap for AI and the Power Platform'/><author><name>Chamara Iresh</name><uri>http://www.blogger.com/profile/04695612052896290711</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//3.bp.blogspot.com/-Wfsm4TxTxO0/XiPTZjrj-cI/AAAAAAAAvCw/ONKFubGdBw41mPb1Xp89d9eMkvXaV0TkQCK4BGAYYCw/s220/20190817_151917.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2491204017359768357.post-1400856614014383334</id><published>2025-07-10T23:59:00.006+09:00</published><updated>2025-07-10T23:59:55.591+09:00</updated><title type='text'>How to Master Solution Layering and Troubleshoot Customization Conflicts in Dynamics 365 CRM</title><content type='html'>&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/AVvXsEgRJFiigUzrk1s4BZMFE0DBm7-rKUVhxdle6QZBC6L-nz_477_ifZVT4iNx8mcCae4aM1NLpgqhHYhzkW1KvYTl8rVb1-ph4lrgJVPr3sKJoVLi9RxoV8nHChc1F78XR5twB7JLIco6j3E44GfirEkwd3gzj48kQKMTlLTTeQKJjf8HOGsU4aIPpOBVKqee/s1536/ChatGPT%20Image%20Jul%2010,%202025,%2011_20_19%20AM.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;1024&quot; data-original-width=&quot;1536&quot; height=&quot;426&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRJFiigUzrk1s4BZMFE0DBm7-rKUVhxdle6QZBC6L-nz_477_ifZVT4iNx8mcCae4aM1NLpgqhHYhzkW1KvYTl8rVb1-ph4lrgJVPr3sKJoVLi9RxoV8nHChc1F78XR5twB7JLIco6j3E44GfirEkwd3gzj48kQKMTlLTTeQKJjf8HOGsU4aIPpOBVKqee/w640-h426/ChatGPT%20Image%20Jul%2010,%202025,%2011_20_19%20AM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;span style=&quot;background-color: white; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em;&quot;&gt;If you’ve ever deployed a solution to a Dynamics 365 CRM environment only to find your changes don’t show up, or something strange happens with forms or fields, you’re not alone. Almost every Dynamics admin or customizer has run into the mysterious world of&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; font-weight: 700; letter-spacing: -0.003em;&quot;&gt;solution layering&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em;&quot;&gt;. It’s not always intuitive, but understanding how solution layers work is absolutely key for troubleshooting post-deployment issues and building a sustainable ALM (Application Lifecycle Management) process.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: white; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em;&quot;&gt;Let’s break down what solution layering is, how conflicts can occur, and how to confidently resolve them.&lt;/span&gt;&lt;/p&gt;&lt;h2 class=&quot;vm vn pt bf vo vp vq vr le vs vt vu li uz vv vw vx vd vy vz wa vh wb wc wd we bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;bc29&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;What Is Solution Layering in Dynamics 365 CRM?&lt;/h2&gt;&lt;p class=&quot;pw-post-body-paragraph uo up pt uq b ur wf ut uu uv wg ux uy uz wh vb vc vd wi vf vg vh wj vj vk vl ew bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;99aa&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Solution layering&lt;/span&gt;&amp;nbsp;refers to the way Dynamics 365 (and Power Platform/Dataverse) manages multiple sets of customizations, especially when you have more than one solution (managed or unmanaged) touching the same component.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph uo up pt uq b ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl ew bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;6ba7&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Every customizable object, like a form, view, or field, can have&amp;nbsp;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;multiple “layers” of configuration applied&lt;/span&gt;. The platform keeps track of these layers and uses a clear order to decide what users will see and how components behave.&lt;/p&gt;&lt;h2 class=&quot;vm vn pt bf vo vp vq vr le vs vt vu li uz vv vw vx vd vy vz wa vh wb wc wd we bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;c8eb&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;The Three Key Layers&lt;/h2&gt;&lt;ol class=&quot;&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;uo up pt uq b ur wf ut uu uv wg ux uy uz wh vb vc vd wi vf vg vh wj vj vk vl wk wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;7d1d&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: decimal; margin-bottom: -0.46em; margin-left: 30px; margin-top: 0.94em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;System (Base) Layer:&lt;/span&gt;&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;The lowest layer. This is the original, out-of-the-box state ,think of it as the bedrock for every component.&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wk wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;db0e&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: decimal; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Managed Solution Layers:&lt;/span&gt;&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;Each imported managed solution gets its own layer. Managed layers stack on top of the system layer in the order they’re imported. The most recent one always sits above earlier ones.&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wk wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;b7ba&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: decimal; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Unmanaged Layer:&lt;/span&gt;&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;The very top. Any direct customizations made in the environment (through the UI, or via unmanaged solutions) live here. There is only&amp;nbsp;&lt;em class=&quot;ws&quot; style=&quot;box-sizing: inherit;&quot;&gt;one&lt;/em&gt;&amp;nbsp;unmanaged layer per component, and the latest change always wins in this layer.&lt;/li&gt;&lt;/ol&gt;&lt;p class=&quot;pw-post-body-paragraph uo up pt uq b ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl ew bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;8714&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Why does this matter?&lt;/span&gt;&amp;nbsp;Because only the topmost value (or a merge of layers, depending on the component) is active at runtime. This is why the changes you just imported sometimes seem to “disappear” or get overridden by something you didn’t expect.&lt;/p&gt;&lt;h2 class=&quot;vm vn pt bf vo vp vq vr le vs vt vu li uz vv vw vx vd vy vz wa vh wb wc wd we bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;a5d4&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;How Do Layer Conflicts Happen?&lt;/h2&gt;&lt;p class=&quot;pw-post-body-paragraph uo up pt uq b ur wf ut uu uv wg ux uy uz wh vb vc vd wi vf vg vh wj vj vk vl ew bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;8b6c&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;Let’s say you install a third-party managed solution that customizes the Account form, maybe it adds a couple of new sections. Later, you deploy your own managed solution, which also customizes that Account form (perhaps adding a new section for internal use).&lt;/p&gt;&lt;ul class=&quot;&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;uo up pt uq b ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;2ce0&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 2.14em; padding-left: 0px;&quot;&gt;At runtime, the Account form merges customizations from both solutions,&amp;nbsp;&lt;em class=&quot;ws&quot; style=&quot;box-sizing: inherit;&quot;&gt;unless they directly conflict&lt;/em&gt;&amp;nbsp;(for example, both try to change the header text). In that case, the topmost layer “wins.”&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;8fa9&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;If someone makes a direct change in production (for instance, hiding a field to fix a quick issue), that unmanaged layer sits above everything else, even above your newly-deployed managed solution.&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;pw-post-body-paragraph uo up pt uq b ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl ew bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;ff03&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Common Example:&lt;/span&gt;&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;You deploy a managed solution expecting to see a new field on the form, but it’s not visible to users. You open the solution layers viewer and find an unmanaged change sitting on top (maybe a previous quick fix), which is hiding your field.&lt;/p&gt;&lt;h2 class=&quot;vm vn pt bf vo vp vq vr le vs vt vu li uz vv vw vx vd vy vz wa vh wb wc wd we bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;cd4c&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;Merge or “Last One Wins”?&lt;/h2&gt;&lt;ul class=&quot;&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;uo up pt uq b ur wf ut uu uv wg ux uy uz wh vb vc vd wi vf vg vh wj vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;0e15&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 0.94em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Some things merge:&lt;/span&gt;&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;For example, if two managed solutions add different fields to the same form, both fields are visible, because those additions merge.&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;1328&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Some things overwrite:&lt;/span&gt;&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;If two solutions provide a button or field&amp;nbsp;&lt;em class=&quot;ws&quot; style=&quot;box-sizing: inherit;&quot;&gt;with the same name/ID&lt;/em&gt;, or try to set a property like the display name or visibility, the “last one wins.” The topmost solution layer’s value is what the user will see.&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;82c9&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Unmanaged layer always wins:&lt;/span&gt;&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;Any direct changes made in the environment (the unmanaged layer) always take precedence. That’s why making direct changes in production is risky, it can override everything below.&lt;/li&gt;&lt;/ul&gt;&lt;h1 class=&quot;wu vn pt bf vo lb wv lc le lf ww lg li il wx im ip ll wy lm lp lq wz lr lu xa bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;491c&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.95em 0px -0.28em;&quot;&gt;How to Troubleshoot with the Solution Layers Tool&lt;/h1&gt;&lt;p class=&quot;pw-post-body-paragraph uo up pt uq b ur wf ut uu uv wg ux uy uz wh vb vc vd wi vf vg vh wj vj vk vl ew bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;f060&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;Dynamics 365 includes a powerful tool for investigating component layering:&lt;/p&gt;&lt;ol class=&quot;&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;uo up pt uq b ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl wk wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;9d5e&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: decimal; margin-bottom: -0.46em; margin-left: 30px; margin-top: 2.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Go to the Power Apps Maker portal&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wk wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;9cc9&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: decimal; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Find the component (form, view, field, etc.) you’re troubleshooting&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wk wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;d4a3&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: decimal; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Select it and choose&amp;nbsp;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;“See solution layers”&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p class=&quot;pw-post-body-paragraph uo up pt uq b ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl ew bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;0f8d&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;You’ll see all the layers, in order, and can review what each solution changed. Properties that were altered by a solution are highlighted.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph uo up pt uq b ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl ew bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;4759&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;&lt;em class=&quot;ws&quot; style=&quot;box-sizing: inherit;&quot;&gt;Pro tip:&lt;/em&gt;&lt;/span&gt;&lt;em class=&quot;ws&quot; style=&quot;box-sizing: inherit;&quot;&gt;&amp;nbsp;If you can’t see your recent change in production, check here first. If there’s an unmanaged layer on top, that’s almost always the culprit.&lt;/em&gt;&lt;/p&gt;&lt;h2 class=&quot;vm vn pt bf vo vp vq vr le vs vt vu li uz vv vw vx vd vy vz wa vh wb wc wd we bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;1d7c&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;The Unmanaged Layer: A Double-Edged Sword&lt;/h2&gt;&lt;p class=&quot;pw-post-body-paragraph uo up pt uq b ur wf ut uu uv wg ux uy uz wh vb vc vd wi vf vg vh wj vj vk vl ew bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;b61f&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Unmanaged customizations are a frequent cause of “why isn’t my solution working?” problems.&lt;/span&gt;&amp;nbsp;For instance:&lt;/p&gt;&lt;ul class=&quot;&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;uo up pt uq b ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;32e3&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 2.14em; padding-left: 0px;&quot;&gt;A System Customizer makes a “quick fix” to a form in production, creating an unmanaged layer.&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;ea04&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;You deploy a managed solution to update that same form, but your changes don’t appear, because the system uses the unmanaged version as the active layer.&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;pw-post-body-paragraph uo up pt uq b ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl ew bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;aa75&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;How to fix:&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;uo up pt uq b ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;078d&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 2.14em; padding-left: 0px;&quot;&gt;Either&amp;nbsp;&lt;em class=&quot;ws&quot; style=&quot;box-sizing: inherit;&quot;&gt;incorporate&lt;/em&gt;&amp;nbsp;that unmanaged change into your managed solution and redeploy&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;837c&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Or:&lt;/span&gt;&amp;nbsp;Use “Remove Active Customizations” to delete the unmanaged layer for that component (be aware: this discards those ad-hoc changes!)&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;pw-post-body-paragraph uo up pt uq b ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl ew bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;c060&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Warning:&lt;/span&gt;&amp;nbsp;If the unmanaged layer added fields&amp;nbsp;&lt;em class=&quot;ws&quot; style=&quot;box-sizing: inherit;&quot;&gt;with data&lt;/em&gt;, removing it will remove the field&amp;nbsp;&lt;em class=&quot;ws&quot; style=&quot;box-sizing: inherit;&quot;&gt;and&lt;/em&gt;&amp;nbsp;its data.&lt;/p&gt;&lt;h1 class=&quot;wu vn pt bf vo lb wv lc le lf ww lg li il wx im ip ll wy lm lp lq wz lr lu xa bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;fe9a&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.95em 0px -0.28em;&quot;&gt;Resolving Managed Solution Conflicts&lt;/h1&gt;&lt;p class=&quot;pw-post-body-paragraph uo up pt uq b ur wf ut uu uv wg ux uy uz wh vb vc vd wi vf vg vh wj vj vk vl ew bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;c873&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;When two managed solutions conflict (maybe both add a field with the same name, or try to change the same form property), you have a few options:&lt;/p&gt;&lt;ol class=&quot;&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;uo up pt uq b ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl wk wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;6969&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: decimal; margin-bottom: -0.46em; margin-left: 30px; margin-top: 2.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Manage Layer Order&lt;/span&gt;&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;Re-import the solution you want to take precedence. (Remember, the most recently imported managed solution is on top.)&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wk wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;638e&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: decimal; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Adjust the Customizations&lt;/span&gt;&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;If you own both solutions, tweak them so they don’t overlap (use unique names or separate component responsibilities).&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wk wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;315d&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: decimal; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Use a Patch or Hotfix Solution&lt;/span&gt;&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;If you can’t remove the “problem” managed solution (e.g., it’s a core or third-party solution), create a tiny managed patch or hotfix solution. This patch will layer above, overriding the problematic setting or property.&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wk wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;85e3&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: decimal; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Uninstall or Clean Up&lt;/span&gt;&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;As a last resort, uninstall the managed solution causing the issue, but only if nothing else depends on it.&lt;/li&gt;&lt;/ol&gt;&lt;h2 class=&quot;vm vn pt bf vo vp vq vr le vs vt vu li uz vv vw vx vd vy vz wa vh wb wc wd we bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;4191&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;Dependency Issues: Why Can’t I Uninstall a Solution?&lt;/h2&gt;&lt;p class=&quot;pw-post-body-paragraph uo up pt uq b ur wf ut uu uv wg ux uy uz wh vb vc vd wi vf vg vh wj vj vk vl ew bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;5635&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;Another layering-related headache: Sometimes you can’t uninstall or upgrade a solution because something else (another solution or unmanaged change) is using its components. You’ll usually get a descriptive error listing the dependencies.&lt;/p&gt;&lt;ul class=&quot;&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;uo up pt uq b ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;bb38&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 2.14em; padding-left: 0px;&quot;&gt;Use the solution layers viewer to see what’s on top of the component you’re trying to remove.&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;65f6&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;Remove or reconfigure any dependent solutions or unmanaged changes first.&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&quot;vm vn pt bf vo vp vq vr le vs vt vu li uz vv vw vx vd vy vz wa vh wb wc wd we bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;c7be&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;How to Use Layering to Your Advantage&lt;/h2&gt;&lt;p class=&quot;pw-post-body-paragraph uo up pt uq b ur wf ut uu uv wg ux uy uz wh vb vc vd wi vf vg vh wj vj vk vl ew bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;04db&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;Solution layering isn’t just a problem to solve, it’s a powerful tool if you plan for it.&lt;/p&gt;&lt;ul class=&quot;&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;uo up pt uq b ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;0fe7&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 2.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Modular design:&lt;/span&gt;&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;Have a base managed solution for your core entities, and layer feature-specific managed solutions on top. Teams can work independently as long as they avoid overlapping components.&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;9552&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Safe rollbacks:&lt;/span&gt;&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;If you need to remove a feature, you can just uninstall its solution — everything beneath remains intact.&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;e45d&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Hotfixes:&lt;/span&gt;&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;Emergency patch needed? Deploy a managed patch solution. It sits on top, overrides what’s needed, and can be rolled back easily.&lt;/li&gt;&lt;/ul&gt;&lt;h1 class=&quot;wu vn pt bf vo lb wv lc le lf ww lg li il wx im ip ll wy lm lp lq wz lr lu xa bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;5f85&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.95em 0px -0.28em;&quot;&gt;Best Practices &amp;amp; Tips&lt;/h1&gt;&lt;ul class=&quot;&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;uo up pt uq b ur wf ut uu uv wg ux uy uz wh vb vc vd wi vf vg vh wj vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;b2ec&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 0.94em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Always use the Solution Layers viewer when troubleshooting.&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;330d&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Document which solutions “own” which parts of your system&lt;/span&gt;&amp;nbsp;to avoid accidental overlap.&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;e4c3&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Avoid direct unmanaged changes in production&lt;/span&gt;&amp;nbsp;— if you must, plan to integrate them back into a managed solution and remove the unmanaged layer ASAP.&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;e207&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Check Solution Import logs:&lt;/span&gt;&amp;nbsp;These can warn you if components were skipped or a conflict occurred.&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;90af&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Test all changes in a non-prod environment first.&lt;/span&gt;&amp;nbsp;Removing or reordering solution layers can have side effects.&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&quot;vm vn pt bf vo vp vq vr le vs vt vu li uz vv vw vx vd vy vz wa vh wb wc wd we bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;fbed&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 24px; margin: 1.72em 0px -0.31em;&quot;&gt;Summary&lt;/h2&gt;&lt;p class=&quot;pw-post-body-paragraph uo up pt uq b ur wf ut uu uv wg ux uy uz wh vb vc vd wi vf vg vh wj vj vk vl ew bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;553e&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;Solution layering in Dynamics 365 CRM can feel confusing at first, but it’s a robust system for handling complex, multi-team, and even multi-vendor deployments. The trick is to respect the order of layers, avoid unmanaged “quick fixes” in production, and always use the tools Microsoft provides to see what’s going on.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph uo up pt uq b ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl ew bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;dab5&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;If you ever run into a situation where “my change isn’t showing up” or “something broke after a deployment,” the solution layers tool should be your first stop. With a clear ALM strategy and a little practice, you’ll turn layering from a headache into a feature that helps you build, troubleshoot, and evolve your CRM with confidence.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph uo up pt uq b ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl ew bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;b95c&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;span class=&quot;uq la&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Extra Reading &amp;amp; Resources:&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;uo up pt uq b ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;5e45&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 2.14em; padding-left: 0px;&quot;&gt;&lt;a class=&quot;ag xb&quot; href=&quot;https://learn.microsoft.com/en-us/power-platform/alm/solution-layers-alm&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;Solution layers and merge behavior in Power Platform — Power Platform | Microsoft Learn&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;4a7c&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;a class=&quot;ag xb&quot; href=&quot;https://learn.microsoft.com/en-us/power-apps/maker/data-platform/solution-history&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;View the history of a solution — Power Apps | Microsoft Learn&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;b667&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;a class=&quot;ag xb&quot; href=&quot;https://learn.microsoft.com/en-us/power-apps/maker/data-platform/view-component-dependencies&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;View dependencies for a component in Power Apps — Power Apps | Microsoft Learn&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;uo up pt uq b ur wn ut uu uv wo ux uy uz wp vb vc vd wq vf vg vh wr vj vk vl wt wl wm bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;e1cc&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;a class=&quot;ag xb&quot; href=&quot;https://learn.microsoft.com/en-us/power-apps/maker/data-platform/solution-layers#remove-an-unmanaged-layer&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;Solution layers in Power Platform — Power Apps | Microsoft Learn&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;pw-post-body-paragraph uo up pt uq b ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl ew bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;c5eb&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;em class=&quot;ws&quot; style=&quot;box-sizing: inherit;&quot;&gt;Got a layering war story or pro tip? Drop it in the comments!&lt;/em&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://chamarairesh.blogspot.com/feeds/1400856614014383334/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2491204017359768357/1400856614014383334' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/1400856614014383334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/1400856614014383334'/><link rel='alternate' type='text/html' href='http://chamarairesh.blogspot.com/2025/07/how-to-master-solution-layering-and.html' title='How to Master Solution Layering and Troubleshoot Customization Conflicts in Dynamics 365 CRM'/><author><name>Chamara Iresh</name><uri>http://www.blogger.com/profile/04695612052896290711</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//3.bp.blogspot.com/-Wfsm4TxTxO0/XiPTZjrj-cI/AAAAAAAAvCw/ONKFubGdBw41mPb1Xp89d9eMkvXaV0TkQCK4BGAYYCw/s220/20190817_151917.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRJFiigUzrk1s4BZMFE0DBm7-rKUVhxdle6QZBC6L-nz_477_ifZVT4iNx8mcCae4aM1NLpgqhHYhzkW1KvYTl8rVb1-ph4lrgJVPr3sKJoVLi9RxoV8nHChc1F78XR5twB7JLIco6j3E44GfirEkwd3gzj48kQKMTlLTTeQKJjf8HOGsU4aIPpOBVKqee/s72-w640-h426-c/ChatGPT%20Image%20Jul%2010,%202025,%2011_20_19%20AM.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2491204017359768357.post-4069321145030409754</id><published>2025-06-05T20:09:00.002+09:00</published><updated>2025-06-05T20:09:24.061+09:00</updated><title type='text'>How We Recovered a Retired Product in Microsoft Dynamics 365 CRM (And What You Can Do)</title><content type='html'>&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/AVvXsEgzS1ND3F22BcN-0RX_Y4r6BNNQ6G48602dET_pq8sPm0mETwpY9m7OATNRM2BBwixFCuD8J8lDOKPUwJOzLg4VG0fdAtXv913MqdcTbLV5IFOs7S8VL27yGGiLxY4pEznECcMPdCz0J7j9vANUTjfXMYaEzpR4tlY34X-M1UPiIOdsavam3cl7OOrmL5zF/s1024/ChatGPT%20Image%20Jun%205,%202025,%2012_00_45%20PM.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;1024&quot; data-original-width=&quot;1024&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzS1ND3F22BcN-0RX_Y4r6BNNQ6G48602dET_pq8sPm0mETwpY9m7OATNRM2BBwixFCuD8J8lDOKPUwJOzLg4VG0fdAtXv913MqdcTbLV5IFOs7S8VL27yGGiLxY4pEznECcMPdCz0J7j9vANUTjfXMYaEzpR4tlY34X-M1UPiIOdsavam3cl7OOrmL5zF/w640-h640/ChatGPT%20Image%20Jun%205,%202025,%2012_00_45%20PM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Recently, I heard from a friend who had faced a major issue in their CRM system — one that could easily turn into a nightmare if you’re not prepared.&lt;/p&gt;&lt;p&gt;If you’ve ever worked with Microsoft Dynamics 365 CRM, you’ll know that &lt;strong&gt;products&lt;/strong&gt; can be inactivated (retired) when they’re no longer needed. But what happens if you need to &lt;strong&gt;reactivate&lt;/strong&gt; a product that was retired? You’d expect it to be simple, but surprisingly, it’s not possible out of the box (OOB).&lt;/p&gt;
&lt;p&gt;Here’s what happened — and what you can do if you ever face this problem in your live environment.&lt;/p&gt;
&lt;h2&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;The Problem&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;They found a critical product had been retired by mistake. When they tried to reactivate it, &lt;strong&gt;there was no way to bring it back&lt;/strong&gt; using standard CRM functionality.&lt;/p&gt;
&lt;p&gt;They were stuck — and with the product inactive, it wasn’t showing up where it was needed, impacting real business processes.&lt;/p&gt;
&lt;h2&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;What They Did&lt;/span&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;First&lt;/strong&gt;, they assessed the issue and confirmed: no OOB (out-of-the-box) way exists to reactivate retired products.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Next&lt;/strong&gt;, they &lt;strong&gt;raised a support ticket with Microsoft&lt;/strong&gt;. Microsoft’s team ran a &lt;strong&gt;backend script&lt;/strong&gt; to move the product’s status from &lt;strong&gt;Retired&lt;/strong&gt; back to &lt;strong&gt;Draft&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;At this point, things looked better — the product was visible again.&lt;/p&gt;
&lt;p&gt;But...&lt;/p&gt;
&lt;h2&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;The Hidden Problem&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;When trying to use the product — like adding it to a cart — &lt;strong&gt;errors popped up&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;&quot;An error occurred while saving the {0} property instance.&quot;&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;&quot;Specified argument was out of range of valid values. Parameter name: value.&quot;&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Confusing, right?&lt;/p&gt;
&lt;p&gt;It turned out that while the product was moved to Draft, one of its &lt;strong&gt;Product Properties&lt;/strong&gt; — a field related to the product — was still inactive.&lt;/p&gt;
&lt;p&gt;CRM didn’t like that mismatch.&lt;/p&gt;
&lt;h2&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;The Real Fix&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;They went back to Microsoft support, flagged the new issue, and explained what they had found.&lt;/p&gt;
&lt;p&gt;Microsoft’s engineers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Ran a &lt;strong&gt;test script in UAT&lt;/strong&gt; (test environment) to reactivate the inactive Product Property.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;After confirming everything worked there, they &lt;strong&gt;ran the script in the Live environment&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Finally, the errors were gone. The product could be used normally again — just like before it was retired.&lt;/p&gt;
&lt;h2&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Key Takeaways&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;If this ever happens to you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;You can’t reactivate a retired product OOB&lt;/strong&gt; — Microsoft support is needed.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Simply changing the product status isn’t enough&lt;/strong&gt; — check the related &lt;strong&gt;Product Properties&lt;/strong&gt; too.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Raise a detailed support ticket&lt;/strong&gt; and suggest checking Product Properties if you hit errors.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Test fixes in UAT first&lt;/strong&gt; before applying anything live.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It’s one of those hidden challenges that can trip you up if you’re not careful. Hopefully, if you ever end up in a similar situation, this story will save you hours of troubleshooting!&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://chamarairesh.blogspot.com/feeds/4069321145030409754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2491204017359768357/4069321145030409754' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/4069321145030409754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/4069321145030409754'/><link rel='alternate' type='text/html' href='http://chamarairesh.blogspot.com/2025/06/how-we-recovered-retired-product-in.html' title='How We Recovered a Retired Product in Microsoft Dynamics 365 CRM (And What You Can Do)'/><author><name>Chamara Iresh</name><uri>http://www.blogger.com/profile/04695612052896290711</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//3.bp.blogspot.com/-Wfsm4TxTxO0/XiPTZjrj-cI/AAAAAAAAvCw/ONKFubGdBw41mPb1Xp89d9eMkvXaV0TkQCK4BGAYYCw/s220/20190817_151917.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzS1ND3F22BcN-0RX_Y4r6BNNQ6G48602dET_pq8sPm0mETwpY9m7OATNRM2BBwixFCuD8J8lDOKPUwJOzLg4VG0fdAtXv913MqdcTbLV5IFOs7S8VL27yGGiLxY4pEznECcMPdCz0J7j9vANUTjfXMYaEzpR4tlY34X-M1UPiIOdsavam3cl7OOrmL5zF/s72-w640-h640-c/ChatGPT%20Image%20Jun%205,%202025,%2012_00_45%20PM.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2491204017359768357.post-1636315391971299866</id><published>2025-04-23T06:13:00.007+09:00</published><updated>2025-04-23T06:22:01.445+09:00</updated><title type='text'>Decoding the Mystery of msdynci Columns in Dynamics 365 and Customer Insights</title><content type='html'>&lt;p&gt;&lt;span face=&quot;&amp;quot;Google Sans Text&amp;quot;, sans-serif&quot; style=&quot;color: #1b1c1d; font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;Integrating Microsoft Dynamics 365 CRM with Customer Insights - Data (CI-D) opens up a world of possibilities for understanding your customers better. But as you navigate this integration, you might notice something peculiar: certain tables, like your trusty Contacts, get these columns prefixed with &lt;/span&gt;&lt;code style=&quot;text-align: left;&quot;&gt;msdynci_&lt;/code&gt;&lt;span style=&quot;text-align: left;&quot;&gt;, while others seem to miss out. If you&#39;ve ever wondered if your data sync is working correctly, you&#39;re not alone. The truth is, this isn&#39;t a random occurrence – it&#39;s a deliberate design that reflects how Customer Insights handles different types of data.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: times; text-align: left;&quot;&gt;&lt;br /&gt;&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/AVvXsEiUjAzw_Sneu8HgNXAvsasBVFUoWcseepwu2tKau71JYTugcXUBAXARO5RKxEanLMI7lNSie3qOmDPj3Ypz78kLxb6B3dUtO0Sjp1LIRmxdB1dUYv0lPVY4oRtoSex5Za2f_I8PmWmw5YTt9vEiQ8RlqE9xBoX6iiZxPFSgRJrEgzrn_PAv5rfCj8NEohfe/s1397/CI_and_CRM_SYNC.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;693&quot; data-original-width=&quot;1397&quot; height=&quot;318&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUjAzw_Sneu8HgNXAvsasBVFUoWcseepwu2tKau71JYTugcXUBAXARO5RKxEanLMI7lNSie3qOmDPj3Ypz78kLxb6B3dUtO0Sjp1LIRmxdB1dUYv0lPVY4oRtoSex5Za2f_I8PmWmw5YTt9vEiQ8RlqE9xBoX6iiZxPFSgRJrEgzrn_PAv5rfCj8NEohfe/w640-h318/CI_and_CRM_SYNC.jpg&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;h2 data-sourcepos=&quot;5:1-5:81&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; color: #1b1c1d; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 8px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 8px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times; font-size: medium;&quot;&gt;The Purpose Behind the Pattern: Why Only Some Tables Get the &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;msdynci_&lt;/code&gt; Prefix&lt;/span&gt;&lt;/h2&gt;&lt;p data-sourcepos=&quot;7:1-7:400&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; color: #1b1c1d; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 16px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 16px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;Think of Customer Insights - Data as a platform built to create a unified and comprehensive view of your customers. To achieve this, it focuses on what it considers &quot;profile&quot; tables – primarily your Contact and Account entities.&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;source-footnote _nghost-ng-c1554197815=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(255, 255, 255); border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;sup _ngcontent-ng-c1554197815=&quot;&quot; class=&quot;superscript&quot; data-turn-source-index=&quot;1&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: transparent !important; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box transparent; border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-flex; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: -10px 2px 10px -2px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: -6px; margin-right: -6px; margin-top: 0px !important; margin: 0px -6px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;1&lt;/sup&gt;&lt;/source-footnote&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/span&gt; When you set up the synchronization between Dynamics 365 CRM and CI-D, the system identifies these key entities as central to building that single customer profile.&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;source-footnote _nghost-ng-c1554197815=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(255, 255, 255); border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;sup _ngcontent-ng-c1554197815=&quot;&quot; class=&quot;superscript&quot; data-turn-source-index=&quot;1&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: transparent !important; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box transparent; border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-flex; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: -10px 2px 10px -2px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: -6px; margin-right: -6px; margin-top: 0px !important; margin: 0px -6px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;1&lt;/sup&gt;&lt;/source-footnote&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/span&gt;&lt;sources-carousel-inline _nghost-ng-c2082228934=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/sources-carousel-inline&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;9:1-9:393&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; color: #1b1c1d; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 16px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 16px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;To power features like profile unification, data enrichment, audience segmentation, and even predictive scoring, Customer Insights - Data automatically adds specific metadata fields to these designated profile tables&amp;nbsp;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;source-footnote _nghost-ng-c1554197815=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(255, 255, 255); border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;sup _ngcontent-ng-c1554197815=&quot;&quot; class=&quot;superscript&quot; data-turn-source-index=&quot;1&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: transparent !important; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box transparent; border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-flex; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: -10px 2px 10px -2px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: -6px; margin-right: -6px; margin-top: 0px !important; margin: 0px -6px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;1.&lt;/sup&gt;&lt;/source-footnote&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/span&gt; These are the columns you see with the &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;msdynci_&lt;/code&gt; prefix. They act as internal markers, helping Customer Insights track and manage profile-related data more effectively.&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;source-footnote _nghost-ng-c1554197815=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(255, 255, 255); border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;sup _ngcontent-ng-c1554197815=&quot;&quot; class=&quot;superscript&quot; data-turn-source-index=&quot;1&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: transparent !important; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box transparent; border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-flex; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: -10px 2px 10px -2px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: -6px; margin-right: -6px; margin-top: 0px !important; margin: 0px -6px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;1&lt;/sup&gt;&lt;/source-footnote&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/span&gt;&lt;sources-carousel-inline _nghost-ng-c2082228934=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/sources-carousel-inline&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;11:1-11:90&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; color: #1b1c1d; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 8px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 8px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;Here are a few key &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;msdynci_&lt;/code&gt; columns you&#39;ll likely encounter in your core profile tables:&lt;/span&gt;&lt;/p&gt;&lt;ul data-sourcepos=&quot;13:1-16:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; color: #1b1c1d; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 16px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 16px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding-inline-start: 32px; padding: 0px 0px 0px 27px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;
&lt;li data-sourcepos=&quot;13:1-13:241&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 8px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 8px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;msdynci_isprofile&lt;/code&gt;&lt;/span&gt;: This column likely acts as a simple yes/no indicator, telling the system whether a specific record (like a Contact) is actively contributing to your unified customer profile within Customer Insights - Data.&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;source-footnote _nghost-ng-c1554197815=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(255, 255, 255); border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;sup _ngcontent-ng-c1554197815=&quot;&quot; class=&quot;superscript&quot; data-turn-source-index=&quot;2&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: transparent !important; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box transparent; border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-flex; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: -10px 2px 10px -2px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: -6px; margin-right: -6px; margin-top: 0px !important; margin: 0px -6px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;2&lt;/sup&gt;&lt;/source-footnote&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/span&gt;&lt;sources-carousel-inline _nghost-ng-c2082228934=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/sources-carousel-inline&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li data-sourcepos=&quot;14:1-14:286&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 8px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 8px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;msdynci_lastprofileupdate&lt;/code&gt;&lt;/span&gt;: Think of this as a digital timestamp. It probably records the exact date and time when a record&#39;s profile information was last updated or refreshed by Customer Insights - Data.&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;source-footnote _nghost-ng-c1554197815=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(255, 255, 255); border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;sup _ngcontent-ng-c1554197815=&quot;&quot; class=&quot;superscript&quot; data-turn-source-index=&quot;2&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: transparent !important; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box transparent; border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-flex; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: -10px 2px 10px -2px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: -6px; margin-right: -6px; margin-top: 0px !important; margin: 0px -6px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;2&lt;/sup&gt;&lt;/source-footnote&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/span&gt; This is crucial for knowing how recent your unified customer data is.&lt;sources-carousel-inline _nghost-ng-c2082228934=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/sources-carousel-inline&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li data-sourcepos=&quot;15:1-16:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 8px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 8px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;msdynci_profilestatus&lt;/code&gt;&lt;/span&gt;: This column likely holds a status code or value that reflects the current stage of a record&#39;s profile within the Customer Insights - Data processing pipeline.&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;source-footnote _nghost-ng-c1554197815=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(255, 255, 255); border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;sup _ngcontent-ng-c1554197815=&quot;&quot; class=&quot;superscript&quot; data-turn-source-index=&quot;2&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: transparent !important; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box transparent; border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-flex; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: -10px 2px 10px -2px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: -6px; margin-right: -6px; margin-top: 0px !important; margin: 0px -6px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;2&lt;/sup&gt;&lt;/source-footnote&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/span&gt; It could indicate if a profile is active, pending unification, or has been successfully unified.&lt;sources-carousel-inline _nghost-ng-c2082228934=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/sources-carousel-inline&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p data-sourcepos=&quot;17:1-17:424&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; color: #1b1c1d; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 16px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 16px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;Now, what about other tables in your Dynamics 365 environment, such as custom entities or standard tables like Activities? These are generally not automatically treated as core profiles in Customer Insights - Data.&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;source-footnote _nghost-ng-c1554197815=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(255, 255, 255); border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;sup _ngcontent-ng-c1554197815=&quot;&quot; class=&quot;superscript&quot; data-turn-source-index=&quot;4&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: transparent !important; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box transparent; border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-flex; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: -10px 2px 10px -2px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: -6px; margin-right: -6px; margin-top: 0px !important; margin: 0px -6px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;4&lt;/sup&gt;&lt;/source-footnote&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/span&gt; As a result, they don&#39;t automatically receive the &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;msdynci_&lt;/code&gt; columns unless you explicitly configure them within CI-D.&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;source-footnote _nghost-ng-c1554197815=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(255, 255, 255); border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;sup _ngcontent-ng-c1554197815=&quot;&quot; class=&quot;superscript&quot; data-turn-source-index=&quot;4&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: transparent !important; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box transparent; border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-flex; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: -10px 2px 10px -2px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: -6px; margin-right: -6px; margin-top: 0px !important; margin: 0px -6px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;4&lt;/sup&gt;&lt;/source-footnote&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/span&gt; This design helps keep the focus on the most critical customer data for unification.&lt;sources-carousel-inline _nghost-ng-c2082228934=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/sources-carousel-inline&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2 data-sourcepos=&quot;19:1-19:63&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; color: #1b1c1d; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 8px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 8px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times; font-size: medium;&quot;&gt;Validating Your Integration: Ensuring Smooth Synchronization&lt;/span&gt;&lt;/h2&gt;&lt;p data-sourcepos=&quot;21:1-21:157&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; color: #1b1c1d; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 8px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 8px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;To make sure your Dynamics 365 CRM and Customer Insights - Data integration is working as expected, here are a few key steps you can take &lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;source-footnote _nghost-ng-c1554197815=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(255, 255, 255); border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;sup _ngcontent-ng-c1554197815=&quot;&quot; class=&quot;superscript&quot; data-turn-source-index=&quot;5&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: transparent !important; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box transparent; border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-flex; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: -10px 2px 10px -2px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: -6px; margin-right: -6px; margin-top: 0px !important; margin: 0px -6px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;5&lt;/sup&gt;&lt;/source-footnote&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/span&gt;:&lt;sources-carousel-inline _nghost-ng-c2082228934=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/sources-carousel-inline&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol data-sourcepos=&quot;23:1-26:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; color: #1b1c1d; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 16px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 16px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding-inline-start: 32px; padding: 0px 0px 0px 28px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;
&lt;li data-sourcepos=&quot;23:1-23:224&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 8px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 8px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Examine Sync Health Metrics:&lt;/span&gt; Head over to the Power Platform Admin Center. Here, you can usually find a dashboard that shows the overall health of your data synchronization, including the status of individual tables.&lt;/span&gt;&lt;/li&gt;
&lt;li data-sourcepos=&quot;24:1-24:278&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 8px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 8px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Verify Table Classifications in CI-D:&lt;/span&gt; Open up Customer Insights - Data and navigate to &lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Data&lt;/span&gt; &amp;gt; &lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Tables&lt;/span&gt;. This section allows you to see how each table is classified (e.g., as a profile, interaction, or relationship) and confirm which tables are being actively used.&lt;/span&gt;&lt;/li&gt;
&lt;li data-sourcepos=&quot;25:1-26:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 8px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 8px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Configure Non-Profile Tables:&lt;/span&gt; If you have custom entities that you want to include in your Customer Insights data model, you&#39;ll likely need to manually map them within CI-D. This involves defining their schema and specifying how they relate to your core profile entities.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;h2 data-sourcepos=&quot;27:1-27:34&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; color: #1b1c1d; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 8px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 8px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times; font-size: medium;&quot;&gt;Key Insights for Administrators&lt;/span&gt;&lt;/h2&gt;&lt;p data-sourcepos=&quot;29:1-29:542&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; color: #1b1c1d; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 16px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 16px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;Understanding the selective nature of &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;msdynci_&lt;/code&gt; columns is crucial for anyone managing a Dynamics 365 and Customer Insights - Data integration. It provides a clear view into how Customer Insights categorizes and processes your CRM data, helping to maintain a distinction between core profile information and other supporting data.&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;source-footnote _nghost-ng-c1554197815=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(255, 255, 255); border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;sup _ngcontent-ng-c1554197815=&quot;&quot; class=&quot;superscript&quot; data-turn-source-index=&quot;1&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: transparent !important; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box transparent; border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-flex; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: -10px 2px 10px -2px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: -6px; margin-right: -6px; margin-top: 0px !important; margin: 0px -6px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;1&lt;/sup&gt;&lt;/source-footnote&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/span&gt; When building your unified customer data models, recognizing this architectural choice ensures you can accurately interpret table structures and establish effective relationships between different entities.&lt;sources-carousel-inline _nghost-ng-c2082228934=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/sources-carousel-inline&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2 data-sourcepos=&quot;31:1-31:51&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; color: #1b1c1d; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 8px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 8px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times; font-size: medium;&quot;&gt;Diving Deeper: Exploring Other &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;msdynci_&lt;/code&gt; Tables&lt;/span&gt;&lt;/h2&gt;&lt;p data-sourcepos=&quot;33:1-33:251&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; color: #1b1c1d; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 16px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 16px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;Beyond the key columns mentioned earlier, the integration also creates several other tables in your Dataverse environment, all helpfully prefixed with &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;msdynci_&lt;/code&gt;.&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;source-footnote _nghost-ng-c1554197815=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(255, 255, 255); border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;sup _ngcontent-ng-c1554197815=&quot;&quot; class=&quot;superscript&quot; data-turn-source-index=&quot;1&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: transparent !important; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box transparent; border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-flex; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: -10px 2px 10px -2px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: -6px; margin-right: -6px; margin-top: 0px !important; margin: 0px -6px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;1&lt;/sup&gt;&lt;/source-footnote&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/span&gt; These tables serve specific purposes in managing and enriching your customer data:&lt;sources-carousel-inline _nghost-ng-c2082228934=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/sources-carousel-inline&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;horizontal-scroll-wrapper&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; color: #1b1c1d; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;
&lt;table data-sourcepos=&quot;35:1-42:344&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(240, 244, 249); border: 0px none rgb(128, 128, 128); clear: none; clip: auto; color: #1b1c1d; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 32px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 32px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;tbody style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px none rgb(128, 128, 128); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;tr data-sourcepos=&quot;35:1-35:42&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px none rgb(128, 128, 128); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;td style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(248, 250, 253); border: 1px solid; clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-family: times; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px !important; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Table Name&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(248, 250, 253); border: 1px solid; clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-family: times; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px !important; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Key Columns&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(248, 250, 253); border: 1px solid; clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-family: times; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px !important; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Description&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr data-sourcepos=&quot;37:1-37:297&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px none rgb(128, 128, 128); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;td align=&quot;left&quot; data-sourcepos=&quot;37:1-37:24&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(248, 250, 253); border: 1px solid; clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;msdynci_alternatekey&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;td align=&quot;left&quot; data-sourcepos=&quot;37:26-37:120&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(248, 250, 253); border: 1px solid; clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;&lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;DataSourceName&lt;/code&gt;, &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;TableName&lt;/code&gt;, &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;AlternateValue&lt;/code&gt;, &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;CustomerId&lt;/code&gt;, &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;AlternateKeyId&lt;/code&gt;, &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Identifier&lt;/code&gt;&lt;/span&gt;&lt;/td&gt;&lt;td align=&quot;left&quot; data-sourcepos=&quot;37:122-37:295&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(248, 250, 253); border: 1px solid; clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;Contains mappings between the unique identifier Customer Insights - Data generates for a customer and their original identifiers from source systems like Dynamics 365 CRM .&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr data-sourcepos=&quot;38:1-38:378&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px none rgb(128, 128, 128); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;td align=&quot;left&quot; data-sourcepos=&quot;38:1-38:27&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(248, 250, 253); border: 1px solid; clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;msdynci_unifiedactivity&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;td align=&quot;left&quot; data-sourcepos=&quot;38:29-38:163&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(248, 250, 253); border: 1px solid; clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;&lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;CustomerId&lt;/code&gt;, &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;ActivityId&lt;/code&gt;, &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;SourceTableName&lt;/code&gt;, &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;SourceActivityId&lt;/code&gt;, &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;ActivityType&lt;/code&gt;, &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;ActivityTimeStamp&lt;/code&gt;, &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Title&lt;/code&gt;, &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Description&lt;/code&gt;, &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;URL&lt;/code&gt;&lt;/span&gt;&lt;/td&gt;&lt;td align=&quot;left&quot; data-sourcepos=&quot;38:165-38:376&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(248, 250, 253); border: 1px solid; clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;Stores a consolidated view of customer activities (e.g., purchases, website visits, support interactions) gathered from various connected data sources, providing a unified timeline for each customer profile.&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;source-footnote _nghost-ng-c1554197815=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(255, 255, 255); border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;sup _ngcontent-ng-c1554197815=&quot;&quot; class=&quot;superscript&quot; data-turn-source-index=&quot;5&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: transparent !important; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box transparent; border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-flex; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: -10px 2px 10px -2px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: -6px; margin-right: -6px; margin-top: 0px !important; margin: 0px -6px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;5&lt;/sup&gt;&lt;/source-footnote&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr data-sourcepos=&quot;39:1-39:304&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px none rgb(128, 128, 128); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;td align=&quot;left&quot; data-sourcepos=&quot;39:1-39:26&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(248, 250, 253); border: 1px solid; clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;msdynci_customermeasure&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;td align=&quot;left&quot; data-sourcepos=&quot;39:28-39:88&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(248, 250, 253); border: 1px solid; clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;&lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;CustomerId&lt;/code&gt;, &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Measures&lt;/code&gt;, &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Identifier&lt;/code&gt;, &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;CustomerMeasureId&lt;/code&gt;&lt;/span&gt;&lt;/td&gt;&lt;td align=&quot;left&quot; data-sourcepos=&quot;39:90-39:302&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(248, 250, 253); border: 1px solid; clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;Holds calculated metrics and Key Performance Indicators (KPIs) derived at the level of the unified customer profile, enabling tracking and analysis of crucial business metrics at an individual customer level.&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;source-footnote _nghost-ng-c1554197815=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(255, 255, 255); border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;sup _ngcontent-ng-c1554197815=&quot;&quot; class=&quot;superscript&quot; data-turn-source-index=&quot;5&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: transparent !important; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box transparent; border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-flex; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: -10px 2px 10px -2px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: -6px; margin-right: -6px; margin-top: 0px !important; margin: 0px -6px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;5&lt;/sup&gt;&lt;/source-footnote&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr data-sourcepos=&quot;40:1-40:344&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px none rgb(128, 128, 128); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;td align=&quot;left&quot; data-sourcepos=&quot;40:1-40:22&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(248, 250, 253); border: 1px solid; clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;msdynci_enrichment&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;td align=&quot;left&quot; data-sourcepos=&quot;40:24-40:117&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(248, 250, 253); border: 1px solid; clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;&lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;CustomerId&lt;/code&gt;, &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;EnrichmentProvider&lt;/code&gt;, &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;EnrichmentType&lt;/code&gt;, &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Values&lt;/code&gt;, &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;EnrichmentId&lt;/code&gt;, &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Identifier&lt;/code&gt;&lt;/span&gt;&lt;/td&gt;&lt;td align=&quot;left&quot; data-sourcepos=&quot;40:119-40:342&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(248, 250, 253); border: 1px solid; clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;Stores the results of data enrichment processes, where customer profiles are augmented with additional information from Microsoft or third-party data providers, enhancing the comprehensiveness of customer understanding.&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;source-footnote _nghost-ng-c1554197815=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(255, 255, 255); border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;sup _ngcontent-ng-c1554197815=&quot;&quot; class=&quot;superscript&quot; data-turn-source-index=&quot;5&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: transparent !important; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box transparent; border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-flex; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: -10px 2px 10px -2px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: -6px; margin-right: -6px; margin-top: 0px !important; margin: 0px -6px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;5&lt;/sup&gt;&lt;/source-footnote&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr data-sourcepos=&quot;41:1-41:311&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px none rgb(128, 128, 128); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;td align=&quot;left&quot; data-sourcepos=&quot;41:1-41:22&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(248, 250, 253); border: 1px solid; clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;msdynci_prediction&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;td align=&quot;left&quot; data-sourcepos=&quot;41:24-41:103&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(248, 250, 253); border: 1px solid; clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;&lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;CustomerId&lt;/code&gt;, &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;ModelProvider&lt;/code&gt;, &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Model&lt;/code&gt;, &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Values&lt;/code&gt;, &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;PredictionId&lt;/code&gt;, &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Identifier&lt;/code&gt;&lt;/span&gt;&lt;/td&gt;&lt;td align=&quot;left&quot; data-sourcepos=&quot;41:105-41:309&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(248, 250, 253); border: 1px solid; clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;Contains the output and results generated by predictive AI models within Customer Insights - Data, providing insights into potential future customer behaviors and outcomes for proactive interventions.&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;source-footnote _nghost-ng-c1554197815=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(255, 255, 255); border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;sup _ngcontent-ng-c1554197815=&quot;&quot; class=&quot;superscript&quot; data-turn-source-index=&quot;5&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: transparent !important; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box transparent; border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-flex; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: -10px 2px 10px -2px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: -6px; margin-right: -6px; margin-top: 0px !important; margin: 0px -6px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;5&lt;/sup&gt;&lt;/source-footnote&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr data-sourcepos=&quot;42:1-42:344&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px none rgb(128, 128, 128); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;td align=&quot;left&quot; data-sourcepos=&quot;42:1-42:28&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(248, 250, 253); border: 1px solid; clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;msdynci_segmentmembership&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;td align=&quot;left&quot; data-sourcepos=&quot;42:30-42:136&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(248, 250, 253); border: 1px solid; clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;&lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;CustomerId&lt;/code&gt;, &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;SegmentProvider&lt;/code&gt;, &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;SegmentMembershipType&lt;/code&gt;, &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Segments&lt;/code&gt;, &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Identifier&lt;/code&gt;, &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;SegmentMembershipId&lt;/code&gt;&lt;/span&gt;&lt;/td&gt;&lt;td align=&quot;left&quot; data-sourcepos=&quot;42:138-42:342&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(248, 250, 253); border: 1px solid; clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 8px 12px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;Records which specific customer segments (defined within Customer Insights - Data) each unified customer profile is a member of, essential for enabling targeted marketing and personalized experiences.&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0); border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;source-footnote _nghost-ng-c1554197815=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(255, 255, 255); border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;sup _ngcontent-ng-c1554197815=&quot;&quot; class=&quot;superscript&quot; data-turn-source-index=&quot;5&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: transparent !important; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box transparent; border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-flex; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: -10px 2px 10px -2px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: -6px; margin-right: -6px; margin-top: 0px !important; margin: 0px -6px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;5&lt;/sup&gt;&lt;/source-footnote&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;&lt;sources-carousel-inline _nghost-ng-c2082228934=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; color: #1b1c1d; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/span&gt;&lt;/sources-carousel-inline&gt;&lt;h2 data-sourcepos=&quot;44:1-44:62&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; color: #1b1c1d; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 8px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 8px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times; font-size: medium;&quot;&gt;Real-World Applications: Putting &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;msdynci_&lt;/code&gt; Columns to Work&lt;/span&gt;&lt;/h2&gt;&lt;div&gt;&lt;span style=&quot;font-family: times;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;p data-sourcepos=&quot;46:1-46:91&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; color: #1b1c1d; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 8px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 8px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;Understanding these &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;msdynci_&lt;/code&gt; columns and tables opens up various practical applications :&lt;/span&gt;&lt;/p&gt;&lt;ul data-sourcepos=&quot;48:1-54:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; color: #1b1c1d; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 16px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 16px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding-inline-start: 32px; padding: 0px 0px 0px 27px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;
&lt;li data-sourcepos=&quot;48:1-48:149&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 8px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 8px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Smarter Segmentation:&lt;/span&gt; Use &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;msdynci_isprofile&lt;/code&gt; to create highly targeted audience segments that include only fully unified customer profiles.&lt;/span&gt;&lt;/li&gt;
&lt;li data-sourcepos=&quot;49:1-49:190&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 8px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 8px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Personalized Interactions:&lt;/span&gt; Leverage &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;msdynci_lastprofileupdate&lt;/code&gt; to ensure your sales and service teams have the most up-to-date customer information for more relevant conversations.&lt;/span&gt;&lt;/li&gt;
&lt;li data-sourcepos=&quot;50:1-50:161&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 8px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 8px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Troubleshooting Integration Issues:&lt;/span&gt; Monitor &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;msdynci_profilestatus&lt;/code&gt; to quickly identify and address any records that may have failed to unify correctly.&lt;/span&gt;&lt;/li&gt;
&lt;li data-sourcepos=&quot;51:1-51:189&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 8px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 8px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Comprehensive Customer Journeys:&lt;/span&gt; Utilize &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;msdynci_unifiedactivity&lt;/code&gt; to gain a holistic view of customer interactions across all touchpoints, enabling more effective journey mapping.&lt;/span&gt;&lt;/li&gt;
&lt;li data-sourcepos=&quot;52:1-52:157&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 8px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 8px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Data-Driven Insights:&lt;/span&gt; Employ &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;msdynci_customermeasure&lt;/code&gt; to track key metrics like customer lifetime value and tailor business strategies accordingly.&lt;/span&gt;&lt;/li&gt;
&lt;li data-sourcepos=&quot;53:1-54:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 8px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 8px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Targeted Marketing:&lt;/span&gt; Rely on &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;msdynci_segmentmembership&lt;/code&gt; to deliver personalized marketing messages and offers based on specific customer segment affiliations.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h2 data-sourcepos=&quot;55:1-55:54&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; color: #1b1c1d; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 8px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 8px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times; font-size: medium;&quot;&gt;Staying Informed: Recent Updates and Best Practices&lt;/span&gt;&lt;/h2&gt;&lt;div&gt;&lt;span style=&quot;font-family: times;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;p data-sourcepos=&quot;57:1-57:297&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; color: #1b1c1d; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 16px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 16px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;The landscape of Dynamics 365 and Customer Insights is constantly evolving. Keeping an eye on recent release waves and updates is essential. Features like enhanced integration with Microsoft Fabric OneLake and improvements to the Dataverse connector can influence how &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;msdynci_&lt;/code&gt; data is managed.&lt;/span&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;59:1-59:75&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; color: #1b1c1d; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 8px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 8px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;For optimal management of your integration, remember these best practices :&lt;/span&gt;&lt;/p&gt;&lt;ul data-sourcepos=&quot;61:1-64:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; color: #1b1c1d; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 16px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 16px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding-inline-start: 32px; padding: 0px 0px 0px 27px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;
&lt;li data-sourcepos=&quot;61:1-61:98&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 8px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 8px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Strategic Synchronization:&lt;/span&gt; Only sync necessary entities to avoid performance bottlenecks.&lt;/span&gt;&lt;/li&gt;
&lt;li data-sourcepos=&quot;62:1-62:155&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 8px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 8px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Data Quality First:&lt;/span&gt; Implement robust data unification processes within Customer Insights - Data to ensure accurate and complete customer profiles.&lt;/span&gt;&lt;/li&gt;
&lt;li data-sourcepos=&quot;63:1-64:0&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 8px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 8px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px 0px 0px 4px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;Regular Monitoring:&lt;/span&gt; Keep a close watch on the data synchronization status in both Dynamics 365 CRM and Customer Insights - Data to identify and resolve any issues promptly.&lt;span style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;source-footnote _nghost-ng-c1554197815=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(255, 255, 255); border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;sup _ngcontent-ng-c1554197815=&quot;&quot; class=&quot;superscript&quot; data-turn-source-index=&quot;5&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-color: transparent !important; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; background: none 0% 0% / auto repeat scroll padding-box border-box transparent; border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline-flex; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: -10px 2px 10px -2px; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: -6px; margin-right: -6px; margin-top: 0px !important; margin: 0px -6px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: relative; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;5&lt;/sup&gt;&lt;/source-footnote&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/span&gt;&lt;sources-carousel-inline _nghost-ng-c2082228934=&quot;&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/sources-carousel-inline&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p data-sourcepos=&quot;65:1-65:245&quot; style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; color: #1b1c1d; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 16px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 16px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 16px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: times;&quot;&gt;By understanding the role of &lt;code style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(233, 238, 246); border: 0px none rgb(87, 91, 95); clear: none; clip: auto; color: #575b5f; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(87, 91, 95) none 0px; overlay: none; padding: 1px 6px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;msdynci_&lt;/code&gt; columns and following these best practices, you can confidently navigate the integration between Microsoft Dynamics 365 CRM and Customer Insights - Data, unlocking the full potential of your customer data.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://chamarairesh.blogspot.com/feeds/1636315391971299866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2491204017359768357/1636315391971299866' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/1636315391971299866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/1636315391971299866'/><link rel='alternate' type='text/html' href='http://chamarairesh.blogspot.com/2025/04/decoding-mystery-of-msdynci-columns-in.html' title='Decoding the Mystery of msdynci Columns in Dynamics 365 and Customer Insights'/><author><name>Chamara Iresh</name><uri>http://www.blogger.com/profile/04695612052896290711</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//3.bp.blogspot.com/-Wfsm4TxTxO0/XiPTZjrj-cI/AAAAAAAAvCw/ONKFubGdBw41mPb1Xp89d9eMkvXaV0TkQCK4BGAYYCw/s220/20190817_151917.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUjAzw_Sneu8HgNXAvsasBVFUoWcseepwu2tKau71JYTugcXUBAXARO5RKxEanLMI7lNSie3qOmDPj3Ypz78kLxb6B3dUtO0Sjp1LIRmxdB1dUYv0lPVY4oRtoSex5Za2f_I8PmWmw5YTt9vEiQ8RlqE9xBoX6iiZxPFSgRJrEgzrn_PAv5rfCj8NEohfe/s72-w640-h318-c/CI_and_CRM_SYNC.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2491204017359768357.post-2438317989944306846</id><published>2025-03-05T04:15:00.001+09:00</published><updated>2025-03-05T04:15:26.216+09:00</updated><title type='text'>Mastering the Intersect Method in C#: A Beginner&#39;s Guide</title><content type='html'>Have you ever needed to figure out what two lists have in common? Maybe you’re comparing two sets of numbers or trying to find students who appear in two different class rosters. In C#, the Intersect method from LINQ is your go-to tool for this. Think of it as finding the overlap between two circles in a Venn diagram—only the elements present in both collections make it to the final result.
&lt;p class=&quot;break-words&quot; style=&quot;white-space-collapse: preserve;&quot;&gt;In this blog, we’ll walk through how to use &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;Intersect&lt;/span&gt; step by step. We’ll cover the basics, dive into using it with custom objects, talk about performance, and show you how to handle tricky situations like null values. Whether you’re new to C# or looking to brush up on your skills, this guide is written to be clear, simple, and easy to follow. Let’s get started!&lt;/p&gt;
&lt;h2&gt;What is Intersect?&lt;/h2&gt;
&lt;p class=&quot;break-words&quot; style=&quot;white-space-collapse: preserve;&quot;&gt;&lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;Intersect&lt;/span&gt; is a handy LINQ method in C# that finds the common elements between two collections. It’s part of the language’s set operations, meaning it works like a filter that keeps only what’s shared between the two. No need to write long loops or complicated logic—&lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;Intersect&lt;/span&gt; does the heavy lifting for you.&lt;/p&gt;
&lt;p class=&quot;break-words&quot; style=&quot;white-space-collapse: preserve;&quot;&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;For example, imagine you have two groups of friends, and you want to know who’s in both groups. &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;Intersect&lt;/span&gt; is your shortcut to spotting those mutual buddies.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;Basic Usage with Simple Types&lt;/h2&gt;
&lt;p class=&quot;break-words&quot; style=&quot;white-space-collapse: preserve;&quot;&gt;Let’s kick things off with an easy example using lists of numbers. Here’s how &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;Intersect&lt;/span&gt; works with basic types like integers:&lt;/p&gt;
&lt;div class=&quot;not-prose&quot;&gt;&lt;div class=&quot;relative [&amp;amp;_div+div]:!mt-0 mt-6 mb-10 -mx-4 -mr-2 @md:-mr-4&quot;&gt;&lt;div style=&quot;border-radius: 0px 0px 12px 12px; font-size: 0.9em; line-height: 1.5em; margin-top: 0px; overflow-x: auto; padding: 16px;&quot;&gt;&lt;code style=&quot;font-size: inherit; line-height: inherit; white-space: pre;&quot;&gt;&lt;span style=&quot;color: #a626a4;&quot;&gt;using&lt;/span&gt; System;
&lt;span style=&quot;color: #a626a4;&quot;&gt;using&lt;/span&gt; System.Linq;
&lt;span style=&quot;color: #a626a4;&quot;&gt;using&lt;/span&gt; System.Collections.Generic;

&lt;span style=&quot;color: #a626a4;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #4078f2;&quot;&gt;Program&lt;/span&gt;
{
    &lt;span class=&quot;hljs-function&quot; style=&quot;color: #a626a4;&quot;&gt;static&lt;/span&gt;&lt;span class=&quot;hljs-function&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hljs-function&quot; style=&quot;color: #a626a4;&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;hljs-function&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hljs-function&quot; style=&quot;color: #4078f2;&quot;&gt;Main&lt;/span&gt;&lt;span class=&quot;hljs-function&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hljs-function&quot;&gt;)&lt;/span&gt;
    {
        &lt;span style=&quot;color: #a0a1a7; font-style: italic;&quot;&gt;// Two lists of numbers&lt;/span&gt;
        List&amp;lt;&lt;span style=&quot;color: #c18401;&quot;&gt;int&lt;/span&gt;&amp;gt; list1 = &lt;span style=&quot;color: #a626a4;&quot;&gt;new&lt;/span&gt; List&amp;lt;&lt;span style=&quot;color: #c18401;&quot;&gt;int&lt;/span&gt;&amp;gt; { &lt;span style=&quot;color: #986801;&quot;&gt;1&lt;/span&gt;, &lt;span style=&quot;color: #986801;&quot;&gt;2&lt;/span&gt;, &lt;span style=&quot;color: #986801;&quot;&gt;3&lt;/span&gt;, &lt;span style=&quot;color: #986801;&quot;&gt;4&lt;/span&gt;, &lt;span style=&quot;color: #986801;&quot;&gt;5&lt;/span&gt; };
        List&amp;lt;&lt;span style=&quot;color: #c18401;&quot;&gt;int&lt;/span&gt;&amp;gt; list2 = &lt;span style=&quot;color: #a626a4;&quot;&gt;new&lt;/span&gt; List&amp;lt;&lt;span style=&quot;color: #c18401;&quot;&gt;int&lt;/span&gt;&amp;gt; { &lt;span style=&quot;color: #986801;&quot;&gt;3&lt;/span&gt;, &lt;span style=&quot;color: #986801;&quot;&gt;4&lt;/span&gt;, &lt;span style=&quot;color: #986801;&quot;&gt;5&lt;/span&gt;, &lt;span style=&quot;color: #986801;&quot;&gt;6&lt;/span&gt;, &lt;span style=&quot;color: #986801;&quot;&gt;7&lt;/span&gt; };

        &lt;span style=&quot;color: #a0a1a7; font-style: italic;&quot;&gt;// Find the common elements&lt;/span&gt;
        &lt;span style=&quot;color: #a626a4;&quot;&gt;var&lt;/span&gt; commonElements = list1.Intersect(list2);

        &lt;span style=&quot;color: #a0a1a7; font-style: italic;&quot;&gt;// Print the result&lt;/span&gt;
        Console.WriteLine(&lt;span style=&quot;color: #50a14f;&quot;&gt;&quot;Common Elements: &quot;&lt;/span&gt; + &lt;span style=&quot;color: #c18401;&quot;&gt;string&lt;/span&gt;.Join(&lt;span style=&quot;color: #50a14f;&quot;&gt;&quot;, &quot;&lt;/span&gt;, commonElements));
        &lt;span style=&quot;color: #a0a1a7; font-style: italic;&quot;&gt;// Output: Common Elements: 3, 4, 5&lt;/span&gt;
    }
}&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p class=&quot;break-words&quot; style=&quot;white-space-collapse: preserve;&quot;&gt;In this code:&lt;/p&gt;
&lt;ul class=&quot;marker:text-secondary&quot;&gt;
&lt;li class=&quot;break-words&quot;&gt;&lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;list1&lt;/span&gt; has numbers 1 through 5.&lt;/li&gt;
&lt;li class=&quot;break-words&quot;&gt;&lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;list2&lt;/span&gt; has numbers 3 through 7.&lt;/li&gt;
&lt;li class=&quot;break-words&quot;&gt;&lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;Intersect&lt;/span&gt; gives us 3, 4, and 5—the numbers that appear in both lists.&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;break-words&quot; style=&quot;white-space-collapse: preserve;&quot;&gt;It’s that simple! For basic types like integers or strings, &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;Intersect&lt;/span&gt; works out of the box because C# already knows how to compare them.&lt;/p&gt;
&lt;h2&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2&gt;Using Intersect with Custom Objects&lt;/h2&gt;
&lt;p class=&quot;break-words&quot; style=&quot;white-space-collapse: preserve;&quot;&gt;Things get a little trickier when you’re dealing with your own custom objects, like a &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;Student&lt;/span&gt; class. By default, C# compares objects by their references (think of it as their memory address), not their actual values. So, if you have two &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;Student&lt;/span&gt; objects with the same name but stored in different places in memory, &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;Intersect&lt;/span&gt; won’t see them as equal—unless we teach it how.&lt;/p&gt;
&lt;p class=&quot;break-words&quot; style=&quot;white-space-collapse: preserve;&quot;&gt;Let’s define a &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;Student&lt;/span&gt; class:&lt;/p&gt;
&lt;div class=&quot;not-prose&quot;&gt;&lt;div class=&quot;relative [&amp;amp;_div+div]:!mt-0 mt-6 mb-10 -mx-4 -mr-2 @md:-mr-4&quot;&gt;&lt;div style=&quot;border-radius: 0px 0px 12px 12px; font-size: 0.9em; line-height: 1.5em; margin-top: 0px; overflow-x: auto; padding: 16px;&quot;&gt;&lt;code style=&quot;font-size: inherit; line-height: inherit; white-space: pre;&quot;&gt;&lt;span style=&quot;color: #a626a4;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #a626a4;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #4078f2;&quot;&gt;Student&lt;/span&gt;
{
    &lt;span style=&quot;color: #a626a4;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #c18401;&quot;&gt;int&lt;/span&gt; Id { &lt;span style=&quot;color: #a626a4;&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: #a626a4;&quot;&gt;set&lt;/span&gt;; }
    &lt;span style=&quot;color: #a626a4;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #c18401;&quot;&gt;string&lt;/span&gt; Name { &lt;span style=&quot;color: #a626a4;&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: #a626a4;&quot;&gt;set&lt;/span&gt;; }
}&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p class=&quot;break-words&quot; style=&quot;white-space-collapse: preserve;&quot;&gt;Now, suppose we have two lists of students, and we want to find the ones in both lists based on their &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;Id&lt;/span&gt;. Here’s where a custom comparer comes in. We’ll create a &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;StudentComparer&lt;/span&gt; class to tell &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;Intersect&lt;/span&gt; to compare students by their &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;Id&lt;/span&gt;:&lt;/p&gt;
&lt;div class=&quot;not-prose&quot;&gt;&lt;div class=&quot;relative [&amp;amp;_div+div]:!mt-0 mt-6 mb-10 -mx-4 -mr-2 @md:-mr-4&quot;&gt;&lt;div style=&quot;border-radius: 0px 0px 12px 12px; font-size: 0.9em; line-height: 1.5em; margin-top: 0px; overflow-x: auto; padding: 16px;&quot;&gt;&lt;code style=&quot;font-size: inherit; line-height: inherit; white-space: pre;&quot;&gt;&lt;span style=&quot;color: #a626a4;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #a626a4;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #4078f2;&quot;&gt;StudentComparer&lt;/span&gt; : &lt;span style=&quot;color: #4078f2;&quot;&gt;IEqualityComparer&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: #4078f2;&quot;&gt;Student&lt;/span&gt;&amp;gt;
{
    &lt;span class=&quot;hljs-function&quot; style=&quot;color: #a626a4;&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;hljs-function&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hljs-function&quot; style=&quot;color: #c18401;&quot;&gt;bool&lt;/span&gt;&lt;span class=&quot;hljs-function&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hljs-function&quot; style=&quot;color: #4078f2;&quot;&gt;Equals&lt;/span&gt;&lt;span class=&quot;hljs-function&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hljs-function hljs-params&quot;&gt;Student x, Student y&lt;/span&gt;&lt;span class=&quot;hljs-function&quot;&gt;)&lt;/span&gt;
    {
        &lt;span style=&quot;color: #a0a1a7; font-style: italic;&quot;&gt;// Two students are equal if their IDs match&lt;/span&gt;
        &lt;span style=&quot;color: #a626a4;&quot;&gt;return&lt;/span&gt; x.Id == y.Id;
    }

    &lt;span class=&quot;hljs-function&quot; style=&quot;color: #a626a4;&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;hljs-function&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hljs-function&quot; style=&quot;color: #c18401;&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;hljs-function&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hljs-function&quot; style=&quot;color: #4078f2;&quot;&gt;GetHashCode&lt;/span&gt;&lt;span class=&quot;hljs-function&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hljs-function hljs-params&quot;&gt;Student obj&lt;/span&gt;&lt;span class=&quot;hljs-function&quot;&gt;)&lt;/span&gt;
    {
        &lt;span style=&quot;color: #a0a1a7; font-style: italic;&quot;&gt;// Generate a hash code based on the ID&lt;/span&gt;
        &lt;span style=&quot;color: #a626a4;&quot;&gt;return&lt;/span&gt; obj.Id.GetHashCode();
    }
}&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p class=&quot;break-words&quot; style=&quot;white-space-collapse: preserve;&quot;&gt;With our comparer ready, let’s use &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;Intersect&lt;/span&gt;:&lt;/p&gt;
&lt;div class=&quot;not-prose&quot;&gt;&lt;div class=&quot;relative [&amp;amp;_div+div]:!mt-0 mt-6 mb-10 -mx-4 -mr-2 @md:-mr-4&quot;&gt;&lt;div style=&quot;border-radius: 0px 0px 12px 12px; font-size: 0.9em; line-height: 1.5em; margin-top: 0px; overflow-x: auto; padding: 16px;&quot;&gt;&lt;code style=&quot;font-size: inherit; line-height: inherit; white-space: pre;&quot;&gt;List&amp;lt;Student&amp;gt; students1 = &lt;span style=&quot;color: #a626a4;&quot;&gt;new&lt;/span&gt; List&amp;lt;Student&amp;gt;
{
    &lt;span style=&quot;color: #a626a4;&quot;&gt;new&lt;/span&gt; Student { Id = &lt;span style=&quot;color: #986801;&quot;&gt;1&lt;/span&gt;, Name = &lt;span style=&quot;color: #50a14f;&quot;&gt;&quot;Alice&quot;&lt;/span&gt; },
    &lt;span style=&quot;color: #a626a4;&quot;&gt;new&lt;/span&gt; Student { Id = &lt;span style=&quot;color: #986801;&quot;&gt;2&lt;/span&gt;, Name = &lt;span style=&quot;color: #50a14f;&quot;&gt;&quot;Bob&quot;&lt;/span&gt; },
    &lt;span style=&quot;color: #a626a4;&quot;&gt;new&lt;/span&gt; Student { Id = &lt;span style=&quot;color: #986801;&quot;&gt;3&lt;/span&gt;, Name = &lt;span style=&quot;color: #50a14f;&quot;&gt;&quot;Charlie&quot;&lt;/span&gt; }
};

List&amp;lt;Student&amp;gt; students2 = &lt;span style=&quot;color: #a626a4;&quot;&gt;new&lt;/span&gt; List&amp;lt;Student&amp;gt;
{
    &lt;span style=&quot;color: #a626a4;&quot;&gt;new&lt;/span&gt; Student { Id = &lt;span style=&quot;color: #986801;&quot;&gt;2&lt;/span&gt;, Name = &lt;span style=&quot;color: #50a14f;&quot;&gt;&quot;Bob&quot;&lt;/span&gt; },
    &lt;span style=&quot;color: #a626a4;&quot;&gt;new&lt;/span&gt; Student { Id = &lt;span style=&quot;color: #986801;&quot;&gt;3&lt;/span&gt;, Name = &lt;span style=&quot;color: #50a14f;&quot;&gt;&quot;Charlie&quot;&lt;/span&gt; },
    &lt;span style=&quot;color: #a626a4;&quot;&gt;new&lt;/span&gt; Student { Id = &lt;span style=&quot;color: #986801;&quot;&gt;4&lt;/span&gt;, Name = &lt;span style=&quot;color: #50a14f;&quot;&gt;&quot;David&quot;&lt;/span&gt; }
};

&lt;span style=&quot;color: #a0a1a7; font-style: italic;&quot;&gt;// Find common students using the custom comparer&lt;/span&gt;
&lt;span style=&quot;color: #a626a4;&quot;&gt;var&lt;/span&gt; commonStudents = students1.Intersect(students2, &lt;span style=&quot;color: #a626a4;&quot;&gt;new&lt;/span&gt; StudentComparer());

&lt;span style=&quot;color: #a626a4;&quot;&gt;foreach&lt;/span&gt; (&lt;span style=&quot;color: #a626a4;&quot;&gt;var&lt;/span&gt; student &lt;span style=&quot;color: #a626a4;&quot;&gt;in&lt;/span&gt; commonStudents)
{
    Console.WriteLine(&lt;span style=&quot;color: #50a14f;&quot;&gt;$&quot;ID: &lt;/span&gt;&lt;span style=&quot;color: #e45649;&quot;&gt;{student.Id}&lt;/span&gt;&lt;span style=&quot;color: #50a14f;&quot;&gt;, Name: &lt;/span&gt;&lt;span style=&quot;color: #e45649;&quot;&gt;{student.Name}&lt;/span&gt;&lt;span style=&quot;color: #50a14f;&quot;&gt;&quot;&lt;/span&gt;);
}
&lt;span style=&quot;color: #a0a1a7; font-style: italic;&quot;&gt;// Output:&lt;/span&gt;
&lt;span style=&quot;color: #a0a1a7; font-style: italic;&quot;&gt;// ID: 2, Name: Bob&lt;/span&gt;
&lt;span style=&quot;color: #a0a1a7; font-style: italic;&quot;&gt;// ID: 3, Name: Charlie&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p class=&quot;break-words&quot; style=&quot;white-space-collapse: preserve;&quot;&gt;Here:&lt;/p&gt;
&lt;ul class=&quot;marker:text-secondary&quot;&gt;
&lt;li class=&quot;break-words&quot;&gt;&lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;students1&lt;/span&gt; and &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;students2&lt;/span&gt; share students with IDs 2 and 3.&lt;/li&gt;
&lt;li class=&quot;break-words&quot;&gt;The &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;StudentComparer&lt;/span&gt; ensures &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;Intersect&lt;/span&gt; matches them by &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;Id&lt;/span&gt;, not memory location.&lt;/li&gt;
&lt;li class=&quot;break-words&quot;&gt;We get Bob and Charlie as the result—exactly what we wanted!&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Performance: Why Intersect Shines&lt;/h2&gt;
&lt;p class=&quot;break-words&quot; style=&quot;white-space-collapse: preserve;&quot;&gt;One reason to love &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;Intersect&lt;/span&gt; is its speed. Under the hood, it’s optimized to use a set-based approach, which is much faster than writing your own loops, especially for big lists. It’s like having a super-smart assistant who can instantly spot matches.&lt;/p&gt;
&lt;p class=&quot;break-words&quot; style=&quot;white-space-collapse: preserve;&quot;&gt;For even better performance, try using &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;HashSet&amp;lt;T&amp;gt;&lt;/span&gt; instead of &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;List&amp;lt;T&amp;gt;&lt;/span&gt; when working with large datasets. A &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;HashSet&lt;/span&gt; is built for quick lookups, making &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;Intersect&lt;/span&gt; run like lightning. Here’s a tip: if you’re dealing with thousands of items, converting your lists to hash sets first can save you serious time.&lt;/p&gt;
&lt;h2&gt;Handling Null Values Like a Pro&lt;/h2&gt;
&lt;p class=&quot;break-words&quot; style=&quot;white-space-collapse: preserve;&quot;&gt;In real-world coding, you’ll often run into null values—lists that haven’t been initialized or data that’s missing. If you don’t handle these, &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;Intersect&lt;/span&gt; can throw a nasty null reference exception and crash your program. Let’s make our code bulletproof by adding null checks.&lt;/p&gt;
&lt;p class=&quot;break-words&quot; style=&quot;white-space-collapse: preserve;&quot;&gt;Here’s an example where one list might be null:&lt;/p&gt;
&lt;div class=&quot;not-prose&quot;&gt;&lt;div class=&quot;relative [&amp;amp;_div+div]:!mt-0 mt-6 mb-10 -mx-4 -mr-2 @md:-mr-4&quot;&gt;&lt;div style=&quot;border-radius: 0px 0px 12px 12px; font-size: 0.9em; line-height: 1.5em; margin-top: 0px; overflow-x: auto; padding: 16px;&quot;&gt;&lt;code style=&quot;font-size: inherit; line-height: inherit; white-space: pre;&quot;&gt;List&amp;lt;Student&amp;gt; a = &lt;span style=&quot;color: #0184bb;&quot;&gt;null&lt;/span&gt;;
List&amp;lt;Student&amp;gt; b = &lt;span style=&quot;color: #a626a4;&quot;&gt;new&lt;/span&gt; List&amp;lt;Student&amp;gt;
{
    &lt;span style=&quot;color: #a626a4;&quot;&gt;new&lt;/span&gt; Student { Id = &lt;span style=&quot;color: #986801;&quot;&gt;10&lt;/span&gt;, Name = &lt;span style=&quot;color: #50a14f;&quot;&gt;&quot;test&quot;&lt;/span&gt; }
};

&lt;span style=&quot;color: #a0a1a7; font-style: italic;&quot;&gt;// Check if both lists are null&lt;/span&gt;
&lt;span style=&quot;color: #a626a4;&quot;&gt;if&lt;/span&gt; (a == &lt;span style=&quot;color: #0184bb;&quot;&gt;null&lt;/span&gt; &amp;amp;&amp;amp; b == &lt;span style=&quot;color: #0184bb;&quot;&gt;null&lt;/span&gt;)
{
    Console.WriteLine(&lt;span style=&quot;color: #50a14f;&quot;&gt;&quot;Both lists are null. Nothing to process.&quot;&lt;/span&gt;);
    &lt;span style=&quot;color: #a626a4;&quot;&gt;return&lt;/span&gt;;
}

&lt;span style=&quot;color: #a0a1a7; font-style: italic;&quot;&gt;// Safely intersect with null handling&lt;/span&gt;
&lt;span style=&quot;color: #a626a4;&quot;&gt;var&lt;/span&gt; c = a?.Intersect(b, &lt;span style=&quot;color: #a626a4;&quot;&gt;new&lt;/span&gt; StudentComparer()) ?? b ?? &lt;span style=&quot;color: #a626a4;&quot;&gt;new&lt;/span&gt; List&amp;lt;Student&amp;gt;();
&lt;span style=&quot;color: #a626a4;&quot;&gt;var&lt;/span&gt; d = b?.Intersect(a ?? &lt;span style=&quot;color: #a626a4;&quot;&gt;new&lt;/span&gt; List&amp;lt;Student&amp;gt;(), &lt;span style=&quot;color: #a626a4;&quot;&gt;new&lt;/span&gt; StudentComparer()) ?? &lt;span style=&quot;color: #a626a4;&quot;&gt;new&lt;/span&gt; List&amp;lt;Student&amp;gt;();

&lt;span style=&quot;color: #a0a1a7; font-style: italic;&quot;&gt;// Show the results&lt;/span&gt;
Console.WriteLine(&lt;span style=&quot;color: #50a14f;&quot;&gt;&quot;Common elements in &#39;c&#39;:&quot;&lt;/span&gt;);
&lt;span style=&quot;color: #a626a4;&quot;&gt;foreach&lt;/span&gt; (&lt;span style=&quot;color: #a626a4;&quot;&gt;var&lt;/span&gt; item &lt;span style=&quot;color: #a626a4;&quot;&gt;in&lt;/span&gt; c)
{
    Console.WriteLine(&lt;span style=&quot;color: #50a14f;&quot;&gt;$&quot;ID: &lt;/span&gt;&lt;span style=&quot;color: #e45649;&quot;&gt;{item.Id}&lt;/span&gt;&lt;span style=&quot;color: #50a14f;&quot;&gt;, Name: &lt;/span&gt;&lt;span style=&quot;color: #e45649;&quot;&gt;{item.Name}&lt;/span&gt;&lt;span style=&quot;color: #50a14f;&quot;&gt;&quot;&lt;/span&gt;);
}

Console.WriteLine(&lt;span style=&quot;color: #50a14f;&quot;&gt;&quot;\nCommon elements in &#39;d&#39;:&quot;&lt;/span&gt;);
&lt;span style=&quot;color: #a626a4;&quot;&gt;foreach&lt;/span&gt; (&lt;span style=&quot;color: #a626a4;&quot;&gt;var&lt;/span&gt; item &lt;span style=&quot;color: #a626a4;&quot;&gt;in&lt;/span&gt; d)
{
    Console.WriteLine(&lt;span style=&quot;color: #50a14f;&quot;&gt;$&quot;ID: &lt;/span&gt;&lt;span style=&quot;color: #e45649;&quot;&gt;{item.Id}&lt;/span&gt;&lt;span style=&quot;color: #50a14f;&quot;&gt;, Name: &lt;/span&gt;&lt;span style=&quot;color: #e45649;&quot;&gt;{item.Name}&lt;/span&gt;&lt;span style=&quot;color: #50a14f;&quot;&gt;&quot;&lt;/span&gt;);
}
&lt;span style=&quot;color: #a0a1a7; font-style: italic;&quot;&gt;// Output:&lt;/span&gt;
&lt;span style=&quot;color: #a0a1a7; font-style: italic;&quot;&gt;// Common elements in &#39;c&#39;:&lt;/span&gt;
&lt;span style=&quot;color: #a0a1a7; font-style: italic;&quot;&gt;// ID: 10, Name: test&lt;/span&gt;
&lt;span style=&quot;color: #a0a1a7; font-style: italic;&quot;&gt;//&lt;/span&gt;
&lt;span style=&quot;color: #a0a1a7; font-style: italic;&quot;&gt;// Common elements in &#39;d&#39;:&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p class=&quot;break-words&quot; style=&quot;white-space-collapse: preserve;&quot;&gt;Let’s break it down:&lt;/p&gt;
&lt;ul class=&quot;marker:text-secondary&quot;&gt;
&lt;li class=&quot;break-words&quot;&gt;&lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;a&lt;/span&gt; is null, and &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;b&lt;/span&gt; has one student.&lt;/li&gt;
&lt;li class=&quot;break-words&quot;&gt;For &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;c&lt;/span&gt;: Since &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;a&lt;/span&gt; is null, &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;a?.Intersect(...)&lt;/span&gt; is null, so &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;c&lt;/span&gt; falls back to &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;b&lt;/span&gt; (the &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;?? b&lt;/span&gt; part), giving us the student with ID 10.&lt;/li&gt;
&lt;li class=&quot;break-words&quot;&gt;For &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;d&lt;/span&gt;: &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;b.Intersect(a ?? new List&amp;lt;Student&amp;gt;())&lt;/span&gt; means intersecting &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;b&lt;/span&gt; with an empty list (since &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;a&lt;/span&gt; is null), which results in nothing.&lt;/li&gt;
&lt;li class=&quot;break-words&quot;&gt;The &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;?.&lt;/span&gt; and &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;??&lt;/span&gt; operators keep everything safe and crash-free.&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;break-words&quot; style=&quot;white-space-collapse: preserve;&quot;&gt;This approach ensures your code stays robust, even when data goes missing.&lt;/p&gt;
&lt;h2&gt;Wrapping It Up&lt;/h2&gt;
&lt;p class=&quot;break-words&quot; style=&quot;white-space-collapse: preserve;&quot;&gt;We’ve covered a lot about &lt;b&gt;&lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;Intersect&lt;/span&gt; &lt;/b&gt;in C#! Here’s what we’ve learned:&lt;/p&gt;
&lt;ul class=&quot;marker:text-secondary&quot;&gt;
&lt;li class=&quot;break-words&quot;&gt;It’s a LINQ method that finds common elements between two collections.&lt;/li&gt;
&lt;li class=&quot;break-words&quot;&gt;It works easily with simple types like numbers or strings.&lt;/li&gt;
&lt;li class=&quot;break-words&quot;&gt;For custom objects, you need a comparer to define what “equal” means.&lt;/li&gt;
&lt;li class=&quot;break-words&quot;&gt;It’s fast, especially with hash-based collections like &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;HashSet&lt;/span&gt;.&lt;/li&gt;
&lt;li class=&quot;break-words&quot;&gt;Null handling with &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;?.&lt;/span&gt; and &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;??&lt;/span&gt; makes your code reliable.&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;break-words&quot; style=&quot;white-space-collapse: preserve;&quot;&gt;&lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;Intersect&lt;/span&gt; is a powerful little tool that can simplify your code and save you time. Whether you’re comparing lists of numbers or complex objects, it’s got your back.&lt;/p&gt;
&lt;h2&gt;Try It Yourself!&lt;/h2&gt;
&lt;p class=&quot;break-words&quot; style=&quot;white-space-collapse: preserve;&quot;&gt;Now that you’ve seen &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;Intersect&lt;/span&gt; in action, why not give it a spin in your next project? Play with the examples above, tweak them, and see how they fit your needs. Have a cool trick or question about &lt;span class=&quot;text-sm px-1 rounded-sm !font-mono bg-sunset/10 text-rust dark:bg-dawn/10 dark:text-dawn&quot;&gt;Intersect&lt;/span&gt;? Drop it in the comments—I’d love to hear from you!&lt;/p&gt;
&lt;p class=&quot;break-words&quot; style=&quot;white-space-collapse: preserve;&quot;&gt;Happy coding!&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://chamarairesh.blogspot.com/feeds/2438317989944306846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2491204017359768357/2438317989944306846' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/2438317989944306846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/2438317989944306846'/><link rel='alternate' type='text/html' href='http://chamarairesh.blogspot.com/2025/03/mastering-intersect-method-in-c.html' title='Mastering the Intersect Method in C#: A Beginner&#39;s Guide'/><author><name>Chamara Iresh</name><uri>http://www.blogger.com/profile/04695612052896290711</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//3.bp.blogspot.com/-Wfsm4TxTxO0/XiPTZjrj-cI/AAAAAAAAvCw/ONKFubGdBw41mPb1Xp89d9eMkvXaV0TkQCK4BGAYYCw/s220/20190817_151917.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2491204017359768357.post-15500304176342618</id><published>2025-02-03T21:09:00.000+09:00</published><updated>2025-02-03T21:09:36.049+09:00</updated><title type='text'>Virtual Tables in Microsoft Dataverse   - CRM Online</title><content type='html'>&lt;p&gt;&lt;em style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px;&quot;&gt;Connect External Data in Real-Time Without Duplication&lt;/em&gt;&lt;/p&gt;&lt;hr style=&quot;border: none; color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; height: 1px; margin: calc(var(--ds-md-zoom)*12px)0;&quot; /&gt;&lt;p style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; line-height: var(--ds-md-line-height); margin: calc(var(--ds-md-zoom)*12px)0;&quot;&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; line-height: var(--ds-md-line-height); margin: calc(var(--ds-md-zoom)*12px)0;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;Imagine needing to view customer orders stored in an ERP system directly within Microsoft Dataverse—without importing gigabytes of data. Or pulling live inventory numbers from a SQL database into your CRM to empower sales teams with real-time insights. This isn’t a futuristic dream; it’s exactly what&amp;nbsp;&lt;strong&gt;Virtual Tables&lt;/strong&gt;&amp;nbsp;(formerly known as Virtual Entities) enable today.&lt;/p&gt;&lt;p style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; line-height: var(--ds-md-line-height); margin: calc(var(--ds-md-zoom)*12px)0;&quot;&gt;Virtual Tables act as a dynamic bridge between Microsoft Dataverse and external systems, allowing you to interact with external data as if it were natively stored in your CRM. No duplication, no manual syncing, and no storage costs—just seamless, real-time access.&lt;/p&gt;&lt;p style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; line-height: var(--ds-md-line-height); margin: calc(var(--ds-md-zoom)*12px)0;&quot;&gt;In this guide, we’ll explore how Virtual Tables work, when to use them, and how to implement them step-by-step in your Dataverse environment.&lt;/p&gt;&lt;p style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; line-height: var(--ds-md-line-height); margin: calc(var(--ds-md-zoom)*12px)0;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr style=&quot;border: none; color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; height: 1px; margin: calc(var(--ds-md-zoom)*12px)0;&quot; /&gt;&lt;p style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; line-height: var(--ds-md-line-height); margin: calc(var(--ds-md-zoom)*12px)0;&quot;&gt;&lt;strong&gt;What Are Virtual Tables?&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; line-height: var(--ds-md-line-height); margin: calc(var(--ds-md-zoom)*12px)0;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;A Virtual Table is a special type of table in Microsoft Dataverse that connects to an external data source—like an ERP system, SQL database, or REST API. Unlike standard tables, Virtual Tables don’t store data locally. Instead, they fetch and display data on-demand from the external system, ensuring you always see the latest information.&lt;/p&gt;&lt;p style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; line-height: var(--ds-md-line-height); margin: calc(var(--ds-md-zoom)*12px)0;&quot;&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; line-height: var(--ds-md-line-height); margin: calc(var(--ds-md-zoom)*12px)0;&quot;&gt;&lt;strong&gt;Key Benefits of Virtual Tables&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: var(--ds-md-font-size);&quot;&gt;Eliminate Data Redundancy&lt;/strong&gt;&lt;span style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: var(--ds-md-font-size); font-weight: bold;&quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: var(--ds-md-font-size);&quot;&gt;Access external data without duplicating it in Dataverse.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: var(--ds-md-font-size);&quot;&gt;Real-Time Insights&lt;/strong&gt;&lt;span style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: var(--ds-md-font-size);&quot;&gt;&lt;b&gt;:&amp;nbsp;&lt;/b&gt;View live data from ERP, SQL, or web services instantly&lt;b&gt;.&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: var(--ds-md-font-size);&quot;&gt;Cost Efficiency&lt;/strong&gt;&lt;span style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: var(--ds-md-font-size);&quot;&gt;&lt;b&gt;:&amp;nbsp;&lt;/b&gt;Reduce storage costs by avoiding data imports.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: var(--ds-md-font-size);&quot;&gt;Seamless User Experience&lt;/strong&gt;&lt;span style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: var(--ds-md-font-size);&quot;&gt;&lt;b&gt;:&amp;nbsp;&lt;/b&gt;Use Virtual Tables in model-driven apps, Canvas apps, and Power Automate workflows just like native tables.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px;&quot;&gt;Flexible Integration&lt;/strong&gt;&lt;span style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px;&quot;&gt;&lt;b&gt;:&amp;nbsp;&lt;/b&gt;Support for OData v4 APIs, SQL databases, and custom data providers.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; margin: calc(var(--ds-md-zoom)*12px)0; padding-left: calc(var(--ds-md-zoom)*24px);&quot;&gt;&lt;li style=&quot;margin-top: 4px;&quot;&gt;&lt;strong style=&quot;font-size: 16.002px;&quot;&gt;When Should You Use Virtual Tables?&lt;/strong&gt;&lt;p style=&quot;font-size: var(--ds-md-font-size); line-height: var(--ds-md-line-height); margin-bottom: 0px !important; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; line-height: var(--ds-md-line-height); margin: calc(var(--ds-md-zoom)*12px)0;&quot;&gt;Virtual Tables shine in scenarios where:&lt;/p&gt;&lt;p style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; line-height: var(--ds-md-line-height); margin: calc(var(--ds-md-zoom)*12px)0;&quot;&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;strong style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;Data Resides Externally&lt;/strong&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;: Your ERP, legacy system, or third-party API holds critical data that needs to be accessed within Dataverse.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;Real-Time Access Is Essential&lt;/strong&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;: Stale data isn’t an option (e.g., live inventory, pricing, or order status).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;Large Datasets Are Involved&lt;/strong&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;: Importing massive data into Dataverse is impractical or costly.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;Security or Compliance Constraints Exist&lt;/strong&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;: Data must remain in its source system due to governance policies.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; line-height: var(--ds-md-line-height); margin: calc(var(--ds-md-zoom)*12px)0;&quot;&gt;&lt;em style=&quot;font-size: 16.002px;&quot;&gt;Example Use Case&lt;/em&gt;&lt;span style=&quot;font-size: 16.002px;&quot;&gt;:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; line-height: var(--ds-md-line-height); margin: calc(var(--ds-md-zoom)*12px)0;&quot;&gt;A manufacturing company uses Virtual Tables to connect Dataverse to their on-premises SAP ERP system. Sales teams now view real-time production schedules and inventory levels in CRM, enabling accurate delivery promises without data duplication.&lt;/p&gt;&lt;p style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; line-height: var(--ds-md-line-height); margin: calc(var(--ds-md-zoom)*12px)0;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr style=&quot;border: none; color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; height: 1px; margin: calc(var(--ds-md-zoom)*12px)0;&quot; /&gt;&lt;p style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; line-height: var(--ds-md-line-height); margin: calc(var(--ds-md-zoom)*12px)0;&quot;&gt;&lt;strong&gt;How Do Virtual Tables Work?&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; line-height: var(--ds-md-line-height); margin: calc(var(--ds-md-zoom)*12px)0;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;Virtual Tables rely on a&amp;nbsp;&lt;strong&gt;data provider&lt;/strong&gt;&amp;nbsp;to communicate with the external system. Here’s the workflow:&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;strong style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;Query&lt;/strong&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;: A user or app requests data from the Virtual Table (e.g., “Show all open orders”).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;Fetch&lt;/strong&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;: Dataverse sends the query to the external data provider (e.g., an OData API or SQL connector).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;Return&lt;/strong&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;: The provider retrieves the data and sends it back to Dataverse.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;Display&lt;/strong&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;: The data appears in Dataverse as if it were a native table.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; line-height: var(--ds-md-line-height); margin: calc(var(--ds-md-zoom)*12px)0;&quot;&gt;By default, Virtual Tables are read-only. However, you can enable&amp;nbsp;&lt;strong&gt;create, update, and delete (CRUD) operations&lt;/strong&gt;&amp;nbsp;if the external system supports them.&lt;/p&gt;&lt;p style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; line-height: var(--ds-md-line-height); margin: calc(var(--ds-md-zoom)*12px)0;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr style=&quot;border: none; color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; height: 1px; margin: calc(var(--ds-md-zoom)*12px)0;&quot; /&gt;&lt;p style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; line-height: var(--ds-md-line-height); margin: calc(var(--ds-md-zoom)*12px)0;&quot;&gt;&lt;strong&gt;Implementing Virtual Tables: A Step-by-Step Guide&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; line-height: var(--ds-md-line-height); margin: calc(var(--ds-md-zoom)*12px)0;&quot;&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; line-height: var(--ds-md-line-height); margin: calc(var(--ds-md-zoom)*12px)0;&quot;&gt;&lt;strong&gt;Step 1: Prepare Your External Data Source&lt;/strong&gt;&lt;/p&gt;&lt;span style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: var(--ds-md-font-size);&quot;&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;p style=&quot;font-size: var(--ds-md-font-size); line-height: var(--ds-md-line-height); margin-bottom: 0px !important; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;font-weight: bold;&quot;&gt;OData v4 APIs&lt;/strong&gt;&lt;b&gt;: &lt;/b&gt;Ensure your API endpoint is accessible and returns data in the correct format.&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: bold;&quot;&gt;&lt;p style=&quot;font-size: var(--ds-md-font-size); line-height: var(--ds-md-line-height); margin-bottom: 0px !important; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;SQL Databases&lt;/strong&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size); font-weight: 400;&quot;&gt;: Whitelist Dataverse IPs or set up secure connectivity (e.g., Azure Private Link).&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: bold;&quot;&gt;&lt;p style=&quot;font-size: var(--ds-md-font-size); line-height: var(--ds-md-line-height); margin-bottom: 0px !important; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size); font-weight: 400;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;font-size: 16.002px; font-weight: 400; margin: calc(var(--ds-md-zoom)*12px)0; padding-left: calc(var(--ds-md-zoom)*24px);&quot;&gt;&lt;li style=&quot;margin-top: 4px;&quot;&gt;&lt;p style=&quot;font-size: var(--ds-md-font-size); line-height: var(--ds-md-line-height); margin-bottom: 0px !important; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;strong&gt;Custom Providers&lt;/strong&gt;: Develop a custom connector if your source isn’t OData or SQL.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;ul style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; margin: calc(var(--ds-md-zoom)*12px)0; padding-left: calc(var(--ds-md-zoom)*24px); text-align: left;&quot;&gt;&lt;li&gt;&lt;p style=&quot;font-size: var(--ds-md-font-size); line-height: var(--ds-md-line-height); margin-bottom: 0px !important; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; line-height: var(--ds-md-line-height); margin: calc(var(--ds-md-zoom)*12px)0;&quot;&gt;&lt;strong&gt;Pro Tip&lt;/strong&gt;: Use tools like Postman to validate your API endpoints before connecting them to Dataverse.&lt;/p&gt;&lt;p style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; line-height: var(--ds-md-line-height); margin: calc(var(--ds-md-zoom)*12px)0;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; line-height: var(--ds-md-line-height); margin: calc(var(--ds-md-zoom)*12px)0;&quot;&gt;&lt;strong&gt;Step 2: Register the Data Source in Dataverse&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; line-height: var(--ds-md-line-height); margin: calc(var(--ds-md-zoom)*12px)0;&quot;&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;Navigate to&amp;nbsp;&lt;/span&gt;&lt;strong style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;Power Apps&lt;/strong&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;&amp;nbsp;&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;strong style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;Dataverse&lt;/strong&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;&amp;nbsp;&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;strong style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;Tables&lt;/strong&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;Under&amp;nbsp;&lt;/span&gt;&lt;strong style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;Settings (⚙)&lt;/strong&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;, select&amp;nbsp;&lt;/span&gt;&lt;strong style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;Advanced Settings&lt;/strong&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;&amp;nbsp;&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;strong style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;Virtual Entity Data Sources&lt;/strong&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;Click&amp;nbsp;&lt;/span&gt;&lt;strong style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;New&lt;/strong&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;&amp;nbsp;and choose your provider (e.g., OData v4).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;Enter connection details (URL, authentication) and test the connection.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; line-height: var(--ds-md-line-height); margin: calc(var(--ds-md-zoom)*12px)0;&quot;&gt;&lt;strong&gt;Step 3: Create and Map the Virtual Table&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; line-height: var(--ds-md-line-height); margin: calc(var(--ds-md-zoom)*12px)0;&quot;&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;In&amp;nbsp;&lt;/span&gt;&lt;strong style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;Dataverse&lt;/strong&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;, click&amp;nbsp;&lt;/span&gt;&lt;strong style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;+ New Table&lt;/strong&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;&amp;nbsp;and toggle&amp;nbsp;&lt;/span&gt;&lt;strong style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;Virtual Table&lt;/strong&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;Select your registered data source.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;Define the schema:&lt;/span&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;Map the external system’s&amp;nbsp;&lt;/span&gt;&lt;strong style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;primary key&lt;/strong&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;&amp;nbsp;to Dataverse.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;Add fields (e.g., “Order Number,” “Status”) and match them to the source’s columns.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;Publish the table.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ul style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; margin: calc(var(--ds-md-zoom)*12px)0; padding-left: calc(var(--ds-md-zoom)*24px); text-align: left;&quot;&gt;&lt;li&gt;&lt;strong&gt;Step 4: Test and Deploy&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Open the Virtual Table in Dataverse to verify data appears.&lt;/li&gt;&lt;li&gt;Embed it in a model-driven app or use it in a Power Automate flow.&lt;/li&gt;&lt;li&gt;Test CRUD operations if enabled.&lt;/li&gt;&lt;/ul&gt;&lt;hr style=&quot;border: none; color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; height: 1px; margin: calc(var(--ds-md-zoom)*12px)0;&quot; /&gt;&lt;p style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; line-height: var(--ds-md-line-height); margin: calc(var(--ds-md-zoom)*12px)0;&quot;&gt;&lt;strong&gt;Common Challenges and Solutions&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;color: #404040; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; line-height: var(--ds-md-line-height); margin: calc(var(--ds-md-zoom)*12px)0; text-align: left;&quot;&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;strong style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;No Data Displayed?&lt;/strong&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;Confirm the data source URL is correct.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;Check for authentication errors (e.g., expired tokens).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;Verify field mappings (e.g., primary key matches).&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;strong style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;Read-Only Limitations&lt;/strong&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;Most providers default to read-only. Enable writes by configuring the external system to handle POST/PATCH requests.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;strong style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;Performance Lag&lt;/strong&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;Optimize API/database queries (e.g., add filters or indexing).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;Use pagination for large datasets.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;strong style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;Authentication Issues&lt;/strong&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;Use Azure Active Directory (AAD) for OAuth-secured APIs.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: var(--ds-md-font-size);&quot;&gt;For SQL, leverage Azure SQL’s firewall rules or managed identities.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;&lt;div&gt;References :&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/power-apps/developer/data-platform/virtual-entities/get-started-ve&quot; style=&quot;font-size: 16.002px;&quot;&gt;Get started with virtual tables (entities) (Microsoft Dataverse) - Power Apps | Microsoft Learn&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/power-apps/maker/data-platform/create-virtual-tables-using-connectors?tabs=sql&quot;&gt;Create virtual tables using virtual connectors (Microsoft Dataverse) - Power Apps | Microsoft Learn&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://chamarairesh.blogspot.com/feeds/15500304176342618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2491204017359768357/15500304176342618' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/15500304176342618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/15500304176342618'/><link rel='alternate' type='text/html' href='http://chamarairesh.blogspot.com/2025/02/virtual-tables-in-microsoft-dataverse.html' title='Virtual Tables in Microsoft Dataverse   - CRM Online'/><author><name>Chamara Iresh</name><uri>http://www.blogger.com/profile/04695612052896290711</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//3.bp.blogspot.com/-Wfsm4TxTxO0/XiPTZjrj-cI/AAAAAAAAvCw/ONKFubGdBw41mPb1Xp89d9eMkvXaV0TkQCK4BGAYYCw/s220/20190817_151917.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2491204017359768357.post-8491616237340349573</id><published>2025-01-24T04:06:00.005+09:00</published><updated>2025-01-24T04:06:27.330+09:00</updated><title type='text'>How to Integrate Customer Insights with Microsoft Dynamics 365 CRM Online</title><content type='html'>&lt;p&gt;&amp;nbsp;In today’s customer-centric world, integrating Customer Insights with Microsoft Dynamics 365 CRM (Customer Relationship Management) Online enables organizations to unlock the power of data-driven decisions. By unifying disparate data sources, businesses can deliver personalized experiences and build stronger customer relationships. Here&#39;s a step-by-step guide to integrating Customer Insights with Dynamics 365 CRM Online and leveraging its capabilities.&lt;/p&gt;&lt;div&gt;&lt;/div&gt;&lt;h3&gt;&lt;strong&gt;What is Dynamics 365 Customer Insights?&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;Microsoft Dynamics 365 Customer Insights is a customer data platform (CDP) that consolidates customer data from various sources into a single unified profile. This helps organizations:&lt;/p&gt;&lt;ol data-spread=&quot;false&quot; start=&quot;1&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Gain a 360-degree view of customers:&lt;/strong&gt; By aggregating data from marketing, sales, service, and other channels.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Deliver personalized experiences:&lt;/strong&gt; Leverage AI and machine learning to gain actionable insights.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Optimize marketing and sales efforts:&lt;/strong&gt; By predicting customer needs and preferences.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;/div&gt;&lt;h3&gt;&lt;strong&gt;Steps to Integrate Customer Insights with Dynamics 365 CRM Online&lt;/strong&gt;&lt;/h3&gt;&lt;h4&gt;&lt;strong&gt;1. Set Up Dynamics 365 Customer Insights&lt;/strong&gt;&lt;/h4&gt;&lt;ul data-spread=&quot;false&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Provision the Customer Insights environment:&lt;/strong&gt; Log into the Microsoft Power Platform Admin Center and provision a new Customer Insights instance.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ingest data sources:&lt;/strong&gt; Import data from multiple sources like Dynamics 365, Excel files, SQL databases, or third-party apps (e.g., Salesforce, Shopify).&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Map and unify data:&lt;/strong&gt; Use the unification feature to create a single customer profile by mapping data fields and resolving duplicates.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;&lt;strong&gt;2. Enable Integration with Dynamics 365 CRM&lt;/strong&gt;&lt;/h4&gt;&lt;ul data-spread=&quot;false&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Install Dynamics 365 connectors:&lt;/strong&gt; Ensure that the Dynamics 365 Customer Insights connector is available in your environment.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Set up Power Automate flows:&lt;/strong&gt; Use Power Automate to create workflows that sync Customer Insights profiles and insights into Dynamics 365 CRM entities such as Contacts or Leads.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;&lt;strong&gt;3. Configure Customer Insights Cards in Dynamics 365 CRM&lt;/strong&gt;&lt;/h4&gt;&lt;ul data-spread=&quot;true&quot;&gt;&lt;li&gt;&lt;p&gt;Enable &lt;strong&gt;Customer Cards&lt;/strong&gt; in Dynamics 365 CRM to display real-time insights about a customer, such as:&lt;/p&gt;&lt;ul data-spread=&quot;false&quot;&gt;&lt;li&gt;&lt;p&gt;Purchase history&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Engagement levels&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Churn risk score&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Recommended next actions&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Steps to set up Customer Cards:&lt;/strong&gt;&lt;/p&gt;&lt;ol data-spread=&quot;false&quot; start=&quot;1&quot;&gt;&lt;li&gt;&lt;p&gt;Navigate to &lt;strong&gt;Settings&lt;/strong&gt; in Dynamics 365 CRM.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Go to &lt;strong&gt;Customer Insights Integration&lt;/strong&gt; and authenticate your Customer Insights environment.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Configure the fields and metrics to display within the CRM interface.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;&lt;strong&gt;4. Utilize Prebuilt AI Models&lt;/strong&gt;&lt;/h4&gt;&lt;p&gt;Customer Insights includes AI models like:&lt;/p&gt;&lt;ul data-spread=&quot;false&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Predictive churn:&lt;/strong&gt; Identifies customers at risk of leaving.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Customer lifetime value (CLV):&lt;/strong&gt; Calculates potential revenue from a customer.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Product recommendations:&lt;/strong&gt; Provides personalized suggestions based on purchase patterns.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;These insights can be directly integrated into Dynamics 365 CRM to drive smarter decision-making.&lt;/p&gt;&lt;h4&gt;&lt;strong&gt;5. Enable Real-Time Data Synchronization&lt;/strong&gt;&lt;/h4&gt;&lt;ul data-spread=&quot;false&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Set up data refresh schedules:&lt;/strong&gt; Ensure your data in Customer Insights is updated frequently.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Use Power Automate for real-time syncing:&lt;/strong&gt; Configure automated workflows to update records in Dynamics 365 CRM whenever changes occur in Customer Insights.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;&lt;strong&gt;6. Build Custom Visualizations with Power BI&lt;/strong&gt;&lt;/h4&gt;&lt;ul data-spread=&quot;false&quot;&gt;&lt;li&gt;&lt;p&gt;Use &lt;strong&gt;Power BI&lt;/strong&gt; to create rich dashboards that combine Customer Insights data with CRM data. Examples include:&lt;/p&gt;&lt;ul data-spread=&quot;false&quot;&gt;&lt;li&gt;&lt;p&gt;Customer segmentation analysis&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Sales performance metrics&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Customer journey tracking&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;&lt;strong&gt;7. Integrate with Marketing and Sales Tools&lt;/strong&gt;&lt;/h4&gt;&lt;ul data-spread=&quot;false&quot;&gt;&lt;li&gt;&lt;p&gt;Connect Customer Insights with &lt;strong&gt;Dynamics 365 Marketing&lt;/strong&gt; to deliver targeted campaigns.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Enable &lt;strong&gt;Sales Insights&lt;/strong&gt; in Dynamics 365 CRM to give sales reps actionable recommendations during customer interactions.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;/div&gt;&lt;h3&gt;&lt;strong&gt;Benefits of Integrating Customer Insights with Dynamics 365 CRM Online&lt;/strong&gt;&lt;/h3&gt;&lt;h4&gt;&lt;strong&gt;1. Centralized Data for a Unified Customer View&lt;/strong&gt;&lt;/h4&gt;&lt;p&gt;Combining Customer Insights with Dynamics 365 CRM eliminates data silos and provides a holistic view of each customer, enabling better personalization.&lt;/p&gt;&lt;h4&gt;&lt;strong&gt;2. Improved Customer Engagement&lt;/strong&gt;&lt;/h4&gt;&lt;p&gt;Personalized recommendations and insights empower sales and marketing teams to engage with customers more effectively.&lt;/p&gt;&lt;h4&gt;&lt;strong&gt;3. AI-Powered Decision Making&lt;/strong&gt;&lt;/h4&gt;&lt;p&gt;With built-in AI models, organizations can predict customer behavior, reduce churn, and maximize lifetime value.&lt;/p&gt;&lt;h4&gt;&lt;strong&gt;4. Increased Operational Efficiency&lt;/strong&gt;&lt;/h4&gt;&lt;p&gt;Automated workflows and real-time synchronization ensure that teams always have the latest data without manual intervention.&lt;/p&gt;&lt;div&gt;&lt;/div&gt;&lt;h3&gt;&lt;strong&gt;Advanced Use Cases&lt;/strong&gt;&lt;/h3&gt;&lt;h4&gt;&lt;strong&gt;1. Event-Based Customer Journeys&lt;/strong&gt;&lt;/h4&gt;&lt;p&gt;Use real-time event triggers, like abandoned carts or website interactions, to automatically update Dynamics 365 CRM records and initiate follow-up actions.&lt;/p&gt;&lt;h4&gt;&lt;strong&gt;2. Advanced Segmentation&lt;/strong&gt;&lt;/h4&gt;&lt;p&gt;Segment customers based on their behavior, preferences, and engagement history. Use these segments in targeted marketing campaigns.&lt;/p&gt;&lt;h4&gt;&lt;strong&gt;3. Cross-Sell and Upsell Opportunities&lt;/strong&gt;&lt;/h4&gt;&lt;p&gt;Leverage AI-driven recommendations to identify products or services that a customer is likely to purchase next.&lt;/p&gt;&lt;h4&gt;&lt;strong&gt;4. Customer Feedback Analysis&lt;/strong&gt;&lt;/h4&gt;&lt;p&gt;Integrate feedback from surveys (e.g., Microsoft Forms or third-party tools) into Customer Insights and display sentiment analysis in Dynamics 365 CRM.&lt;/p&gt;&lt;div&gt;&lt;/div&gt;&lt;h3&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/h3&gt;&lt;h3&gt;&lt;strong&gt;Tools and Resources&lt;/strong&gt;&lt;/h3&gt;&lt;h4&gt;&lt;strong&gt;1. Microsoft Power Platform&lt;/strong&gt;&lt;/h4&gt;&lt;p&gt;Use Power Automate and Power Apps to customize workflows and create apps that connect Customer Insights with Dynamics 365 CRM.&lt;/p&gt;&lt;h4&gt;&lt;strong&gt;2. Azure Synapse Analytics&lt;/strong&gt;&lt;/h4&gt;&lt;p&gt;For advanced data processing and analytics, connect Customer Insights data with Azure Synapse Analytics.&lt;/p&gt;&lt;h4&gt;&lt;strong&gt;3. Microsoft Learn and Documentation&lt;/strong&gt;&lt;/h4&gt;&lt;p&gt;Explore the official &lt;a disabled=&quot;false&quot; href=&quot;https://learn.microsoft.com/en-us/dynamics365/customer-insights/&quot;&gt;Customer Insights documentation&lt;/a&gt; to deepen your knowledge.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://chamarairesh.blogspot.com/feeds/8491616237340349573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2491204017359768357/8491616237340349573' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/8491616237340349573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/8491616237340349573'/><link rel='alternate' type='text/html' href='http://chamarairesh.blogspot.com/2025/01/how-to-integrate-customer-insights-with.html' title='How to Integrate Customer Insights with Microsoft Dynamics 365 CRM Online'/><author><name>Chamara Iresh</name><uri>http://www.blogger.com/profile/04695612052896290711</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//3.bp.blogspot.com/-Wfsm4TxTxO0/XiPTZjrj-cI/AAAAAAAAvCw/ONKFubGdBw41mPb1Xp89d9eMkvXaV0TkQCK4BGAYYCw/s220/20190817_151917.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2491204017359768357.post-7844013301680817111</id><published>2025-01-24T03:42:00.004+09:00</published><updated>2025-01-24T03:50:42.469+09:00</updated><title type='text'>Calling Microsoft Dynamics 365 CRM Online APIs from External Applications</title><content type='html'>&lt;p&gt;If you’re working with &lt;strong&gt;Microsoft Dynamics 365 CRM Online&lt;/strong&gt;, you’ve probably encountered situations where you need to integrate it with other applications like your website, custom web APIs, or tools like KingswaySoft, XrmToolBox, or Change Data Capture (CDC) tools. API integration can unlock incredible automation and data synchronization, but with great power comes a few headaches.&lt;/p&gt;&lt;p&gt;Let’s dive into how you can make API calls to your MS CRM Online system, what limits and challenges you need to be aware of, and how to avoid common pitfalls while following best practices.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhU3wnX9RQ1wDnouDi_LCMbNFf3UPTIE7Yb-W7zhfxNHErTzWK9rwgfntIzO3PiwJxG5W7K07mJSOf62U14ZHIbbpQYzCrGgCsrHUo5VrST1YJbU_HJfZTJRXHUsIeNEy1bVhHNWvJCrNQCxNRzdl8Mga1XO5YLUt_PzYF-ev5_TZ0r-LUGs0GxxWHZqFMZ/s1792/DALL%C2%B7E%202025-01-23%2018.49.44%20-%20A%20visually%20engaging%20illustration%20showing%20a%20dashboard-style%20interface%20for%20monitoring%20API%20usage%20in%20Microsoft%20Dynamics%20365%20CRM%20Online.%20The%20image%20includes.webp&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1792&quot; height=&quot;380&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhU3wnX9RQ1wDnouDi_LCMbNFf3UPTIE7Yb-W7zhfxNHErTzWK9rwgfntIzO3PiwJxG5W7K07mJSOf62U14ZHIbbpQYzCrGgCsrHUo5VrST1YJbU_HJfZTJRXHUsIeNEy1bVhHNWvJCrNQCxNRzdl8Mga1XO5YLUt_PzYF-ev5_TZ0r-LUGs0GxxWHZqFMZ/w665-h380/DALL%C2%B7E%202025-01-23%2018.49.44%20-%20A%20visually%20engaging%20illustration%20showing%20a%20dashboard-style%20interface%20for%20monitoring%20API%20usage%20in%20Microsoft%20Dynamics%20365%20CRM%20Online.%20The%20image%20includes.webp&quot; width=&quot;665&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;h3&gt;&lt;br /&gt;&lt;/h3&gt;&lt;h3&gt;&lt;strong&gt;How MS CRM Online API Calls Work&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;The &lt;strong&gt;Microsoft Dataverse Web API&lt;/strong&gt; (formerly known as the Common Data Service API) is at the heart of connecting with MS CRM Online. It uses &lt;strong&gt;OData&lt;/strong&gt; and supports CRUD (Create, Read, Update, Delete) operations for your CRM data.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Common Use Cases for CRM API Calls:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Website Integration:&lt;/strong&gt; Pull customer data, update records, or submit forms directly to CRM.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Middleware Tools:&lt;/strong&gt; Automate imports, data migration, or bulk updates using KingswaySoft or SSIS packages.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Data Sync with External Systems:&lt;/strong&gt; Use APIs to sync CRM data with ERP, marketing tools, or third-party systems in near-real time.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Automation Tools:&lt;/strong&gt; Tools like Power Automate or XrmToolBox to streamline operations without reinventing the wheel.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;&lt;strong&gt;What Makes MS CRM Online API Calls Different?&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;Dynamics 365 CRM Online operates in the cloud, which means Microsoft enforces strict rules to ensure the stability of its infrastructure. These include:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Daily API Limits (Service Protection Limits):&lt;/strong&gt;&lt;br /&gt;Each user and tenant in MS CRM Online has a daily API call limit based on the licenses they’re using.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;For example, a Dynamics 365 Customer Service Enterprise license allows &lt;strong&gt;40,000 daily API calls per user&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt;These limits are shared across all applications making calls on behalf of a user or application.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Timeouts and Query Size Restrictions:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The maximum request timeout is &lt;strong&gt;2 minutes&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt;API calls can fail if they try to retrieve too much data at once. Large datasets need to be retrieved in pages using &lt;code&gt;$top&lt;/code&gt; and &lt;code&gt;$skip&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Concurrency Limits:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Too many concurrent calls from the same application or user can trigger throttling (HTTP 429 errors).&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Authentication:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;CRM Online only supports &lt;strong&gt;OAuth 2.0&lt;/strong&gt; for authentication. No basic auth! This means you’ll need to register an app in Azure AD and obtain access tokens to make API calls.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h3&gt;&lt;strong&gt;Limitations You Need to Know About&lt;/strong&gt;&lt;/h3&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Throttling (HTTP 429 Errors):&lt;/strong&gt;&lt;br /&gt;If you exceed API limits or send too many requests too quickly, Microsoft will throttle your app to ensure the CRM stays stable for all users. Throttling typically results in a “429 Too Many Requests” error.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Complex Queries Can Fail:&lt;/strong&gt;&lt;br /&gt;Using too many joins, nested filters, or retrieving large data sets can lead to timeout errors or performance issues.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Eventual Consistency:&lt;/strong&gt;&lt;br /&gt;Data changes made through the API might not be immediately available for reads, especially if you’re using background processes like workflows.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Security Role Restrictions:&lt;/strong&gt;&lt;br /&gt;Even if you have API access, the user or application making the call is still limited by their assigned security roles in CRM.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h3&gt;&lt;strong&gt;Best Practices for MS CRM Online API Calls&lt;/strong&gt;&lt;/h3&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Optimize Your Queries:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Only retrieve the data you need by using &lt;code&gt;$select&lt;/code&gt; to specify columns and &lt;code&gt;$filter&lt;/code&gt; to narrow down records. For example:&lt;pre class=&quot;!overflow-visible&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary dark:bg-gray-950&quot;&gt;&lt;div class=&quot;flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none&quot;&gt;GET https://&amp;lt;your-org&amp;gt;.crm.dynamics.com/api/data/v9.2/accounts?&lt;span class=&quot;hljs-variable&quot;&gt;$select&lt;/span&gt;=name,revenue&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Use Pagination for Large Datasets:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;MS CRM Online supports server-side paging using the &lt;code&gt;@odata.nextLink&lt;/code&gt; property in responses. This is crucial when dealing with more than 5,000 records.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Batch API Requests:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Instead of making multiple single calls, use batch operations to group several requests into one. This reduces the number of API calls and improves efficiency.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Implement Retry Logic:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Throttling is inevitable if you’re working at scale. Implement retry logic with exponential backoff when you encounter HTTP 429 errors.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Monitor API Usage:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Use the &lt;strong&gt;Power Platform Admin Center&lt;/strong&gt; to monitor API call consumption and identify heavy users or apps. This helps you stay ahead of limits.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Use Change Tracking for Incremental Data Sync:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Instead of polling all records repeatedly, use &lt;strong&gt;Change Tracking&lt;/strong&gt; in CRM to fetch only the records that have changed since the last sync.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Secure Your API Calls:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Use HTTPS for all communications. Ensure Azure AD tokens are stored securely, and rotate client secrets regularly.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h3&gt;&lt;strong&gt;How to Monitor API Usage in MS CRM Online&lt;/strong&gt;&lt;/h3&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Power Platform Admin Center:&lt;/strong&gt;&lt;br /&gt;Go to &lt;strong&gt;Admin Center &amp;gt; Analytics &amp;gt; Common Data Service (Dataverse)&lt;/strong&gt; to see the API usage summary for your environment. You’ll get a breakdown of calls by user, application, and type.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Enable Logging:&lt;/strong&gt;&lt;br /&gt;Turn on the &lt;strong&gt;Plug-in Trace Log&lt;/strong&gt; to track failed calls or performance bottlenecks.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Use Audit Logs:&lt;/strong&gt;&lt;br /&gt;Dynamics 365 allows you to track API interactions via the audit log. It’s particularly useful for troubleshooting data updates or failed requests.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Alerts for API Limits:&lt;/strong&gt;&lt;br /&gt;Set up alerts to notify you when usage approaches the daily API limit. This can prevent unexpected disruptions.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h3&gt;&lt;strong&gt;What to Do If You Exceed the Limit&lt;/strong&gt;&lt;/h3&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Analyze Your Calls:&lt;/strong&gt;&lt;br /&gt;Use the Power Platform Admin Center to identify which users or applications are consuming the most API calls. Common culprits include poorly optimized workflows or data sync jobs.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reduce API Calls:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Replace frequent polling with Change Tracking or webhooks.&lt;/li&gt;&lt;li&gt;Consolidate multiple small API calls into fewer, larger calls using batch operations.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Purchase Additional Capacity:&lt;/strong&gt;&lt;br /&gt;If you’re regularly exceeding limits, you can buy extra capacity from Microsoft as an add-on.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Temporarily Slow Down Integrations:&lt;/strong&gt;&lt;br /&gt;Adjust schedules for non-critical jobs or integrations to avoid peak times.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;How to Monitor API Usage from the Microsoft Power Platform Admin Center&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;One of the best ways to keep an eye on your API usage in Dynamics 365 CRM Online is by leveraging the &lt;strong&gt;Microsoft Power Platform Admin Center&lt;/strong&gt;. This portal provides real-time analytics and insights into API consumption for your environment. Here&#39;s how you can monitor your usage step by step:&lt;/p&gt;&lt;h3&gt;&lt;strong&gt;Steps to Monitor API Usage in the Admin Center&lt;/strong&gt;&lt;/h3&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Log in to the Power Platform Admin Center&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Go to &lt;a href=&quot;https://admin.powerplatform.microsoft.com/&quot; rel=&quot;noopener&quot; target=&quot;_new&quot;&gt;Power Platform Admin Center&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Use your admin credentials to log in. You’ll need global admin or system admin permissions to access detailed metrics.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Navigate to the Analytics Section&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;On the left-hand navigation pane, click on &lt;strong&gt;Analytics&lt;/strong&gt; and select &lt;strong&gt;Dataverse (formerly Common Data Service)&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt;Choose the &lt;strong&gt;Environment&lt;/strong&gt; you want to monitor if you’re managing multiple environments (e.g., production, sandbox).&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;View API Usage Overview&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;In the &lt;strong&gt;Dataverse Analytics&lt;/strong&gt; dashboard, go to the &lt;strong&gt;Capacity&lt;/strong&gt; or &lt;strong&gt;API Usage&lt;/strong&gt; tab.&lt;/li&gt;&lt;li&gt;This section shows:&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Daily API Usage&lt;/strong&gt;: A graph or table displaying how many API calls have been consumed by the environment.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Users and Applications&lt;/strong&gt;: Breakdowns of which users or applications are generating the most API traffic.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Remaining API Capacity&lt;/strong&gt;: See how close you are to hitting your daily API limits.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Filter by Time Period or User/Application&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Use filters to narrow down API usage by:&lt;ul&gt;&lt;li&gt;Specific &lt;strong&gt;Users&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Applications&lt;/strong&gt; (e.g., integrations like KingswaySoft, Power Automate flows)&lt;/li&gt;&lt;li&gt;A specific &lt;strong&gt;time period&lt;/strong&gt; (e.g., daily, weekly).&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Identify Problem Areas&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Look for patterns in API consumption. For example:&lt;ul&gt;&lt;li&gt;A user making excessive API calls due to misconfigured workflows.&lt;/li&gt;&lt;li&gt;An application like a middleware tool consuming more calls than expected.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Drill down into specific calls to identify whether they are read-heavy or write-heavy.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Set Up Alerts (Optional)&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Currently, you cannot directly configure alerts from the admin center, but you can monitor daily API thresholds using Power BI dashboards or scripts. Microsoft may notify you by email if your usage consistently exceeds capacity.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Access Logs for Detailed Troubleshooting&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;If you’re troubleshooting failures, you can enable and access:&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Plug-in Trace Logs&lt;/strong&gt;: Tracks issues with custom plugins or workflows that might be contributing to excessive API usage.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Audit Logs&lt;/strong&gt;: Enables detailed tracking of API actions, including which records were updated or accessed.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h3&gt;&lt;strong&gt;Key Insights You Can Gather from the Admin Portal&lt;/strong&gt;&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Who or What Is Consuming the Most API Calls?&lt;/strong&gt;&lt;br /&gt;The analytics dashboard shows a breakdown of API usage by user and application. This helps you pinpoint whether the problem lies with a specific integration (like KingswaySoft) or a user&#39;s actions (e.g., running an overly complex advanced find).&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Are You Approaching Your Daily API Limits?&lt;/strong&gt;&lt;br /&gt;The dashboard provides a visual representation of your daily API consumption and how much headroom you have left before hitting the limit.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Which API Calls Are Failing?&lt;/strong&gt;&lt;br /&gt;If certain API calls are failing, you can cross-reference your logs to determine the cause. Look out for throttling errors (HTTP 429) or misconfigured apps making unnecessary requests.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;&lt;strong&gt;Tips for Effective Monitoring&lt;/strong&gt;&lt;/h3&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Regularly Check the Dashboard&lt;/strong&gt;&lt;br /&gt;Make it a habit to check API usage in the admin center weekly or after deploying a new integration to catch issues early.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Set Thresholds for Heavy API Consumers&lt;/strong&gt;&lt;br /&gt;If you find that specific apps (e.g., Power Automate flows) or users consistently hit the limits, optimize their behavior by reducing frequency or batching operations.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plan Capacity for Busy Periods&lt;/strong&gt;&lt;br /&gt;If you know your environment will experience high API demand (e.g., a data migration or bulk import), consider purchasing additional capacity in advance.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chamarairesh.blogspot.com/feeds/7844013301680817111/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2491204017359768357/7844013301680817111' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/7844013301680817111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/7844013301680817111'/><link rel='alternate' type='text/html' href='http://chamarairesh.blogspot.com/2025/01/calling-microsoft-dynamics-365-crm.html' title='Calling Microsoft Dynamics 365 CRM Online APIs from External Applications'/><author><name>Chamara Iresh</name><uri>http://www.blogger.com/profile/04695612052896290711</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//3.bp.blogspot.com/-Wfsm4TxTxO0/XiPTZjrj-cI/AAAAAAAAvCw/ONKFubGdBw41mPb1Xp89d9eMkvXaV0TkQCK4BGAYYCw/s220/20190817_151917.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhU3wnX9RQ1wDnouDi_LCMbNFf3UPTIE7Yb-W7zhfxNHErTzWK9rwgfntIzO3PiwJxG5W7K07mJSOf62U14ZHIbbpQYzCrGgCsrHUo5VrST1YJbU_HJfZTJRXHUsIeNEy1bVhHNWvJCrNQCxNRzdl8Mga1XO5YLUt_PzYF-ev5_TZ0r-LUGs0GxxWHZqFMZ/s72-w665-h380-c/DALL%C2%B7E%202025-01-23%2018.49.44%20-%20A%20visually%20engaging%20illustration%20showing%20a%20dashboard-style%20interface%20for%20monitoring%20API%20usage%20in%20Microsoft%20Dynamics%20365%20CRM%20Online.%20The%20image%20includes.webp" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2491204017359768357.post-6374616776736290472</id><published>2024-12-28T01:06:00.002+09:00</published><updated>2024-12-28T01:21:22.774+09:00</updated><title type='text'>MS CRM Plugin Development: Real Talk from a Senior Dev</title><content type='html'>&lt;div&gt;Hey there, fellow CRM developers!&amp;nbsp;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;What The Heck Is A Plugin (And Why Should You Care)?&lt;/span&gt;&lt;/h2&gt;
&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Think of plugins as your secret weapon in the CRM world. They&#39;re essentially .NET libraries that let you inject your own code into CRM&#39;s event pipeline. While Microsoft&#39;s marketing team might call them &quot;extensibility points,&quot; I like to think of them as your chance to say &quot;Hey CRM, let me handle this my way!&quot;&lt;/p&gt;
&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;The Real-World Use Cases 💡&lt;/span&gt;&lt;/h2&gt;
&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Let me share some actual scenarios where plugins saved my bacon:&lt;/p&gt;
&lt;ul class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-disc space-y-2 pl-8&quot; depth=&quot;0&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;A client needed to validate complex pricing rules before saving opportunities (something Power Automate would choke on)&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;We had to sync data with an ancient ERP system that only spoke SOAP&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;2&quot;&gt;Had to implement real-time fraud detection on lead creation&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;3&quot;&gt;Needed to enforce business rules that would make a flowchart cry&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Plugin Architecture: The Stuff That Matters 🏗️&lt;/span&gt;&lt;/h2&gt;
&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Here&#39;s what you actually need to know:&lt;/p&gt;&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;YourAwesomePlugin&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token type-list&quot; style=&quot;color: #d19a66;&quot;&gt;IPlugin&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #c678dd;&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Execute&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;IServiceProvider&lt;/span&gt; serviceProvider&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// This is where the magic happens&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; context &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;IPluginExecutionContext&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;serviceProvider
            &lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;GetService&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;typeof&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token type-expression&quot; style=&quot;color: #d19a66;&quot;&gt;IPluginExecutionContext&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
        
        &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Pro tip: Always log what you&#39;re doing&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; tracer &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;ITracingService&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;serviceProvider
            &lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;GetService&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;typeof&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token type-expression&quot; style=&quot;color: #d19a66;&quot;&gt;ITracingService&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
        tracer&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Trace&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;Starting the awesome stuff...&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
        
        &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Your business logic goes here&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;When &amp;amp; Where to Use Plugins 🎯&lt;/span&gt;&lt;/h2&gt;
&lt;ul class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-disc space-y-2 pl-8&quot; depth=&quot;0&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;&lt;strong&gt;Pre-validation&lt;/strong&gt;: When you need to stop bad data before it ruins your day&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;&lt;strong&gt;Pre-operation&lt;/strong&gt;: For modifying data before it hits the database&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;2&quot;&gt;&lt;strong&gt;Post-operation&lt;/strong&gt;: When you need to trigger additional actions after the main operation&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;3&quot;&gt;&lt;strong&gt;Async&lt;/strong&gt;: For anything that might take longer than a coffee break&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;Quick Tip: Event Pipeline Explained Without the Jargon&lt;/h2&gt;
&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Think of it like a security checkpoint:&lt;/p&gt;
&lt;ol class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-decimal space-y-2 pl-8&quot; depth=&quot;0&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;Pre-validation: The metal detector&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;Pre-operation: The passport check&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;2&quot;&gt;Post-operation: The duty-free shopping&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;3&quot;&gt;Async: The stuff that happens after you&#39;re already on the plane&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;hr /&gt;&lt;h3&gt;&lt;span style=&quot;font-size: large;&quot;&gt;🎯 Why Should You Care About Plugins?&lt;/span&gt;&lt;/h3&gt;
&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Let&#39;s be real - while Power Automate is great for simple stuff, plugins are where the real magic happens. They&#39;re like your Swiss Army knife for all things CRM customization. I&#39;ve used them for everything from complex transaction validations to integrating with legacy systems that make COBOL look modern.&lt;/p&gt;
&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;🔍 Plugin Basics (The Stuff Everyone Pretends They Already Know)&lt;/span&gt;&lt;/h2&gt;
&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;First, let&#39;s get our heads straight about what a plugin actually is - it&#39;s a .NET class library that hooks into CRM&#39;s event pipeline. Think of it as your bouncer at the club, deciding what data gets in and what happens to it.&lt;/p&gt;
&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Here&#39;s something they don&#39;t tell you in the docs: choosing between synchronous and asynchronous execution isn&#39;t just about speed - it&#39;s about not getting angry calls from users when their screen freezes. Trust me, I learned this the hard way.&lt;/p&gt;
&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;💡 Real-World Example: The Lead Assignment Nightmare&lt;/span&gt;&lt;/h2&gt;
&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Let me share a war story. We had a client who needed leads automatically assigned based on complex criteria (region, product interest, lead score, and current sales rep workload). Here&#39;s the battle-tested solution:&lt;/p&gt;
&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div class=&quot;text-text-300 absolute pl-3 pt-2.5 text-xs&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;SmartLeadAssignment&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token type-list&quot; style=&quot;color: #d19a66;&quot;&gt;IPlugin&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #c678dd;&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Execute&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;IServiceProvider&lt;/span&gt; serviceProvider&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Get the context and service objects&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; context &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;IPluginExecutionContext&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;serviceProvider
            &lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;GetService&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;typeof&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token type-expression&quot; style=&quot;color: #d19a66;&quot;&gt;IPluginExecutionContext&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; service &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;IOrganizationServiceFactory&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;serviceProvider
            &lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;GetService&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;typeof&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token type-expression&quot; style=&quot;color: #d19a66;&quot;&gt;IOrganizationServiceFactory&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;CreateOrganizationService&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;UserId&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; tracingService &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;ITracingService&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;serviceProvider
            &lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;GetService&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;typeof&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token type-expression&quot; style=&quot;color: #d19a66;&quot;&gt;ITracingService&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;try&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;MessageName &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;Create&quot;&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;||&lt;/span&gt; 
                context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;PrimaryEntityName &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;lead&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

            &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; lead &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;Entity&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;InputParameters&lt;span class=&quot;token&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;Target&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
            
            &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Pro tip: Always check if the field exists!&lt;/span&gt;
            &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;!&lt;/span&gt;lead&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Contains&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;new_region&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;||&lt;/span&gt; 
                &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;!&lt;/span&gt;lead&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Contains&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;new_productinterest&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt; 
            &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
                tracingService&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Trace&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;Required fields missing&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;

            &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; assignee &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;GetOptimalSalesRep&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;service&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; lead&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;assignee &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;!=&lt;/span&gt; Guid&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Empty&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
                lead&lt;span class=&quot;token&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;ownerid&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;EntityReference&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;systemuser&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; assignee&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;catch&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;Exception&lt;/span&gt; ex&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Always log the full exception - future you will thank present you&lt;/span&gt;
            tracingService&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Trace&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token interpolation-string&quot; style=&quot;color: #98c379;&quot;&gt;$&quot;Error: &lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;ex&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;ToString&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token interpolation-string&quot; style=&quot;color: #98c379;&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;InvalidPluginExecutionException&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;
                &lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;Error assigning lead. Check trace logs for details.&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; ex&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;🎓 Pro Tips That Saved My Bacon&lt;/span&gt;&lt;/h2&gt;
&lt;ol class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-decimal space-y-2 pl-8&quot; depth=&quot;0&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;&lt;strong&gt;Always Use Early Returns&lt;/strong&gt;
&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div class=&quot;text-text-300 absolute pl-3 pt-2.5 text-xs&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;!&lt;/span&gt;context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;InputParameters&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Contains&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;Target&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
This prevents your plugin from running unnecessarily and saves precious CPU cycles.&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;&lt;strong&gt;Transaction Context Is Your Friend&lt;/strong&gt;
&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div class=&quot;text-text-300 absolute pl-3 pt-2.5 text-xs&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;!&lt;/span&gt;context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;IsInTransaction&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;InvalidPluginExecutionException&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
This has saved me from duplicate processing more times than I can count.&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;2&quot;&gt;&lt;strong&gt;Trace Everything (But Smart)&lt;/strong&gt;
&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div class=&quot;text-text-300 absolute pl-3 pt-2.5 text-xs&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;tracingService&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Trace&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token interpolation-string&quot; style=&quot;color: #98c379;&quot;&gt;$&quot;Processing &lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;lead&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;Id&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token interpolation-string&quot; style=&quot;color: #98c379;&quot;&gt; for region &lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;region&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token interpolation-string&quot; style=&quot;color: #98c379;&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
Future you will buy present you a beer for this.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;🚀 Deployment Like a Pro&lt;/span&gt;&lt;/h2&gt;
&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Forget manually uploading DLLs (it&#39;s 2024, folks!). Here&#39;s my Azure DevOps pipeline that&#39;s saved hours of my life:&lt;/p&gt;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;🔍 Debugging Like a Detective&lt;/span&gt;&lt;/h2&gt;
&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;When things go wrong (and they will), here&#39;s your survival kit:&lt;/p&gt;
&lt;ol class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-decimal space-y-2 pl-8&quot; depth=&quot;0&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;Plugin Profiler is your best friend&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;Set up local debugging with the Plugin Registration Tool&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;2&quot;&gt;Use conditional breakpoints for specific scenarios&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;⚠️ Common Pitfalls (Learn From My Pain)&lt;/span&gt;&lt;/h2&gt;
&lt;ul class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-disc space-y-2 pl-8&quot; depth=&quot;0&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;Never, ever make HTTP calls in sync plugins&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;Always check for null before accessing entity attributes&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;2&quot;&gt;Don&#39;t trust the cache - always verify your data&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;3&quot;&gt;Remember: plugins have a 2-minute timeout (yes, even async ones)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;🎯 Advanced Techniques&lt;/span&gt;&lt;/h2&gt;
&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;For the real ninjas out there:&lt;/p&gt;
&lt;ul class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-disc space-y-2 pl-8&quot; depth=&quot;0&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;Use IOrganizationService sparingly (it&#39;s expensive)&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;Implement caching for frequently accessed data&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;2&quot;&gt;Consider using Early-Bound entities for better performance&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;3&quot;&gt;Use QueryExpression instead of FetchXML for complex queries&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Want to see how I handle multi-threading in async plugins? Drop a comment below, and I&#39;ll share my battle-tested patterns!&lt;/p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;🐛 Live Debugging Like a Pro&lt;/span&gt;&lt;div&gt;
&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Here&#39;s my tried-and-true debugging workflow:&lt;/p&gt;
&lt;ol class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-decimal space-y-2 pl-8&quot; depth=&quot;0&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;&lt;strong&gt;Remote Debugging Setup&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div class=&quot;text-text-300 absolute pl-3 pt-2.5 text-xs&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Add this to your plugin constructor&lt;/span&gt;
&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;!&lt;/span&gt;Debugger&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;IsAttached &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; Debugger&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Launch&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;DebuggerBreak&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;ol class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-decimal space-y-2 pl-8&quot; depth=&quot;0&quot; start=&quot;2&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;&lt;strong&gt;Structured Logging Pattern&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div class=&quot;text-text-300 absolute pl-3 pt-2.5 text-xs&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #c678dd;&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Execute&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;IServiceProvider&lt;/span&gt; serviceProvider&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; tracer &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;ITracingService&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;serviceProvider&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;GetService&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;typeof&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token type-expression&quot; style=&quot;color: #d19a66;&quot;&gt;ITracingService&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; context &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;PluginTraceContext&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;tracer&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    
    context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Log&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token interpolation-string&quot; style=&quot;color: #98c379;&quot;&gt;$&quot;Starting plugin execution for &lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;MessageName&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token interpolation-string&quot; style=&quot;color: #98c379;&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;try&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Your logic here&lt;/span&gt;
        context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;LogObject&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;Input parameters&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;InputParameters&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;catch&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;Exception&lt;/span&gt; ex&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;LogException&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;ex&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;throw&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;🚨 &lt;b&gt;Real Production Issues I&#39;ve Faced (And How to Fix Them)&lt;/b&gt;&lt;ol class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-decimal space-y-2 pl-8&quot; depth=&quot;0&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;&lt;strong&gt;The Infinite Loop Nightmare&lt;/strong&gt;
&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div class=&quot;text-text-300 absolute pl-3 pt-2.5 text-xs&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Check if the plugin triggered itself&lt;/span&gt;
&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Depth &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;&lt;strong&gt;Memory Leaks in Async Plugins&lt;/strong&gt;
&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div class=&quot;text-text-300 absolute pl-3 pt-2.5 text-xs&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; serviceFactory &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;IOrganizationServiceFactory&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;serviceProvider
    &lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;GetService&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;typeof&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token type-expression&quot; style=&quot;color: #d19a66;&quot;&gt;IOrganizationServiceFactory&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; service &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; serviceFactory&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;CreateOrganizationService&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;2&quot;&gt;&lt;strong&gt;Deadlocks in Transaction Processing&lt;/strong&gt;
&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div class=&quot;text-text-300 absolute pl-3 pt-2.5 text-xs&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Always use optimistic concurrency&lt;/span&gt;
entity&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;RowVersion &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; currentRowVersion&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;📊 &lt;b&gt;Production Monitoring That Actually Works&lt;/b&gt;&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div class=&quot;text-text-300 absolute pl-3 pt-2.5 text-xs&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Custom telemetry wrapper&lt;/span&gt;
&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;PluginTelemetry&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token type-list&quot; style=&quot;color: #d19a66;&quot;&gt;IDisposable&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;readonly&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;Stopwatch&lt;/span&gt; _timer&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;readonly&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;ITracingService&lt;/span&gt; _tracer&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;PluginTelemetry&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;ITracingService&lt;/span&gt; tracer&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        _tracer &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; tracer&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
        _timer &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; Stopwatch&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;StartNew&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
    
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #c678dd;&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Dispose&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        _timer&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Stop&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
        _tracer&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Trace&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token interpolation-string&quot; style=&quot;color: #98c379;&quot;&gt;$&quot;Execution time: &lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;_timer&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;ElapsedMilliseconds&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token interpolation-string&quot; style=&quot;color: #98c379;&quot;&gt;ms&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;🌐 &lt;b&gt;Extending with Web APIs (The Smart Way)&lt;/b&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;When plugins just won&#39;t cut it:&lt;/p&gt;
&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div class=&quot;text-text-300 absolute pl-3 pt-2.5 text-xs&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token attribute&quot; style=&quot;color: #d19a66;&quot;&gt;RoutePrefix&lt;/span&gt;&lt;span class=&quot;token attribute attribute-arguments&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token attribute attribute-arguments&quot; style=&quot;color: #98c379;&quot;&gt;&quot;api/v1/crm&quot;&lt;/span&gt;&lt;span class=&quot;token attribute attribute-arguments&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;CrmExtensionController&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token type-list&quot; style=&quot;color: #d19a66;&quot;&gt;ApiController&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token attribute&quot; style=&quot;color: #d19a66;&quot;&gt;HttpPost&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token attribute&quot; style=&quot;color: #d19a66;&quot;&gt;Route&lt;/span&gt;&lt;span class=&quot;token attribute attribute-arguments&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token attribute attribute-arguments&quot; style=&quot;color: #98c379;&quot;&gt;&quot;bulkupdate&quot;&lt;/span&gt;&lt;span class=&quot;token attribute attribute-arguments&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #d19a66;&quot;&gt;Task&lt;/span&gt;&lt;span class=&quot;token return-type&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token return-type&quot; style=&quot;color: #d19a66;&quot;&gt;IHttpActionResult&lt;/span&gt;&lt;span class=&quot;token return-type&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;BulkUpdateRecords&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token attribute&quot; style=&quot;color: #d19a66;&quot;&gt;FromBody&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;BulkUpdateRequest&lt;/span&gt; request&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; client &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;CrmServiceClient&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;ConfigurationManager
            &lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;ConnectionStrings&lt;span class=&quot;token&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;CRM&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;ConnectionString&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
            
        &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Process in batches of 1000&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;foreach&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; batch &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;in&lt;/span&gt; request&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Records&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Chunk&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;1000&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;ProcessBatchAsync&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;client&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; batch&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
        
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Ok&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;💡 The Async Plugin Survival Guide&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;When to use async:&lt;/p&gt;
&lt;ul class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-disc space-y-2 pl-8&quot; depth=&quot;0&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;External API calls&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;Batch processing&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;2&quot;&gt;Email notifications&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;3&quot;&gt;File operations&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Pro tip: Always implement retry logic:&lt;/p&gt;
&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div class=&quot;text-text-300 absolute pl-3 pt-2.5 text-xs&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #d19a66;&quot;&gt;Task&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;ExecuteWithRetryAsync&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;Func&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;Task&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;&amp;gt;&lt;/span&gt; operation&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; policy &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; Policy
        &lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token generic-method&quot; style=&quot;color: #61afef;&quot;&gt;Handle&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot; style=&quot;color: #d19a66;&quot;&gt;Exception&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;WaitAndRetryAsync&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; retryAttempt &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&amp;gt;&lt;/span&gt; 
            TimeSpan&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;FromSeconds&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;Math&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Pow&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; retryAttempt&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
            
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;await&lt;/span&gt; policy&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;ExecuteAsync&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;operation&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;b&gt;Production-Ready Base Plugin Class&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Here&#39;s my battle-tested base class that&#39;s saved countless hours:&lt;/p&gt;&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div class=&quot;text-text-300 absolute pl-3 pt-2.5 text-xs&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;abstract&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;PluginBase&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token type-list&quot; style=&quot;color: #d19a66;&quot;&gt;IPlugin&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;readonly&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;string&lt;/span&gt; _unsecureConfig&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;readonly&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;string&lt;/span&gt; _secureConfig&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;PluginBase&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;string&lt;/span&gt; unsecureConfig &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;string&lt;/span&gt; secureConfig &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        _unsecureConfig &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; unsecureConfig&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
        _secureConfig &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; secureConfig&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #c678dd;&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Execute&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;IServiceProvider&lt;/span&gt; serviceProvider&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; context &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;IPluginExecutionContext&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;serviceProvider
            &lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;GetService&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;typeof&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token type-expression&quot; style=&quot;color: #d19a66;&quot;&gt;IPluginExecutionContext&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; factory &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;IOrganizationServiceFactory&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;serviceProvider
            &lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;GetService&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;typeof&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token type-expression&quot; style=&quot;color: #d19a66;&quot;&gt;IOrganizationServiceFactory&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; tracer &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;ITracingService&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;serviceProvider
            &lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;GetService&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;typeof&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token type-expression&quot; style=&quot;color: #d19a66;&quot;&gt;ITracingService&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
        
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; service &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; factory&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;CreateOrganizationService&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;UserId&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;try&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Performance tracking&lt;/span&gt;
            &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; performance &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;PerformanceTracker&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;tracer&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
            
            &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;ExecutePluginLogic&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;PluginContext&lt;/span&gt;
            &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
                Context &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; context&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
                Service &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; service&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
                TracingService &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; tracer&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
                UnsecureConfig &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; _unsecureConfig&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
                SecureConfig &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; _secureConfig
            &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;catch&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;Exception&lt;/span&gt; ex&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
            tracer&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Trace&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token interpolation-string&quot; style=&quot;color: #98c379;&quot;&gt;$&quot;❌ Error: &lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;ex&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token interpolation-string&quot; style=&quot;color: #98c379;&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;InvalidPluginExecutionException&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;
                &lt;span class=&quot;token interpolation-string&quot; style=&quot;color: #98c379;&quot;&gt;$&quot;Plugin failed: &lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;GetType&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token interpolation-string&quot; style=&quot;color: #98c379;&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; ex&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;abstract&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #c678dd;&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;ExecutePluginLogic&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;PluginContext&lt;/span&gt; context&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;PluginContext&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #d19a66;&quot;&gt;IPluginExecutionContext&lt;/span&gt; Context &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #d19a66;&quot;&gt;IOrganizationService&lt;/span&gt; Service &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #d19a66;&quot;&gt;ITracingService&lt;/span&gt; TracingService &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #c678dd;&quot;&gt;string&lt;/span&gt; UnsecureConfig &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #c678dd;&quot;&gt;string&lt;/span&gt; SecureConfig &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;🔐 Securing Your Plugin Configuration&lt;/span&gt;&lt;/h2&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Never hardcode sensitive stuff! Here&#39;s how to handle configs properly:&lt;/p&gt;&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div class=&quot;text-text-300 absolute pl-3 pt-2.5 text-xs&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;LeadScoringPlugin&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token type-list&quot; style=&quot;color: #d19a66;&quot;&gt;PluginBase&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;LeadScoringPlugin&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;string&lt;/span&gt; unsecureConfig&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;string&lt;/span&gt; secureConfig&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt; 
        &lt;span class=&quot;token&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;base&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;unsecureConfig&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; secureConfig&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #c678dd;&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;ExecutePluginLogic&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;PluginContext&lt;/span&gt; context&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; config &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; JsonConvert&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token generic-method&quot; style=&quot;color: #61afef;&quot;&gt;DeserializeObject&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot; style=&quot;color: #d19a66;&quot;&gt;ScoringConfig&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;
            context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;SecureConfig&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
            
        context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;TracingService&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Trace&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token interpolation-string&quot; style=&quot;color: #98c379;&quot;&gt;$&quot;Using API key: ***&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;            config&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;ApiKey&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;Substring&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;config&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;ApiKey&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;Length &lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt; &lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token interpolation-string&quot; style=&quot;color: #98c379;&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;🚀 Spkl Plugin Registration - The Right Way&lt;/span&gt;&lt;/h2&gt;&lt;ol class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-decimal space-y-2 pl-8&quot; depth=&quot;0&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;First, your spkl.json:&lt;/li&gt;
&lt;/ol&gt;&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div class=&quot;text-text-300 absolute pl-3 pt-2.5 text-xs&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-json&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token&quot; style=&quot;color: #e06c75;&quot;&gt;&quot;plugins&quot;&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;[&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token&quot; style=&quot;color: #e06c75;&quot;&gt;&quot;solution&quot;&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;YourSolution&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token&quot; style=&quot;color: #e06c75;&quot;&gt;&quot;assemblypath&quot;&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;bin\\Debug\\YourPlugin.dll&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token&quot; style=&quot;color: #e06c75;&quot;&gt;&quot;classRegex&quot;&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;.*Plugin$&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token&quot; style=&quot;color: #e06c75;&quot;&gt;&quot;excludePluginSteps&quot;&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;true&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;ol class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-decimal space-y-2 pl-8&quot; depth=&quot;0&quot; start=&quot;2&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;deployment-config.json for different environments:&lt;/li&gt;
&lt;/ol&gt;&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div class=&quot;text-text-300 absolute pl-3 pt-2.5 text-xs&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-json&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token&quot; style=&quot;color: #e06c75;&quot;&gt;&quot;dev&quot;&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #e06c75;&quot;&gt;&quot;server&quot;&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;https://dev.crm.dynamics.com&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #e06c75;&quot;&gt;&quot;solution&quot;&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;YourSolution_1_0_0_1&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #e06c75;&quot;&gt;&quot;secureConfiguration&quot;&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token&quot; style=&quot;color: #e06c75;&quot;&gt;&quot;LeadScoringPlugin&quot;&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #e06c75;&quot;&gt;&quot;ApiKey&quot;&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;dev_api_key_here&quot;&lt;/span&gt;
      &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token&quot; style=&quot;color: #e06c75;&quot;&gt;&quot;prod&quot;&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Production config&lt;/span&gt;
  &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;🎯 Pro Tips for Spkl&lt;/span&gt;&lt;/h2&gt;&lt;ol class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-decimal space-y-2 pl-8&quot; depth=&quot;0&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;&lt;strong&gt;Version Control&lt;/strong&gt;:&lt;/li&gt;
&lt;/ol&gt;&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div class=&quot;text-text-300 absolute pl-3 pt-2.5 text-xs&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-gitignore&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;# Never commit secrets!&lt;/span&gt;
&lt;span class=&quot;token entry&quot; style=&quot;color: #98c379;&quot;&gt;deployment-config.json&lt;/span&gt;
&lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;# Keep template&lt;/span&gt;
&lt;span class=&quot;token entry&quot; style=&quot;color: #98c379;&quot;&gt;deployment-config.template.json&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;ol class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-decimal space-y-2 pl-8&quot; depth=&quot;0&quot; start=&quot;2&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;&lt;strong&gt;Automated Registration&lt;/strong&gt;:&lt;/li&gt;
&lt;/ol&gt;&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div class=&quot;text-text-300 absolute pl-3 pt-2.5 text-xs&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-powershell&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;# Register plugins&lt;/span&gt;
spkl plugins &lt;span class=&quot;token&quot;&gt;[path]&lt;/span&gt; 

&lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;# Update specific plugin&lt;/span&gt;
spkl plugin &lt;span class=&quot;token&quot;&gt;[path]&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;-&lt;/span&gt;name YourPlugin&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;ol class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-decimal space-y-2 pl-8&quot; depth=&quot;0&quot; start=&quot;3&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;&lt;strong&gt;Debug Settings&lt;/strong&gt;:&lt;/li&gt;
&lt;/ol&gt;&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div class=&quot;text-text-300 absolute pl-3 pt-2.5 text-xs&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-xml&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;&amp;lt;!-- .spkl.json --&amp;gt;&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #e06c75;&quot;&gt;setting&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #e06c75;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;debug&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #e06c75;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #e06c75;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;token&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;🔍 Real-World Example: Putting It All Together&lt;/span&gt;&lt;/h2&gt;&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div class=&quot;text-text-300 absolute pl-3 pt-2.5 text-xs&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;CustomerValidationPlugin&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token type-list&quot; style=&quot;color: #d19a66;&quot;&gt;PluginBase&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;readonly&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;ValidationSettings&lt;/span&gt; _settings&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;CustomerValidationPlugin&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;string&lt;/span&gt; unsecureConfig&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;string&lt;/span&gt; secureConfig&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt; 
        &lt;span class=&quot;token&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;base&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;unsecureConfig&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; secureConfig&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        _settings &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; JsonConvert&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token generic-method&quot; style=&quot;color: #61afef;&quot;&gt;DeserializeObject&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot; style=&quot;color: #d19a66;&quot;&gt;ValidationSettings&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;
            unsecureConfig&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #c678dd;&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;ExecutePluginLogic&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;PluginContext&lt;/span&gt; pluginContext&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; entity &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;Entity&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;pluginContext&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;InputParameters&lt;span class=&quot;token&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;Target&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
        
        &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Use config settings&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;_settings&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;EnableStrictValidation&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Validation logic here&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
        
        pluginContext&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;TracingService&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Trace&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;
            &lt;span class=&quot;token interpolation-string&quot; style=&quot;color: #98c379;&quot;&gt;$&quot;Validation completed with rules: &lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;_settings&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;RuleSet&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token interpolation-string&quot; style=&quot;color: #98c379;&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;




















&lt;/p&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;🔑 Critical Things Every D365 Plugin Dev Should Know&lt;/span&gt;&lt;/h2&gt;&lt;ol class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-decimal space-y-2 pl-8&quot; depth=&quot;0&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;&lt;strong&gt;Thread Safety &amp;amp; Context&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div class=&quot;text-text-300 absolute pl-3 pt-2.5 text-xs&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Always use thread-safe collections&lt;/span&gt;
&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;readonly&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;ConcurrentDictionary&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;object&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;&amp;gt;&lt;/span&gt; Cache &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; 
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;ConcurrentDictionary&lt;/span&gt;&lt;span class=&quot;token constructor-invocation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #c678dd;&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token constructor-invocation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #c678dd;&quot;&gt;object&lt;/span&gt;&lt;span class=&quot;token constructor-invocation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Check execution context&lt;/span&gt;
&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Depth &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Prevent recursive loops&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;ol class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-decimal space-y-2 pl-8&quot; depth=&quot;0&quot; start=&quot;2&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;&lt;strong&gt;Performance Optimization&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div class=&quot;text-text-300 absolute pl-3 pt-2.5 text-xs&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Batch your requests&lt;/span&gt;
&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; multipleRequest &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;ExecuteMultipleRequest&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    Settings &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;ExecuteMultipleSettings&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        ContinueOnError &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
        ReturnResponses &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;true&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
    Requests &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; requests&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;ToArray&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;ol class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-decimal space-y-2 pl-8&quot; depth=&quot;0&quot; start=&quot;3&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;&lt;strong&gt;Error Handling Best Practices&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div class=&quot;text-text-300 absolute pl-3 pt-2.5 text-xs&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;try&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Your logic&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;catch&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;FaultException&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;OrganizationServiceFault&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;&amp;gt;&lt;/span&gt; ex&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Handle CRM-specific errors&lt;/span&gt;
    tracer&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Trace&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token interpolation-string&quot; style=&quot;color: #98c379;&quot;&gt;$&quot;Error Code: &lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;ex&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;Detail&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;ErrorCode&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token interpolation-string&quot; style=&quot;color: #98c379;&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;catch&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;TimeoutException&lt;/span&gt; ex&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Handle timeouts gracefully&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;InvalidPluginExecutionException&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;Operation timed out. Please try again.&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; ex&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Common Gotchas to Avoid&lt;/span&gt;&lt;/h2&gt;&lt;ol class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-decimal space-y-2 pl-8&quot; depth=&quot;0&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;&lt;strong&gt;Plugin Isolation&lt;/strong&gt;
&lt;ul class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-disc space-y-2 pl-8&quot; depth=&quot;1&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;Don&#39;t share static state between plugin instances&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;Avoid file system operations&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;2&quot;&gt;Never store sensitive data in static variables&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;&lt;strong&gt;Transaction Management&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div class=&quot;text-text-300 absolute pl-3 pt-2.5 text-xs&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Check if you&#39;re in a transaction&lt;/span&gt;
&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;!&lt;/span&gt;context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;IsInTransaction&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;InvalidPluginExecutionException&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;This operation must be part of a transaction.&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;ol class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-decimal space-y-2 pl-8&quot; depth=&quot;0&quot; start=&quot;3&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;&lt;strong&gt;Cache Usage&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div class=&quot;text-text-300 absolute pl-3 pt-2.5 text-xs&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Implement proper caching&lt;/span&gt;
&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;readonly&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;MemoryCache&lt;/span&gt; Cache &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;MemoryCache&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;MemoryCacheOptions&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        SizeLimit &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;1024&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Use cache with expiration&lt;/span&gt;
Cache&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Set&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;key&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; TimeSpan&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;FromMinutes&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Advanced Techniques&lt;/span&gt;&lt;/h2&gt;&lt;ol class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-decimal space-y-2 pl-8&quot; depth=&quot;0&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;&lt;strong&gt;Custom Actions Integration&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div class=&quot;text-text-300 absolute pl-3 pt-2.5 text-xs&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;CustomActionPlugin&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token type-list&quot; style=&quot;color: #d19a66;&quot;&gt;PluginBase&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #c678dd;&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;ExecutePluginLogic&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;PluginContext&lt;/span&gt; context&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;MessageName &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;my_customaction&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
            
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; parameters &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;InputParameters&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Process custom action&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;ol class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-decimal space-y-2 pl-8&quot; depth=&quot;0&quot; start=&quot;2&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;&lt;strong&gt;Bulk Operation Handling&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div class=&quot;text-text-300 absolute pl-3 pt-2.5 text-xs&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Handle bulk operations efficiently&lt;/span&gt;
&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #d19a66;&quot;&gt;Task&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;ProcessBulkAsync&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;IOrganizationService&lt;/span&gt; service&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; 
    &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;Entity&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;&amp;gt;&lt;/span&gt; entities&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; tasks &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; entities
        &lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Select&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;entity &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&amp;gt;&lt;/span&gt; Task&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Run&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;ProcessSingle&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;service&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; entity&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;await&lt;/span&gt; Task&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;WhenAll&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;tasks&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Performance Metrics to Monitor&lt;/span&gt;&lt;/h2&gt;&lt;ol class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-decimal space-y-2 pl-8&quot; depth=&quot;0&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;Plugin execution time&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;Database calls per operation&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;2&quot;&gt;Memory usage patterns&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;3&quot;&gt;Exception rates&lt;/li&gt;
&lt;/ol&gt;&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div class=&quot;text-text-300 absolute pl-3 pt-2.5 text-xs&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;PerformanceMetrics&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;readonly&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;Stopwatch&lt;/span&gt; _timer &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;Stopwatch&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;int&lt;/span&gt; _dbCalls &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #c678dd;&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;TrackDatabaseCall&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        Interlocked&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Increment&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;ref&lt;/span&gt; _dbCalls&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Final Words of Wisdom&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-disc space-y-2 pl-8&quot; depth=&quot;0&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;Always test with large datasets&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;Plan for failure scenarios&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;2&quot;&gt;Keep security at the forefront&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;3&quot;&gt;Document your assumptions&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;4&quot;&gt;Use code reviews religiously&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;🔚 Wrapping Up&lt;/p&gt;&lt;/div&gt;
&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Remember: a good plugin is like a good referee - it does its job without anyone noticing. Keep it simple, keep it fast, and always, always test in a sandbox first.&lt;/p&gt;
&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;#MSDynamics #CRMDevelopment #Plugins #DotNet #RealTalk&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chamarairesh.blogspot.com/feeds/6374616776736290472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2491204017359768357/6374616776736290472' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/6374616776736290472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/6374616776736290472'/><link rel='alternate' type='text/html' href='http://chamarairesh.blogspot.com/2024/12/ms-crm-plugin-development-real-talk.html' title='MS CRM Plugin Development: Real Talk from a Senior Dev'/><author><name>Chamara Iresh</name><uri>http://www.blogger.com/profile/04695612052896290711</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//3.bp.blogspot.com/-Wfsm4TxTxO0/XiPTZjrj-cI/AAAAAAAAvCw/ONKFubGdBw41mPb1Xp89d9eMkvXaV0TkQCK4BGAYYCw/s220/20190817_151917.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2491204017359768357.post-3213233338404545602</id><published>2024-12-28T00:10:00.004+09:00</published><updated>2024-12-28T00:16:58.124+09:00</updated><title type='text'>Will AI Really Replace Software Engineers? Let&#39;s Talk About Devin</title><content type='html'>&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/AVvXsEjAJwD0n2zj3Wtf0UJ-dGqnD1C4n9uq6Oa-aM6U7Z9oMX7APBZJw1SnX5H3xWnlj9hdN48HPieowc4OPO16Az6vJONe4lCSqUNgGjB2L2v51sgWHY5y0YMjbMmhGXRNhIFr1vKb26ua5KxKmBu84C0LSjt9yxxTscmpLRhUIFYSPfBI4IdQPNTrSUT1r58L/s1792/8fbd13ef-53e2-4e26-8726-90b05db836ad.webp&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;1024&quot; data-original-width=&quot;1792&quot; height=&quot;366&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAJwD0n2zj3Wtf0UJ-dGqnD1C4n9uq6Oa-aM6U7Z9oMX7APBZJw1SnX5H3xWnlj9hdN48HPieowc4OPO16Az6vJONe4lCSqUNgGjB2L2v51sgWHY5y0YMjbMmhGXRNhIFr1vKb26ua5KxKmBu84C0LSjt9yxxTscmpLRhUIFYSPfBI4IdQPNTrSUT1r58L/w640-h366/8fbd13ef-53e2-4e26-8726-90b05db836ad.webp&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Hey there, fellow developers! 👋 I&#39;ve been deep in the trenches of software engineering for years, and let me tell you - the buzz around Devin, Cognition AI&#39;s new AI engineer, has gotten me thinking about our future in tech.&lt;/p&gt;
&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;The AI Engineer Next Door&lt;/h2&gt;
&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Remember when GitHub Copilot first dropped and everyone lost their minds? Well, Devin is like Copilot&#39;s overachieving cousin who went to Stanford. This AI doesn&#39;t just complete your code - it builds entire systems from scratch. We&#39;re talking requirements analysis, coding, testing, debugging, and deployment. Pretty wild, right?&lt;/p&gt;
&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;But here&#39;s the thing - I&#39;m not updating my LinkedIn to &quot;Former Software Engineer&quot; just yet. Here&#39;s why.&lt;/p&gt;
&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;The Real Impact (From Someone in the Trenches)&lt;/h2&gt;
&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Last week, I spent three hours hunting down a missing semicolon. THREE. HOURS. Imagine if Devin handled that while I focused on architecting our new microservices structure? That&#39;s the future we&#39;re looking at.&lt;/p&gt;
&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Let me break down what I think this means for us:&lt;/p&gt;
&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;The Good Stuff 🚀&lt;/h2&gt;
&lt;ul class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-disc space-y-2 pl-8&quot; depth=&quot;0&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;No more mind-numbing debugging sessions&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;Automated code reviews that actually make sense&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;2&quot;&gt;Tests that write themselves (hallelujah!)&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;3&quot;&gt;More time for the fun stuff - designing systems and solving real problems&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;The Challenges We&#39;ll Face 🤔&lt;/h2&gt;
&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Look, I&#39;ve worked with enough tools to know nothing&#39;s perfect. Here&#39;s what keeps me up at night:&lt;/p&gt;
&lt;ol class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-decimal space-y-2 pl-8&quot; depth=&quot;0&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;Security Concerns
I mean, who&#39;s responsible when AI-generated code introduces a zero-day vulnerability? Your friendly neighborhood developer (that&#39;s you) will need to be extra vigilant.&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;The Learning Curve
Remember how long it took to master Git? Now imagine learning to &quot;prompt engineer&quot; an AI developer. It&#39;s a whole new skill set.&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;2&quot;&gt;Code Quality Control
Sure, Devin can code. But can it understand why we shouldn&#39;t use that fancy new framework just because it&#39;s trending on Twitter?&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;New Opportunities (Not Just Buzzwords)&lt;/h2&gt;
&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Here&#39;s something exciting - I&#39;m seeing new roles pop up in job boards:&lt;/p&gt;
&lt;ul class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-disc space-y-2 pl-8&quot; depth=&quot;0&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;AI Development Orchestrators (fancy title for people who speak both human and AI)&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;Technical Ethics Officers (because someone needs to make sure the AI plays nice)&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;2&quot;&gt;AI-Human Bridge Architects (yes, that&#39;s actually a thing now)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;Personal Experience Corner 💡&lt;/h2&gt;
&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Last month, I experimented with AI coding assistants on a personal project. The result? I built in two weeks what would&#39;ve taken two months. But - and this is crucial - I was still the one making the important decisions. The AI was like having a super-smart intern who never needs coffee breaks.&lt;/p&gt;
&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;What This Means For Your Career&lt;/h2&gt;
&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Stop learning every new JavaScript framework that drops (I said what I said). Instead:&lt;/p&gt;
&lt;ul class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-disc space-y-2 pl-8&quot; depth=&quot;0&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;Master system design principles&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;Get comfortable with AI tools&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;2&quot;&gt;Develop your architectural thinking&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;3&quot;&gt;Build strong communication skills (AI still sucks at client meetings)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;Pro Tips from the Field 🎯&lt;/h2&gt;
&lt;ol class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-decimal space-y-2 pl-8&quot; depth=&quot;0&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;Start small - use AI for code review first&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;Document everything (your future self will thank you)&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;2&quot;&gt;Always verify AI-generated code&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;3&quot;&gt;Keep learning, but focus on principles over syntax&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;The Future Is Actually Pretty Cool&lt;/h2&gt;
&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;You know what&#39;s better than being replaced by AI? Having AI handle the boring stuff while we focus on innovation. It&#39;s not about surviving the AI revolution - it&#39;s about thriving in it.&lt;/p&gt;
&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;Let&#39;s Talk!&lt;/h2&gt;
&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;I&#39;m curious - what&#39;s your take on all this? Have you worked with any AI coding tools? Drop your thoughts in the comments below, or hit me up on Twitter&amp;nbsp;@chamrairesh&lt;/p&gt;
&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;P.S. If you&#39;re worried about AI taking your job, remember: they still can&#39;t explain to clients why their &quot;small change&quot; will take two weeks to implement. That&#39;s job security right there!&lt;/p&gt;
&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Keep coding, keep learning, and maybe give Devin a chance to handle your next debugging session. Trust me, your sanity will thank you.&lt;/p&gt;
&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;#SoftwareEngineering #AI #TechFuture #DevLife #CodingWithAI&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://chamarairesh.blogspot.com/feeds/3213233338404545602/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2491204017359768357/3213233338404545602' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/3213233338404545602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/3213233338404545602'/><link rel='alternate' type='text/html' href='http://chamarairesh.blogspot.com/2024/12/will-ai-really-replace-software.html' title='Will AI Really Replace Software Engineers? Let&#39;s Talk About Devin'/><author><name>Chamara Iresh</name><uri>http://www.blogger.com/profile/04695612052896290711</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//3.bp.blogspot.com/-Wfsm4TxTxO0/XiPTZjrj-cI/AAAAAAAAvCw/ONKFubGdBw41mPb1Xp89d9eMkvXaV0TkQCK4BGAYYCw/s220/20190817_151917.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAJwD0n2zj3Wtf0UJ-dGqnD1C4n9uq6Oa-aM6U7Z9oMX7APBZJw1SnX5H3xWnlj9hdN48HPieowc4OPO16Az6vJONe4lCSqUNgGjB2L2v51sgWHY5y0YMjbMmhGXRNhIFr1vKb26ua5KxKmBu84C0LSjt9yxxTscmpLRhUIFYSPfBI4IdQPNTrSUT1r58L/s72-w640-h366-c/8fbd13ef-53e2-4e26-8726-90b05db836ad.webp" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2491204017359768357.post-6045744374782488301</id><published>2024-12-17T02:02:00.001+09:00</published><updated>2024-12-17T02:02:09.083+09:00</updated><title type='text'>Importing Data for Multi-Select Option Sets in MS CRM using Excel Online</title><content type='html'>&lt;p&gt;Importing data into multi-select option sets in Microsoft Dynamics CRM can be challenging when using the standard data import functionality. The step-by-step guide below will help you successfully import data using the Excel Online out-of-the-box (OOB) functionality while avoiding common issues&lt;/p&gt;&lt;h3 class=&quot;graf graf--h3&quot; name=&quot;398c&quot;&gt;Why Use a Template for Data&amp;nbsp;Import?&lt;/h3&gt;&lt;p class=&quot;graf graf--p&quot; name=&quot;aedb&quot;&gt;Multi-select option sets allow you to assign multiple values to a single field in CRM. However, this flexibility comes with a challenge: ensuring data consistency during imports. Using a predefined blank template ensures the proper structure and formatting of your data.&lt;/p&gt;&lt;h3 class=&quot;graf graf--h3&quot; name=&quot;561b&quot;&gt;Step 1: Use the Blank View&amp;nbsp;Template&lt;/h3&gt;&lt;p class=&quot;graf graf--p&quot; name=&quot;26ee&quot;&gt;To make importing data simpler, you could create a &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;special blank view template&lt;/strong&gt; designed for data import. Here’s what you need to know:&lt;/p&gt;&lt;ol class=&quot;postList&quot;&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;40da&quot;&gt;&lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;What Is the Blank View?&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;This CRM view is a predefined structure with all the necessary columns for data import, but no data filled in.&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;f5ff&quot;&gt;&lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;Why Keep It Blank?&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;It’s good to leave this view empty so it serves as a clean template. If populated, it may display existing data, defeating its purpose.&lt;/li&gt;&lt;/ol&gt;&lt;h3 class=&quot;graf graf--h3&quot; name=&quot;f758&quot;&gt;Step 2: Export the&amp;nbsp;Template&lt;/h3&gt;&lt;ol class=&quot;postList&quot;&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;9dd6&quot;&gt;Open the blank view in MS CRM.&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;4c4e&quot;&gt;Export the view to Excel. This exported file becomes your &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;working template&lt;/strong&gt; for data import.&lt;/li&gt;&lt;/ol&gt;&lt;p class=&quot;graf graf--p&quot; name=&quot;54e4&quot;&gt;💡 &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;Tip:&lt;/strong&gt; Always double-check that the view is blank before exporting it.&lt;/p&gt;&lt;h3 class=&quot;graf graf--h3&quot; name=&quot;5e4a&quot;&gt;Step 3: Fill in the&amp;nbsp;Template&lt;/h3&gt;&lt;p class=&quot;graf graf--p&quot; name=&quot;85c1&quot;&gt;Once you have the template:&lt;/p&gt;&lt;ol class=&quot;postList&quot;&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;11dd&quot;&gt;Open the exported Excel file on your computer.&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;b9b2&quot;&gt;Carefully enter the data you wish to import, ensuring all fields match the required format.&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;a23a&quot;&gt;For multi-select option sets, separate multiple values with a &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;semicolon (;)&lt;/strong&gt;. For example:&lt;/li&gt;&lt;/ol&gt;&lt;pre class=&quot;graf graf--pre graf--preV2&quot; data-code-block-mode=&quot;0&quot; name=&quot;a410&quot; spellcheck=&quot;false&quot;&gt;&lt;span class=&quot;pre--content&quot;&gt;Option1; Option2; Option3&lt;/span&gt;&lt;/pre&gt;&lt;p class=&quot;graf graf--p&quot; name=&quot;a7fd&quot;&gt;✅ &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;Pro Tip:&lt;/strong&gt; Accuracy is key. Mistakes in formatting may cause import errors.&lt;/p&gt;&lt;figure class=&quot;graf graf--figure&quot; name=&quot;6dc0&quot;&gt;&lt;img class=&quot;graf-image&quot; data-height=&quot;298&quot; data-image-id=&quot;1*UQsVXj2nNKhFpZ0CQAdi7A.png&quot; data-width=&quot;531&quot; src=&quot;https://cdn-images-1.medium.com/max/800/1*UQsVXj2nNKhFpZ0CQAdi7A.png&quot; /&gt;&lt;/figure&gt;&lt;h3 class=&quot;graf graf--h3&quot; name=&quot;0ba0&quot;&gt;Step 4: Open Excel Online in&amp;nbsp;CRM&lt;/h3&gt;&lt;p class=&quot;graf graf--p&quot; name=&quot;d394&quot;&gt;Back in CRM, follow these steps:&lt;/p&gt;&lt;ol class=&quot;postList&quot;&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;663d&quot;&gt;Navigate to the same blank view you used earlier.&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;bb91&quot;&gt;Click the &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;three dots (···)&lt;/strong&gt; in the toolbar, then select &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;Open in Excel Online&lt;/strong&gt;.&lt;/li&gt;&lt;/ol&gt;&lt;p class=&quot;graf graf--p&quot; name=&quot;06e5&quot;&gt;This will allow you to edit the data directly in the CRM environment.&lt;/p&gt;&lt;h3 class=&quot;graf graf--h3&quot; name=&quot;4e5d&quot;&gt;Step 5: Copy and Paste Your&amp;nbsp;Data&lt;/h3&gt;&lt;ol class=&quot;postList&quot;&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;1844&quot;&gt;Open your completed Excel template.&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;bad5&quot;&gt;Copy the filled data from your file.&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;3d38&quot;&gt;Paste it into the Excel Online sheet opened from CRM.&lt;/li&gt;&lt;/ol&gt;&lt;p class=&quot;graf graf--p&quot; name=&quot;9a63&quot;&gt;⚠️ &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;Important:&lt;/strong&gt; Use a semicolon (;) as the separator for multi-select option sets. If any other delimiter is used, the import process will fail.&lt;/p&gt;&lt;h3 class=&quot;graf graf--h3&quot; name=&quot;7948&quot;&gt;Step 6: Save and Track&amp;nbsp;Progress&lt;/h3&gt;&lt;ol class=&quot;postList&quot;&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;c1dc&quot;&gt;Once the data is pasted, save your changes in Excel Online.&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;ba92&quot;&gt;The CRM system will automatically start the import process.&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;b099&quot;&gt;Track the import progress directly in CRM by navigating to the &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;Imports&lt;/strong&gt; section.&lt;/li&gt;&lt;/ol&gt;&lt;figure class=&quot;graf graf--figure&quot; name=&quot;e402&quot;&gt;&lt;img class=&quot;graf-image&quot; data-height=&quot;281&quot; data-image-id=&quot;1*adVY5xmn1YSScXG1ACgx5A.png&quot; data-is-featured=&quot;true&quot; data-width=&quot;455&quot; src=&quot;https://cdn-images-1.medium.com/max/800/1*adVY5xmn1YSScXG1ACgx5A.png&quot; /&gt;&lt;/figure&gt;&lt;figure class=&quot;graf graf--figure&quot; name=&quot;fb70&quot;&gt;&lt;img class=&quot;graf-image&quot; data-height=&quot;302&quot; data-image-id=&quot;1*VboWUil_F_6ZkIfsXvQz4g.png&quot; data-width=&quot;605&quot; src=&quot;https://cdn-images-1.medium.com/max/800/1*VboWUil_F_6ZkIfsXvQz4g.png&quot; /&gt;&lt;/figure&gt;&lt;h3 class=&quot;graf graf--h3&quot; name=&quot;54a5&quot;&gt;Import Process&lt;/h3&gt;&lt;p class=&quot;graf graf--p&quot; name=&quot;d00b&quot;&gt;Flowchart to visualize the entire import workflow:&lt;/p&gt;&lt;figure class=&quot;graf graf--figure&quot; name=&quot;3731&quot;&gt;&lt;img class=&quot;graf-image&quot; data-height=&quot;753&quot; data-image-id=&quot;1*XuI6gNVpIvr7rseJUBKLjA.png&quot; data-width=&quot;337&quot; src=&quot;https://cdn-images-1.medium.com/max/800/1*XuI6gNVpIvr7rseJUBKLjA.png&quot; /&gt;&lt;/figure&gt;&lt;h3 class=&quot;graf graf--h3&quot; name=&quot;a24a&quot;&gt;Benefits of This&amp;nbsp;Approach&lt;/h3&gt;&lt;ul class=&quot;postList&quot;&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;bb6d&quot;&gt;&lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;Consistency:&lt;/strong&gt; Using a blank template ensures that all required columns are present and properly formatted.&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;6357&quot;&gt;&lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;Accuracy:&lt;/strong&gt; Direct edits in Excel Online minimize errors during upload.&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;9abf&quot;&gt;&lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;Efficiency:&lt;/strong&gt; Tracking progress in CRM helps identify and resolve issues quickly.&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;graf graf--p&quot; name=&quot;e2de&quot;&gt;Always remember to use semicolons for separating values, double-check your formatting, and save your work frequently to ensure a smooth import experience.&lt;/p&gt;&lt;p class=&quot;graf graf--p&quot; name=&quot;a1bf&quot;&gt;Happy importing! 🚀&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://chamarairesh.blogspot.com/feeds/6045744374782488301/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2491204017359768357/6045744374782488301' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/6045744374782488301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/6045744374782488301'/><link rel='alternate' type='text/html' href='http://chamarairesh.blogspot.com/2024/12/importing-data-for-multi-select-option.html' title='Importing Data for Multi-Select Option Sets in MS CRM using Excel Online'/><author><name>Chamara Iresh</name><uri>http://www.blogger.com/profile/04695612052896290711</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//3.bp.blogspot.com/-Wfsm4TxTxO0/XiPTZjrj-cI/AAAAAAAAvCw/ONKFubGdBw41mPb1Xp89d9eMkvXaV0TkQCK4BGAYYCw/s220/20190817_151917.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2491204017359768357.post-6981396209512926077</id><published>2024-05-01T02:49:00.004+09:00</published><updated>2024-05-01T02:56:35.979+09:00</updated><title type='text'>Applying the Single Responsibility Principle (SRP)</title><content type='html'>&lt;h2 id=&quot;user-content-applying-the-single-responsibility-principle-(srp)-in-report-processing&quot; mlp=&quot;1&quot; style=&quot;background-color: white; box-sizing: border-box; color: rgba(0, 0, 0, 0.9); font-family: &amp;quot;Segoe UI VSS (Regular)&amp;quot;, &amp;quot;Segoe UI&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Ubuntu, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 1.0625rem; margin: 0px 0px 8px;&quot;&gt;Applying the Single Responsibility Principle (SRP) in Report Processing&lt;a aria-labelledby=&quot;user-content-applying-the-single-responsibility-principle-(srp)-in-report-processing&quot; class=&quot;shareHeaderAnchor&quot; href=&quot;https://dev.azure.com/felinesoft/Kennel%20Club/_wiki/wikis/Kennel-Club.wiki/582/Kennel-Club?anchor=applying-the-single-responsibility-principle-(srp)-in-report-processing&quot; style=&quot;box-sizing: border-box; font-weight: normal; line-height: 22px; margin: 0px 4px; outline: transparent; padding: 0px 4px; text-decoration-line: none;&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;user-content-applying-the-single-responsibility-principle-(srp)-in-report-processing&quot; mlp=&quot;1&quot; style=&quot;background-color: white; box-sizing: border-box; color: rgba(0, 0, 0, 0.9); font-family: &amp;quot;Segoe UI VSS (Regular)&amp;quot;, &amp;quot;Segoe UI&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Ubuntu, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 0.9375rem; margin: 0px 0px 8px;&quot;&gt;&lt;p mlp=&quot;2&quot; style=&quot;box-sizing: border-box; font-family: &amp;quot;Segoe UI VSS (Regular)&amp;quot;, &amp;quot;Segoe UI&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Ubuntu, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-weight: 400; margin: 0px 0px 16px; position: relative;&quot;&gt;The Single Responsibility Principle (SRP) is a foundational concept in object-oriented programming that advocates for classes to have only one reason to change. This principle promotes modular, readable, and maintainable code by ensuring that each class or module encapsulates only one responsibility or behavior.&lt;/p&gt;&lt;/h3&gt;&lt;h3 id=&quot;user-content-example-scenario&quot; mlp=&quot;3&quot; style=&quot;background-color: white; box-sizing: border-box; color: rgba(0, 0, 0, 0.9); font-family: &amp;quot;Segoe UI VSS (Regular)&amp;quot;, &amp;quot;Segoe UI&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Ubuntu, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 0.9375rem; margin: 24px 0px 8px;&quot;&gt;Example Scenario&lt;a aria-labelledby=&quot;user-content-example-scenario&quot; class=&quot;shareHeaderAnchor&quot; href=&quot;https://dev.azure.com/felinesoft/Kennel%20Club/_wiki/wikis/Kennel-Club.wiki/582/Kennel-Club?anchor=example-scenario&quot; style=&quot;box-sizing: border-box; font-weight: normal; line-height: 18px; margin: 0px 4px; outline: transparent; padding: 0px 4px; text-decoration-line: none;&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;h3 mlp=&quot;1&quot; style=&quot;background-color: white; box-sizing: border-box; color: rgba(0, 0, 0, 0.9); font-family: &amp;quot;Segoe UI VSS (Regular)&amp;quot;, &amp;quot;Segoe UI&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Ubuntu, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 0.9375rem; margin: 0px 0px 8px;&quot;&gt;&lt;p mlp=&quot;4&quot; style=&quot;box-sizing: border-box; font-family: &amp;quot;Segoe UI VSS (Regular)&amp;quot;, &amp;quot;Segoe UI&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Ubuntu, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-weight: 400; margin: 0px 0px 16px; position: relative;&quot;&gt;In our scenario, we have a reporting system responsible for processing various report items asynchronously. To uphold the SRP, we aim to refactor our report processing logic into distinct components that each fulfill a specific responsibility, such as data encapsulation, processing orchestration, and logging.&lt;/p&gt;&lt;/h3&gt;&lt;h3 id=&quot;user-content-implementation&quot; mlp=&quot;5&quot; style=&quot;background-color: white; box-sizing: border-box; color: rgba(0, 0, 0, 0.9); font-family: &amp;quot;Segoe UI VSS (Regular)&amp;quot;, &amp;quot;Segoe UI&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Ubuntu, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 0.9375rem; margin: 24px 0px 8px;&quot;&gt;Implementation&lt;a aria-labelledby=&quot;user-content-implementation&quot; class=&quot;shareHeaderAnchor&quot; href=&quot;https://dev.azure.com/felinesoft/Kennel%20Club/_wiki/wikis/Kennel-Club.wiki/582/Kennel-Club?anchor=implementation&quot; style=&quot;box-sizing: border-box; font-weight: normal; line-height: 18px; margin: 0px 4px; outline: transparent; padding: 0px 4px; text-decoration-line: none;&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;h4 id=&quot;user-content-1.-**reportitem-class**&quot; mlp=&quot;6&quot; style=&quot;background-color: white; box-sizing: border-box; color: rgba(0, 0, 0, 0.9); font-family: &amp;quot;Segoe UI VSS (Regular)&amp;quot;, &amp;quot;Segoe UI&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Ubuntu, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 0.875rem; margin: 24px 0px 8px;&quot;&gt;1.&amp;nbsp;&lt;strong mlp=&quot;7&quot; style=&quot;box-sizing: border-box;&quot;&gt;ReportItem Class&lt;/strong&gt;&lt;a aria-labelledby=&quot;user-content-1.-**reportitem-class**&quot; class=&quot;shareHeaderAnchor&quot; href=&quot;https://dev.azure.com/felinesoft/Kennel%20Club/_wiki/wikis/Kennel-Club.wiki/582/Kennel-Club?anchor=1.-**reportitem-class**&quot; style=&quot;box-sizing: border-box; font-weight: normal; line-height: 18px; margin: 0px 4px; outline: transparent; padding: 0px 4px; text-decoration-line: none;&quot;&gt;&lt;/a&gt;&lt;/h4&gt;&lt;h3 mlp=&quot;1&quot; style=&quot;background-color: white; box-sizing: border-box; color: rgba(0, 0, 0, 0.9); font-family: &amp;quot;Segoe UI VSS (Regular)&amp;quot;, &amp;quot;Segoe UI&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Ubuntu, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 0.9375rem; margin: 0px 0px 8px;&quot;&gt;&lt;pre class=&quot;hljs&quot; style=&quot;background-color: var(--palette-black-alpha-6,rgba(0, 0, 0, .06)); border-radius: 2px; box-sizing: border-box; font-size: 0.75rem; font-weight: 400; margin-bottom: 16px; margin-top: 0px; overflow-wrap: normal; overflow-x: auto; padding: 15px; text-size-adjust: none;&quot;&gt;&lt;code class=&quot;csharp&quot; style=&quot;background-color: transparent; border-radius: 2px; box-sizing: border-box; color: var(--text-primary-color,rgba(0, 0, 0, .9)); font-family: Menlo, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: inherit; padding: 0px;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;hljs-title&quot; style=&quot;box-sizing: border-box; color: rgba(var(--palette-accent1-dark,168, 0, 0),1);&quot;&gt;ReportItem&lt;/span&gt;
{
    &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;public&lt;/span&gt; Guid Id { &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;get&lt;/span&gt;; &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;set&lt;/span&gt;; }
    &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;string&lt;/span&gt; Name { &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;get&lt;/span&gt;; &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;set&lt;/span&gt;; }
    &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;public&lt;/span&gt; ReportItemStatus Status { &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;get&lt;/span&gt;; &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;set&lt;/span&gt;; }
    &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;string&lt;/span&gt; ErrorMessage { &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;get&lt;/span&gt;; &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;set&lt;/span&gt;; }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p mlp=&quot;9&quot; style=&quot;box-sizing: border-box; font-family: &amp;quot;Segoe UI VSS (Regular)&amp;quot;, &amp;quot;Segoe UI&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Ubuntu, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-weight: 400; margin: 0px 0px 16px; position: relative;&quot;&gt;The&amp;nbsp;&lt;code mlp=&quot;10&quot; style=&quot;background-color: var(--palette-black-alpha-6,rgba(0, 0, 0, .06)); border-radius: 2px; box-sizing: border-box; color: var(--text-primary-color,rgba(0, 0, 0, .9)); font-family: Menlo, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.75rem; padding: 2px 4px;&quot;&gt;ReportItem&lt;/code&gt;&amp;nbsp;class represents a report item entity, encapsulating properties like&amp;nbsp;&lt;code mlp=&quot;11&quot; style=&quot;background-color: var(--palette-black-alpha-6,rgba(0, 0, 0, .06)); border-radius: 2px; box-sizing: border-box; color: var(--text-primary-color,rgba(0, 0, 0, .9)); font-family: Menlo, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.75rem; padding: 2px 4px;&quot;&gt;Id&lt;/code&gt;,&amp;nbsp;&lt;code mlp=&quot;12&quot; style=&quot;background-color: var(--palette-black-alpha-6,rgba(0, 0, 0, .06)); border-radius: 2px; box-sizing: border-box; color: var(--text-primary-color,rgba(0, 0, 0, .9)); font-family: Menlo, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.75rem; padding: 2px 4px;&quot;&gt;Name&lt;/code&gt;,&amp;nbsp;&lt;code mlp=&quot;13&quot; style=&quot;background-color: var(--palette-black-alpha-6,rgba(0, 0, 0, .06)); border-radius: 2px; box-sizing: border-box; color: var(--text-primary-color,rgba(0, 0, 0, .9)); font-family: Menlo, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.75rem; padding: 2px 4px;&quot;&gt;Status&lt;/code&gt;, and&amp;nbsp;&lt;code mlp=&quot;14&quot; style=&quot;background-color: var(--palette-black-alpha-6,rgba(0, 0, 0, .06)); border-radius: 2px; box-sizing: border-box; color: var(--text-primary-color,rgba(0, 0, 0, .9)); font-family: Menlo, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.75rem; padding: 2px 4px;&quot;&gt;ErrorMessage&lt;/code&gt;. This class is solely responsible for managing data related to a report item.&lt;/p&gt;&lt;/h3&gt;&lt;h4 id=&quot;user-content-2.-**reportprocessor-class**&quot; mlp=&quot;15&quot; style=&quot;background-color: white; box-sizing: border-box; color: rgba(0, 0, 0, 0.9); font-family: &amp;quot;Segoe UI VSS (Regular)&amp;quot;, &amp;quot;Segoe UI&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Ubuntu, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 0.875rem; margin: 24px 0px 8px;&quot;&gt;2.&amp;nbsp;&lt;strong mlp=&quot;16&quot; style=&quot;box-sizing: border-box;&quot;&gt;ReportProcessor Class&lt;/strong&gt;&lt;a aria-labelledby=&quot;user-content-2.-**reportprocessor-class**&quot; class=&quot;shareHeaderAnchor&quot; href=&quot;https://dev.azure.com/felinesoft/Kennel%20Club/_wiki/wikis/Kennel-Club.wiki/582/Kennel-Club?anchor=2.-**reportprocessor-class**&quot; style=&quot;box-sizing: border-box; font-weight: normal; line-height: 18px; margin: 0px 4px; outline: transparent; padding: 0px 4px; text-decoration-line: none;&quot;&gt;&lt;/a&gt;&lt;/h4&gt;&lt;h3 mlp=&quot;1&quot; style=&quot;background-color: white; box-sizing: border-box; color: rgba(0, 0, 0, 0.9); font-family: &amp;quot;Segoe UI VSS (Regular)&amp;quot;, &amp;quot;Segoe UI&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Ubuntu, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 0.9375rem; margin: 0px 0px 8px;&quot;&gt;&lt;pre class=&quot;hljs&quot; style=&quot;background-color: var(--palette-black-alpha-6,rgba(0, 0, 0, .06)); border-radius: 2px; box-sizing: border-box; font-size: 0.75rem; font-weight: 400; margin-bottom: 16px; margin-top: 0px; overflow-wrap: normal; overflow-x: auto; padding: 15px; text-size-adjust: none;&quot;&gt;&lt;code class=&quot;csharp&quot; style=&quot;background-color: transparent; border-radius: 2px; box-sizing: border-box; color: var(--text-primary-color,rgba(0, 0, 0, .9)); font-family: Menlo, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: inherit; padding: 0px;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;hljs-title&quot; style=&quot;box-sizing: border-box; color: rgba(var(--palette-accent1-dark,168, 0, 0),1);&quot;&gt;ReportProcessor&lt;/span&gt;
{
    &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;readonly&lt;/span&gt; IReportService _reportService;
    &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;readonly&lt;/span&gt; ILogger _logger;

    &lt;span class=&quot;hljs-function&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-title&quot; style=&quot;box-sizing: border-box; color: rgba(var(--palette-accent1-dark,168, 0, 0),1);&quot;&gt;ReportProcessor&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot; style=&quot;box-sizing: border-box;&quot;&gt;IReportService reportService, ILogger logger&lt;/span&gt;)
    &lt;/span&gt;{
        _reportService = reportService;
        _logger = logger;
    }

    &lt;span class=&quot;hljs-function&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;async&lt;/span&gt; Task &lt;span class=&quot;hljs-title&quot; style=&quot;box-sizing: border-box; color: rgba(var(--palette-accent1-dark,168, 0, 0),1);&quot;&gt;ProcessReportItemAsync&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot; style=&quot;box-sizing: border-box;&quot;&gt;Guid itemId&lt;/span&gt;)
    &lt;/span&gt;{
        &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;var&lt;/span&gt; item = &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;await&lt;/span&gt; _reportService.GetReportItemAsync(itemId);

        &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;if&lt;/span&gt; (item == &lt;span class=&quot;hljs-literal&quot; style=&quot;box-sizing: border-box;&quot;&gt;null&lt;/span&gt; || item.Status != ReportItemStatus.Pending)
        {
            _logger.LogWarning(&lt;span class=&quot;hljs-string&quot; style=&quot;box-sizing: border-box; color: rgba(var(--palette-accent1-dark,168, 0, 0),1);&quot;&gt;$&quot;Report item with ID &lt;span class=&quot;hljs-subst&quot; style=&quot;box-sizing: border-box;&quot;&gt;{itemId}&lt;/span&gt; is not available for processing.&quot;&lt;/span&gt;);
            &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;return&lt;/span&gt;;
        }

        &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;try&lt;/span&gt;
        {
            _logger.LogInformation(&lt;span class=&quot;hljs-string&quot; style=&quot;box-sizing: border-box; color: rgba(var(--palette-accent1-dark,168, 0, 0),1);&quot;&gt;$&quot;Processing report item: &lt;span class=&quot;hljs-subst&quot; style=&quot;box-sizing: border-box;&quot;&gt;{item.Name}&lt;/span&gt;&quot;&lt;/span&gt;);

            item.Status = ReportItemStatus.Processing;
            &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;await&lt;/span&gt; _reportService.UpdateReportItemAsync(item);

            &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;await&lt;/span&gt; SimulateReportProcessingAsync(item);

            item.Status = ReportItemStatus.Completed;
            &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;await&lt;/span&gt; _reportService.UpdateReportItemAsync(item);

            _logger.LogInformation(&lt;span class=&quot;hljs-string&quot; style=&quot;box-sizing: border-box; color: rgba(var(--palette-accent1-dark,168, 0, 0),1);&quot;&gt;$&quot;Report item processed successfully: &lt;span class=&quot;hljs-subst&quot; style=&quot;box-sizing: border-box;&quot;&gt;{item.Name}&lt;/span&gt;&quot;&lt;/span&gt;);
        }
        &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;catch&lt;/span&gt; (Exception ex)
        {
            item.Status = ReportItemStatus.Failed;
            item.ErrorMessage = ex.Message;
            &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;await&lt;/span&gt; _reportService.UpdateReportItemAsync(item);

            _logger.LogError(&lt;span class=&quot;hljs-string&quot; style=&quot;box-sizing: border-box; color: rgba(var(--palette-accent1-dark,168, 0, 0),1);&quot;&gt;$&quot;Failed to process report item: &lt;span class=&quot;hljs-subst&quot; style=&quot;box-sizing: border-box;&quot;&gt;{item.Name}&lt;/span&gt;. Error: &lt;span class=&quot;hljs-subst&quot; style=&quot;box-sizing: border-box;&quot;&gt;{ex.Message}&lt;/span&gt;&quot;&lt;/span&gt;);
        }
    }

    &lt;span class=&quot;hljs-function&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;async&lt;/span&gt; Task &lt;span class=&quot;hljs-title&quot; style=&quot;box-sizing: border-box; color: rgba(var(--palette-accent1-dark,168, 0, 0),1);&quot;&gt;SimulateReportProcessingAsync&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot; style=&quot;box-sizing: border-box;&quot;&gt;ReportItem item&lt;/span&gt;)
    &lt;/span&gt;{
        &lt;span class=&quot;hljs-comment&quot; style=&quot;box-sizing: border-box; color: rgba(var(--palette-accent2-dark,16, 124, 16),1);&quot;&gt;// Simulate report processing&lt;/span&gt;
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p mlp=&quot;18&quot; style=&quot;box-sizing: border-box; font-family: &amp;quot;Segoe UI VSS (Regular)&amp;quot;, &amp;quot;Segoe UI&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Ubuntu, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-weight: 400; margin: 0px 0px 16px; position: relative;&quot;&gt;The&amp;nbsp;&lt;code mlp=&quot;19&quot; style=&quot;background-color: var(--palette-black-alpha-6,rgba(0, 0, 0, .06)); border-radius: 2px; box-sizing: border-box; color: var(--text-primary-color,rgba(0, 0, 0, .9)); font-family: Menlo, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.75rem; padding: 2px 4px;&quot;&gt;ReportProcessor&lt;/code&gt;&amp;nbsp;class is dedicated to processing report items asynchronously. It utilizes an injected&amp;nbsp;&lt;code mlp=&quot;20&quot; style=&quot;background-color: var(--palette-black-alpha-6,rgba(0, 0, 0, .06)); border-radius: 2px; box-sizing: border-box; color: var(--text-primary-color,rgba(0, 0, 0, .9)); font-family: Menlo, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.75rem; padding: 2px 4px;&quot;&gt;IReportService&lt;/code&gt;&amp;nbsp;for data retrieval and updates and an&amp;nbsp;&lt;code mlp=&quot;21&quot; style=&quot;background-color: var(--palette-black-alpha-6,rgba(0, 0, 0, .06)); border-radius: 2px; box-sizing: border-box; color: var(--text-primary-color,rgba(0, 0, 0, .9)); font-family: Menlo, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.75rem; padding: 2px 4px;&quot;&gt;ILogger&lt;/code&gt;&amp;nbsp;for logging processing outcomes and errors. This class demonstrates a clear responsibility focused on orchestrating the report processing workflow.&lt;/p&gt;&lt;/h3&gt;&lt;h4 id=&quot;user-content-3.-**interfaces**&quot; mlp=&quot;22&quot; style=&quot;background-color: white; box-sizing: border-box; color: rgba(0, 0, 0, 0.9); font-family: &amp;quot;Segoe UI VSS (Regular)&amp;quot;, &amp;quot;Segoe UI&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Ubuntu, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 0.875rem; margin: 24px 0px 8px;&quot;&gt;3.&amp;nbsp;&lt;strong mlp=&quot;23&quot; style=&quot;box-sizing: border-box;&quot;&gt;Interfaces&lt;/strong&gt;&lt;a aria-labelledby=&quot;user-content-3.-**interfaces**&quot; class=&quot;shareHeaderAnchor&quot; href=&quot;https://dev.azure.com/felinesoft/Kennel%20Club/_wiki/wikis/Kennel-Club.wiki/582/Kennel-Club?anchor=3.-**interfaces**&quot; style=&quot;box-sizing: border-box; font-weight: normal; line-height: 18px; margin: 0px 4px; outline: transparent; padding: 0px 4px; text-decoration-line: none;&quot;&gt;&lt;/a&gt;&lt;/h4&gt;&lt;h3 mlp=&quot;1&quot; style=&quot;background-color: white; box-sizing: border-box; color: rgba(0, 0, 0, 0.9); font-family: &amp;quot;Segoe UI VSS (Regular)&amp;quot;, &amp;quot;Segoe UI&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Ubuntu, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 0.9375rem; margin: 0px 0px 8px;&quot;&gt;&lt;pre class=&quot;hljs&quot; style=&quot;background-color: var(--palette-black-alpha-6,rgba(0, 0, 0, .06)); border-radius: 2px; box-sizing: border-box; font-size: 0.75rem; font-weight: 400; margin-bottom: 16px; margin-top: 0px; overflow-wrap: normal; overflow-x: auto; padding: 15px; text-size-adjust: none;&quot;&gt;&lt;code class=&quot;csharp&quot; style=&quot;background-color: transparent; border-radius: 2px; box-sizing: border-box; color: var(--text-primary-color,rgba(0, 0, 0, .9)); font-family: Menlo, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: inherit; padding: 0px;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;hljs-title&quot; style=&quot;box-sizing: border-box; color: rgba(var(--palette-accent1-dark,168, 0, 0),1);&quot;&gt;IReportService&lt;/span&gt;
{
    &lt;span class=&quot;hljs-function&quot; style=&quot;box-sizing: border-box;&quot;&gt;Task&amp;lt;ReportItem&amp;gt; &lt;span class=&quot;hljs-title&quot; style=&quot;box-sizing: border-box; color: rgba(var(--palette-accent1-dark,168, 0, 0),1);&quot;&gt;GetReportItemAsync&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot; style=&quot;box-sizing: border-box;&quot;&gt;Guid itemId&lt;/span&gt;)&lt;/span&gt;;
    &lt;span class=&quot;hljs-function&quot; style=&quot;box-sizing: border-box;&quot;&gt;Task &lt;span class=&quot;hljs-title&quot; style=&quot;box-sizing: border-box; color: rgba(var(--palette-accent1-dark,168, 0, 0),1);&quot;&gt;UpdateReportItemAsync&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot; style=&quot;box-sizing: border-box;&quot;&gt;ReportItem item&lt;/span&gt;)&lt;/span&gt;;
}

&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;hljs-title&quot; style=&quot;box-sizing: border-box; color: rgba(var(--palette-accent1-dark,168, 0, 0),1);&quot;&gt;ILogger&lt;/span&gt;
{
    &lt;span class=&quot;hljs-function&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title&quot; style=&quot;box-sizing: border-box; color: rgba(var(--palette-accent1-dark,168, 0, 0),1);&quot;&gt;LogInformation&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;string&lt;/span&gt; message&lt;/span&gt;)&lt;/span&gt;;
    &lt;span class=&quot;hljs-function&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title&quot; style=&quot;box-sizing: border-box; color: rgba(var(--palette-accent1-dark,168, 0, 0),1);&quot;&gt;LogWarning&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;string&lt;/span&gt; message&lt;/span&gt;)&lt;/span&gt;;
    &lt;span class=&quot;hljs-function&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title&quot; style=&quot;box-sizing: border-box; color: rgba(var(--palette-accent1-dark,168, 0, 0),1);&quot;&gt;LogError&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: border-box; color: var(--communication-foreground,rgba(0, 90, 158, 1));&quot;&gt;string&lt;/span&gt; message&lt;/span&gt;)&lt;/span&gt;;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p mlp=&quot;25&quot; style=&quot;box-sizing: border-box; font-family: &amp;quot;Segoe UI VSS (Regular)&amp;quot;, &amp;quot;Segoe UI&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Ubuntu, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-weight: 400; margin: 0px 0px 16px; position: relative;&quot;&gt;Interfaces like&amp;nbsp;&lt;code mlp=&quot;26&quot; style=&quot;background-color: var(--palette-black-alpha-6,rgba(0, 0, 0, .06)); border-radius: 2px; box-sizing: border-box; color: var(--text-primary-color,rgba(0, 0, 0, .9)); font-family: Menlo, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.75rem; padding: 2px 4px;&quot;&gt;IReportService&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code mlp=&quot;27&quot; style=&quot;background-color: var(--palette-black-alpha-6,rgba(0, 0, 0, .06)); border-radius: 2px; box-sizing: border-box; color: var(--text-primary-color,rgba(0, 0, 0, .9)); font-family: Menlo, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.75rem; padding: 2px 4px;&quot;&gt;ILogger&lt;/code&gt;&amp;nbsp;define contracts for interacting with report data and logging actions, respectively. Leveraging interfaces promotes loose coupling, facilitates dependency injection for enhanced testability, and enables flexibility in swapping implementations.&lt;/p&gt;&lt;/h3&gt;&lt;h3 id=&quot;user-content-conclusion&quot; mlp=&quot;28&quot; style=&quot;background-color: white; box-sizing: border-box; color: rgba(0, 0, 0, 0.9); font-family: &amp;quot;Segoe UI VSS (Regular)&amp;quot;, &amp;quot;Segoe UI&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Ubuntu, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 0.9375rem; margin: 24px 0px 8px;&quot;&gt;Conclusion&lt;a aria-labelledby=&quot;user-content-conclusion&quot; class=&quot;shareHeaderAnchor&quot; href=&quot;https://dev.azure.com/felinesoft/Kennel%20Club/_wiki/wikis/Kennel-Club.wiki/582/Kennel-Club?anchor=conclusion&quot; style=&quot;box-sizing: border-box; font-weight: normal; line-height: 18px; margin: 0px 4px; outline: transparent; padding: 0px 4px; text-decoration-line: none;&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;h3 mlp=&quot;1&quot; style=&quot;background-color: white; box-sizing: border-box; color: rgba(0, 0, 0, 0.9); font-family: &amp;quot;Segoe UI VSS (Regular)&amp;quot;, &amp;quot;Segoe UI&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Ubuntu, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 0.9375rem; margin: 0px 0px 8px;&quot;&gt;&lt;p mlp=&quot;29&quot; style=&quot;box-sizing: border-box; font-family: &amp;quot;Segoe UI VSS (Regular)&amp;quot;, &amp;quot;Segoe UI&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Ubuntu, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-weight: 400; margin: 0px 0px 16px; position: relative;&quot;&gt;In this example, we&#39;ve refactored our report processing logic to adhere to the Single Responsibility Principle (SRP). Each class (&lt;code mlp=&quot;30&quot; style=&quot;background-color: var(--palette-black-alpha-6,rgba(0, 0, 0, .06)); border-radius: 2px; box-sizing: border-box; color: var(--text-primary-color,rgba(0, 0, 0, .9)); font-family: Menlo, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.75rem; padding: 2px 4px;&quot;&gt;ReportItem&lt;/code&gt;,&amp;nbsp;&lt;code mlp=&quot;31&quot; style=&quot;background-color: var(--palette-black-alpha-6,rgba(0, 0, 0, .06)); border-radius: 2px; box-sizing: border-box; color: var(--text-primary-color,rgba(0, 0, 0, .9)); font-family: Menlo, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.75rem; padding: 2px 4px;&quot;&gt;ReportProcessor&lt;/code&gt;) embodies a distinct responsibility, such as data encapsulation or processing orchestration. Meanwhile, interfaces (&lt;code mlp=&quot;32&quot; style=&quot;background-color: var(--palette-black-alpha-6,rgba(0, 0, 0, .06)); border-radius: 2px; box-sizing: border-box; color: var(--text-primary-color,rgba(0, 0, 0, .9)); font-family: Menlo, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.75rem; padding: 2px 4px;&quot;&gt;IReportService&lt;/code&gt;,&amp;nbsp;&lt;code mlp=&quot;33&quot; style=&quot;background-color: var(--palette-black-alpha-6,rgba(0, 0, 0, .06)); border-radius: 2px; box-sizing: border-box; color: var(--text-primary-color,rgba(0, 0, 0, .9)); font-family: Menlo, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 0.75rem; padding: 2px 4px;&quot;&gt;ILogger&lt;/code&gt;) facilitate decoupling and abstraction, fostering maintainable and extensible code.&lt;/p&gt;&lt;p mlp=&quot;34&quot; style=&quot;box-sizing: border-box; font-family: &amp;quot;Segoe UI VSS (Regular)&amp;quot;, &amp;quot;Segoe UI&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Ubuntu, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-weight: 400; margin: 0px; position: relative;&quot;&gt;By applying SRP, we&#39;ve established a modular and maintainable design where each component is dedicated to a specific aspect of report processing. This design approach enhances code clarity, adaptability to changing requirements, and adherence to best practices in software design and architecture. Ultimately, embracing SRP contributes to a cleaner and more manageable codebase, promoting robustness and scalability in our reporting system.&lt;/p&gt;&lt;/h3&gt;</content><link rel='replies' type='application/atom+xml' href='http://chamarairesh.blogspot.com/feeds/6981396209512926077/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2491204017359768357/6981396209512926077' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/6981396209512926077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/6981396209512926077'/><link rel='alternate' type='text/html' href='http://chamarairesh.blogspot.com/2024/05/applying-single-responsibility.html' title='Applying the Single Responsibility Principle (SRP)'/><author><name>Chamara Iresh</name><uri>http://www.blogger.com/profile/04695612052896290711</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//3.bp.blogspot.com/-Wfsm4TxTxO0/XiPTZjrj-cI/AAAAAAAAvCw/ONKFubGdBw41mPb1Xp89d9eMkvXaV0TkQCK4BGAYYCw/s220/20190817_151917.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2491204017359768357.post-4155937406624699236</id><published>2024-02-07T04:37:00.002+09:00</published><updated>2025-01-16T03:21:34.815+09:00</updated><title type='text'> Unveiling the Power of Microsoft CRM Managed Solutions</title><content type='html'>&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;p style=&quot;background-color: white; color: #242424; font-family: &amp;quot;Segoe UI&amp;quot;, &amp;quot;Segoe UI Web (West European)&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-size: 14px; margin: 0px 0px 1em; overflow-wrap: break-word;&quot;&gt;In the fast-paced world of CRM and app development, Microsoft consistently shines with its innovative solutions. One standout is the Managed Solution in Microsoft CRM, a game-changer for customization and deployment. This guide dives into the details of MS CRM Managed Solutions and Solution Layers, highlighting their importance and the latest updates related to Power Apps.&lt;/p&gt;&lt;h3 style=&quot;background-color: white; color: #242424; font-family: &amp;quot;Segoe UI&amp;quot;, &amp;quot;Segoe UI Web (West European)&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, sans-serif;&quot;&gt;Managed Solutions and Their Key Components&lt;/h3&gt;&lt;p style=&quot;background-color: white; color: #242424; font-family: &amp;quot;Segoe UI&amp;quot;, &amp;quot;Segoe UI Web (West European)&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-size: 14px; margin: 0px 0px 1em; overflow-wrap: break-word;&quot;&gt;Managed Solutions are essential for packaging customizations and configurations, making it easier to bundle, distribute, and deploy components across different environments. Key components within Managed Solutions include:&lt;/p&gt;&lt;ul style=&quot;background-color: white; color: #242424; font-family: &amp;quot;Segoe UI&amp;quot;, &amp;quot;Segoe UI Web (West European)&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-size: 14px; margin-bottom: 10px; margin-left: 0px; margin-top: 10px; padding-left: 0px;&quot;&gt;&lt;li style=&quot;list-style-type: disc; margin-left: 20px;&quot;&gt;&lt;span style=&quot;font-weight: var(--fontWeightSemibold);&quot;&gt;Entities&lt;/span&gt;: Custom entities that define data structures, tailored to specific customer or industry needs.&lt;/li&gt;&lt;li style=&quot;list-style-type: disc; margin-left: 20px;&quot;&gt;&lt;span style=&quot;font-weight: var(--fontWeightSemibold);&quot;&gt;Processes and Workflows&lt;/span&gt;: Automation tools that ensure standardized operations and boost efficiency.&lt;/li&gt;&lt;li style=&quot;list-style-type: disc; margin-left: 20px;&quot;&gt;&lt;span style=&quot;font-weight: var(--fontWeightSemibold);&quot;&gt;Forms and Views&lt;/span&gt;: Customizable user interface elements for a seamless CRM experience.&lt;/li&gt;&lt;li style=&quot;list-style-type: disc; margin-left: 20px;&quot;&gt;&lt;span style=&quot;font-weight: var(--fontWeightSemibold);&quot;&gt;Web Resources and Scripts&lt;/span&gt;: Enhancements for visual and functional aspects using images, scripts, and stylesheets.&lt;/li&gt;&lt;/ul&gt;&lt;h3 style=&quot;background-color: white; color: #242424; font-family: &amp;quot;Segoe UI&amp;quot;, &amp;quot;Segoe UI Web (West European)&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, sans-serif;&quot;&gt;Solution Layers: Structuring Customizations with Precision&lt;/h3&gt;&lt;p style=&quot;background-color: white; color: #242424; font-family: &amp;quot;Segoe UI&amp;quot;, &amp;quot;Segoe UI Web (West European)&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-size: 14px; margin: 0px 0px 1em; overflow-wrap: break-word;&quot;&gt;Solution Layers are a core concept in Managed Solutions, providing a structured approach to customization. By organizing components into layers like Base, Sales, and Service, developers can create solutions that are easily extended, modified, or replaced without affecting core functionality.&lt;/p&gt;&lt;h4 style=&quot;background-color: white; color: #242424; font-family: &amp;quot;Segoe UI&amp;quot;, &amp;quot;Segoe UI Web (West European)&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-size: 14px; font-weight: var(--fontWeightBold); margin: 5px 0px;&quot;&gt;Example Scenario&lt;/h4&gt;&lt;p style=&quot;background-color: white; color: #242424; font-family: &amp;quot;Segoe UI&amp;quot;, &amp;quot;Segoe UI Web (West European)&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-size: 14px; margin: 0px 0px 1em; overflow-wrap: break-word;&quot;&gt;Imagine XYZ Corp implementing a Managed Solution in their CRM environment. This solution includes custom entities for tracking customer feedback, automated workflows for managing support tickets, and tailored forms for an intuitive user interface. Solution Layers help categorize these customizations, ensuring a systematic and organized deployment.&lt;/p&gt;&lt;h3 style=&quot;background-color: white; color: #242424; font-family: &amp;quot;Segoe UI&amp;quot;, &amp;quot;Segoe UI Web (West European)&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, sans-serif;&quot;&gt;Latest Changes and Power App Integration&lt;/h3&gt;&lt;p style=&quot;background-color: white; color: #242424; font-family: &amp;quot;Segoe UI&amp;quot;, &amp;quot;Segoe UI Web (West European)&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-size: 14px; margin: 0px 0px 1em; overflow-wrap: break-word;&quot;&gt;Microsoft&#39;s commitment to innovation has brought significant updates to Power Apps within the CRM ecosystem. Notable enhancements include:&lt;/p&gt;&lt;ul style=&quot;background-color: white; color: #242424; font-family: &amp;quot;Segoe UI&amp;quot;, &amp;quot;Segoe UI Web (West European)&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-size: 14px; margin-bottom: 10px; margin-left: 0px; margin-top: 10px; padding-left: 0px;&quot;&gt;&lt;li style=&quot;list-style-type: disc; margin-left: 20px;&quot;&gt;&lt;span style=&quot;font-weight: var(--fontWeightSemibold);&quot;&gt;Unified Interface Enhancements&lt;/span&gt;: Major improvements to the Unified Interface for Power Apps and Dynamics 365 applications, focusing on performance optimization and enhanced customization capabilities.&lt;/li&gt;&lt;li style=&quot;list-style-type: disc; margin-left: 20px;&quot;&gt;&lt;span style=&quot;font-weight: var(--fontWeightSemibold);&quot;&gt;Dataverse Integration&lt;/span&gt;: Deeper integration of Dataverse, the data platform for Power Apps, streamlining data management with a unified data schema for both Power Apps and CRM customizations.&lt;/li&gt;&lt;li style=&quot;list-style-type: disc; margin-left: 20px;&quot;&gt;&lt;span style=&quot;font-weight: var(--fontWeightSemibold);&quot;&gt;Power Apps Component Framework (PCF) Advancements&lt;/span&gt;: Empowering developers to create richer and more interactive customizations with improved capabilities and extensibility.&lt;/li&gt;&lt;/ul&gt;&lt;h3 style=&quot;background-color: white; color: #242424; font-family: &amp;quot;Segoe UI&amp;quot;, &amp;quot;Segoe UI Web (West European)&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, sans-serif;&quot;&gt;Updating Managed Solutions: A Step-by-Step Guide&lt;/h3&gt;&lt;h4 style=&quot;background-color: white; color: #242424; font-family: &amp;quot;Segoe UI&amp;quot;, &amp;quot;Segoe UI Web (West European)&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-size: 14px; font-weight: var(--fontWeightBold); margin: 5px 0px;&quot;&gt;Applying the Upgrade or Update in the Target Environment&lt;/h4&gt;&lt;ol style=&quot;background-color: white; color: #242424; font-family: &amp;quot;Segoe UI&amp;quot;, &amp;quot;Segoe UI Web (West European)&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-size: 14px; margin-left: 0px; padding-left: 0px;&quot;&gt;&lt;li style=&quot;list-style-type: decimal; margin-left: 16px; padding-left: 4px;&quot;&gt;&lt;span style=&quot;font-weight: var(--fontWeightSemibold);&quot;&gt;Development Environment Preparation&lt;/span&gt;: Open the unmanaged solution and customize components as needed.&lt;/li&gt;&lt;li style=&quot;list-style-type: decimal; margin-left: 16px; padding-left: 4px;&quot;&gt;&lt;span style=&quot;font-weight: var(--fontWeightSemibold);&quot;&gt;Version Incrementation&lt;/span&gt;: Increment version numbers when exporting the solution as a managed solution.&lt;/li&gt;&lt;li style=&quot;list-style-type: decimal; margin-left: 16px; padding-left: 4px;&quot;&gt;&lt;span style=&quot;font-weight: var(--fontWeightSemibold);&quot;&gt;Solution Update&lt;/span&gt;: Sign into Power Apps, select the target environment, and navigate to &quot;Solutions&quot; in the left navigation pane.&lt;/li&gt;&lt;li style=&quot;list-style-type: decimal; margin-left: 16px; padding-left: 4px;&quot;&gt;&lt;span style=&quot;font-weight: var(--fontWeightSemibold);&quot;&gt;Solution Action Options&lt;/span&gt;: Options include &quot;Upgrade,&quot; &quot;Stage for Upgrade,&quot; and &quot;Update,&quot; each serving specific purposes in the update process.&lt;/li&gt;&lt;li style=&quot;list-style-type: decimal; margin-left: 16px; padding-left: 4px;&quot;&gt;&lt;span style=&quot;font-weight: var(--fontWeightSemibold);&quot;&gt;Post Import Actions&lt;/span&gt;: Decide on post-import actions, such as enabling plug-in steps and flows included in the solution.&lt;/li&gt;&lt;li style=&quot;list-style-type: decimal; margin-left: 16px; padding-left: 4px;&quot;&gt;&lt;span style=&quot;font-weight: var(--fontWeightSemibold);&quot;&gt;Import Confirmation&lt;/span&gt;: Wait for the import to complete and review the results.&lt;/li&gt;&lt;/ol&gt;&lt;h3 style=&quot;background-color: white; color: #242424; font-family: &amp;quot;Segoe UI&amp;quot;, &amp;quot;Segoe UI Web (West European)&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, sans-serif;&quot;&gt;Advanced Insights: Version Numbers, Component Removal, and Customization Overwrites&lt;/h3&gt;&lt;ul style=&quot;background-color: white; color: #242424; font-family: &amp;quot;Segoe UI&amp;quot;, &amp;quot;Segoe UI Web (West European)&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-size: 14px; margin-bottom: 10px; margin-left: 0px; margin-top: 10px; padding-left: 0px;&quot;&gt;&lt;li style=&quot;list-style-type: disc; margin-left: 20px;&quot;&gt;&lt;span style=&quot;font-weight: var(--fontWeightSemibold);&quot;&gt;Understanding Version Numbers for Updates&lt;/span&gt;: A solution&#39;s version follows the major.minor.build.revision format. Updates must have higher version numbers than the parent solution.&lt;/li&gt;&lt;li style=&quot;list-style-type: disc; margin-left: 20px;&quot;&gt;&lt;span style=&quot;font-weight: var(--fontWeightSemibold);&quot;&gt;Removing a Managed Component&lt;/span&gt;: Options include upgrading the solution in the development environment or deleting the managed solution, each serving specific use cases.&lt;/li&gt;&lt;li style=&quot;list-style-type: disc; margin-left: 20px;&quot;&gt;&lt;span style=&quot;font-weight: var(--fontWeightSemibold);&quot;&gt;Overwrite Customizations Option&lt;/span&gt;: Use caution with the &quot;Overwrite Customizations&quot; option, as it can impact unmanaged customizations on components.&lt;/li&gt;&lt;/ul&gt;&lt;h3 style=&quot;background-color: white; color: #242424; font-family: &amp;quot;Segoe UI&amp;quot;, &amp;quot;Segoe UI Web (West European)&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, sans-serif;&quot;&gt;Patching and Deployment&lt;/h3&gt;&lt;p style=&quot;background-color: white; color: #242424; font-family: &amp;quot;Segoe UI&amp;quot;, &amp;quot;Segoe UI Web (West European)&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-size: 14px; margin: 0px 0px 1em; overflow-wrap: break-word;&quot;&gt;Patching is a crucial aspect of maintaining and updating Managed Solutions. Here’s how you can effectively manage patches:&lt;/p&gt;&lt;ul style=&quot;background-color: white; color: #242424; font-family: &amp;quot;Segoe UI&amp;quot;, &amp;quot;Segoe UI Web (West European)&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-size: 14px; margin-bottom: 10px; margin-left: 0px; margin-top: 10px; padding-left: 0px;&quot;&gt;&lt;li style=&quot;list-style-type: disc; margin-left: 20px;&quot;&gt;&lt;span style=&quot;font-weight: var(--fontWeightSemibold);&quot;&gt;Creating Patches&lt;/span&gt;: Patches allow you to make incremental updates to a solution without modifying the entire solution. They include only the changes to entities and related assets&lt;div class=&quot;___frx9oy0 f14t3ns0&quot; style=&quot;display: inline-block;&quot;&gt;&lt;a aria-expanded=&quot;false&quot; aria-label=&quot;Open popover for citation at position 1.&quot; class=&quot;fai-Citation r9zkot ___1wvzp64 f16xq7d1 fkfq4zb f5ogflp f1hqa2wf f1f09k3d finvdd3 fzkkow9 fcdblym fg706s2 fjik90z fj3muxo f1akhkt f1aperda f1lxtadh&quot; data-tabster=&quot;{&amp;quot;restorer&amp;quot;:{&amp;quot;type&amp;quot;:1}}&quot; data-testid=&quot;citation&quot; role=&quot;button&quot; style=&quot;align-items: center; background-color: var(--colorNeutralBackground3); border-bottom-color: var(--colorNeutralStroke1); border-left-color: var(--colorNeutralStroke1); border-radius: var(--borderRadiusMedium); border-right-color: var(--colorNeutralStroke1); border-style: solid; border-top-color: var(--colorNeutralStroke1); border-width: 1px; box-sizing: border-box; color: var(--colorNeutralForeground2); display: inline-flex; font-family: var(--fontFamilyBase); font-size: var(--fontSizeBase100); font-weight: var(--fontWeightSemibold); height: 14px; justify-content: center; line-height: var(--lineHeightBase100); margin-left: var(--spacingHorizontalXXS); margin-right: var(--spacingHorizontalXXS); min-width: 14px; vertical-align: calc((var(--lineHeightBase100) - var(--fontSizeBase100)) / 2);&quot; tabindex=&quot;0&quot;&gt;1&lt;/a&gt;&lt;/div&gt;.&lt;/li&gt;&lt;li style=&quot;list-style-type: disc; margin-left: 20px;&quot;&gt;&lt;span style=&quot;font-weight: var(--fontWeightSemibold);&quot;&gt;Applying Patches&lt;/span&gt;: Patches can be applied to both managed and unmanaged solutions. They must have the same major and minor version numbers as the parent solution but a higher build and release number&lt;div class=&quot;___frx9oy0 f14t3ns0&quot; style=&quot;display: inline-block;&quot;&gt;&lt;a aria-expanded=&quot;false&quot; aria-label=&quot;Open popover for citation at position 2.&quot; class=&quot;fai-Citation r9zkot ___1wvzp64 f16xq7d1 fkfq4zb f5ogflp f1hqa2wf f1f09k3d finvdd3 fzkkow9 fcdblym fg706s2 fjik90z fj3muxo f1akhkt f1aperda f1lxtadh&quot; data-tabster=&quot;{&amp;quot;restorer&amp;quot;:{&amp;quot;type&amp;quot;:1}}&quot; data-testid=&quot;citation&quot; role=&quot;button&quot; style=&quot;align-items: center; background-color: var(--colorNeutralBackground3); border-bottom-color: var(--colorNeutralStroke1); border-left-color: var(--colorNeutralStroke1); border-radius: var(--borderRadiusMedium); border-right-color: var(--colorNeutralStroke1); border-style: solid; border-top-color: var(--colorNeutralStroke1); border-width: 1px; box-sizing: border-box; color: var(--colorNeutralForeground2); display: inline-flex; font-family: var(--fontFamilyBase); font-size: var(--fontSizeBase100); font-weight: var(--fontWeightSemibold); height: 14px; justify-content: center; line-height: var(--lineHeightBase100); margin-left: var(--spacingHorizontalXXS); margin-right: var(--spacingHorizontalXXS); min-width: 14px; vertical-align: calc((var(--lineHeightBase100) - var(--fontSizeBase100)) / 2);&quot; tabindex=&quot;0&quot;&gt;2&lt;/a&gt;&lt;/div&gt;.&lt;/li&gt;&lt;li style=&quot;list-style-type: disc; margin-left: 20px;&quot;&gt;&lt;span style=&quot;font-weight: var(--fontWeightSemibold);&quot;&gt;Cloning Solutions&lt;/span&gt;: When you need to roll up all patches into a new version, you can clone the solution. This creates a new version that includes all the patches, ensuring a clean and updated deployment&lt;div class=&quot;___frx9oy0 f14t3ns0&quot; style=&quot;display: inline-block;&quot;&gt;&lt;a aria-expanded=&quot;false&quot; aria-label=&quot;Open popover for citation at position 2.&quot; class=&quot;fai-Citation r9zkot ___1wvzp64 f16xq7d1 fkfq4zb f5ogflp f1hqa2wf f1f09k3d finvdd3 fzkkow9 fcdblym fg706s2 fjik90z fj3muxo f1akhkt f1aperda f1lxtadh&quot; data-tabster=&quot;{&amp;quot;restorer&amp;quot;:{&amp;quot;type&amp;quot;:1}}&quot; data-testid=&quot;citation&quot; role=&quot;button&quot; style=&quot;align-items: center; background-color: var(--colorNeutralBackground3); border-bottom-color: var(--colorNeutralStroke1); border-left-color: var(--colorNeutralStroke1); border-radius: var(--borderRadiusMedium); border-right-color: var(--colorNeutralStroke1); border-style: solid; border-top-color: var(--colorNeutralStroke1); border-width: 1px; box-sizing: border-box; color: var(--colorNeutralForeground2); display: inline-flex; font-family: var(--fontFamilyBase); font-size: var(--fontSizeBase100); font-weight: var(--fontWeightSemibold); height: 14px; justify-content: center; line-height: var(--lineHeightBase100); margin-left: var(--spacingHorizontalXXS); margin-right: var(--spacingHorizontalXXS); min-width: 14px; vertical-align: calc((var(--lineHeightBase100) - var(--fontSizeBase100)) / 2);&quot; tabindex=&quot;0&quot;&gt;2&lt;/a&gt;&lt;/div&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;h3 style=&quot;background-color: white; color: #242424; font-family: &amp;quot;Segoe UI&amp;quot;, &amp;quot;Segoe UI Web (West European)&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, sans-serif;&quot;&gt;Conclusion&lt;/h3&gt;&lt;p style=&quot;background-color: white; color: #242424; font-family: &amp;quot;Segoe UI&amp;quot;, &amp;quot;Segoe UI Web (West European)&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-size: 14px; margin: 0px 0px 1em; overflow-wrap: break-word;&quot;&gt;Navigating the complex world of Microsoft CRM Managed Solutions requires a comprehensive approach. By understanding the core components, leveraging Solution Layers, and staying updated on the latest changes related to Power Apps, businesses can ensure a smooth and efficient customization deployment in their CRM environments. Always exercise caution and follow best practices, especially when updating solutions, managing dependencies, or overwriting customizations. The power to tailor CRM environments to specific needs lies with those who master the nuances of Managed Solutions and their evolving capabilities.&lt;/p&gt;&lt;p style=&quot;background-color: white; color: #242424; font-family: &amp;quot;Segoe UI&amp;quot;, &amp;quot;Segoe UI Web (West European)&amp;quot;, -apple-system, BlinkMacSystemFont, Roboto, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-size: 14px; margin: 0px 0px 1em; overflow-wrap: break-word;&quot;&gt;&lt;span style=&quot;font-weight: var(--fontWeightSemibold);&quot;&gt;Additional Recommendations&lt;/span&gt;: Use a single publisher for all solutions across environments.&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chamarairesh.blogspot.com/feeds/4155937406624699236/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2491204017359768357/4155937406624699236' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/4155937406624699236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/4155937406624699236'/><link rel='alternate' type='text/html' href='http://chamarairesh.blogspot.com/2024/02/unveiling-power-of-microsoft-crm.html' title=' Unveiling the Power of Microsoft CRM Managed Solutions'/><author><name>Chamara Iresh</name><uri>http://www.blogger.com/profile/04695612052896290711</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//3.bp.blogspot.com/-Wfsm4TxTxO0/XiPTZjrj-cI/AAAAAAAAvCw/ONKFubGdBw41mPb1Xp89d9eMkvXaV0TkQCK4BGAYYCw/s220/20190817_151917.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2491204017359768357.post-4747691609066418005</id><published>2024-02-07T04:12:00.005+09:00</published><updated>2024-12-30T23:06:20.425+09:00</updated><title type='text'>Mastering Dependency Injection in C# and ASP.NET Web API: A Comprehensive Guide</title><content type='html'>&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Hey there! 👋 Let&#39;s dive into Dependency Injection (DI) in a way that actually makes sense. No buzzwords, just practical knowledge you can use today.&lt;/p&gt;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;Why Should You Care About DI?&lt;/h2&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Before we dive into the code, let&#39;s talk about why DI matters in real-world development:&lt;/p&gt;&lt;ul class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-disc space-y-2 pl-8&quot; depth=&quot;0&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;Ever inherited a codebase where changing one thing breaks everything else?&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;Spent hours mocking dependencies for unit tests?&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;2&quot;&gt;Struggled to swap implementations for different environments?&lt;/li&gt;
&lt;/ul&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;DI helps solve these headaches. Let&#39;s see how.&lt;/p&gt;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;Starting Simple: The Basics&lt;/h2&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Let&#39;s build this up step by step with a real-world scenario. Imagine you&#39;re building an e-commerce API:&lt;/p&gt;&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Before DI - The Painful Way 😫&lt;/span&gt;
&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;OrderController&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;readonly&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;OrderService&lt;/span&gt; _orderService &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;OrderService&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;PaymentProcessor&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;
            &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;PaymentGateway&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// After DI - The Clean Way 😎&lt;/span&gt;
&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;OrderController&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;readonly&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;IOrderService&lt;/span&gt; _orderService&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;OrderController&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;IOrderService&lt;/span&gt; orderService&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        _orderService &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; orderService&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;Real-World DI Patterns&lt;/h2&gt;&lt;h3 class=&quot;font-600 text-lg font-bold&quot; level=&quot;3&quot;&gt;The Constructor Injection Pattern (Your Go-To Choice)&lt;/h3&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;This is what you&#39;ll use 90% of the time:&lt;/p&gt;&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div class=&quot;text-text-300 absolute pl-3 pt-2.5 text-xs&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;OrderProcessor&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;readonly&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;IPaymentGateway&lt;/span&gt; _paymentGateway&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;readonly&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;IOrderRepository&lt;/span&gt; _orderRepository&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;readonly&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;ILogger&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;OrderProcessor&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;&amp;gt;&lt;/span&gt; _logger&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;OrderProcessor&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;IPaymentGateway&lt;/span&gt; paymentGateway&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;IOrderRepository&lt;/span&gt; orderRepository&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;ILogger&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;OrderProcessor&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;&amp;gt;&lt;/span&gt; logger&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        _paymentGateway &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; paymentGateway&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
        _orderRepository &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; orderRepository&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
        _logger &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; logger&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #d19a66;&quot;&gt;Task&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;ProcessOrder&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;Order&lt;/span&gt; order&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        _logger&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;LogInformation&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token interpolation-string&quot; style=&quot;color: #98c379;&quot;&gt;$&quot;Processing order &lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;order&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;Id&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token interpolation-string&quot; style=&quot;color: #98c379;&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Your business logic here&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h3 class=&quot;font-600 text-lg font-bold&quot; level=&quot;3&quot;&gt;Service Lifetimes Explained Simply&lt;/h3&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Think of services like employees in a store:&lt;/p&gt;&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #c678dd;&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;ConfigureServices&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;IServiceCollection&lt;/span&gt; services&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// The Store Manager (Singleton) - One person, there all day&lt;/span&gt;
    services&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token generic-method&quot; style=&quot;color: #61afef;&quot;&gt;AddSingleton&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot; style=&quot;color: #d19a66;&quot;&gt;IStoreConfig&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot; style=&quot;color: #d19a66;&quot;&gt; StoreConfig&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    
    &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// The Cashier (Scoped) - One per customer&lt;/span&gt;
    services&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token generic-method&quot; style=&quot;color: #61afef;&quot;&gt;AddScoped&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot; style=&quot;color: #d19a66;&quot;&gt;IOrderProcessor&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot; style=&quot;color: #d19a66;&quot;&gt; OrderProcessor&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    
    &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// The Shopping Assistant (Transient) - New one for each task&lt;/span&gt;
    services&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token generic-method&quot; style=&quot;color: #61afef;&quot;&gt;AddTransient&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot; style=&quot;color: #d19a66;&quot;&gt;IProductValidator&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot; style=&quot;color: #d19a66;&quot;&gt; ProductValidator&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;Testing Made Easy&lt;/h2&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Here&#39;s how DI makes testing a breeze:&lt;/p&gt;&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;OrderProcessorTests&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token attribute&quot; style=&quot;color: #d19a66;&quot;&gt;Fact&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #d19a66;&quot;&gt;Task&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;ProcessOrder_WithValidPayment_Succeeds&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Arrange&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; mockPaymentGateway &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;Mock&lt;/span&gt;&lt;span class=&quot;token constructor-invocation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;IPaymentGateway&lt;/span&gt;&lt;span class=&quot;token constructor-invocation&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
        mockPaymentGateway&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Setup&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;x &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&amp;gt;&lt;/span&gt; x&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;ProcessPayment&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;It&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token generic-method&quot; style=&quot;color: #61afef;&quot;&gt;IsAny&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot; style=&quot;color: #c678dd;&quot;&gt;decimal&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;ReturnsAsync&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; processor &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;OrderProcessor&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;
            mockPaymentGateway&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Object&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
            Mock&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token generic-method&quot; style=&quot;color: #61afef;&quot;&gt;Of&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot; style=&quot;color: #d19a66;&quot;&gt;IOrderRepository&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
            Mock&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token generic-method&quot; style=&quot;color: #61afef;&quot;&gt;Of&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot; style=&quot;color: #d19a66;&quot;&gt;ILogger&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot; style=&quot;color: #d19a66;&quot;&gt;OrderProcessor&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Act&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;await&lt;/span&gt; processor&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;ProcessOrder&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;Order&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt; Amount &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;100m&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Assert&lt;/span&gt;
        mockPaymentGateway&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Verify&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;x &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&amp;gt;&lt;/span&gt; x&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;ProcessPayment&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;100m&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; Times&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Once&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;Advanced Patterns (When You Need Them)&lt;/h2&gt;&lt;h3 class=&quot;font-600 text-lg font-bold&quot; level=&quot;3&quot;&gt;The Decorator Pattern (Adding Behavior)&lt;/h3&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Perfect for adding caching, logging, or validation:&lt;/p&gt;&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;CachingOrderService&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token type-list&quot; style=&quot;color: #d19a66;&quot;&gt;IOrderService&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;readonly&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;IOrderService&lt;/span&gt; _inner&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;readonly&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;ICache&lt;/span&gt; _cache&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;CachingOrderService&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;IOrderService&lt;/span&gt; inner&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;ICache&lt;/span&gt; cache&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        _inner &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; inner&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
        _cache &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; cache&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #d19a66;&quot;&gt;Task&lt;/span&gt;&lt;span class=&quot;token return-type&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token return-type&quot; style=&quot;color: #d19a66;&quot;&gt;Order&lt;/span&gt;&lt;span class=&quot;token return-type&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;GetOrder&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;int&lt;/span&gt; id&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; cacheKey &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token interpolation-string&quot; style=&quot;color: #98c379;&quot;&gt;$&quot;order_&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token interpolation-string&quot; style=&quot;color: #98c379;&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;_cache&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;TryGet&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;cacheKey&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;out&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;Order&lt;/span&gt; order&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;return&lt;/span&gt; order&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

        order &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;await&lt;/span&gt; _inner&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;GetOrder&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;id&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
        _cache&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Set&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;cacheKey&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; order&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;return&lt;/span&gt; order&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h3 class=&quot;font-600 text-lg font-bold&quot; level=&quot;3&quot;&gt;Factory Pattern (When You Need Dynamic Creation)&lt;/h3&gt;&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div class=&quot;text-text-300 absolute pl-3 pt-2.5 text-xs&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;PaymentProcessorFactory&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;readonly&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;IServiceProvider&lt;/span&gt; _services&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;PaymentProcessorFactory&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;IServiceProvider&lt;/span&gt; services&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        _services &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; services&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #d19a66;&quot;&gt;IPaymentProcessor&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Create&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;PaymentMethod&lt;/span&gt; method&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;return&lt;/span&gt; method &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;switch&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
            PaymentMethod&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;CreditCard &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&amp;gt;&lt;/span&gt; _services&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token generic-method&quot; style=&quot;color: #61afef;&quot;&gt;GetRequiredService&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot; style=&quot;color: #d19a66;&quot;&gt;ICreditCardProcessor&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
            PaymentMethod&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;PayPal &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&amp;gt;&lt;/span&gt; _services&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token generic-method&quot; style=&quot;color: #61afef;&quot;&gt;GetRequiredService&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot; style=&quot;color: #d19a66;&quot;&gt;IPayPalProcessor&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
            _ &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;NotSupportedException&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token interpolation-string&quot; style=&quot;color: #98c379;&quot;&gt;$&quot;Payment method &lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token interpolation-string&quot; style=&quot;color: #98c379;&quot;&gt; not supported&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;Common Pitfalls (Learn From Our Mistakes)&lt;/h2&gt;&lt;h3 class=&quot;font-600 text-lg font-bold&quot; level=&quot;3&quot;&gt;❌ Circular Dependencies&lt;/h3&gt;&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div class=&quot;text-text-300 absolute pl-3 pt-2.5 text-xs&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Don&#39;t do this!&lt;/span&gt;
&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;ServiceA&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;ServiceA&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;ServiceB&lt;/span&gt; b&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;ServiceB&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;ServiceB&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;ServiceA&lt;/span&gt; a&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Do this instead&lt;/span&gt;
&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;ServiceA&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;readonly&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;IServiceProvider&lt;/span&gt; _services&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;ServiceB&lt;/span&gt; _b&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;ServiceA&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;IServiceProvider&lt;/span&gt; services&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        _services &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; services&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #d19a66;&quot;&gt;ServiceB&lt;/span&gt; B &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&amp;gt;&lt;/span&gt; _b &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;??=&lt;/span&gt; _services&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token generic-method&quot; style=&quot;color: #61afef;&quot;&gt;GetRequiredService&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot; style=&quot;color: #d19a66;&quot;&gt;ServiceB&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h3 class=&quot;font-600 text-lg font-bold&quot; level=&quot;3&quot;&gt;❌ Disposing Services Incorrectly&lt;/h3&gt;&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Remember to dispose scoped services!&lt;/span&gt;
&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #d19a66;&quot;&gt;Task&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;ProcessOrders&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; scope &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; _services&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;CreateScope&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; processor &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; scope&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;ServiceProvider&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token generic-method&quot; style=&quot;color: #61afef;&quot;&gt;GetRequiredService&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot; style=&quot;color: #d19a66;&quot;&gt;IOrderProcessor&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;await&lt;/span&gt; processor&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;ProcessPendingOrders&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;Pro Tips 🚀&lt;/h2&gt;&lt;ol class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-decimal space-y-2 pl-8&quot; depth=&quot;0&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;Keep services focused (Single Responsibility Principle)&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;Use constructor injection by default&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;2&quot;&gt;Register services in feature modules for better organization&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;3&quot;&gt;Always dispose of scoped services&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;4&quot;&gt;Use middleware for cross-cutting concerns&lt;/li&gt;
&lt;/ol&gt;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;Wrapping Up&lt;/h2&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;































&lt;/p&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;DI isn&#39;t just a pattern – it&#39;s a tool that makes your life easier. Start with constructor injection, use scoped services wisely, and remember: if a class needs to create its dependencies, it&#39;s probably doing too much.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://chamarairesh.blogspot.com/feeds/4747691609066418005/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2491204017359768357/4747691609066418005' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/4747691609066418005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/4747691609066418005'/><link rel='alternate' type='text/html' href='http://chamarairesh.blogspot.com/2024/02/mastering-dependency-injection-in-c-and.html' title='Mastering Dependency Injection in C# and ASP.NET Web API: A Comprehensive Guide'/><author><name>Chamara Iresh</name><uri>http://www.blogger.com/profile/04695612052896290711</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//3.bp.blogspot.com/-Wfsm4TxTxO0/XiPTZjrj-cI/AAAAAAAAvCw/ONKFubGdBw41mPb1Xp89d9eMkvXaV0TkQCK4BGAYYCw/s220/20190817_151917.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2491204017359768357.post-3853946577617917303</id><published>2024-01-02T20:05:00.001+09:00</published><updated>2024-01-02T20:07:39.892+09:00</updated><title type='text'>Resolving CRM Online LINQ Query Failures: A Deep Dive into a Strange SQL Error</title><content type='html'>&lt;p&gt;&lt;span class=&quot;li fs&quot; face=&quot;source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif&quot; style=&quot;box-sizing: inherit; color: #242424; font-size: 20px; font-weight: 700; letter-spacing: -0.003em;&quot;&gt;Introduction:&lt;/span&gt;&lt;span face=&quot;source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif&quot; style=&quot;background-color: white; color: #242424; font-size: 20px; letter-spacing: -0.003em;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span face=&quot;source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif&quot; style=&quot;background-color: white; color: #242424; font-size: 20px; letter-spacing: -0.003em;&quot;&gt;In the world of Microsoft Customer Relationship Management (CRM) online systems, encountering errors during LINQ queries can be a frustrating experience. Recently, our team faced a particularly perplexing issue where a LINQ Query failed, throwing an enigmatic SQL error. The error message provided little information, leaving us scratching our heads. In this blog post, we’ll share our journey in troubleshooting and ultimately resolving this issue.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;li fs&quot; face=&quot;source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif&quot; style=&quot;box-sizing: inherit; color: #242424; font-size: 20px; font-weight: 700; letter-spacing: -0.003em;&quot;&gt;The Error:&lt;/span&gt;&lt;span face=&quot;source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif&quot; style=&quot;background-color: white; color: #242424; font-size: 20px; letter-spacing: -0.003em;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span face=&quot;source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif&quot; style=&quot;background-color: white; color: #242424; font-size: 20px; letter-spacing: -0.003em;&quot;&gt;Here’s the error message that had us stumped:&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;me mf mg mh mi mj mk ml bo mm ba bj&quot; style=&quot;background: rgb(249, 249, 249); border-radius: 4px; border: 1px solid rgb(229, 229, 229); box-sizing: inherit; color: #242424; font-family: source-code-pro, Menlo, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; margin-bottom: 0px; margin-top: 56px; overflow-x: auto; padding: 32px;&quot;&gt;&lt;span class=&quot;mn mo fr mk b bf mp mq l mr ms&quot; data-selectable-paragraph=&quot;&quot; id=&quot;9bd9&quot; style=&quot;box-sizing: inherit; display: block; font-size: 14px; letter-spacing: -0.022em; line-height: 1.4; margin-bottom: -0.2em; margin-top: -0.2em; min-width: fit-content;&quot;&gt;&lt;span class=&quot;hljs-punctuation&quot; style=&quot;box-sizing: inherit;&quot;&gt;{&lt;/span&gt;&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;  &lt;span class=&quot;hljs-attr&quot; style=&quot;box-sizing: inherit; color: #836c28;&quot;&gt;&quot;Message&quot;&lt;/span&gt;&lt;span class=&quot;hljs-punctuation&quot; style=&quot;box-sizing: inherit;&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;box-sizing: inherit; color: #c41a16;&quot;&gt;&quot;An error has occurred.&quot;&lt;/span&gt;&lt;span class=&quot;hljs-punctuation&quot; style=&quot;box-sizing: inherit;&quot;&gt;,&lt;/span&gt;&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;  &lt;span class=&quot;hljs-attr&quot; style=&quot;box-sizing: inherit; color: #836c28;&quot;&gt;&quot;ExceptionMessage&quot;&lt;/span&gt;&lt;span class=&quot;hljs-punctuation&quot; style=&quot;box-sizing: inherit;&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;box-sizing: inherit; color: #c41a16;&quot;&gt;&quot;Sql error: Generic SQL error. CRM ErrorCode: -2147204784 Sql ErrorCode: -2146232060 Sql Number: 207&quot;&lt;/span&gt;&lt;span class=&quot;hljs-punctuation&quot; style=&quot;box-sizing: inherit;&quot;&gt;,&lt;/span&gt;&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;  &lt;span class=&quot;hljs-attr&quot; style=&quot;box-sizing: inherit; color: #836c28;&quot;&gt;&quot;ExceptionType&quot;&lt;/span&gt;&lt;span class=&quot;hljs-punctuation&quot; style=&quot;box-sizing: inherit;&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;box-sizing: inherit; color: #c41a16;&quot;&gt;&quot;System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]&quot;&lt;/span&gt;&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;&lt;span class=&quot;hljs-punctuation&quot; style=&quot;box-sizing: inherit;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p class=&quot;pw-post-body-paragraph lg lh fr li b lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md fk bj&quot; data-selectable-paragraph=&quot;&quot; id=&quot;5569&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;span class=&quot;li fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Initial Investigation:&lt;/span&gt;&amp;nbsp;Our first step was to reach out to the Microsoft support team for assistance. After providing them with the network trace and Fiddler log, they uncovered an interesting lead — an error related to customer insight fields. Intrigued, we dove deeper into our CRM system.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph lg lh fr li b lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md fk bj&quot; data-selectable-paragraph=&quot;&quot; id=&quot;c50d&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;span class=&quot;li fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Discovery:&amp;nbsp;&lt;/span&gt;Upon scrutinizing the CRM fields and relationships, we discovered that the mentioned fields did exist, but here’s the catch — they were no longer in use. Puzzled by this revelation, we recalled a past instance where we had created a customer insight instance for testing purposes. Subsequently, we reset (deleted) it using Microsoft’s recommended method.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph lg lh fr li b lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md fk bj&quot; data-selectable-paragraph=&quot;&quot; id=&quot;1b0b&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;However, it seems that not everything was cleanly deleted. Some fields and relationships lingered behind, causing a ripple effect leading to the LINQ Query failure.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph lg lh fr li b lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md fk bj&quot; data-selectable-paragraph=&quot;&quot; id=&quot;b3fa&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;span class=&quot;li fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Bug Identified:&amp;nbsp;&lt;/span&gt;This anomaly in the deletion process hinted at a bug related to the interaction between customer insights and CRM links. It became apparent that when encountering the cryptic SQL error mentioned earlier, the first course of action should be to check for unused fields or relationships.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph lg lh fr li b lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md fk bj&quot; data-selectable-paragraph=&quot;&quot; id=&quot;c2be&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;span class=&quot;li fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Resolution:&lt;/span&gt;&amp;nbsp;Armed with this knowledge, we undertook a systematic cleanup process. We meticulously combed through our CRM system, identifying and deleting any remnants of fields or relationships that were no longer in use. Once this cleanup was completed, we re-executed the LINQ Query, and lo and behold, the error vanished.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph lg lh fr li b lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md fk bj&quot; data-selectable-paragraph=&quot;&quot; id=&quot;359a&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;span class=&quot;li fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Conclusion:&amp;nbsp;&lt;/span&gt;The journey from a vague SQL error to a resolution taught us the importance of thorough system cleanup, especially when dealing with interconnected modules like customer insights and CRM. If you ever encounter a LINQ Query failure with a similar error, consider this blog post as your guide to troubleshooting and resolving the issue.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph lg lh fr li b lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md fk bj&quot; data-selectable-paragraph=&quot;&quot; id=&quot;9775&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Remember, the devil is in the details — sometimes, the remnants of past testing can come back to haunt your queries. Happy coding&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://chamarairesh.blogspot.com/feeds/3853946577617917303/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2491204017359768357/3853946577617917303' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/3853946577617917303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/3853946577617917303'/><link rel='alternate' type='text/html' href='http://chamarairesh.blogspot.com/2024/01/resolving-crm-online-linq-query.html' title='Resolving CRM Online LINQ Query Failures: A Deep Dive into a Strange SQL Error'/><author><name>Chamara Iresh</name><uri>http://www.blogger.com/profile/04695612052896290711</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//3.bp.blogspot.com/-Wfsm4TxTxO0/XiPTZjrj-cI/AAAAAAAAvCw/ONKFubGdBw41mPb1Xp89d9eMkvXaV0TkQCK4BGAYYCw/s220/20190817_151917.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2491204017359768357.post-1661502512311343063</id><published>2022-12-25T05:07:00.004+09:00</published><updated>2024-12-30T23:18:28.032+09:00</updated><title type='text'>How to Become a CRM Developer for Microsoft Dynamics 365 Online</title><content type='html'>The demand for Microsoft Dynamics 365 Online developers continues to grow as more organizations adopt cloud-based CRM solutions. This comprehensive guide will help you navigate your journey to becoming a successful Dynamics 365 developer.&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;Essential Programming Foundation&lt;/h2&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Start by mastering core programming concepts and languages:&lt;/p&gt;&lt;ul class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-disc space-y-2 pl-8&quot; depth=&quot;0&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;Learn computer science fundamentals through platforms like:
&lt;ul class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-disc space-y-2 pl-8&quot; depth=&quot;1&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;Coursera (&lt;a href=&quot;https://www.coursera.org/&quot;&gt;https://www.coursera.org/&lt;/a&gt;)&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;Khan Academy (&lt;a href=&quot;https://www.khanacademy.org/&quot;&gt;https://www.khanacademy.org/&lt;/a&gt;)&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;2&quot;&gt;Code Academy (&lt;a href=&quot;https://www.codecademy.com/&quot;&gt;https://www.codecademy.com/&lt;/a&gt;)&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;3&quot;&gt;freeCodeCamp (&lt;a href=&quot;https://www.freecodecamp.org/&quot;&gt;https://www.freecodecamp.org/&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;Focus on C# and .NET development using resources such as:
&lt;ul class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-disc space-y-2 pl-8&quot; depth=&quot;1&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;Microsoft Visual Studio (&lt;a href=&quot;https://visualstudio.microsoft.com/&quot;&gt;https://visualstudio.microsoft.com/&lt;/a&gt;)&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;C# Fundamentals on Pluralsight (&lt;a href=&quot;https://www.pluralsight.com/courses/csharp-fundamentals&quot;&gt;https://www.pluralsight.com/courses/csharp-fundamentals&lt;/a&gt;)&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;2&quot;&gt;C# Programming Yellow Book (&lt;a href=&quot;http://www.csharpcourse.com/&quot;&gt;http://www.csharpcourse.com/&lt;/a&gt;)&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;3&quot;&gt;Microsoft Learn (&lt;a href=&quot;https://learn.microsoft.com/en-us/dotnet/csharp/&quot;&gt;https://learn.microsoft.com/en-us/dotnet/csharp/&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;Dynamics 365 Expertise&lt;/h2&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Develop specialized knowledge in:&lt;/p&gt;&lt;ol class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-decimal space-y-2 pl-8&quot; depth=&quot;0&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;Core CRM concepts&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;Dynamics 365 platform architecture&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;2&quot;&gt;Power Platform capabilities&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;3&quot;&gt;Common Data Service (Dataverse)&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;4&quot;&gt;Business process automation&lt;/li&gt;
&lt;/ol&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Resources for Dynamics 365:&lt;/p&gt;&lt;ul class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-disc space-y-2 pl-8&quot; depth=&quot;0&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;Microsoft Dynamics 365 documentation (&lt;a href=&quot;https://docs.microsoft.com/en-us/dynamics365/&quot;&gt;https://docs.microsoft.com/en-us/dynamics365/&lt;/a&gt;)&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;Microsoft Power Platform Learning Path (&lt;a href=&quot;https://learn.microsoft.com/en-us/power-platform/&quot;&gt;https://learn.microsoft.com/en-us/power-platform/&lt;/a&gt;)&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;2&quot;&gt;Dynamics 365 Community Forums (&lt;a href=&quot;https://community.dynamics.com/&quot;&gt;https://community.dynamics.com/&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;Practical Experience&lt;/h2&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Gain hands-on experience through:&lt;/p&gt;&lt;ol class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-decimal space-y-2 pl-8&quot; depth=&quot;0&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;Setting up a free trial environment&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;Building sample applications&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;2&quot;&gt;Contributing to open-source projects&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;3&quot;&gt;Participating in hackathons&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;4&quot;&gt;Taking on freelance projects&lt;/li&gt;
&lt;/ol&gt;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;Professional Development&lt;/h2&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Enhance your career prospects by:&lt;/p&gt;&lt;ol class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-decimal space-y-2 pl-8&quot; depth=&quot;0&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;Earning Microsoft certifications:
&lt;ul class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-disc space-y-2 pl-8&quot; depth=&quot;1&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;Microsoft Certified: Dynamics 365 Developer Associate&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;Power Platform Developer Associate&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;Joining professional communities:
&lt;ul class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-disc space-y-2 pl-8&quot; depth=&quot;1&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;Dynamics 365 User Group (&lt;a href=&quot;https://dynamiccommunities.com/dynamics-365-crm&quot;&gt;https://dynamiccommunities.com/dynamics-365-crm&lt;/a&gt;)&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;Stack Overflow (&lt;a href=&quot;https://stackoverflow.com/&quot;&gt;https://stackoverflow.com/&lt;/a&gt;)&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;2&quot;&gt;LinkedIn Dynamics 365 groups&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;2&quot;&gt;Following industry resources:
&lt;ul class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-disc space-y-2 pl-8&quot; depth=&quot;1&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;Microsoft Dynamics 365 blog (&lt;a href=&quot;https://cloudblogs.microsoft.com/dynamics365/&quot;&gt;https://cloudblogs.microsoft.com/dynamics365/&lt;/a&gt;)&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;Power Apps Community Blog (&lt;a href=&quot;https://powerusers.microsoft.com/t5/Power-Apps-Community-Blog/bg-p/PowerAppsBlog&quot;&gt;https://powerusers.microsoft.com/t5/Power-Apps-Community-Blog/bg-p/PowerAppsBlog&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;Setting Up Your Development Environment&lt;/h2&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Get started with a trial version:&lt;/p&gt;&lt;ol class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-decimal space-y-2 pl-8&quot; depth=&quot;0&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;Visit dynamics.microsoft.com&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;Click &quot;Try it now&quot;&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;2&quot;&gt;Choose &quot;Try Dynamics 365 for free&quot;&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;3&quot;&gt;Complete registration with Microsoft account&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;4&quot;&gt;Access development tools and resources&lt;/li&gt;
&lt;/ol&gt;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;Personal Experience Building a CRM Solution&lt;/h2&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Here&#39;s my journey developing a custom CRM solution for a real estate agency:&lt;/p&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;The project involved creating a property management module within Dynamics 365. I started by analyzing the client&#39;s requirements and designing custom entities for properties, listings, and transactions. Using C#, I developed custom plugins for automated workflow triggers when properties changed status.&lt;/p&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Key challenges included:&lt;/p&gt;&lt;ul class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-disc space-y-2 pl-8&quot; depth=&quot;0&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;Integrating with third-party property listing APIs&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;Implementing complex business rules for commission calculations&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;2&quot;&gt;Building a custom Power BI dashboard for sales analytics&lt;/li&gt;
&lt;/ul&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;This experience taught me the importance of understanding both technical aspects and business processes in CRM development.&lt;/p&gt;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;Stay Current&lt;/h2&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;The Dynamics 365 ecosystem evolves rapidly. Stay updated through:&lt;/p&gt;&lt;ol class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-decimal space-y-2 pl-8&quot; depth=&quot;0&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;Microsoft Release Plans&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;Technical documentation updates&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;2&quot;&gt;Community events and webinars&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;3&quot;&gt;Industry conferences&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;4&quot;&gt;Online training platforms&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;



























&lt;/p&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Remember that becoming a successful Dynamics 365 developer requires continuous learning and practical application of skills. Start with small projects and gradually take on more complex challenges as you build your expertise.&lt;/p&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;b&gt;Non-Technical Skills for CRM Developers&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;While technical expertise is crucial for a Microsoft Dynamics 365 developer, non-technical skills are equally important for long-term success. These skills enable developers to collaborate effectively, understand business needs, and deliver solutions that drive value.&lt;/p&gt;&lt;h3&gt;1. &lt;strong&gt;Business Analysis Skills&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;Understanding the business processes and objectives of clients is key to building effective CRM solutions.&lt;/p&gt;&lt;ul data-spread=&quot;false&quot;&gt;&lt;li&gt;&lt;p&gt;Learn to gather and analyze requirements.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Develop process flow diagrams.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Understand business workflows and automation needs.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Recommended resource: &lt;em&gt;Business Analysis Fundamentals&lt;/em&gt; on Udemy (&lt;a disabled=&quot;true&quot;&gt;https://www.udemy.com/&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;2. &lt;strong&gt;Problem-Solving Mindset&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;Every CRM project comes with unique challenges.&lt;/p&gt;&lt;ul data-spread=&quot;false&quot;&gt;&lt;li&gt;&lt;p&gt;Develop critical thinking skills.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Learn to troubleshoot complex issues.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Approach problems systematically.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;3. &lt;strong&gt;Communication Skills&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;Clear communication bridges the gap between technical teams and stakeholders.&lt;/p&gt;&lt;ul data-spread=&quot;false&quot;&gt;&lt;li&gt;&lt;p&gt;Practice active listening.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Learn to explain technical concepts to non-technical audiences.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Improve documentation skills for requirements and technical designs.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;4. &lt;strong&gt;Project Management Basics&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;Familiarity with project management methodologies ensures smooth project delivery.&lt;/p&gt;&lt;ul data-spread=&quot;false&quot;&gt;&lt;li&gt;&lt;p&gt;Understand Agile and Scrum methodologies.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Learn to use tools like Jira, Trello, or Microsoft Project.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Recommended resource: &lt;em&gt;Agile Fundamentals&lt;/em&gt; on Pluralsight (&lt;a disabled=&quot;true&quot;&gt;https://www.pluralsight.com/&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;5. &lt;strong&gt;Time Management and Organization&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;CRM projects often involve multiple tasks and deadlines.&lt;/p&gt;&lt;ul data-spread=&quot;false&quot;&gt;&lt;li&gt;&lt;p&gt;Prioritize tasks effectively.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Use tools like Microsoft To-Do or Asana for task management.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Set realistic timelines and track progress.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;6. &lt;strong&gt;Customer Focus&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;Understanding end-users&#39; needs helps in building user-friendly solutions.&lt;/p&gt;&lt;ul data-spread=&quot;false&quot;&gt;&lt;li&gt;&lt;p&gt;Develop empathy for user challenges.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Gather feedback through user testing.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Prioritize customer satisfaction.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;7. &lt;strong&gt;Adaptability and Continuous Learning&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;The tech landscape evolves quickly.&lt;/p&gt;&lt;ul data-spread=&quot;false&quot;&gt;&lt;li&gt;&lt;p&gt;Stay open to learning new tools and updates.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Adapt to changing project requirements.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Attend webinars, training sessions, and conferences.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Becoming a Microsoft Power Platform Developer&lt;/h3&gt;&lt;div&gt;&lt;p&gt;The Microsoft Power Platform is a suite of low-code tools that enables the rapid development of custom business applications, automation of workflows, and insightful data analysis. As a CRM developer, proficiency in the Power Platform is invaluable for creating integrated and efficient solutions.&lt;/p&gt;&lt;h3&gt;Understanding the Power Platform&lt;/h3&gt;&lt;p&gt;The Power Platform comprises several key components:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Power Apps&lt;/strong&gt;: Develop custom applications with minimal coding.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Power Automate&lt;/strong&gt;: Automate workflows and business processes.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Power BI&lt;/strong&gt;: Analyze data and create interactive reports.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Power Pages&lt;/strong&gt;: Build low-code, responsive websites.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;These tools are built on Microsoft Dataverse, providing a unified data platform for seamless integration. &lt;span class=&quot;&quot; data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;relative inline-flex items-center&quot;&gt;&lt;a class=&quot;ml-1 inline-flex h-[22px] items-center rounded-xl bg-[#f4f4f4] px-2 text-[0.5em] font-medium text-token-text-secondary dark:bg-token-main-surface-secondary relative top-[-0.094rem] !text-token-text-secondary uppercase hover:bg-token-text-primary hover:!text-token-main-surface-secondary dark:hover:bg-token-text-primary group&quot; href=&quot;https://learn.microsoft.com/en-us/power-platform/developer/get-started?utm_source=chatgpt.com&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;&lt;span class=&quot;truncate&quot;&gt;Microsoft Learn&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;h3&gt;Steps to Become a Power Platform Developer&lt;/h3&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Learn the Fundamentals&lt;/strong&gt;:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Microsoft Learn&lt;/strong&gt;: Offers comprehensive modules on Power Platform basics.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Introduction to Microsoft Power Platform for Developers&lt;/strong&gt;: Provides an overview tailored for developers. &lt;span class=&quot;&quot; data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;relative inline-flex items-center&quot;&gt;&lt;a class=&quot;ml-1 inline-flex h-[22px] items-center rounded-xl bg-[#f4f4f4] px-2 text-[0.5em] font-medium text-token-text-secondary dark:bg-token-main-surface-secondary relative top-[-0.094rem] !text-token-text-secondary uppercase hover:bg-token-text-primary hover:!text-token-main-surface-secondary dark:hover:bg-token-text-primary group&quot; href=&quot;https://learn.microsoft.com/en-us/power-platform/developer/get-started?utm_source=chatgpt.com&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;&lt;span class=&quot;truncate&quot;&gt;Microsoft Learn&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Set Up a Developer Environment&lt;/strong&gt;:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Power Platform Developer Plan&lt;/strong&gt;: Access free development environments to build and test solutions.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;How-To Guide&lt;/strong&gt;: Instructions on creating a developer environment. &lt;span class=&quot;&quot; data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;relative inline-flex items-center&quot;&gt;&lt;a class=&quot;ml-1 inline-flex h-[22px] items-center rounded-xl bg-[#f4f4f4] px-2 text-[0.5em] font-medium text-token-text-secondary dark:bg-token-main-surface-secondary relative top-[-0.094rem] !text-token-text-secondary uppercase hover:bg-token-text-primary hover:!text-token-main-surface-secondary dark:hover:bg-token-text-primary group&quot; href=&quot;https://learn.microsoft.com/en-us/power-platform/developer/?utm_source=chatgpt.com&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;&lt;span class=&quot;truncate&quot;&gt;Microsoft Learn&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Master Dataverse&lt;/strong&gt;:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Dataverse Developer Guide&lt;/strong&gt;: Learn about the underlying data platform for Power Apps. &lt;span class=&quot;&quot; data-state=&quot;closed&quot;&gt;&lt;div class=&quot;relative inline-flex items-center&quot;&gt;&lt;a class=&quot;ml-1 inline-flex h-[22px] items-center rounded-xl bg-[#f4f4f4] px-2 text-[0.5em] font-medium text-token-text-secondary dark:bg-token-main-surface-secondary relative top-[-0.094rem] !text-token-text-secondary uppercase hover:bg-token-text-primary hover:!text-token-main-surface-secondary dark:hover:bg-token-text-primary group&quot; href=&quot;https://learn.microsoft.com/en-us/power-apps/developer/data-platform/overview?utm_source=chatgpt.com&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;&lt;span class=&quot;truncate&quot;&gt;Microsoft Learn&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Explore Fusion Development&lt;/strong&gt;:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Fusion Development&lt;/strong&gt;: Combines low-code tools with traditional coding for enhanced solutions.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Fusion Development eBook&lt;/strong&gt;: In-depth resource on fusion development practices. &lt;span class=&quot;&quot; data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;relative inline-flex items-center&quot;&gt;&lt;a class=&quot;ml-1 inline-flex h-[22px] items-center rounded-xl bg-[#f4f4f4] px-2 text-[0.5em] font-medium text-token-text-secondary dark:bg-token-main-surface-secondary relative top-[-0.094rem] !text-token-text-secondary uppercase hover:bg-token-text-primary hover:!text-token-main-surface-secondary dark:hover:bg-token-text-primary group&quot; href=&quot;https://learn.microsoft.com/en-us/power-platform/developer/?utm_source=chatgpt.com&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;&lt;span class=&quot;truncate&quot;&gt;Microsoft Learn&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Enhance Application Lifecycle Management (ALM) Skills&lt;/strong&gt;:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Power Platform ALM Basics&lt;/strong&gt;: Understand the essentials of managing application lifecycles.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Power Platform CLI&lt;/strong&gt;: Command-line interface for efficient development and deployment. &lt;span class=&quot;&quot; data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;relative inline-flex items-center&quot;&gt;&lt;a class=&quot;ml-1 inline-flex h-[22px] items-center rounded-xl bg-[#f4f4f4] px-2 text-[0.5em] font-medium text-token-text-secondary dark:bg-token-main-surface-secondary relative top-[-0.094rem] !text-token-text-secondary uppercase hover:bg-token-text-primary hover:!text-token-main-surface-secondary dark:hover:bg-token-text-primary group&quot; href=&quot;https://learn.microsoft.com/en-us/power-platform/developer/?utm_source=chatgpt.com&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;&lt;span class=&quot;truncate&quot;&gt;Microsoft Learn&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Stay Updated with Official Documentation&lt;/strong&gt;:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Power Platform Developer Documentation&lt;/strong&gt;: Regularly updated resources and guides. &lt;span class=&quot;&quot; data-state=&quot;closed&quot;&gt;&lt;div class=&quot;relative inline-flex items-center&quot;&gt;&lt;a class=&quot;ml-1 inline-flex h-[22px] items-center rounded-xl bg-[#f4f4f4] px-2 text-[0.5em] font-medium text-token-text-secondary dark:bg-token-main-surface-secondary relative top-[-0.094rem] !text-token-text-secondary uppercase hover:bg-token-text-primary hover:!text-token-main-surface-secondary dark:hover:bg-token-text-primary group&quot; href=&quot;https://learn.microsoft.com/en-us/power-platform/developer/?utm_source=chatgpt.com&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;&lt;span class=&quot;truncate&quot;&gt;Microsoft Learn&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h3&gt;Additional Resources&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Training Modules&lt;/strong&gt;: Interactive learning paths for hands-on experience.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Community Forums&lt;/strong&gt;: Engage with other developers to share knowledge and solutions.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;By following these steps and utilizing the available resources, you can develop the skills necessary to become a proficient Microsoft Power Platform developer, enhancing your ability to create robust CRM solutions.&lt;br /&gt;&lt;br /&gt;For a visual overview and additional insights, you might find the following video helpful:&lt;h3&gt;&lt;div class=&quot;not-prose mb-3 flex flex-col gap-4 text-base&quot;&gt;&lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot; class=&quot;aspect-video w-full rounded-lg&quot; frameborder=&quot;0&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; src=&quot;https://www.youtube.com/embed/7LkrTCIcJNE&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;/h3&gt;&lt;h3&gt;Final Thoughts&lt;/h3&gt;&lt;p&gt;A successful Dynamics 365 developer combines technical proficiency with strong interpersonal and analytical skills. By developing these non-technical competencies, you will not only build better CRM solutions but also foster stronger relationships with clients and team members.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://chamarairesh.blogspot.com/feeds/1661502512311343063/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2491204017359768357/1661502512311343063' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/1661502512311343063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/1661502512311343063'/><link rel='alternate' type='text/html' href='http://chamarairesh.blogspot.com/2022/12/how-to-become-crm-developer-for.html' title='How to Become a CRM Developer for Microsoft Dynamics 365 Online'/><author><name>Chamara Iresh</name><uri>http://www.blogger.com/profile/04695612052896290711</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//3.bp.blogspot.com/-Wfsm4TxTxO0/XiPTZjrj-cI/AAAAAAAAvCw/ONKFubGdBw41mPb1Xp89d9eMkvXaV0TkQCK4BGAYYCw/s220/20190817_151917.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/7LkrTCIcJNE/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2491204017359768357.post-155349435552819051</id><published>2022-12-25T04:28:00.005+09:00</published><updated>2022-12-25T06:52:50.801+09:00</updated><title type='text'>Security Features in Microsoft Dynamics 365 (CRM) Online</title><content type='html'>&lt;p&gt;Microsoft Dynamics 365 (CRM) Online is a cloud-based customer relationship management platform that helps businesses manage their sales, marketing, and customer service activities. To ensure the security of the platform and the data stored on it, Dynamics 365 (CRM) Online offers a variety of security features.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;1. Encryption: Dynamics 365 (CRM) Online uses SQL Transparent Data Encryption (TDE) to encrypt and decrypt data and log files in real time, helping to protect customer databases at rest. As of December 2017, Microsoft recommends securing the encryption keys used for TDE on the Azure Secure Vault (HSM). This allows you to generate and manage your own encryption keys, and upload them to an Azure Key Vault controlled by Microsoft.&lt;/p&gt;&lt;p&gt;2. Multi-Factor Authentication (MFA) or Two-Factor Authentication (2FA): MFA or 2FA is a security measure that requires an additional method of verifying your identity, such as a one-time code sent to your phone or a security app, in addition to your password. Dynamics 365 (CRM) Online includes basic MFA, but you may need to purchase Azure AD Premium licenses for additional MFA options.&lt;/p&gt;&lt;p&gt;3. Pen testing: Microsoft conducts server-level penetration testing to ensure the security of Dynamics 365 (CRM) Online. These tests are designed to identify and exploit vulnerabilities in the system, and the results are used to improve the security of the platform.&lt;/p&gt;&lt;p&gt;4. Data center security: Dynamics 365 (CRM) Online is hosted on Microsoft Azure, which has a number of security measures in place to protect the data centers that host the platform. These measures include physical security, network security, and data protection. Azure also undergoes regular security audits and assessments to ensure that it meets industry standards and regulations.&lt;/p&gt;&lt;p&gt;5. Compliance: Dynamics 365 (CRM) Online meets a number of industry and government standards and regulations, including GDPR, HIPAA, and ISO 27001. This helps to ensure that the platform is secure and compliant with relevant laws and regulations.&lt;/p&gt;&lt;p&gt;6. Data backup and recovery: Dynamics 365 (CRM) Online includes data backup and recovery capabilities to help protect against data loss. In the event of a data loss or disaster, you can restore your data from a backup to minimize the impact on your business.&lt;/p&gt;&lt;p&gt;7. Access control: Dynamics 365 (CRM) Online includes access control features to help you manage who has access to your data and what they can do with it. This includes role-based security, which allows you to assign different levels of access to different users or groups, and data visibility controls, which allow you to specify which data is visible to which users.&lt;/p&gt;&lt;p&gt;8. Activity logging: Dynamics 365 (CRM) Online includes activity logging to help you track changes to your data and identify any potential security issues. You can view the logs to see who made changes to your data and when, and use this information to help detect and prevent security breaches.&lt;/p&gt;&lt;p&gt;9. Security updates: It is important to keep your Dynamics 365 (CRM) Online instance and any associated apps up to date with the latest security updates to protect against vulnerabilities and threats. Microsoft regularly releases security updates for Dynamics 365 (CRM) Online to help protect against new threats and vulnerabilities.&lt;/p&gt;&lt;p&gt;For more information on the security of Microsoft Dynamics 365 (CRM) Online, visit the following links:&lt;/p&gt;&lt;ul style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;is it gx hw b hx hy ib ic if iu ij iv in iw ir ix iy iz ja bi&quot; data-selectable-paragraph=&quot;&quot; id=&quot;2e37&quot; style=&quot;box-sizing: inherit; color: #292929; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; letter-spacing: -0.003em; line-height: 28px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 2.14em; padding-left: 0px;&quot;&gt;&lt;a class=&quot;ae jb&quot; href=&quot;https://www.microsoft.com/en-us/dynamics365/security&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;https://www.microsoft.com/en-us/dynamics365/security&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;is it gx hw b hx jc ib jd if je ij jf in jg ir ix iy iz ja bi&quot; data-selectable-paragraph=&quot;&quot; id=&quot;2e18&quot; style=&quot;box-sizing: inherit; color: #292929; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; letter-spacing: -0.003em; line-height: 28px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;a class=&quot;ae jb&quot; href=&quot;https://msdn.microsoft.com/en-us/library/gg309524.aspx&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;https://msdn.microsoft.com/en-us/library/gg309524.aspx&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;is it gx hw b hx jc ib jd if je ij jf in jg ir ix iy iz ja bi&quot; data-selectable-paragraph=&quot;&quot; id=&quot;1b9f&quot; style=&quot;box-sizing: inherit; color: #292929; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; letter-spacing: -0.003em; line-height: 28px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;a class=&quot;ae jb&quot; href=&quot;https://azure.microsoft.com/en-us/overview/trusted-cloud/security/&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;https://azure.microsoft.com/en-us/overview/trusted-cloud/security/&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://chamarairesh.blogspot.com/feeds/155349435552819051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2491204017359768357/155349435552819051' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/155349435552819051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/155349435552819051'/><link rel='alternate' type='text/html' href='http://chamarairesh.blogspot.com/2022/12/security-features-in-microsoft-dynamics.html' title='Security Features in Microsoft Dynamics 365 (CRM) Online'/><author><name>Chamara Iresh</name><uri>http://www.blogger.com/profile/04695612052896290711</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//3.bp.blogspot.com/-Wfsm4TxTxO0/XiPTZjrj-cI/AAAAAAAAvCw/ONKFubGdBw41mPb1Xp89d9eMkvXaV0TkQCK4BGAYYCw/s220/20190817_151917.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2491204017359768357.post-6779065621689600266</id><published>2022-12-25T04:17:00.003+09:00</published><updated>2022-12-25T06:54:38.551+09:00</updated><title type='text'>Migrate Dynamics CRM 365 Online to Dynamics CRM 365 On-Premise — Summary</title><content type='html'>&lt;p&gt;Migrating from Dynamics CRM 365 Online to Dynamics CRM 365 On-Premise can be a complex process, but it is often necessary for organizations that need to access data offline or comply with certain regulations. The migration process involves transferring data, configurations, and customizations from the cloud-based version to the on-premise version, which is installed and run on a local server.&lt;/p&gt;&lt;p&gt;The first step in the migration process is to prepare the on-premise environment by installing and configuring the Dynamics CRM server, setting up Active Directory, and preparing the SQL Server database. Next, data must be exported from the online version of Dynamics CRM using the Dynamics CRM Data Migration Manager. This tool allows users to select the data they want to export and specify a location for the exported files.&lt;/p&gt;&lt;p&gt;Once the data has been exported, it can be imported into the on-premise version of Dynamics CRM using the Import Data Wizard. This tool guides users through the process of mapping the data from the exported files to the appropriate fields in the on-premise version.&lt;/p&gt;&lt;p&gt;After the migration is complete, it is important to test the migrated data to ensure that it has been transferred correctly and that the on-premise version of Dynamics CRM is functioning properly. By following the steps outlined in this blog post and carefully planning and executing the migration process, organizations can successfully migrate from Dynamics CRM 365 Online to Dynamics CRM 365 On-Premise.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph hu hv gx hw b hx hy hz ia ib ic id ie if ig ih ii ij ik il im in io ip iq ir gq bi&quot; data-selectable-paragraph=&quot;&quot; id=&quot;d601&quot; style=&quot;background-color: white; box-sizing: inherit; color: #292929; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;a href=&quot;https://chamarairesh.blogspot.com/2018/03/migrate-dynamics-crm-365-online-to.html&quot; style=&quot;letter-spacing: -0.003em;&quot;&gt;chamara iresh&#39;s Blog: Migrate Dynamics CRM 365 Online to Dynamics CRM 365 On-Premise&lt;/a&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://chamarairesh.blogspot.com/feeds/6779065621689600266/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2491204017359768357/6779065621689600266' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/6779065621689600266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/6779065621689600266'/><link rel='alternate' type='text/html' href='http://chamarairesh.blogspot.com/2022/12/migrate-dynamics-crm-365-online-to.html' title='Migrate Dynamics CRM 365 Online to Dynamics CRM 365 On-Premise — Summary'/><author><name>Chamara Iresh</name><uri>http://www.blogger.com/profile/04695612052896290711</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//3.bp.blogspot.com/-Wfsm4TxTxO0/XiPTZjrj-cI/AAAAAAAAvCw/ONKFubGdBw41mPb1Xp89d9eMkvXaV0TkQCK4BGAYYCw/s220/20190817_151917.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2491204017359768357.post-6014751802371326271</id><published>2022-12-25T03:58:00.005+09:00</published><updated>2025-03-06T03:39:21.000+09:00</updated><title type='text'>Migrate Dynamics CRM 365 On-Premise to CRM 365 Online - Summary</title><content type='html'>&lt;p&gt;&amp;nbsp;There are several key differences between Dynamics 365 on-premises and Dynamics 365 online that organizations should consider when deciding which option is best for their needs. Some of the main differences include:&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;1.&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Deployment: Dynamics 365 on-premises is installed on an organization&#39;s own servers, while Dynamics 365 online is hosted in the cloud.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;2.&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Maintenance and upgrades: With Dynamics 365 on-premises, organizations are responsible for managing and maintaining the system, including installing updates and patches. With Dynamics 365 online, Microsoft handles these tasks.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;3.&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Scalability and performance: Dynamics 365 online is built on Azure, a cloud platform with a global network of data centers, which allows for better scalability and performance compared to on-premises systems.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;4.&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Customization: With Dynamics 365 on-premises, organizations have more flexibility to customize the system to meet their specific needs. However, this customization can also increase the complexity and maintenance required for the system. Dynamics 365 online is more limited in terms of customization, but this can also make it easier to maintain and use.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;5.&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Integration: Dynamics 365 online offers integration with other Microsoft cloud services such as Office 365 and Azure, which can be beneficial for organizations already using these services. Dynamics 365 on-premises can also be integrated with other systems, but this requires additional effort and resources.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;6.&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Cost: The cost of Dynamics 365 on-premises depends on the number of users and the amount of customization required. In general, Dynamics 365 online is likely to be more cost-effective, especially for organizations with a large number of users.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;When deciding whether to migrate to Dynamics 365 online, organizations should carefully consider their specific needs and requirements, including the level of customization required, the complexity of the system, and the resources available for maintenance and support. It may be helpful to consult with a Dynamics 365 partner or consultant to determine the best solution for your organization.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Refer below link for details information:&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://chamarairesh.blogspot.com/2022/01/migrate-dynamics-dynamics-crm-365-on.html&quot;&gt;chamara iresh&#39;s Blog: Migrate Dynamics Dynamics CRM 365 On-Premise to CRM 365 Online&lt;/a&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://chamarairesh.blogspot.com/feeds/6014751802371326271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2491204017359768357/6014751802371326271' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/6014751802371326271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/6014751802371326271'/><link rel='alternate' type='text/html' href='http://chamarairesh.blogspot.com/2022/12/migrate-dynamics-dynamics-crm-365-on.html' title='Migrate Dynamics CRM 365 On-Premise to CRM 365 Online - Summary'/><author><name>Chamara Iresh</name><uri>http://www.blogger.com/profile/04695612052896290711</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//3.bp.blogspot.com/-Wfsm4TxTxO0/XiPTZjrj-cI/AAAAAAAAvCw/ONKFubGdBw41mPb1Xp89d9eMkvXaV0TkQCK4BGAYYCw/s220/20190817_151917.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2491204017359768357.post-3232898030215224995</id><published>2022-12-02T04:35:00.003+09:00</published><updated>2024-12-30T22:50:59.713+09:00</updated><title type='text'>Unit Testing with FakeXrmEasy</title><content type='html'>&lt;p&gt;&lt;span style=&quot;background-color: white; font-size: large;&quot;&gt;&lt;b&gt;Making Unit Testing Easy with FakeXrmEasy&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: white;&quot;&gt;Hey there! Let&#39;s talk about making your Dataverse testing life easier with FakeXrmEasy. If you&#39;ve been wrestling with unit tests for your Dynamics 365/Dataverse projects, you&#39;re in for a treat.&lt;/span&gt;&lt;/p&gt;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;Why You&#39;ll Love FakeXrmEasy&lt;/h2&gt;&lt;p&gt;&lt;span style=&quot;background-color: white;&quot;&gt;
&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Think of FakeXrmEasy as your personal Dataverse simulator. Instead of mocking every single service call (we&#39;ve all been there, it&#39;s not fun), FakeXrmEasy gives you an in-memory database that just works. No more endless mocking – just write your tests and go!&lt;/p&gt;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;Key Features&lt;/h2&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;
&lt;/p&gt;&lt;ol class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-decimal space-y-2 pl-8&quot; depth=&quot;0&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;Complete simulation of Dataverse backend with in-memory database&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;Support for all query types:
&lt;ul class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-disc space-y-2 pl-8&quot; depth=&quot;1&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;FetchXML&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;QueryExpress&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;2&quot;&gt;QueryByAttribute&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;3&quot;&gt;CRM LINQ provider&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;2&quot;&gt;Compatible with major test runners (xUnit, MSTest, NUnit)&lt;/li&gt;&lt;/ol&gt;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;Real-World Testing Example&lt;/h2&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Let&#39;s look at a practical example. Say you&#39;re updating contact records:&lt;/p&gt;&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;ContactTests&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token type-list&quot; style=&quot;color: #d19a66;&quot;&gt;FakeXrmEasyTestsBase&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;readonly&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;Contact&lt;/span&gt; _contact&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;ContactTests&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt; 
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Create a test contact - just like you would in real life&lt;/span&gt;
        _contact &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;Contact&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
            Id &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; Guid&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;NewGuid&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
            FirstName &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;John&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
            LastName &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;Smith&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
            EmailAddress1 &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;john.smith@email.com&quot;&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token attribute&quot; style=&quot;color: #d19a66;&quot;&gt;Fact&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #d19a66;&quot;&gt;Task&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Can_Update_Contact_Name_And_Email&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Start with our test contact&lt;/span&gt;
        context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Initialize&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;_contact&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Let&#39;s update John&#39;s details&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; command &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;UpdateContactCommand&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;service&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
            ContactId &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; _contact&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Id&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
            FirstName &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;Jonathan&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
            EmailAddress1 &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;jonathan.smith@email.com&quot;&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;await&lt;/span&gt; command&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;ExecuteAsync&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Did it work? Let&#39;s check!&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; updatedContact &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token generic-method&quot; style=&quot;color: #61afef;&quot;&gt;CreateQuery&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot; style=&quot;color: #d19a66;&quot;&gt;Contact&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Where&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;c &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&amp;gt;&lt;/span&gt; c&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Id &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;==&lt;/span&gt; _contact&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Id&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;FirstOrDefault&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

        Assert&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Equal&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;Jonathan&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; updatedContact&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;FirstName&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
        Assert&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Equal&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;jonathan.smith@email.com&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; updatedContact&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;EmailAddress1&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Here&#39;s the command that makes it happen:&lt;/p&gt;&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;UpdateContactCommand&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;readonly&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;IOrganizationService&lt;/span&gt; _service&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #d19a66;&quot;&gt;Guid&lt;/span&gt; ContactId &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #c678dd;&quot;&gt;string&lt;/span&gt; FirstName &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #c678dd;&quot;&gt;string&lt;/span&gt; EmailAddress1 &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;UpdateContactCommand&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;IOrganizationService&lt;/span&gt; service&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        _service &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; service &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;??&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;ArgumentNullException&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;nameof&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;service&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #d19a66;&quot;&gt;Task&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;ExecuteAsync&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; contact &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;Contact&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
            Id &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; ContactId&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
            FirstName &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; FirstName&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
            EmailAddress1 &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; EmailAddress1
        &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;await&lt;/span&gt; _service&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;UpdateAsync&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;contact&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;Quick Tips for Better Tests&lt;/h2&gt;&lt;ol class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-decimal space-y-2 pl-8&quot; depth=&quot;0&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;Keep it simple - test one thing at a time&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;Only set up the data you need&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;2&quot;&gt;Give your tests clear, descriptive names&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;3&quot;&gt;Check the results right after your operation&lt;/li&gt;
&lt;/ol&gt;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;Testing Queries Made Easy&lt;/h2&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Here&#39;s how you might test a query to find active contacts:&lt;/p&gt;&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div class=&quot;text-text-300 absolute pl-3 pt-2.5 text-xs&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token attribute&quot; style=&quot;color: #d19a66;&quot;&gt;Fact&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #c678dd;&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Find_Active_Contacts&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Set up some test contacts&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; contacts &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;token constructor-invocation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;Contact&lt;/span&gt;&lt;span class=&quot;token constructor-invocation&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;Contact&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt; 
            Id &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; Guid&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;NewGuid&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; 
            FirstName &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;Active&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
            StateCode &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; ContactState&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Active 
        &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;Contact&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt; 
            Id &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; Guid&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;NewGuid&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; 
            FirstName &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;Inactive&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
            StateCode &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; ContactState&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Inactive 
        &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Initialize&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;contacts&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Find active contacts&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; activeContacts &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token generic-method&quot; style=&quot;color: #61afef;&quot;&gt;CreateQuery&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot; style=&quot;color: #d19a66;&quot;&gt;Contact&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Where&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;c &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&amp;gt;&lt;/span&gt; c&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;StateCode &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;==&lt;/span&gt; ContactState&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Active&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;ToList&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Make sure we found the right one&lt;/span&gt;
    Assert&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Single&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;activeContacts&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    Assert&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Equal&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;Active&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; activeContacts&lt;span class=&quot;token&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;FirstName&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;p&gt;









&lt;/p&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;Basic CRUD Testing&lt;/h2&gt;&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token attribute&quot; style=&quot;color: #d19a66;&quot;&gt;Fact&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #d19a66;&quot;&gt;Task&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Create_And_Update_Account_With_Related_Contacts&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Setup test data&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; account &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;Account&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        Id &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; Guid&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;NewGuid&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
        Name &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;Test Corp&quot;&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; contact &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;Contact&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        Id &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; Guid&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;NewGuid&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
        FirstName &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;John&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
        LastName &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;Doe&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
        ParentCustomerId &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; account&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;ToEntityReference&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

    context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Initialize&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;Entity&lt;/span&gt;&lt;span class=&quot;token constructor-invocation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token constructor-invocation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt; account&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; contact &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Test update logic&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; updateCmd &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;UpdateAccountCommand&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;service&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        AccountId &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; account&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Id&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
        NewName &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;Test Corp International&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
        Revenue &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;Money&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;1000000&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;await&lt;/span&gt; updateCmd&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;ExecuteAsync&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Verify results&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; updatedAccount &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token generic-method&quot; style=&quot;color: #61afef;&quot;&gt;CreateQuery&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot; style=&quot;color: #d19a66;&quot;&gt;Account&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Include&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;a &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&amp;gt;&lt;/span&gt; a&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Contact_Customer&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Related contacts&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;FirstOrDefault&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;a &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&amp;gt;&lt;/span&gt; a&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Id &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;==&lt;/span&gt; account&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Id&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

    Assert&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Equal&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;Test Corp International&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; updatedAccount&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Name&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    Assert&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Equal&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;1000000&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; updatedAccount&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Revenue&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Value&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;Plugin Testing&lt;/h2&gt;&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;AccountPostCreatePlugin&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token type-list&quot; style=&quot;color: #d19a66;&quot;&gt;IPlugin&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #c678dd;&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Execute&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;IServiceProvider&lt;/span&gt; serviceProvider&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; context &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;IPluginExecutionContext&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;serviceProvider&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;GetService&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;typeof&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token type-expression&quot; style=&quot;color: #d19a66;&quot;&gt;IPluginExecutionContext&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; service &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;IOrganizationServiceFactory&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;serviceProvider&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;GetService&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;typeof&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token type-expression&quot; style=&quot;color: #d19a66;&quot;&gt;IOrganizationServiceFactory&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;CreateOrganizationService&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;UserId&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; account &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;InputParameters&lt;span class=&quot;token&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;Target&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;Entity&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
        
        &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Create associated task&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; task &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;Task&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
            Subject &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token interpolation-string&quot; style=&quot;color: #98c379;&quot;&gt;$&quot;Review new account: &lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;account&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp generic-method&quot;&gt;GetAttributeValue&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp generic-method generic&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp generic-method generic&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp generic-method generic&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation expression language-csharp&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token interpolation-string interpolation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token interpolation-string&quot; style=&quot;color: #98c379;&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
            RegardingObjectId &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; account&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;ToEntityReference&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
        
        service&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Create&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;task&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #c678dd;&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Plugin_Creates_Task_On_Account_Creation&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Setup plugin context&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; plugin &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;AccountPostCreatePlugin&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; account &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;Account&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt; Id &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; Guid&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;NewGuid&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; Name &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;New Account&quot;&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    
    &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Setup execution context&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; pluginContext &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;GetDefaultPluginContext&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    pluginContext&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;InputParameters &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;ParameterCollection&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;Target&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; account &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    pluginContext&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Stage &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;40&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Post-operation&lt;/span&gt;
    
    &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Execute plugin&lt;/span&gt;
    plugin&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Execute&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;GetDefaultServiceProvider&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;pluginContext&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    
    &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Verify task creation&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; createdTask &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token generic-method&quot; style=&quot;color: #61afef;&quot;&gt;CreateQuery&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot; style=&quot;color: #d19a66;&quot;&gt;Task&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;FirstOrDefault&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;t &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&amp;gt;&lt;/span&gt; t&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;RegardingObjectId&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Id &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;==&lt;/span&gt; account&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Id&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    
    Assert&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;NotNull&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;createdTask&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    Assert&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Contains&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;Review new account&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; createdTask&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Subject&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;Custom Action Testing&lt;/h2&gt;&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div class=&quot;text-text-300 absolute pl-3 pt-2.5 text-xs&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;CloseOpportunityRequest&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token type-list&quot; style=&quot;color: #d19a66;&quot;&gt;OrganizationRequest&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;CloseOpportunityRequest&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;base&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;new_CloseOpportunity&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #d19a66;&quot;&gt;Guid&lt;/span&gt; OpportunityId
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;get&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;Guid&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;Parameters&lt;span class=&quot;token&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;OpportunityId&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt; Parameters&lt;span class=&quot;token&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;OpportunityId&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #c678dd;&quot;&gt;int&lt;/span&gt; Status
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;get&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;Parameters&lt;span class=&quot;token&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;Status&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt; Parameters&lt;span class=&quot;token&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;Status&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token attribute&quot; style=&quot;color: #d19a66;&quot;&gt;Fact&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #c678dd;&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Test_Close_Opportunity_Action&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Setup&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; opportunity &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;Opportunity&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        Id &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; Guid&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;NewGuid&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
        Name &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;Test Deal&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
        StatusCode &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;OptionSetValue&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Initialize&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;opportunity&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Register custom action&lt;/span&gt;
    context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;AddExecutionMock&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;new_CloseOpportunity&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;req&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; opportunityId &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;Guid&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;req&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Parameters&lt;span class=&quot;token&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;OpportunityId&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; status &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;req&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Parameters&lt;span class=&quot;token&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;Status&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Update opportunity&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; opp &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;Opportunity&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
            Id &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; opportunityId&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
            StateCode &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;OptionSetValue&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
            StatusCode &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;OptionSetValue&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;status&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
        context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;GetOrganizationService&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Update&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;opp&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;OrganizationResponse&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Execute action&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; request &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;CloseOpportunityRequest&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        OpportunityId &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; opportunity&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Id&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
        Status &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Won&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    
    context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;GetOrganizationService&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Execute&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;request&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Verify&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; updatedOpp &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token generic-method&quot; style=&quot;color: #61afef;&quot;&gt;CreateQuery&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot; style=&quot;color: #d19a66;&quot;&gt;Opportunity&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;FirstOrDefault&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;o &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&amp;gt;&lt;/span&gt; o&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Id &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;==&lt;/span&gt; opportunity&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Id&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    Assert&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Equal&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; updatedOpp&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;StatusCode&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Value&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;Workflow Testing&lt;/h2&gt;&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;CreateFollowUpTaskActivity&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token type-list&quot; style=&quot;color: #d19a66;&quot;&gt;CodeActivity&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token attribute&quot; style=&quot;color: #d19a66;&quot;&gt;Input&lt;/span&gt;&lt;span class=&quot;token attribute attribute-arguments&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token attribute attribute-arguments&quot; style=&quot;color: #98c379;&quot;&gt;&quot;Account&quot;&lt;/span&gt;&lt;span class=&quot;token attribute attribute-arguments&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token attribute&quot; style=&quot;color: #d19a66;&quot;&gt;ReferenceTarget&lt;/span&gt;&lt;span class=&quot;token attribute attribute-arguments&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token attribute attribute-arguments&quot; style=&quot;color: #98c379;&quot;&gt;&quot;account&quot;&lt;/span&gt;&lt;span class=&quot;token attribute attribute-arguments&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #d19a66;&quot;&gt;InArgument&lt;/span&gt;&lt;span class=&quot;token return-type&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token return-type&quot; style=&quot;color: #d19a66;&quot;&gt;EntityReference&lt;/span&gt;&lt;span class=&quot;token return-type&quot;&gt;&amp;gt;&lt;/span&gt; Account &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #c678dd;&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Execute&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #d19a66;&quot;&gt;CodeActivityContext&lt;/span&gt; executionContext&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; workflowContext &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; executionContext&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token generic-method&quot; style=&quot;color: #61afef;&quot;&gt;GetExtension&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot; style=&quot;color: #d19a66;&quot;&gt;IWorkflowContext&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; serviceFactory &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; executionContext&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token generic-method&quot; style=&quot;color: #61afef;&quot;&gt;GetExtension&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot; style=&quot;color: #d19a66;&quot;&gt;IOrganizationServiceFactory&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; service &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; serviceFactory&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;CreateOrganizationService&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;workflowContext&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;UserId&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; task &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;Task&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
            Subject &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;Follow up with account&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
            RegardingObjectId &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; Account&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Get&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;executionContext&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
        
        service&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Create&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;task&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token attribute&quot; style=&quot;color: #d19a66;&quot;&gt;Fact&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #c678dd;&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Workflow_Creates_Follow_Up_Task&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Setup&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; account &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;Account&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        Id &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; Guid&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;NewGuid&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
        Name &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;Test Account&quot;&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Initialize&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;account&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Setup workflow&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; workflow &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;CreateFollowUpTaskActivity&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; workflowInvoker &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;WorkflowInvoker&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;workflow&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    
    &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Execute workflow&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; inputs &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;Dictionary&lt;/span&gt;&lt;span class=&quot;token constructor-invocation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #c678dd;&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token constructor-invocation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #c678dd;&quot;&gt;object&lt;/span&gt;&lt;span class=&quot;token constructor-invocation&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;Account&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; account&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;ToEntityReference&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    
    workflowInvoker&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Invoke&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;inputs&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Verify&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; createdTask &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token generic-method&quot; style=&quot;color: #61afef;&quot;&gt;CreateQuery&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot; style=&quot;color: #d19a66;&quot;&gt;Task&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;FirstOrDefault&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;t &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&amp;gt;&lt;/span&gt; t&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;RegardingObjectId&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Id &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;==&lt;/span&gt; account&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Id&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    
    Assert&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;NotNull&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;createdTask&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    Assert&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Equal&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;Follow up with account&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; createdTask&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Subject&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;Testing Complex Scenarios&lt;/h2&gt;&lt;h3 class=&quot;font-600 text-lg font-bold&quot; level=&quot;3&quot;&gt;Business Rules Testing&lt;/h3&gt;&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token attribute&quot; style=&quot;color: #d19a66;&quot;&gt;Fact&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #c678dd;&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Contact_Business_Rules_Test&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Setup business rules&lt;/span&gt;
    context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;EnableBusinessRules&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; contact &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;Contact&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        Id &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; Guid&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;NewGuid&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
        EmailAddress1 &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;invalid-email&quot;&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Should throw due to business rule violation&lt;/span&gt;
    Assert&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token generic-method&quot; style=&quot;color: #61afef;&quot;&gt;Throws&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot; style=&quot;color: #d19a66;&quot;&gt;InvalidPluginExecutionException&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&amp;gt;&lt;/span&gt;
        context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;GetOrganizationService&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Create&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;contact&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h3 class=&quot;font-600 text-lg font-bold&quot; level=&quot;3&quot;&gt;Multi-Entity Operations&lt;/h3&gt;&lt;pre&gt;&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;&lt;div class=&quot;text-text-300 absolute pl-3 pt-2.5 text-xs&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed&quot; style=&quot;background: rgb(40, 44, 52); border-radius: 0.3em; color: #abb2bf; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; margin: 0.5em 0px; overflow: auto; padding: 1em; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;code class=&quot;language-csharp&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; direction: ltr; font-family: &amp;quot;Fira Code&amp;quot;, &amp;quot;Fira Mono&amp;quot;, Menlo, Consolas, &amp;quot;DejaVu Sans Mono&amp;quot;, monospace; hyphens: none; line-height: 1.5; tab-size: 2; text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; word-break: normal; word-spacing: normal;&quot;&gt;&lt;span class=&quot;token&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token attribute&quot; style=&quot;color: #d19a66;&quot;&gt;Fact&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token return-type&quot; style=&quot;color: #d19a66;&quot;&gt;Task&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Create_Account_With_Primary_Contact&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; data &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation&quot; style=&quot;color: #d19a66;&quot;&gt;AccountWithContactCommand&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;service&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;{&lt;/span&gt;
        AccountName &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;Enterprise Corp&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
        ContactFirstName &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;Jane&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
        ContactLastName &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;Smith&quot;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt;
        ContactEmail &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #98c379;&quot;&gt;&quot;jane.smith@enterprise.com&quot;&lt;/span&gt;
    &lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; result &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;await&lt;/span&gt; data&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;ExecuteAsync&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Verify account creation&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; account &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token generic-method&quot; style=&quot;color: #61afef;&quot;&gt;CreateQuery&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot; style=&quot;color: #d19a66;&quot;&gt;Account&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;FirstOrDefault&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;a &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&amp;gt;&lt;/span&gt; a&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Id &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;==&lt;/span&gt; result&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;AccountId&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    Assert&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;NotNull&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;account&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token&quot; style=&quot;color: #5c6370; font-style: italic;&quot;&gt;// Verify contact creation and association&lt;/span&gt;
    &lt;span class=&quot;token&quot; style=&quot;color: #c678dd;&quot;&gt;var&lt;/span&gt; contact &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&lt;/span&gt; context&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token generic-method&quot; style=&quot;color: #61afef;&quot;&gt;CreateQuery&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot; style=&quot;color: #d19a66;&quot;&gt;Contact&lt;/span&gt;&lt;span class=&quot;token generic-method generic&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;FirstOrDefault&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;c &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;=&amp;gt;&lt;/span&gt; c&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Id &lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;==&lt;/span&gt; result&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;ContactId&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    Assert&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;NotNull&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;contact&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
    Assert&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token&quot; style=&quot;color: #61afef;&quot;&gt;Equal&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;(&lt;/span&gt;account&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Id&lt;span class=&quot;token&quot;&gt;,&lt;/span&gt; contact&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;ParentCustomerId&lt;span class=&quot;token&quot;&gt;.&lt;/span&gt;Id&lt;span class=&quot;token&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;Best Practices Summary&lt;/h2&gt;&lt;ol class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-decimal space-y-2 pl-8&quot; depth=&quot;0&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;Initialize minimal test data&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;Test business logic isolation&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;2&quot;&gt;Use meaningful test names&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;3&quot;&gt;One assertion concept per test&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;4&quot;&gt;Mock external services when needed&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;5&quot;&gt;Handle async operations properly&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;6&quot;&gt;Test error scenarios&lt;/li&gt;
&lt;/ol&gt;&lt;h2 class=&quot;font-600 text-xl font-bold&quot; level=&quot;2&quot;&gt;Common Pitfalls&lt;/h2&gt;&lt;ol class=&quot;-mt-1 [li&amp;gt;&amp;amp;]:mt-2 list-decimal space-y-2 pl-8&quot; depth=&quot;0&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;0&quot;&gt;Not clearing context between tests&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;1&quot;&gt;Testing too many scenarios in one test&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;2&quot;&gt;Not handling plugin context properly&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;3&quot;&gt;Forgetting to register custom actions&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words&quot; index=&quot;4&quot;&gt;Not testing negative scenarios&lt;/li&gt;
&lt;/ol&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;
















&lt;/p&gt;&lt;p class=&quot;whitespace-pre-wrap break-words&quot;&gt;Remember, FakeXrmEasy handles all the heavy lifting of simulating Dataverse. You just focus on writing clean, meaningful tests. No more mock setup headaches!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://chamarairesh.blogspot.com/feeds/3232898030215224995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2491204017359768357/3232898030215224995' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/3232898030215224995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/3232898030215224995'/><link rel='alternate' type='text/html' href='http://chamarairesh.blogspot.com/2022/12/unit-testing-with-fakexrmeasy.html' title='Unit Testing with FakeXrmEasy'/><author><name>Chamara Iresh</name><uri>http://www.blogger.com/profile/04695612052896290711</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//3.bp.blogspot.com/-Wfsm4TxTxO0/XiPTZjrj-cI/AAAAAAAAvCw/ONKFubGdBw41mPb1Xp89d9eMkvXaV0TkQCK4BGAYYCw/s220/20190817_151917.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2491204017359768357.post-7181648361328012858</id><published>2022-12-02T04:25:00.005+09:00</published><updated>2022-12-02T04:27:36.505+09:00</updated><title type='text'>Application lifecycle management (ALM) with Microsoft Power Platform</title><content type='html'>&lt;p&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/power-platform/alm/&quot;&gt;Application lifecycle management (ALM) with Microsoft Power Platform - Power Platform | Microsoft Learn&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span face=&quot;&amp;quot;Segoe UI&amp;quot;, SegoeUI, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif&quot; style=&quot;background-color: white; color: #0c343d; font-size: 16px;&quot;&gt;Learn how to implement application lifecycle management (ALM) using Microsoft Power Platform (Power Apps, Power Automate, Dataverse, Power Virtual Agents).&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;column is-12 is-4-desktop&quot; style=&quot;background-color: #171717; box-sizing: inherit; color: #e6e6e6; flex: 0 0 auto; font-family: &amp;quot;Segoe UI&amp;quot;, SegoeUI, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; order: 1; outline-color: inherit; padding: 0.75rem; width: 408.156px;&quot;&gt;&lt;div class=&quot;box box-shadow-medium margin-none margin-xxs-desktop&quot; style=&quot;background-color: var(--theme-card-background); border: 1px solid var(--theme-border-white-high-contrast); box-shadow: 0 1.6px 3.6px 0 var(--theme-box-shadow-medium),0 0.3px 0.9px 0 var(--theme-box-shadow-light); box-sizing: inherit; margin: 0.5rem; outline-color: inherit; padding: 1.25rem;&quot;&gt;&lt;h2 class=&quot;margin-none font-size-h6&quot; style=&quot;box-sizing: inherit; font-size: clamp(1.59375rem, 18.7895px + 1.39803vw, 2.125rem); line-height: 1.3; margin-bottom: 12px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 32px; margin: 32px 0px 12px; outline-color: inherit; padding: 0px;&quot;&gt;About ALM with Power Platform&lt;/h2&gt;&lt;h3 class=&quot;display-flex is-uppercase font-size-sm border-top margin-bottom-xxs margin-top-xs padding-top-xs has-text-subtle&quot; style=&quot;border-block-start: 1px solid var(--theme-border) !important; box-sizing: inherit; color: var(--theme-text-subtle) !important; display: flex; font-size: clamp(1.3125rem, 15.4737px + 1.15132vw, 1.75rem); line-height: 1.3; margin-block: 1rem 0.5rem; margin: 30px 0px 18px; outline-color: inherit; padding-block-start: 1rem; padding: 0px; text-transform: uppercase;&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;margin-right-xxs align-self-center font-size-h5 docon docon-topic-overview&quot; style=&quot;-webkit-font-smoothing: antialiased; align-self: center; box-sizing: inherit; direction: ltr; display: inline-block; font-family: docons; font-size: inherit; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; line-height: 16px; margin-inline-end: 0.5rem; outline-color: inherit; speak: none; text-align: center; text-transform: none;&quot;&gt;&lt;/span&gt;OVERVIEW&lt;/h3&gt;&lt;ul class=&quot;margin-none has-line-height-reset&quot; style=&quot;box-sizing: inherit; line-height: 1.3; list-style: none; margin: 16px 0px 16px 38px; outline-color: inherit; padding: 0px;&quot;&gt;&lt;li class=&quot;is-unstyled padding-block-xxs&quot; style=&quot;box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding-block: 0.5rem; padding: 0px;&quot;&gt;&lt;a class=&quot;has-external-link-indicator font-size-sm display-block&quot; data-linktype=&quot;relative-path&quot; href=&quot;https://learn.microsoft.com/en-us/power-platform/alm/overview-alm&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: inherit; cursor: pointer; display: block; font-size: 0.875rem; outline-color: inherit; outline-style: initial; outline-width: 0px; overflow-wrap: break-word; text-decoration-line: none;&quot;&gt;What is ALM?&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 class=&quot;display-flex is-uppercase font-size-sm border-top margin-bottom-xxs margin-top-xs padding-top-xs has-text-subtle&quot; style=&quot;border-block-start: 1px solid var(--theme-border) !important; box-sizing: inherit; color: var(--theme-text-subtle) !important; display: flex; font-size: clamp(1.3125rem, 15.4737px + 1.15132vw, 1.75rem); line-height: 1.3; margin-block: 1rem 0.5rem; margin: 30px 0px 18px; outline-color: inherit; padding-block-start: 1rem; padding: 0px; text-transform: uppercase;&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;margin-right-xxs align-self-center font-size-h5 docon docon-topic-concept&quot; style=&quot;-webkit-font-smoothing: antialiased; align-self: center; box-sizing: inherit; direction: ltr; display: inline-block; font-family: docons; font-size: inherit; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; line-height: 16px; margin-inline-end: 0.5rem; outline-color: inherit; speak: none; text-align: center; text-transform: none;&quot;&gt;&lt;/span&gt;CONCEPT&lt;/h3&gt;&lt;ul class=&quot;margin-none has-line-height-reset&quot; style=&quot;box-sizing: inherit; line-height: 1.3; list-style: none; margin: 16px 0px 16px 38px; outline-color: inherit; padding: 0px;&quot;&gt;&lt;li class=&quot;is-unstyled padding-block-xxs&quot; style=&quot;box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding-block: 0.5rem; padding: 0px;&quot;&gt;&lt;a class=&quot;has-external-link-indicator font-size-sm display-block&quot; data-linktype=&quot;relative-path&quot; href=&quot;https://learn.microsoft.com/en-us/power-platform/alm/basics-alm&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: inherit; cursor: pointer; display: block; font-size: 0.875rem; outline-color: inherit; outline-style: initial; outline-width: 0px; overflow-wrap: break-word; text-decoration-line: none;&quot;&gt;ALM basics with Power Platform&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;is-unstyled padding-block-xxs&quot; style=&quot;box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding-block: 0.5rem; padding: 0px;&quot;&gt;&lt;a class=&quot;has-external-link-indicator font-size-sm display-block&quot; data-linktype=&quot;relative-path&quot; href=&quot;https://learn.microsoft.com/en-us/power-platform/alm/environment-strategy-alm&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: inherit; cursor: pointer; display: block; font-size: 0.875rem; outline-color: inherit; outline-style: initial; outline-width: 0px; overflow-wrap: break-word; text-decoration-line: none;&quot;&gt;Environment strategy&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 class=&quot;display-flex is-uppercase font-size-sm border-top margin-bottom-xxs margin-top-xs padding-top-xs has-text-subtle&quot; style=&quot;border-block-start: 1px solid var(--theme-border) !important; box-sizing: inherit; color: var(--theme-text-subtle) !important; display: flex; font-size: clamp(1.3125rem, 15.4737px + 1.15132vw, 1.75rem); line-height: 1.3; margin-block: 1rem 0.5rem; margin: 30px 0px 18px; outline-color: inherit; padding-block-start: 1rem; padding: 0px; text-transform: uppercase;&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;margin-right-xxs align-self-center font-size-h5 docon docon-topic-reference&quot; style=&quot;-webkit-font-smoothing: antialiased; align-self: center; box-sizing: inherit; direction: ltr; display: inline-block; font-family: docons; font-size: inherit; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; line-height: 16px; margin-inline-end: 0.5rem; outline-color: inherit; speak: none; text-align: center; text-transform: none;&quot;&gt;&lt;/span&gt;REFERENCE&lt;/h3&gt;&lt;ul class=&quot;margin-none has-line-height-reset&quot; style=&quot;box-sizing: inherit; line-height: 1.3; list-style: none; margin: 16px 0px 16px 38px; outline-color: inherit; padding: 0px;&quot;&gt;&lt;li class=&quot;is-unstyled padding-block-xxs&quot; style=&quot;box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding-block: 0.5rem; padding: 0px;&quot;&gt;&lt;a class=&quot;has-external-link-indicator font-size-sm display-block&quot; data-linktype=&quot;relative-path&quot; href=&quot;https://learn.microsoft.com/en-us/power-platform/alm/tools-apps-used-alm&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: inherit; cursor: pointer; display: block; font-size: 0.875rem; outline-color: inherit; outline-style: initial; outline-width: 0px; overflow-wrap: break-word; text-decoration-line: none;&quot;&gt;Tools and apps used for ALM&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;column is-12 is-4-desktop&quot; style=&quot;background-color: #171717; box-sizing: inherit; color: #e6e6e6; flex: 0 0 auto; font-family: &amp;quot;Segoe UI&amp;quot;, SegoeUI, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; order: 2; outline-color: inherit; padding: 0.75rem; width: 408.156px;&quot;&gt;&lt;div class=&quot;box box-shadow-medium margin-none margin-xxs-desktop&quot; style=&quot;background-color: var(--theme-card-background); border: 1px solid var(--theme-border-white-high-contrast); box-shadow: 0 1.6px 3.6px 0 var(--theme-box-shadow-medium),0 0.3px 0.9px 0 var(--theme-box-shadow-light); box-sizing: inherit; margin: 0.5rem; outline-color: inherit; padding: 1.25rem;&quot;&gt;&lt;h2 class=&quot;margin-none font-size-h6&quot; style=&quot;box-sizing: inherit; font-size: clamp(1.59375rem, 18.7895px + 1.39803vw, 2.125rem); line-height: 1.3; margin-bottom: 12px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 32px; margin: 32px 0px 12px; outline-color: inherit; padding: 0px;&quot;&gt;Understand and work with solutions&lt;/h2&gt;&lt;h3 class=&quot;display-flex is-uppercase font-size-sm border-top margin-bottom-xxs margin-top-xs padding-top-xs has-text-subtle&quot; style=&quot;border-block-start: 1px solid var(--theme-border) !important; box-sizing: inherit; color: var(--theme-text-subtle) !important; display: flex; font-size: clamp(1.3125rem, 15.4737px + 1.15132vw, 1.75rem); line-height: 1.3; margin-block: 1rem 0.5rem; margin: 30px 0px 18px; outline-color: inherit; padding-block-start: 1rem; padding: 0px; text-transform: uppercase;&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;margin-right-xxs align-self-center font-size-h5 docon docon-topic-concept&quot; style=&quot;-webkit-font-smoothing: antialiased; align-self: center; box-sizing: inherit; direction: ltr; display: inline-block; font-family: docons; font-size: inherit; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; line-height: 16px; margin-inline-end: 0.5rem; outline-color: inherit; speak: none; text-align: center; text-transform: none;&quot;&gt;&lt;/span&gt;CONCEPT&lt;/h3&gt;&lt;ul class=&quot;margin-none has-line-height-reset&quot; style=&quot;box-sizing: inherit; line-height: 1.3; list-style: none; margin: 16px 0px 16px 38px; outline-color: inherit; padding: 0px;&quot;&gt;&lt;li class=&quot;is-unstyled padding-block-xxs&quot; style=&quot;box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding-block: 0.5rem; padding: 0px;&quot;&gt;&lt;a class=&quot;has-external-link-indicator font-size-sm display-block&quot; data-linktype=&quot;relative-path&quot; href=&quot;https://learn.microsoft.com/en-us/power-platform/alm/solution-concepts-alm&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: inherit; cursor: pointer; display: block; font-size: 0.875rem; outline-color: inherit; outline-style: initial; outline-width: 0px; overflow-wrap: break-word; text-decoration-line: none;&quot;&gt;Solution concepts&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;is-unstyled padding-block-xxs&quot; style=&quot;box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding-block: 0.5rem; padding: 0px;&quot;&gt;&lt;a class=&quot;has-external-link-indicator font-size-sm display-block&quot; data-linktype=&quot;relative-path&quot; href=&quot;https://learn.microsoft.com/en-us/power-platform/alm/solution-layers-alm&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: inherit; cursor: pointer; display: block; font-size: 0.875rem; outline-color: inherit; outline-style: initial; outline-width: 0px; overflow-wrap: break-word; text-decoration-line: none;&quot;&gt;Understand solution layers&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;is-unstyled padding-block-xxs&quot; style=&quot;box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding-block: 0.5rem; padding: 0px;&quot;&gt;&lt;a class=&quot;has-external-link-indicator font-size-sm display-block&quot; data-linktype=&quot;relative-path&quot; href=&quot;https://learn.microsoft.com/en-us/power-platform/alm/use-solutions-for-your-customizations&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: inherit; cursor: pointer; display: block; font-size: 0.875rem; outline-color: inherit; outline-style: initial; outline-width: 0px; overflow-wrap: break-word; text-decoration-line: none;&quot;&gt;Use solutions to customize&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;is-unstyled padding-block-xxs&quot; style=&quot;box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding-block: 0.5rem; padding: 0px;&quot;&gt;&lt;a class=&quot;has-external-link-indicator font-size-sm display-block&quot; data-linktype=&quot;relative-path&quot; href=&quot;https://learn.microsoft.com/en-us/power-platform/alm/segmented-solutions-alm&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: inherit; cursor: pointer; display: block; font-size: 0.875rem; outline-color: inherit; outline-style: initial; outline-width: 0px; overflow-wrap: break-word; text-decoration-line: none;&quot;&gt;Segment solutions&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;column is-12 is-4-desktop&quot; style=&quot;background-color: #171717; box-sizing: inherit; color: #e6e6e6; flex: 0 0 auto; font-family: &amp;quot;Segoe UI&amp;quot;, SegoeUI, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; order: 3; outline-color: inherit; padding: 0.75rem; width: 408.156px;&quot;&gt;&lt;div class=&quot;box box-shadow-medium margin-none margin-xxs-desktop&quot; style=&quot;background-color: var(--theme-card-background); border: 1px solid var(--theme-border-white-high-contrast); box-shadow: 0 1.6px 3.6px 0 var(--theme-box-shadow-medium),0 0.3px 0.9px 0 var(--theme-box-shadow-light); box-sizing: inherit; margin: 0.5rem; outline-color: inherit; padding: 1.25rem;&quot;&gt;&lt;h2 class=&quot;margin-none font-size-h6&quot; style=&quot;box-sizing: inherit; font-size: clamp(1.59375rem, 18.7895px + 1.39803vw, 2.125rem); line-height: 1.3; margin-bottom: 12px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 32px; margin: 32px 0px 12px; outline-color: inherit; padding: 0px;&quot;&gt;Implement healthy ALM&lt;/h2&gt;&lt;h3 class=&quot;display-flex is-uppercase font-size-sm border-top margin-bottom-xxs margin-top-xs padding-top-xs has-text-subtle&quot; style=&quot;border-block-start: 1px solid var(--theme-border) !important; box-sizing: inherit; color: var(--theme-text-subtle) !important; display: flex; font-size: clamp(1.3125rem, 15.4737px + 1.15132vw, 1.75rem); line-height: 1.3; margin-block: 1rem 0.5rem; margin: 30px 0px 18px; outline-color: inherit; padding-block-start: 1rem; padding: 0px; text-transform: uppercase;&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;margin-right-xxs align-self-center font-size-h5 docon docon-topic-concept&quot; style=&quot;-webkit-font-smoothing: antialiased; align-self: center; box-sizing: inherit; direction: ltr; display: inline-block; font-family: docons; font-size: inherit; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; line-height: 16px; margin-inline-end: 0.5rem; outline-color: inherit; speak: none; text-align: center; text-transform: none;&quot;&gt;&lt;/span&gt;CONCEPT&lt;/h3&gt;&lt;ul class=&quot;margin-none has-line-height-reset&quot; style=&quot;box-sizing: inherit; line-height: 1.3; list-style: none; margin: 16px 0px 16px 38px; outline-color: inherit; padding: 0px;&quot;&gt;&lt;li class=&quot;is-unstyled padding-block-xxs&quot; style=&quot;box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding-block: 0.5rem; padding: 0px;&quot;&gt;&lt;a class=&quot;has-external-link-indicator font-size-sm display-block&quot; data-linktype=&quot;relative-path&quot; href=&quot;https://learn.microsoft.com/en-us/power-platform/alm/new-project-alm&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: inherit; cursor: pointer; display: block; font-size: 0.875rem; outline-color: inherit; outline-style: initial; outline-width: 0px; overflow-wrap: break-word; text-decoration-line: none;&quot;&gt;Scenario 0: ALM for a new project&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;is-unstyled padding-block-xxs&quot; style=&quot;box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding-block: 0.5rem; padding: 0px;&quot;&gt;&lt;a class=&quot;has-external-link-indicator font-size-sm display-block&quot; data-linktype=&quot;relative-path&quot; href=&quot;https://learn.microsoft.com/en-us/power-platform/alm/citizen-dev-alm&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: inherit; cursor: pointer; display: block; font-size: 0.875rem; outline-color: inherit; outline-style: initial; outline-width: 0px; overflow-wrap: break-word; text-decoration-line: none;&quot;&gt;Scenario 1: Citizen development ALM&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;is-unstyled padding-block-xxs&quot; style=&quot;box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding-block: 0.5rem; padding: 0px;&quot;&gt;&lt;a class=&quot;has-external-link-indicator font-size-sm display-block&quot; data-linktype=&quot;relative-path&quot; href=&quot;https://learn.microsoft.com/en-us/power-platform/alm/move-from-single-env-alm&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: inherit; cursor: pointer; display: block; font-size: 0.875rem; outline-color: inherit; outline-style: initial; outline-width: 0px; overflow-wrap: break-word; text-decoration-line: none;&quot;&gt;Scenario 2: Moving from a single environment&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;is-unstyled padding-block-xxs&quot; style=&quot;box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding-block: 0.5rem; padding: 0px;&quot;&gt;&lt;a class=&quot;has-external-link-indicator font-size-sm display-block&quot; data-linktype=&quot;relative-path&quot; href=&quot;https://learn.microsoft.com/en-us/power-platform/alm/move-from-unmanaged-managed-alm&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: inherit; cursor: pointer; display: block; font-size: 0.875rem; outline-color: inherit; outline-style: initial; outline-width: 0px; overflow-wrap: break-word; text-decoration-line: none;&quot;&gt;Scenario 3: Moving from unmanaged to managed solutions&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;is-unstyled padding-block-xxs&quot; style=&quot;box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding-block: 0.5rem; padding: 0px;&quot;&gt;&lt;a class=&quot;has-external-link-indicator font-size-sm display-block&quot; data-linktype=&quot;relative-path&quot; href=&quot;https://learn.microsoft.com/en-us/power-platform/alm/use-devops-automated-alm&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: inherit; cursor: pointer; display: block; font-size: 0.875rem; outline-color: inherit; outline-style: initial; outline-width: 0px; overflow-wrap: break-word; text-decoration-line: none;&quot;&gt;Scenario 4: Use DevOps for automation&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;is-unstyled padding-block-xxs&quot; style=&quot;box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding-block: 0.5rem; padding: 0px;&quot;&gt;&lt;a class=&quot;has-external-link-indicator font-size-sm display-block&quot; data-linktype=&quot;relative-path&quot; href=&quot;https://learn.microsoft.com/en-us/power-platform/alm/team-development-alm&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: inherit; cursor: pointer; display: block; font-size: 0.875rem; outline-color: inherit; outline-style: initial; outline-width: 0px; overflow-wrap: break-word; text-decoration-line: none;&quot;&gt;Scenario 5: Support team development&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;is-unstyled padding-block-xxs&quot; style=&quot;box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding-block: 0.5rem; padding: 0px;&quot;&gt;&lt;a class=&quot;has-external-link-indicator font-size-sm display-block&quot; data-linktype=&quot;relative-path&quot; href=&quot;https://learn.microsoft.com/en-us/power-platform/alm/embrace-citizen-devs&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: inherit; cursor: pointer; display: block; font-size: 0.875rem; outline-color: inherit; outline-style: initial; outline-width: 0px; overflow-wrap: break-word; text-decoration-line: none;&quot;&gt;Scenario 6: Embrace citizen developers&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;column is-12 is-4-desktop&quot; style=&quot;background-color: #171717; box-sizing: inherit; color: #e6e6e6; flex: 0 0 auto; font-family: &amp;quot;Segoe UI&amp;quot;, SegoeUI, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; order: 1; outline-color: inherit; padding: 0.75rem; width: 408.156px;&quot;&gt;&lt;div class=&quot;box box-shadow-medium margin-none margin-xxs-desktop&quot; style=&quot;background-color: var(--theme-card-background); border: 1px solid var(--theme-border-white-high-contrast); box-shadow: 0 1.6px 3.6px 0 var(--theme-box-shadow-medium),0 0.3px 0.9px 0 var(--theme-box-shadow-light); box-sizing: inherit; margin: 0.5rem; outline-color: inherit; padding: 1.25rem;&quot;&gt;&lt;h2 class=&quot;margin-none font-size-h6&quot; style=&quot;box-sizing: inherit; font-size: clamp(1.59375rem, 18.7895px + 1.39803vw, 2.125rem); line-height: 1.3; margin-bottom: 12px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 32px; margin: 32px 0px 12px; outline-color: inherit; padding: 0px;&quot;&gt;For developers&lt;/h2&gt;&lt;h3 class=&quot;display-flex is-uppercase font-size-sm border-top margin-bottom-xxs margin-top-xs padding-top-xs has-text-subtle&quot; style=&quot;border-block-start: 1px solid var(--theme-border) !important; box-sizing: inherit; color: var(--theme-text-subtle) !important; display: flex; font-size: clamp(1.3125rem, 15.4737px + 1.15132vw, 1.75rem); line-height: 1.3; margin-block: 1rem 0.5rem; margin: 30px 0px 18px; outline-color: inherit; padding-block-start: 1rem; padding: 0px; text-transform: uppercase;&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;margin-right-xxs align-self-center font-size-h5 docon docon-topic-concept&quot; style=&quot;-webkit-font-smoothing: antialiased; align-self: center; box-sizing: inherit; direction: ltr; display: inline-block; font-family: docons; font-size: inherit; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; line-height: 16px; margin-inline-end: 0.5rem; outline-color: inherit; speak: none; text-align: center; text-transform: none;&quot;&gt;&lt;/span&gt;CONCEPT&lt;/h3&gt;&lt;ul class=&quot;margin-none has-line-height-reset&quot; style=&quot;box-sizing: inherit; line-height: 1.3; list-style: none; margin: 16px 0px 16px 38px; outline-color: inherit; padding: 0px;&quot;&gt;&lt;li class=&quot;is-unstyled padding-block-xxs&quot; style=&quot;box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding-block: 0.5rem; padding: 0px;&quot;&gt;&lt;a class=&quot;has-external-link-indicator font-size-sm display-block&quot; data-linktype=&quot;relative-path&quot; href=&quot;https://learn.microsoft.com/en-us/power-platform/alm/alm-for-developers&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: inherit; cursor: pointer; display: block; font-size: 0.875rem; outline-color: inherit; outline-style: initial; outline-width: 0px; overflow-wrap: break-word; text-decoration-line: none;&quot;&gt;ALM for developers&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;is-unstyled padding-block-xxs&quot; style=&quot;box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding-block: 0.5rem; padding: 0px;&quot;&gt;&lt;a class=&quot;has-external-link-indicator font-size-sm display-block&quot; data-linktype=&quot;relative-path&quot; href=&quot;https://learn.microsoft.com/en-us/power-platform/alm/component-framework&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: inherit; cursor: pointer; display: block; font-size: 0.875rem; outline-color: inherit; outline-style: initial; outline-width: 0px; overflow-wrap: break-word; text-decoration-line: none;&quot;&gt;Work with solution components&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;is-unstyled padding-block-xxs&quot; style=&quot;box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding-block: 0.5rem; padding: 0px;&quot;&gt;&lt;a class=&quot;has-external-link-indicator font-size-sm display-block&quot; data-linktype=&quot;relative-path&quot; href=&quot;https://learn.microsoft.com/en-us/power-platform/alm/configure-and-deploy-tools&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: inherit; cursor: pointer; display: block; font-size: 0.875rem; outline-color: inherit; outline-style: initial; outline-width: 0px; overflow-wrap: break-word; text-decoration-line: none;&quot;&gt;Solution and packaging tools&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;is-unstyled padding-block-xxs&quot; style=&quot;box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding-block: 0.5rem; padding: 0px;&quot;&gt;&lt;a class=&quot;has-external-link-indicator font-size-sm display-block&quot; data-linktype=&quot;relative-path&quot; href=&quot;https://learn.microsoft.com/en-us/power-platform/alm/powershell-api&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: inherit; cursor: pointer; display: block; font-size: 0.875rem; outline-color: inherit; outline-style: initial; outline-width: 0px; overflow-wrap: break-word; text-decoration-line: none;&quot;&gt;Manage solutions using custom code&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;column is-12 is-4-desktop&quot; style=&quot;background-color: #171717; box-sizing: inherit; color: #e6e6e6; flex: 0 0 auto; font-family: &amp;quot;Segoe UI&amp;quot;, SegoeUI, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; order: 2; outline-color: inherit; padding: 0.75rem; width: 408.156px;&quot;&gt;&lt;div class=&quot;box box-shadow-medium margin-none margin-xxs-desktop&quot; style=&quot;background-color: var(--theme-card-background); border: 1px solid var(--theme-border-white-high-contrast); box-shadow: 0 1.6px 3.6px 0 var(--theme-box-shadow-medium),0 0.3px 0.9px 0 var(--theme-box-shadow-light); box-sizing: inherit; margin: 0.5rem; outline-color: inherit; padding: 1.25rem;&quot;&gt;&lt;h2 class=&quot;margin-none font-size-h6&quot; style=&quot;box-sizing: inherit; font-size: clamp(1.59375rem, 18.7895px + 1.39803vw, 2.125rem); line-height: 1.3; margin-bottom: 12px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 32px; margin: 32px 0px 12px; outline-color: inherit; padding: 0px;&quot;&gt;ALM automation&lt;/h2&gt;&lt;h3 class=&quot;display-flex is-uppercase font-size-sm border-top margin-bottom-xxs margin-top-xs padding-top-xs has-text-subtle&quot; style=&quot;border-block-start: 1px solid var(--theme-border) !important; box-sizing: inherit; color: var(--theme-text-subtle) !important; display: flex; font-size: clamp(1.3125rem, 15.4737px + 1.15132vw, 1.75rem); line-height: 1.3; margin-block: 1rem 0.5rem; margin: 30px 0px 18px; outline-color: inherit; padding-block-start: 1rem; padding: 0px; text-transform: uppercase;&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;margin-right-xxs align-self-center font-size-h5 docon docon-topic-overview&quot; style=&quot;-webkit-font-smoothing: antialiased; align-self: center; box-sizing: inherit; direction: ltr; display: inline-block; font-family: docons; font-size: inherit; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; line-height: 16px; margin-inline-end: 0.5rem; outline-color: inherit; speak: none; text-align: center; text-transform: none;&quot;&gt;&lt;/span&gt;OVERVIEW&lt;/h3&gt;&lt;ul class=&quot;margin-none has-line-height-reset&quot; style=&quot;box-sizing: inherit; line-height: 1.3; list-style: none; margin: 16px 0px 16px 38px; outline-color: inherit; padding: 0px;&quot;&gt;&lt;li class=&quot;is-unstyled padding-block-xxs&quot; style=&quot;box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding-block: 0.5rem; padding: 0px;&quot;&gt;&lt;a class=&quot;has-external-link-indicator font-size-sm display-block&quot; data-linktype=&quot;relative-path&quot; href=&quot;https://learn.microsoft.com/en-us/power-platform/alm/devops-build-tools&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: inherit; cursor: pointer; display: block; font-size: 0.875rem; outline-color: inherit; outline-style: initial; outline-width: 0px; overflow-wrap: break-word; text-decoration-line: none;&quot;&gt;Use Power Platform Build Tools for Azure DevOps&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;is-unstyled padding-block-xxs&quot; style=&quot;box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding-block: 0.5rem; padding: 0px;&quot;&gt;&lt;a class=&quot;has-external-link-indicator font-size-sm display-block&quot; data-linktype=&quot;relative-path&quot; href=&quot;https://learn.microsoft.com/en-us/power-platform/alm/devops-github-actions&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: inherit; cursor: pointer; display: block; font-size: 0.875rem; outline-color: inherit; outline-style: initial; outline-width: 0px; overflow-wrap: break-word; text-decoration-line: none;&quot;&gt;Use GitHub Actions for Power Platform&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;is-unstyled padding-block-xxs&quot; style=&quot;box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding-block: 0.5rem; padding: 0px;&quot;&gt;&lt;a class=&quot;has-external-link-indicator font-size-sm display-block&quot; data-linktype=&quot;relative-path&quot; href=&quot;https://learn.microsoft.com/en-us/power-platform/guidance/coe/setup-almacceleratorpowerplatform-cli&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: inherit; cursor: pointer; display: block; font-size: 0.875rem; outline-color: inherit; outline-style: initial; outline-width: 0px; overflow-wrap: break-word; text-decoration-line: none;&quot;&gt;CoE: Set up ALM Accelerator&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;is-unstyled padding-block-xxs&quot; style=&quot;box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding-block: 0.5rem; padding: 0px;&quot;&gt;&lt;a class=&quot;has-external-link-indicator font-size-sm display-block&quot; data-linktype=&quot;relative-path&quot; href=&quot;https://learn.microsoft.com/en-us/power-platform/guidance/coe/almacceleratorpowerplatform-components&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: inherit; cursor: pointer; display: block; font-size: 0.875rem; outline-color: inherit; outline-style: initial; outline-width: 0px; overflow-wrap: break-word; text-decoration-line: none;&quot;&gt;CoE: Use ALM Accelerator&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;column is-12 is-4-desktop&quot; style=&quot;background-color: #171717; box-sizing: inherit; color: #e6e6e6; flex: 0 0 auto; font-family: &amp;quot;Segoe UI&amp;quot;, SegoeUI, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; order: 3; outline-color: inherit; padding: 0.75rem; width: 408.156px;&quot;&gt;&lt;div class=&quot;box box-shadow-medium margin-none margin-xxs-desktop&quot; style=&quot;background-color: var(--theme-card-background); border: 1px solid var(--theme-border-white-high-contrast); box-shadow: 0 1.6px 3.6px 0 var(--theme-box-shadow-medium),0 0.3px 0.9px 0 var(--theme-box-shadow-light); box-sizing: inherit; margin: 0.5rem; outline-color: inherit; padding: 1.25rem;&quot;&gt;&lt;h2 class=&quot;margin-none font-size-h6&quot; style=&quot;box-sizing: inherit; font-size: clamp(1.59375rem, 18.7895px + 1.39803vw, 2.125rem); line-height: 1.3; margin-bottom: 12px; margin-left: 0px !important; margin-right: 0px !important; margin-top: 32px; margin: 32px 0px 12px; outline-color: inherit; padding: 0px;&quot;&gt;Related docs&lt;/h2&gt;&lt;h3 class=&quot;display-flex is-uppercase font-size-sm border-top margin-bottom-xxs margin-top-xs padding-top-xs has-text-subtle&quot; style=&quot;border-block-start: 1px solid var(--theme-border) !important; box-sizing: inherit; color: var(--theme-text-subtle) !important; display: flex; font-size: clamp(1.3125rem, 15.4737px + 1.15132vw, 1.75rem); line-height: 1.3; margin-block: 1rem 0.5rem; margin: 30px 0px 18px; outline-color: inherit; padding-block-start: 1rem; padding: 0px; text-transform: uppercase;&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;margin-right-xxs align-self-center font-size-h5 docon docon-topic-overview&quot; style=&quot;-webkit-font-smoothing: antialiased; align-self: center; box-sizing: inherit; direction: ltr; display: inline-block; font-family: docons; font-size: inherit; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 400; line-height: 16px; margin-inline-end: 0.5rem; outline-color: inherit; speak: none; text-align: center; text-transform: none;&quot;&gt;&lt;/span&gt;OVERVIEW&lt;/h3&gt;&lt;ul class=&quot;margin-none has-line-height-reset&quot; style=&quot;box-sizing: inherit; line-height: 1.3; list-style: none; margin: 16px 0px 16px 38px; outline-color: inherit; padding: 0px;&quot;&gt;&lt;li class=&quot;is-unstyled padding-block-xxs&quot; style=&quot;box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding-block: 0.5rem; padding: 0px;&quot;&gt;&lt;a class=&quot;has-external-link-indicator font-size-sm display-block&quot; data-linktype=&quot;absolute-path&quot; href=&quot;https://learn.microsoft.com/en-us/powerapps/maker/&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: inherit; cursor: pointer; display: block; font-size: 0.875rem; outline-color: inherit; outline-style: initial; outline-width: 0px; overflow-wrap: break-word; text-decoration-line: none;&quot;&gt;Create apps in Power Apps&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;is-unstyled padding-block-xxs&quot; style=&quot;box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding-block: 0.5rem; padding: 0px;&quot;&gt;&lt;a class=&quot;has-external-link-indicator font-size-sm display-block&quot; data-linktype=&quot;absolute-path&quot; href=&quot;https://learn.microsoft.com/en-us/powerapps/maker/common-data-service/data-platform-intro&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: inherit; cursor: pointer; display: block; font-size: 0.875rem; outline-color: inherit; outline-style: initial; outline-width: 0px; overflow-wrap: break-word; text-decoration-line: none;&quot;&gt;What is Microsoft Dataverse?&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;is-unstyled padding-block-xxs&quot; style=&quot;box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding-block: 0.5rem; padding: 0px;&quot;&gt;&lt;a class=&quot;has-external-link-indicator font-size-sm display-block&quot; data-linktype=&quot;absolute-path&quot; href=&quot;https://learn.microsoft.com/en-us/powerapps/maker/common-data-service/solutions-overview&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: inherit; cursor: pointer; display: block; font-size: 0.875rem; outline-color: inherit; outline-style: initial; outline-width: 0px; overflow-wrap: break-word; text-decoration-line: none;&quot;&gt;Work with solutions&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;is-unstyled padding-block-xxs&quot; style=&quot;box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding-block: 0.5rem; padding: 0px;&quot;&gt;&lt;a class=&quot;has-external-link-indicator font-size-sm display-block&quot; data-linktype=&quot;relative-path&quot; href=&quot;https://learn.microsoft.com/en-us/power-platform/admin/admin-documentation&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: inherit; cursor: pointer; display: block; font-size: 0.875rem; outline-color: inherit; outline-style: initial; outline-width: 0px; overflow-wrap: break-word; text-decoration-line: none;&quot;&gt;Power Platform admin guide&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;is-unstyled padding-block-xxs&quot; style=&quot;box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding-block: 0.5rem; padding: 0px;&quot;&gt;&lt;a class=&quot;has-external-link-indicator font-size-sm display-block&quot; data-linktype=&quot;relative-path&quot; href=&quot;https://learn.microsoft.com/en-us/power-platform/guidance/coe/starter-kit-explained&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: inherit; cursor: pointer; display: block; font-size: 0.875rem; outline-color: inherit; outline-style: initial; outline-width: 0px; overflow-wrap: break-word; text-decoration-line: none;&quot;&gt;Power Platform Center of Excellence (CoE) Kit&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;is-unstyled padding-block-xxs&quot; style=&quot;box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding-block: 0.5rem; padding: 0px;&quot;&gt;&lt;a class=&quot;has-external-link-indicator font-size-sm display-block&quot; data-linktype=&quot;absolute-path&quot; href=&quot;https://learn.microsoft.com/en-us/powerapps/developer/data-platform/best-practices&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: inherit; cursor: pointer; display: block; font-size: 0.875rem; outline-color: inherit; outline-style: initial; outline-width: 0px; overflow-wrap: break-word; text-decoration-line: none;&quot;&gt;Best practices and guidance when using Microsoft Dataverse&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;is-unstyled padding-block-xxs&quot; style=&quot;box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding-block: 0.5rem; padding: 0px;&quot;&gt;&lt;a class=&quot;has-external-link-indicator font-size-sm display-block&quot; data-linktype=&quot;external&quot; href=&quot;https://aka.ms/powerappscanvasguidelines&quot; style=&quot;background-color: rgba(0, 0, 0, 0); box-sizing: inherit; cursor: pointer; display: block; font-size: 0.875rem; outline-color: inherit; outline-style: initial; outline-width: 0px; overflow-wrap: break-word; text-decoration-line: none;&quot;&gt;Canvas apps coding standards and guidelines&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chamarairesh.blogspot.com/feeds/7181648361328012858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2491204017359768357/7181648361328012858' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/7181648361328012858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/7181648361328012858'/><link rel='alternate' type='text/html' href='http://chamarairesh.blogspot.com/2022/12/application-lifecycle-management-alm.html' title='Application lifecycle management (ALM) with Microsoft Power Platform'/><author><name>Chamara Iresh</name><uri>http://www.blogger.com/profile/04695612052896290711</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//3.bp.blogspot.com/-Wfsm4TxTxO0/XiPTZjrj-cI/AAAAAAAAvCw/ONKFubGdBw41mPb1Xp89d9eMkvXaV0TkQCK4BGAYYCw/s220/20190817_151917.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2491204017359768357.post-7228738763043433965</id><published>2022-12-01T03:32:00.000+09:00</published><updated>2022-12-01T03:32:34.787+09:00</updated><title type='text'>Solution for Power Apps Connection issue</title><content type='html'>&lt;p&gt;Recently I have been working on connection changes in several applications and faced issues after connection changes. The change was not published to the staging and live environment.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Login to&amp;nbsp;&lt;a href=&quot;https://make.powerapps.com/&quot;&gt;https://make.powerapps.com/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Select your environment&amp;nbsp;&lt;/li&gt;&lt;li&gt;Navigate to Dataverse --&amp;gt; Connection&amp;nbsp;&lt;/li&gt;&lt;li&gt;Updated new connection&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&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/AVvXsEiizPfNy2oFkEvDfIXFP8Sx_6Y34sShM0dNEMY3xz0jM0Emye6aQIzaAo1De-4GhrusvG2xFPsJXXDd30DjeDKX-PevFWpp6kxfMoC-I37GFkmctX6NlWm0ITgv6pArx0mInZ7xcQ1E-LhXJHDUWgz1aUlsDmWG51YrcFuo7EIqymTlRutStBoih6RdMw/s1251/1.jpg&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;807&quot; data-original-width=&quot;1251&quot; height=&quot;413&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiizPfNy2oFkEvDfIXFP8Sx_6Y34sShM0dNEMY3xz0jM0Emye6aQIzaAo1De-4GhrusvG2xFPsJXXDd30DjeDKX-PevFWpp6kxfMoC-I37GFkmctX6NlWm0ITgv6pArx0mInZ7xcQ1E-LhXJHDUWgz1aUlsDmWG51YrcFuo7EIqymTlRutStBoih6RdMw/w640-h413/1.jpg&quot; width=&quot;640&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;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Issue: After connection update still changes are not reflecting&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Navigate to App&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHfM0BulRGzodamjPB5V5fPwS7-OD0oeMclFhClXHop5vu7O2pBH4zRg2Ap0AorLnDroS0Id5VkDJk2uIxT2FJOdi825y7DTkP04Ou0c2WqX6_6lm3TFdQEzl-nccBAzFFHze2HowlirJjaNxX8jcPFGaUDnk8_6c9DaTGcYFqsNRP4tCiaPz4OG5JRg/s457/2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;457&quot; data-original-width=&quot;312&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHfM0BulRGzodamjPB5V5fPwS7-OD0oeMclFhClXHop5vu7O2pBH4zRg2Ap0AorLnDroS0Id5VkDJk2uIxT2FJOdi825y7DTkP04Ou0c2WqX6_6lm3TFdQEzl-nccBAzFFHze2HowlirJjaNxX8jcPFGaUDnk8_6c9DaTGcYFqsNRP4tCiaPz4OG5JRg/w273-h400/2.jpg&quot; width=&quot;273&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Staging environment Power Apps not allowing to edit the app and publish the changes due to security privilege in my application.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFYfSNi5FbDcuzcZq5_KxiRJflmeb2B67K6tQYnjjDS-n0ZDw_BOv91_CQc1LbYW_IgINha8GyWso1echkgq5bRIk4kKuaGx0AN2_1dm9_gc__7JMoAbrIE5T55nOySwnH79Dhir6XK1B3WdtuKe7AHSBxZXxw1N0DF2Cy7RRQ6pW3NJyGLgyZp3Wa2g/s625/3.jpg&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;625&quot; data-original-width=&quot;391&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFYfSNi5FbDcuzcZq5_KxiRJflmeb2B67K6tQYnjjDS-n0ZDw_BOv91_CQc1LbYW_IgINha8GyWso1echkgq5bRIk4kKuaGx0AN2_1dm9_gc__7JMoAbrIE5T55nOySwnH79Dhir6XK1B3WdtuKe7AHSBxZXxw1N0DF2Cy7RRQ6pW3NJyGLgyZp3Wa2g/w250-h400/3.jpg&quot; width=&quot;250&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Fix :&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Navigate to Solutions --&amp;gt; Your Power App&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicfLk7WpcRj1V0aX78cTTdWzNifDRkxBM4JKPbNchh6sjBd56VSfHdjd0XKvyjOX1WXI6fv2jqXuFqucPnjVMQUJIiuz7nGBxeOpIPamoqH_4UPferMtepRN9ar_BAY988gTQ9XfBPrZmYtFqUplasybvxjEu2SrBjEj0Z6iIeDtmTWpFwaSwaF3kXdw/s841/4.jpg&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;841&quot; data-original-width=&quot;283&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicfLk7WpcRj1V0aX78cTTdWzNifDRkxBM4JKPbNchh6sjBd56VSfHdjd0XKvyjOX1WXI6fv2jqXuFqucPnjVMQUJIiuz7nGBxeOpIPamoqH_4UPferMtepRN9ar_BAY988gTQ9XfBPrZmYtFqUplasybvxjEu2SrBjEj0Z6iIeDtmTWpFwaSwaF3kXdw/w135-h400/4.jpg&quot; width=&quot;135&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Open Your Power App&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&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/AVvXsEh84EDvnhQx8V5nR29IMqd_79NL94AgQ369dNrqrMrU_vp3_nzKJ4zk-VdR16bFFsv3BsLUH_zsWOo1BvjaEPfRiU_fMlzAlJLQaK1SCOnH-F0owpVYhmYEkJsyntEip897WZVQGVlh3C6whkOKyT40d-ymnIm7PBPy8claE2pd_dCG3tB2Wb5UC8ni8g/s433/5.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;433&quot; data-original-width=&quot;336&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh84EDvnhQx8V5nR29IMqd_79NL94AgQ369dNrqrMrU_vp3_nzKJ4zk-VdR16bFFsv3BsLUH_zsWOo1BvjaEPfRiU_fMlzAlJLQaK1SCOnH-F0owpVYhmYEkJsyntEip897WZVQGVlh3C6whkOKyT40d-ymnIm7PBPy8claE2pd_dCG3tB2Wb5UC8ni8g/s320/5.jpg&quot; width=&quot;248&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/AVvXsEh3AaKuF5wp6dmUgioa64gqnHSP2zfSsBt7ACkj7z0gjaLG06xUfx7ne0Gg8OfIvweqRBnuLDomkoK8T0KlYen0dyUTAHBF6MguuLQQHD_7LcEZktVh2VvhDRQ8HSIfMU408pSIQG91mw_Mfw_WRQjrbkR1bQw5VGae3mS6yCgAz7OkjOO3_-79EMhJSA/s2296/6.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;739&quot; data-original-width=&quot;2296&quot; height=&quot;206&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3AaKuF5wp6dmUgioa64gqnHSP2zfSsBt7ACkj7z0gjaLG06xUfx7ne0Gg8OfIvweqRBnuLDomkoK8T0KlYen0dyUTAHBF6MguuLQQHD_7LcEZktVh2VvhDRQ8HSIfMU408pSIQG91mw_Mfw_WRQjrbkR1bQw5VGae3mS6yCgAz7OkjOO3_-79EMhJSA/w640-h206/6.jpg&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: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Then Save and Published. Your new changes should reflect now.&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&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/AVvXsEiT6u7AC9dPUhu1IXVDyegK-FX3IX-F_Q74EErI0wEyajB7CIrfgGRjQNlX6G1MTxSn2ch3IpoMJqq9XenmU-ujlv4RmXJlaZ9-fM-2z5UEkGVfYNcrkCaikDcaFIqDkdYvwFsSo8xsp3uG4iJeI2VzfzL5JCdciCIPjQRhvh9t95G5zwHtg3C211MTdQ/s409/7.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;298&quot; data-original-width=&quot;409&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiT6u7AC9dPUhu1IXVDyegK-FX3IX-F_Q74EErI0wEyajB7CIrfgGRjQNlX6G1MTxSn2ch3IpoMJqq9XenmU-ujlv4RmXJlaZ9-fM-2z5UEkGVfYNcrkCaikDcaFIqDkdYvwFsSo8xsp3uG4iJeI2VzfzL5JCdciCIPjQRhvh9t95G5zwHtg3C211MTdQ/s16000/7.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Play the apps to test the changes.&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://chamarairesh.blogspot.com/feeds/7228738763043433965/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2491204017359768357/7228738763043433965' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/7228738763043433965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/7228738763043433965'/><link rel='alternate' type='text/html' href='http://chamarairesh.blogspot.com/2022/12/solution-for-power-apps-connection-issue.html' title='Solution for Power Apps Connection issue'/><author><name>Chamara Iresh</name><uri>http://www.blogger.com/profile/04695612052896290711</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//3.bp.blogspot.com/-Wfsm4TxTxO0/XiPTZjrj-cI/AAAAAAAAvCw/ONKFubGdBw41mPb1Xp89d9eMkvXaV0TkQCK4BGAYYCw/s220/20190817_151917.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiizPfNy2oFkEvDfIXFP8Sx_6Y34sShM0dNEMY3xz0jM0Emye6aQIzaAo1De-4GhrusvG2xFPsJXXDd30DjeDKX-PevFWpp6kxfMoC-I37GFkmctX6NlWm0ITgv6pArx0mInZ7xcQ1E-LhXJHDUWgz1aUlsDmWG51YrcFuo7EIqymTlRutStBoih6RdMw/s72-w640-h413-c/1.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2491204017359768357.post-878344242853287086</id><published>2022-11-29T23:32:00.002+09:00</published><updated>2022-11-29T23:32:16.256+09:00</updated><title type='text'>CRM Data Export service extension till next 18-04-2023 by Microsoft </title><content type='html'>&lt;p&gt;Microsoft has extend&amp;nbsp;Dynamics 365 Data Export Service till&amp;nbsp;18-April-2022. Previously mentioned it was planed on end of November.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://powerapps.microsoft.com/en-us/blog/do-more-with-data-from-data-export-service-to-azure-synapse-link-for-dataverse/&quot;&gt;https://powerapps.microsoft.com/en-us/blog/do-more-with-data-from-data-export-service-to-azure-synapse-link-for-dataverse/&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;u&gt;Steps to Extend DES.&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Navigate to &lt;b&gt;Settings &lt;/b&gt;&amp;gt;&lt;b&gt; Data Export&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Click below &lt;b&gt;&lt;i&gt;One-Time Extension&lt;/i&gt;&lt;/b&gt; button for extension&amp;nbsp;&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/AVvXsEicRigSPzrdxd-ZxqGlHCw-HCic4YFuiCFdjr3XwI7Gwp5ASdy4-NJagv72x1Fz2US2wgNw-802XE-sHoXEgCjHFadoYjEwf-wMNFvU7odMZF5d-SaoMTFadhzxk9quWMOLWVTF0Hv0wcy6tBgHUYBfPWed2i3Mg0h9L5g_N7oRz809bDAPHGJjd-XRPQ/s1450/4.jpg&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;541&quot; data-original-width=&quot;1450&quot; height=&quot;239&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicRigSPzrdxd-ZxqGlHCw-HCic4YFuiCFdjr3XwI7Gwp5ASdy4-NJagv72x1Fz2US2wgNw-802XE-sHoXEgCjHFadoYjEwf-wMNFvU7odMZF5d-SaoMTFadhzxk9quWMOLWVTF0Hv0wcy6tBgHUYBfPWed2i3Mg0h9L5g_N7oRz809bDAPHGJjd-XRPQ/w640-h239/4.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUngbKdIW2GrOKsRmkteEY5YQ38QpUwwlZsIWqISm-u_XVFd52CukhUDfaVpjR7GE3Yf9Sx_WKYhJQbbU-v5yAhnGtU2jk6ltpQJIEG3EteSc65oePJEjS9c2BXbJyfWp_MZcCExnaYL82IGPVvKPwKivrRqHfEWWD9qyYnRLlddjxgBMyn-EqIgCJsQ/s3271/Screenshot%202022-11-29%20141649.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;br /&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;517&quot; data-original-width=&quot;3271&quot; height=&quot;101&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUngbKdIW2GrOKsRmkteEY5YQ38QpUwwlZsIWqISm-u_XVFd52CukhUDfaVpjR7GE3Yf9Sx_WKYhJQbbU-v5yAhnGtU2jk6ltpQJIEG3EteSc65oePJEjS9c2BXbJyfWp_MZcCExnaYL82IGPVvKPwKivrRqHfEWWD9qyYnRLlddjxgBMyn-EqIgCJsQ/w640-h101/Screenshot%202022-11-29%20141649.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Click the Submit button&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/AVvXsEjDcf3KFC4EajfwgmrRdxjSCN4Oek8lguyAG_pmdUdRK4BanKKj-9LFFocKVO-NoqPsAB6CDFzALvh_hNaSPLLA_aQMtn-48R-whpfk3iMksY21RIruZcMhq_z619YaqyC0pZlUo8NePp9LbbZnEj9iVIIftJK086ahJPzKicJYDTvguUlVyGiMEcIdCw/s1504/Screenshot%202022-11-29%20141912-2kkk.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;888&quot; data-original-width=&quot;1504&quot; height=&quot;378&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDcf3KFC4EajfwgmrRdxjSCN4Oek8lguyAG_pmdUdRK4BanKKj-9LFFocKVO-NoqPsAB6CDFzALvh_hNaSPLLA_aQMtn-48R-whpfk3iMksY21RIruZcMhq_z619YaqyC0pZlUo8NePp9LbbZnEj9iVIIftJK086ahJPzKicJYDTvguUlVyGiMEcIdCw/w640-h378/Screenshot%202022-11-29%20141912-2kkk.jpg&quot; width=&quot;640&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;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;Then your environment will extend till&amp;nbsp;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;b&gt;18-April-2022.&lt;/b&gt;&lt;/span&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;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&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/AVvXsEj4kzODtsLr1H1UOBNvpkzNd-cWr-3xb_Uc3x3Z8lvaPdoJAp4AMMz7Smr8lMyozDIxY_r8bBk4SclEIRUWq84CT7PTRgNQSVv7ta75_v55ebgpwniMk-GoPA1d_abeei_YhL-o8FnB50c7rv23xRdg8eDdijze5bzYuwdNZRD-M66fd_UcMP2K1ki6AQ/s3417/3.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;513&quot; data-original-width=&quot;3417&quot; height=&quot;140&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4kzODtsLr1H1UOBNvpkzNd-cWr-3xb_Uc3x3Z8lvaPdoJAp4AMMz7Smr8lMyozDIxY_r8bBk4SclEIRUWq84CT7PTRgNQSVv7ta75_v55ebgpwniMk-GoPA1d_abeei_YhL-o8FnB50c7rv23xRdg8eDdijze5bzYuwdNZRD-M66fd_UcMP2K1ki6AQ/w640-h140/3.jpg&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;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://chamarairesh.blogspot.com/feeds/878344242853287086/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2491204017359768357/878344242853287086' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/878344242853287086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/878344242853287086'/><link rel='alternate' type='text/html' href='http://chamarairesh.blogspot.com/2022/11/crm-data-export-service-extension-till.html' title='CRM Data Export service extension till next 18-04-2023 by Microsoft '/><author><name>Chamara Iresh</name><uri>http://www.blogger.com/profile/04695612052896290711</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//3.bp.blogspot.com/-Wfsm4TxTxO0/XiPTZjrj-cI/AAAAAAAAvCw/ONKFubGdBw41mPb1Xp89d9eMkvXaV0TkQCK4BGAYYCw/s220/20190817_151917.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicRigSPzrdxd-ZxqGlHCw-HCic4YFuiCFdjr3XwI7Gwp5ASdy4-NJagv72x1Fz2US2wgNw-802XE-sHoXEgCjHFadoYjEwf-wMNFvU7odMZF5d-SaoMTFadhzxk9quWMOLWVTF0Hv0wcy6tBgHUYBfPWed2i3Mg0h9L5g_N7oRz809bDAPHGJjd-XRPQ/s72-w640-h239-c/4.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2491204017359768357.post-3483446038082627599</id><published>2022-01-24T19:43:00.018+09:00</published><updated>2025-03-25T05:06:25.898+09:00</updated><title type='text'>Migrate Dynamics CRM 365 On-Premise to CRM 365 Online</title><content type='html'>&lt;p&gt;&lt;b&gt;&lt;u&gt;Pros of Migrating to Dynamics 365 Customer Engagement (CE) Online:&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Cost reduction: Moving to Dynamics 365 CE Online can help reduce costs associated with maintaining on-premises infrastructure and resources.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;No manual upgrades: Microsoft handles all upgrades and maintenance for Dynamics 365 CE Online, so you don&#39;t have to worry about performing manual updates.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Fewer resources needed: Migrating to Dynamics 365 CE Online allows you to manage the system with fewer resources, including infrastructure and database expertise.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;High availability and disaster recovery: Dynamics 365 CE Online offers a high availability and disaster recovery environment, with a guaranteed 99.9% uptime by Microsoft.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Greater support: Microsoft provides more support for product issues with Dynamics 365 CE Online compared to the on-premises version.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Access from anywhere: Dynamics 365 CE Online can be accessed from any location with an internet connection.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Office 365 integration: You can use your Office 365 ID for login and multi-factor authentication (MFA) with Dynamics 365 CE Online.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Multiple device access: Dynamics 365 CE Online can be accessed using a variety of devices, including mobile phones and tablets.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Email tracking with Outlook: You can use the Outlook App to track emails with Dynamics 365 CE Online.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Access to online features: Dynamics 365 CE Online provides access to Microsoft CRM online features and technologies, such as Power Apps, Flows, and Power BI.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;Limitations of Dynamics 365 Online:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Cannot use third-party DLLs for plugin and workflow development, which may limit the functionality that can be added to the system.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Reports can only be developed using fetch xml, which may not be suitable for all reporting needs and may require additional time and effort to convert existing SQL reports.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Additional data storage and attachment storage may be required at an additional cost, depending on the size and usage of the system.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Extra testing and releases may be necessary for regular CRM rollup upgrades to ensure that the system continues to function as expected and to address any potential issues that may arise.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;There is limited control over the infrastructure and hardware, which is managed by Microsoft. This means that the organization may not have the ability to make certain customizations or configurations to the system.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Using Dynamics 365 On-Premise:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;The organization has full control over the environment and can make unsupported customizations to the system.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;The organization has full control over the database and can develop SQL reports and write SQL queries for data extraction.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Limitations of Dynamics 365 On-Premise:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Requires more cost, infrastructure, and staff to manage the system.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;May require specialized application experts to manage the infrastructure, such as ADFS, SSRS, and SQL DBA (Cluster, Always On with DR).&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Regular maintenance is required, including OS and security patches, which may require downtime and regression testing.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Vulnerability scans and penetration testing may be necessary, with necessary fixes required to address any identified issues.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Support from Microsoft may be more difficult to obtain and may take longer to resolve issues compared to the online version of Dynamics 365.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;p align=&quot;center&quot; class=&quot;MsoNormal&quot; style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&lt;u&gt;&lt;span style=&quot;font-size: 14pt; line-height: 107%;&quot;&gt;Dynamics 365 V8 (on-Prem) vs Dynamics
365 CE (online)&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;u&gt;&lt;span style=&quot;font-size: 14pt; line-height: 107%;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/u&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;Technical differences&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Dynamics 365 CE Online is entirely cloud-based and managed by Microsoft (including product, database, data center, and infrastructure)&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;CRM rollup upgrades are managed by Microsoft twice a year.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Database, data center, and disaster recovery (DR) managed by Microsoft (DB backup and restoration is very fast and simple)&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Reports – Only supports Fetch XML reports, not SQL query reports, it might be required to convert SQL based reports before online migration.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Interfaces with other systems - Requires opening of firewall connections to connect to other systems.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Does not support Outlook client, requires switch to CRM Outlook online app&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Incompatible JavaScripts may need to be modified for new XRM APIs.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;ADFS server not required, can use Office 365 login ID for authentication&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Plugins and workflows using third-party DLLs must be modified (Ex: IL merge)&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;Requirements&lt;/b&gt;&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;User training on new system and change management process during testing (UAT)&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Personalized experience apps based on CRM security roles for improved access management and ease of use (e.g. back office app, admin app, shop ops app)&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;UI changes with Dynamics 365 CE Online 9.1 using unified client interface (UCI)&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Operations&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Rollup version upgrades: It is important for users of Dynamics 365 CE Online to be aware of and plan for rollup version upgrades, which are managed by Microsoft and occur twice a year. Users should be informed of the changes and asked to try them out in the testing environment (UAT). All versions of the system (development, staging, testing, and production) must be upgraded to the same rollup.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Maintenance and downtime: There is no need for a system maintenance window or downtime with Dynamics 365 CE Online, as the system is managed and maintained by Microsoft.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Accessibility: Dynamics 365 CE Online can be accessed from anywhere in the world, which allows users and the development team to work remotely and provide better support.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;User experience: The user experience may be different in Dynamics 365 CE Online due to changes in the unified client interface (UCI).&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Microsoft support: Microsoft support is generally more available for Dynamics 365 CE Online compared to Dynamics 365 V8 On-Premise.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;New features: Users of Dynamics 365 CE Online receive new features twice a year as part of the rollup updates.&lt;/div&gt;&lt;/div&gt;&lt;p align=&quot;center&quot; class=&quot;MsoNormal&quot; style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 16pt; line-height: 107%;&quot;&gt;Migration Plan&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;u&gt;Assumptions&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Eligibility for FastTrack migration: The company has the necessary eligibility requirements for FastTrack migration.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Migration method: The migration will be done using the FastTrack method.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Account type: Hybrid AD accounts will not be used, and Office 365 accounts will be used to access the system.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Email address and profile: The email address will be an Office 365 account and the email profile will be configured using Microsoft Exchange Online.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Deployment server and organization: A new deployment server with Windows Server 2016 and SQL 2016 will be set up to create a separate organization for customizations required for CRM Online migration. The current server and organizations should not be used to avoid impacting current operations.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Azure Tenant: The company has an Azure Tenant, and an Azure subscription and storage account (which the customer will need to pay for along with Dynamics 365 subscriptions) have been set up, along with provision for two sandbox environments in staging.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;CRM licenses: All necessary CRM licenses have been purchased before the migration.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Microsoft Lifecycle Services: The migration project has been set up in Microsoft Lifecycle Services, which uses a wizard-based hosted tool for the migration.&amp;nbsp;&lt;a href=&quot;https://lcs.dynamics.com/Logon/Index&quot;&gt;Microsoft Lifecycle Services&lt;/a&gt;&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Managed CRM solution: A managed CRM solution will be used for deployment to the testing and production environments.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;Here are some points to consider &lt;/b&gt;when planning a migration to Dynamics 365 Customer Engagement (CE) Online:&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Dual licenses: It is possible to use a Dynamics 365 CRM On-Premise license for the online version of the software.&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Licensing method: The most cost-effective licensing method can be chosen based on the client&#39;s budget and system access requirements. Options include Enterprise (more costly), Power app (less costly), and Team Member (less costly).&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;b&gt;&lt;u&gt;Setup Development Environment&lt;/u&gt;&lt;/b&gt;&amp;nbsp;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;Here is a list of steps to set up a development environment for a migration to Dynamics 365 Customer Engagement (CE) Online:&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Set up a new on-premise server: A new server should be set up using the development environment before creating an online migration solution to avoid additional migration cycles. This server should have CRM V8, SQL 2016, and the operating system Windows Server 2016.&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Create a new development organization: A new development organization can be created by restoring the existing development CRM database and importing the organization.&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Make necessary changes in the development CRM: The following changes should be made in the development CRM:&lt;/p&gt;&lt;blockquote style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;&quot;&gt;&lt;p class=&quot;MsoNormal&quot;&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Create a new CRM solution and include all customizations in that solution&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Convert SQL-based reports to Fetch XML&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Update plugins and workflows to run in sandbox mode&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Check for and reconfigure any integration with third-party tools, and remove IL merge&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Update JavaScript to the new client object model (compatible with the unified client interface (UCI))&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Update CRM forms to provide a rich user experience with the UCI&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Make the solution online compatible&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Test that all application functionalities are working as expected&lt;/p&gt;&lt;/blockquote&gt;&lt;p class=&quot;MsoNormal&quot;&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Upload the database backup to Azure Blob Container: Take a database backup, log in to the Lifecycle portal, and upload the database backup to the Azure Blob Container.&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Upgrade CRM: Follow the steps to upgrade CRM 9.0, then CRM 9.1, using the provided tools and steps.&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Validation of the migration: Run the validation report and fix any issues identified in the CRM V8 environment. Once the issues are fixed, upload the database backup again, follow the same steps, and ensure that the validation report is successful before uploading the CRM online via the Lifecycle portal.&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Creation of the online development environment: Once the validation steps are completed, follow the steps in the Lifecycle portal to create the CRM Online development environment.&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;User mapping: Upload user mapping with the permissions required to complete the migration successfully.&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Regression testing in the online environment: Perform testing in the online environment to ensure that all functionalities are working as expected. This may include functional, integration, and user acceptance testing.&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;u&gt;Setup UAT Environment&lt;o:p&gt;&lt;/o:p&gt;&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;Here are the steps to set up a testing (UAT) environment for a migration to Dynamics 365 Customer Engagement (CE) Online:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Create a new UAT organization: A new testing organization can be created by restoring the existing testing CRM database and importing the organization in the new environment.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Import the customized solution from the development CRM: Import the customized solution from the development CRM to the testing environment, including any fixes made during the development migration.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Upload the database backup to Azure Blob Container: Take a database backup, log in to the Lifecycle portal, and upload the database backup to the Azure Blob Container.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Upgrade CRM: Follow the steps to upgrade CRM 9.0, then CRM 9.1, using the provided tools and steps.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Validation of the migration: Once issues are fixed, upload the database backup again, follow the same steps, and ensure that the validation report is successful before uploading the CRM online via the Lifecycle portal.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Creation of the online testing environment: Once the validation steps are completed, follow the steps in the Lifecycle portal to create the CRM Online testing environment.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;User mapping: Upload user mapping with the permissions required to complete the migration successfully.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Testing: Perform a full regression test to ensure that all functionalities are working as expected in the online testing environment. This may include functional, integration, and user acceptance testing.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Familiarization with the new unified client interface: Help users become familiar with the new unified client interface (UCI).&lt;/div&gt;&lt;/div&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;u&gt;Setup Production Environment&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Here are the steps to set up a production environment for a migration to Dynamics 365 Customer Engagement (CE) Online:&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Pilot migration: Microsoft can provide support for a pilot migration before the production CRM migration in the new environment.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Inform users: Inform users that they will need to stop using the production system.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Create a new production organization: A new production organization can be created by restoring the existing production CRM database and importing the organization.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Upload the database backup to Azure Blob Container: Take a database backup, log in to the Lifecycle portal, and upload the database backup to the Azure Blob Container.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Validation of the migration: Once issues are fixed, upload the database backup again, follow the same steps, and ensure that the validation report is successful before uploading the CRM online via the Lifecycle portal.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Creation of the online production environment: Once the validation steps are completed, follow the steps in the Lifecycle portal to create the CRM Online production environment.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;User mapping: Upload user mapping with the permissions required to complete the migration successfully.&lt;/div&gt;&lt;div&gt;•&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Testing: Perform a full regression test to ensure that all functionalities are working as expected in the online production environment. This may include functional, integration, and user acceptance testing.&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;u&gt;Eligibility&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;p class=&quot;MsoNormal&quot;&gt;FastTrack assistance is available for customer tenants with 150 or more licenses from one of the eligible plans from the following Microsoft product families: Microsoft 365, Office 365, Microsoft Viva, Enterprise Mobility &amp;amp; Security, and Windows 10. However, it may still be possible to get Microsoft support by talking to them and convincing them of the future usage of the online CRM system and the increase in user licensing capacity.&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;More Information:&amp;nbsp;&lt;u&gt;&lt;a href=&quot;https://docs.microsoft.com/en-IN/fasttrack/eligibility&quot;&gt;https://docs.microsoft.com/en-IN/fasttrack/eligibility&lt;/a&gt;&lt;/u&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;u style=&quot;font-size: 18px;&quot;&gt;Refences:&amp;nbsp;&lt;/u&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;Refer to the following video for more information: Dynamics CRM On-premise To Dynamics 365 Online Migration Tech Talk.&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span color=&quot;var(--ytd-video-primary-info-renderer-title-color,var(--yt-spec-text-primary))&quot; style=&quot;font-size: var(--ytd-video-primary-info-renderer-title-font-size,var(--yt-navbar-title-font-size,inherit));&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;iframe allowfullscreen=&quot;&quot; class=&quot;BLOG_video_class&quot; height=&quot;266&quot; src=&quot;https://www.youtube.com/embed/Erqq5dIPaM4&quot; width=&quot;320&quot; youtube-src-id=&quot;Erqq5dIPaM4&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;a href=&quot;https://docs.microsoft.com/en-us/dynamics365/fasttrack/migration&quot; target=&quot;_blank&quot;&gt;https://docs.microsoft.com/en-us/dynamics365/fasttrack/migration&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;a href=&quot;https://nishantrana.me/2020/05/15/dynamics-crm-on-premise-to-online-migration-program-microsoft-fasttrack/&quot; target=&quot;_blank&quot;&gt;https://nishantrana.me/2020/05/15/dynamics-crm-on-premise-to-online-migration-program-microsoft-fasttrack/&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;background-color: white; color: #1f1f1f;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;background-color: white; color: #1f1f1f;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Dynamics CRM to Dynamics 365 Online Migration Guide&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h1 style=&quot;background-color: white; box-sizing: border-box; color: #131314; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; cursor: text; margin: 0px; padding: 0px; white-space-collapse: preserve;&quot;&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph heading3 ng-star-inserted&quot; data-start-index=&quot;0&quot; style=&quot;font: var(--sys-title-small); padding-inline-start: 0rem;&quot;&gt;&lt;u&gt;Dynamics CRM On-Premise to Dynamics 365 Online Migration Study Guide&lt;/u&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph heading1 ng-star-inserted&quot; data-start-index=&quot;51&quot; style=&quot;font: var(--sys-title-large); padding-inline-start: 0rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;51&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph heading2 ng-star-inserted&quot; data-start-index=&quot;119&quot; style=&quot;padding-inline-start: 0rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;119&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Quiz&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph heading2 ng-star-inserted&quot; data-start-index=&quot;119&quot; style=&quot;font: var(--sys-title-medium); padding-inline-start: 0rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;119&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;1.&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;123&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;123&quot;&gt;What are the primary benefits Microsoft offers for customers migrating Dynamics CRM on-premises to Dynamics 365 online?&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;2.&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;242&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;242&quot;&gt;According to the Microsoft Learn article, what Dynamics CRM on-premises versions are currently supported for OP2OL migration services?&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;3.&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;376&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;376&quot;&gt;What were some of the challenges with manual migration methods (like using SSIS, KingswaySoft, and Scribe) from Dynamics CRM on-premises to online, especially for older versions like CRM 2011?&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;4.&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;568&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;568&quot;&gt;Describe the high-level architecture of the FastTrack migration tool, mentioning the key components involved.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;5.&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;677&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;677&quot;&gt;What are some critical prerequisites that need to be in place before starting the migration process using the FastTrack tool? Provide at least three examples.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;6.&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;835&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;835&quot;&gt;Explain the role of the CRM validation service in the migration process and what it helps to identify.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;7.&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;937&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;937&quot;&gt;What is the purpose of the intermediate CRM environments (e.g., CRM 2011, 2013, 2015, 2016) created during the FastTrack migration process, especially when migrating from an older version?&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;8.&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;1125&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;1125&quot;&gt;What are the key responsibilities of the customer and the FastTrack team during the Dynamics CRM on-premises to online migration project?&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;9.&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;1262&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;1262&quot;&gt;What are some limitations of Dynamics 365 Online compared to the on-premises version, as highlighted in the Medium article? Provide at least two examples.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;10.&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;1416&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;1416&quot;&gt;Briefly outline the general six-step process for migrating Dynamics CRM from on-premises to CRM 365 Online as summarized in the second Medium article.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph heading2 ng-star-inserted&quot; data-start-index=&quot;1566&quot; style=&quot;font: var(--sys-title-medium); padding-inline-start: 0rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;1566&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph heading2 ng-star-inserted&quot; data-start-index=&quot;1566&quot; style=&quot;padding-inline-start: 0rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;1566&quot;&gt;Quiz Answer Key&lt;/span&gt;&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph heading2 ng-star-inserted&quot; data-start-index=&quot;1566&quot; style=&quot;font: var(--sys-title-medium); padding-inline-start: 0rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;1566&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;1.&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;1581&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;1581&quot;&gt;Microsoft provides guidance, tools, documentation, and performs configuration tasks where applicable and feasible to assist eligible customers with supported versions of Dynamics CRM in migrating their on-premises database to Dynamics 365 and Microsoft Dataverse. This aims to make the migration process more automated and guided.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;2.&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;1911&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;1911&quot;&gt;Currently, the OP2OL migration services support Dynamics CRM 2016 (on-premises) and later versions. This means customers on these versions can utilize Microsoft&#39;s direct migration assistance.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;3.&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;2102&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;2102&quot;&gt;Manual methods were often time-consuming and labor-intensive, lacking automation and a guided process. Especially for older versions like CRM 2011, significant schema changes over time made manual data mapping challenging. There was also no easy way to check for unsupported customizations beforehand.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;4.&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;2403&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;2403&quot;&gt;The FastTrack migration tool utilizes Lifecycle Services as a portal to access the tool. It involves provisioning temporary Azure environments within the customer&#39;s subscription, upgrading the on-premises database through intermediate CRM versions (like 2016), using Azure Blob Storage for the database backup, and employing services for validation and final migration to Dynamics 365 Online.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;5.&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;2795&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;2795&quot;&gt;Critical prerequisites include having an existing, unconfigured Dynamics 365 online sandbox license, an Azure subscription with the necessary roles and privileges, and ensuring that all on-premises users have corresponding identities and required licenses in the Office 365 tenant for proper mapping.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;6.&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;3095&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;3095&quot;&gt;The CRM validation service analyzes the solutions (either the default solution from the uploaded database or manually uploaded solution files) for any unsupported customizations that might hinder the migration process. It provides a report detailing these issues, allowing customers and partners to review and address them before the actual migration.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;7.&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;3446&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;3446&quot;&gt;The intermediate CRM environments are created to facilitate the upgrade process of the on-premises database. For example, a database from an older version like CRM 2011 needs to be upgraded sequentially through versions like 2013, 2015, and finally 2016 before it can be migrated to Dynamics 365 Online. This staged upgrade ensures compatibility and data integrity.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;8.&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;3811&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;3811&quot;&gt;The customer is responsible for understanding the migration process, ensuring all prerequisites are met (licensing, Azure setup, user mapping), planning the migration timeline, and validating the migrated environment. The FastTrack team provides the migration tool, offers guidance and support, helps remove roadblocks, and performs the final migration step.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;9.&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;4169&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;4169&quot;&gt;Limitations of Dynamics 365 Online include the inability to use third-party DLLs for plugin and workflow development, and the restriction of reports to FetchXML (potentially requiring conversion of existing SQL-based reports). Additionally, there is limited control over the underlying infrastructure and hardware.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;10.&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;4483&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;4483&quot;&gt;The general process involves determining the reason for migration, planning the migration strategy, preparing the on-premises environment (backups, updates), migrating the data and customizations using Microsoft or third-party tools, thoroughly testing and validating the migrated environment, and finally going live with the new Dynamics 365 Online instance.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph heading2 ng-star-inserted&quot; data-start-index=&quot;4842&quot; style=&quot;font: var(--sys-title-medium); padding-inline-start: 0rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;4842&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;h4 style=&quot;padding-inline-start: 0rem; text-align: left;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;4842&quot;&gt;Essay Format Questions&lt;/span&gt;&lt;/h4&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph heading2 ng-star-inserted&quot; data-start-index=&quot;4842&quot; style=&quot;font: var(--sys-title-medium); padding-inline-start: 0rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;4842&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;1.&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;4864&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;4864&quot;&gt;Discuss the key motivations and benefits for organizations choosing to migrate from Dynamics CRM on-premises to Dynamics 365 Online. Consider both technical and business advantages.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;2.&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;5045&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;5045&quot;&gt;Analyze the role of the FastTrack migration program and its associated tool in simplifying the process of migrating from Dynamics CRM on-premises to Dynamics 365 Online. What are its strengths and what aspects still require significant customer involvement?&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;3.&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;5302&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;5302&quot;&gt;Compare and contrast the technical considerations and potential challenges of migrating from older Dynamics CRM on-premises versions (e.g., 2011, 2013) versus newer versions (e.g., 2016) to Dynamics 365 Online, based on the provided sources.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;4.&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;5543&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;5543&quot;&gt;Evaluate the importance of the pre-migration assessment and validation phase in ensuring a successful transition from Dynamics CRM on-premises to Dynamics 365 Online. What are the critical elements that need to be addressed during this stage?&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;5.&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;5785&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;5785&quot;&gt;Considering the information from all the provided sources, outline a comprehensive migration plan for a hypothetical organization moving from Dynamics CRM 2013 on-premises to Dynamics 365 Online. Include key stages, responsibilities, and potential challenges.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph heading2 ng-star-inserted&quot; data-start-index=&quot;6044&quot; style=&quot;font: var(--sys-title-medium); padding-inline-start: 0rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;6044&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph heading2 ng-star-inserted&quot; data-start-index=&quot;6044&quot; style=&quot;font: var(--sys-title-medium); padding-inline-start: 0rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;6044&quot;&gt;Glossary of Key Terms&lt;/span&gt;&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph heading2 ng-star-inserted&quot; data-start-index=&quot;6044&quot; style=&quot;font: var(--sys-title-medium); padding-inline-start: 0rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;6044&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;•&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;6065&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bold ng-star-inserted&quot; data-start-index=&quot;6065&quot; style=&quot;font-weight: 700;&quot;&gt;Dynamics CRM (on-premises):&lt;/span&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;6092&quot;&gt;&amp;nbsp;A version of Microsoft&#39;s Customer Relationship Management software that is installed and hosted on an organization&#39;s own servers and infrastructure.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;•&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;6241&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bold ng-star-inserted&quot; data-start-index=&quot;6241&quot; style=&quot;font-weight: 700;&quot;&gt;Dynamics 365:&lt;/span&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;6254&quot;&gt;&amp;nbsp;Microsoft&#39;s suite of intelligent business applications, including Customer Engagement (formerly Dynamics CRM) applications, offered as a cloud-based service.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;•&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;6412&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bold ng-star-inserted&quot; data-start-index=&quot;6412&quot; style=&quot;font-weight: 700;&quot;&gt;Microsoft Dataverse:&lt;/span&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;6432&quot;&gt;&amp;nbsp;The underlying data service that supports many Microsoft Power Platform components and Dynamics 365 applications, providing a scalable and secure data storage option in the cloud.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;•&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;6612&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bold ng-star-inserted&quot; data-start-index=&quot;6612&quot; style=&quot;font-weight: 700;&quot;&gt;OP2OL (On-premises to Online):&lt;/span&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;6642&quot;&gt;&amp;nbsp;Refers to the migration services and process of moving from an on-premises deployment of Dynamics CRM to the online (cloud-based) version, Dynamics 365.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;•&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;6795&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bold ng-star-inserted&quot; data-start-index=&quot;6795&quot; style=&quot;font-weight: 700;&quot;&gt;FastTrack:&lt;/span&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;6805&quot;&gt;&amp;nbsp;A Microsoft program designed to help customers deploy Microsoft cloud solutions, including Dynamics 365, providing guidance, tools, and resources.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;•&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;6952&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bold ng-star-inserted&quot; data-start-index=&quot;6952&quot; style=&quot;font-weight: 700;&quot;&gt;Lifecycle Services (LCS):&lt;/span&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;6977&quot;&gt;&amp;nbsp;A collaboration portal provided by Microsoft that offers tools and services to manage the lifecycle of Microsoft Dynamics 365 implementations, including migration tools.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;•&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;7147&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bold ng-star-inserted&quot; data-start-index=&quot;7147&quot; style=&quot;font-weight: 700;&quot;&gt;Azure Subscription:&lt;/span&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;7166&quot;&gt;&amp;nbsp;A foundational element for using Azure services, providing a billing boundary and a container for resources.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;•&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;7275&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bold ng-star-inserted&quot; data-start-index=&quot;7275&quot; style=&quot;font-weight: 700;&quot;&gt;Azure Blob Storage:&lt;/span&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;7294&quot;&gt;&amp;nbsp;Microsoft Azure&#39;s object storage solution for the cloud, optimized for storing massive amounts of unstructured data, such as the on-premises database backup.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;•&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;7452&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bold ng-star-inserted&quot; data-start-index=&quot;7452&quot; style=&quot;font-weight: 700;&quot;&gt;CRM Validation Service:&lt;/span&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;7475&quot;&gt;&amp;nbsp;A component of the FastTrack migration tool that analyzes a Dynamics CRM database or solution for potential compatibility issues with Dynamics 365 Online.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;•&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;7630&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bold ng-star-inserted&quot; data-start-index=&quot;7630&quot; style=&quot;font-weight: 700;&quot;&gt;Sandbox License:&lt;/span&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;7646&quot;&gt;&amp;nbsp;A non-production environment for Dynamics 365 Online used for development, testing, and training purposes before deploying changes to the live production environment.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;•&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;7813&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bold ng-star-inserted&quot; data-start-index=&quot;7813&quot; style=&quot;font-weight: 700;&quot;&gt;Multi-geo:&lt;/span&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;7823&quot;&gt;&amp;nbsp;A feature in Microsoft 365 and Dynamics 365 that allows a tenant to provision and store data at rest in multiple geographical locations.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;•&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;7960&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bold ng-star-inserted&quot; data-start-index=&quot;7960&quot; style=&quot;font-weight: 700;&quot;&gt;Managed Solution:&lt;/span&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;7977&quot;&gt;&amp;nbsp;A packaged set of Dynamics 365 customizations that can be imported, exported, and managed as a single unit.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;•&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;8085&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bold ng-star-inserted&quot; data-start-index=&quot;8085&quot; style=&quot;font-weight: 700;&quot;&gt;Fetch XML:&lt;/span&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;8095&quot;&gt;&amp;nbsp;A proprietary query language used by Dynamics 365 for retrieving data, particularly for reports in the online version.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;•&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;8214&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bold ng-star-inserted&quot; data-start-index=&quot;8214&quot; style=&quot;font-weight: 700;&quot;&gt;Unified Client Interface (UCI):&lt;/span&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;8245&quot;&gt;&amp;nbsp;The modern, web-based user interface for Dynamics 365 applications, designed for consistent experience across various devices.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;•&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;8372&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bold ng-star-inserted&quot; data-start-index=&quot;8372&quot; style=&quot;font-weight: 700;&quot;&gt;Plugin:&lt;/span&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;8379&quot;&gt;&amp;nbsp;Custom code written in .NET that executes in response to events within Dynamics 365, extending its out-of-the-box functionality.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;•&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;8508&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bold ng-star-inserted&quot; data-start-index=&quot;8508&quot; style=&quot;font-weight: 700;&quot;&gt;Workflow:&lt;/span&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;8517&quot;&gt;&amp;nbsp;An automated process within Dynamics 365 that can be triggered by specific events or run on demand to perform a series of actions.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;•&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;8648&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bold ng-star-inserted&quot; data-start-index=&quot;8648&quot; style=&quot;font-weight: 700;&quot;&gt;SSIS (SQL Server Integration Services), KingswaySoft, Scribe:&lt;/span&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;8709&quot;&gt;&amp;nbsp;Third-party tools commonly used for data integration and migration tasks, often employed in manual Dynamics CRM migrations.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;•&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;8833&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bold ng-star-inserted&quot; data-start-index=&quot;8833&quot; style=&quot;font-weight: 700;&quot;&gt;DLL (Dynamic Link Library):&lt;/span&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;8860&quot;&gt;&amp;nbsp;A type of file that contains compiled code that can be used by Windows programs, sometimes used in Dynamics CRM on-premises customizations.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;•&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;9000&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bold ng-star-inserted&quot; data-start-index=&quot;9000&quot; style=&quot;font-weight: 700;&quot;&gt;ADFS (Active Directory Federation Services):&lt;/span&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;9044&quot;&gt;&amp;nbsp;A Microsoft service that provides single sign-on (SSO) capabilities, often used for authentication in on-premises Dynamics CRM deployments.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;•&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;9184&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bold ng-star-inserted&quot; data-start-index=&quot;9184&quot; style=&quot;font-weight: 700;&quot;&gt;SSRS (SQL Server Reporting Services):&lt;/span&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;9221&quot;&gt;&amp;nbsp;A Microsoft platform for creating and managing paginated reports, commonly used with Dynamics CRM on-premises for custom reporting.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;•&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;9353&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bold ng-star-inserted&quot; data-start-index=&quot;9353&quot; style=&quot;font-weight: 700;&quot;&gt;SQL DBA (Database Administrator):&lt;/span&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;9386&quot;&gt;&amp;nbsp;A professional responsible for managing and maintaining SQL Server databases.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;•&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;9464&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bold ng-star-inserted&quot; data-start-index=&quot;9464&quot; style=&quot;font-weight: 700;&quot;&gt;UAT (User Acceptance Testing):&lt;/span&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;9494&quot;&gt;&amp;nbsp;A phase of testing where end-users verify that the migrated system meets their requirements and works as expected.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;•&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;9609&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bold ng-star-inserted&quot; data-start-index=&quot;9609&quot; style=&quot;font-weight: 700;&quot;&gt;Hybrid AD Accounts:&lt;/span&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;9628&quot;&gt;&amp;nbsp;User accounts that exist in both on-premises Active Directory and Azure Active Directory, often used in hybrid cloud environments.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;•&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;9759&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bold ng-star-inserted&quot; data-start-index=&quot;9759&quot; style=&quot;font-weight: 700;&quot;&gt;ILMerge:&lt;/span&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;9767&quot;&gt;&amp;nbsp;A utility that merges multiple .NET assemblies into a single assembly, sometimes used in on-premises plugin development but not supported in Dynamics 365 Online.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;labs-tailwind-structural-element-view-v2 _ngcontent-ng-c515184430=&quot;&quot; _nghost-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; style=&quot;color: #1f1f1f; display: block; font-size: medium; font-weight: 400; position: relative; white-space-collapse: collapse;&quot;&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bullet normal ng-star-inserted&quot; style=&quot;font: var(--sys-body-medium); position: absolute; text-align: end; width: 1.125rem;&quot;&gt;•&lt;/div&gt;&lt;div _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;paragraph normal ng-star-inserted&quot; data-start-index=&quot;9929&quot; style=&quot;font: var(--sys-body-medium); padding-inline-start: 1.25rem;&quot;&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;bold ng-star-inserted&quot; data-start-index=&quot;9929&quot; style=&quot;font-weight: 700;&quot;&gt;AX Client:&lt;/span&gt;&lt;span _ngcontent-ng-c1866868300=&quot;&quot; class=&quot;ng-star-inserted&quot; data-start-index=&quot;9939&quot;&gt;&amp;nbsp;The legacy desktop client for earlier versions of Dynamics CRM on-premises, no longer supported in Dynamics 365 Online.&lt;/span&gt;&lt;/div&gt;&lt;/labs-tailwind-structural-element-view-v2&gt;&lt;/h1&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://chamarairesh.blogspot.com/feeds/3483446038082627599/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2491204017359768357/3483446038082627599' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/3483446038082627599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2491204017359768357/posts/default/3483446038082627599'/><link rel='alternate' type='text/html' href='http://chamarairesh.blogspot.com/2022/01/migrate-dynamics-dynamics-crm-365-on.html' title='Migrate Dynamics CRM 365 On-Premise to CRM 365 Online'/><author><name>Chamara Iresh</name><uri>http://www.blogger.com/profile/04695612052896290711</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='18' src='//3.bp.blogspot.com/-Wfsm4TxTxO0/XiPTZjrj-cI/AAAAAAAAvCw/ONKFubGdBw41mPb1Xp89d9eMkvXaV0TkQCK4BGAYYCw/s220/20190817_151917.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/Erqq5dIPaM4/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry></feed>