tag:blogger.com,1999:blog-40018385534872589432024-03-14T05:55:08.549+00:00Radimaging Ltd - Paul Beck's Technical Working Notes for Microsoft TechnologyMy aide-mémoire to Azure, Power Platform, O365, CTO, Development, and Architecture. And random thoughts. Unknownnoreply@blogger.comBlogger706125tag:blogger.com,1999:blog-4001838553487258943.post-49439276678325533792024-03-06T09:58:00.003+00:002024-03-06T09:58:40.630+00:00Low code CoE thoughts<p><b>Key areas to address for a Low Code CoE:</b></p><p></p><ol style="text-align: left;"><li>Portfolio of Products</li><li>People/Skills/Experts</li><li>Process/ALM</li><li>Platform/Governance/Cleanup/Architecture/NFR's (scalability, SLAs)</li><li>Promotion/delivery/training</li></ol><p></p><p>Consider putting project thru a Business case validation particularly over a larger projects. Business case is how your business visualises and communicates a proposed project, should continuously be refined. Points to cover:</p><p></p><ol style="text-align: left;"><li>Business Case (Idea)</li><li>Customer Segment ></li><li>Value Proposition (what do they get) > </li><li>Channels (API, website,.. ) Customer Achievement (get and retain) ></li><li>Revenue (how to make money)</li><li>Key Resources (patches, maintenance) covers technology & data. What tech, people needed to build and continue delivering. Data where does it come from, quality, restrictions, relevancy.</li><li>Partners (dependency e.g. AWS, Azure, Mendix, Outsytems, UiPath, Microsoft, and backup options)</li><li>Cost breakdown</li></ol><div>CoE needs to clearly understand is boundaries and responsibilities. WIP</div><div><br /></div><p></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4001838553487258943.post-41064673177555097272024-02-27T11:24:00.008+00:002024-02-27T12:33:57.478+00:00My First Mendix Widget - Azure AI component to convert Text to audio<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLwTTXLP4QeF7CdqF86Qb4FK50kM9KzFkzg2YzT2X-_cMBQjGd-_Kb31WzeikMOwyKw1aIBrL6w6pUhsxxnT5j25bMuzxwKDZZ8aKYXocVaNQjBAuvvW00isEr_xmOqK2gRy-TWiYisWD6ar9LsZjvo_HQsjR6yspvQAMtwPhhnApnln59l97Dsu9bboc/s996/Mendix-notice.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="486" data-original-width="996" height="195" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLwTTXLP4QeF7CdqF86Qb4FK50kM9KzFkzg2YzT2X-_cMBQjGd-_Kb31WzeikMOwyKw1aIBrL6w6pUhsxxnT5j25bMuzxwKDZZ8aKYXocVaNQjBAuvvW00isEr_xmOqK2gRy-TWiYisWD6ar9LsZjvo_HQsjR6yspvQAMtwPhhnApnln59l97Dsu9bboc/w400-h195/Mendix-notice.PNG" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><p></p><p> <span color="rgba(0, 0, 0, 0.9)" face="-apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif" style="background-color: white; font-size: 14px;"><a class="artdeco-button artdeco-button--tertiary" data-tracking-control-name="external_url_click" data-tracking-will-navigate="" href="https://www.youtube.com/watch?v=0bxJeYSDV28" style="-webkit-box-align: center; -webkit-box-pack: center; align-items: center; background-color: rgba(152, 216, 244, 0.25); border-radius: 2px; border: none; box-sizing: border-box; color: #006097; cursor: pointer; display: inline-flex; font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif; font-size: 16px; font-weight: 600; justify-content: center; line-height: 2rem; margin: var(--artdeco-reset-base-margin-zero); max-width: 480px; min-height: 3.2rem; min-width: 6.4rem; overflow: hidden; padding: 0.6rem 8px; text-align: center; text-decoration-line: none; transition-duration: 167ms; transition-property: background-color, box-shadow, color, -webkit-box-shadow; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); vertical-align: middle;" target="_blank">https://www.youtube.com/watch?v=0bxJeYSDV28</a> (3min video)</span></p><div style="text-align: left;"><a href="https://marketplace.mendix.com/link/component/223240">Mendix Marketplace - Azure AI Services - Convert Text to Audio</a> - Here is is in the Marketplace. Thanks to <span style="font-family: inherit;"><span style="background-color: white; color: #001e00; letter-spacing: 0.1px;">Ameer </span><span style="background-color: white; color: #001e00; letter-spacing: 0.1px;">for helping me build the widget.</span></span></div><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0irn74WhMk-3_EkKHcX9Dro7AuowDrTesnkfmdWmNXuOvikRxxoyz16hJlEwAeuK_Sguzxv57q34XVzy-tPjMDmLZeQF-G0aL_YJCggp9UfhNcM0gbaJ-KmMtevKdsSfy1bo8r3nILc4hSfqofdg3hff_Drvf8NRsJY4IOw9kC-OqiuQlUMbaaLDw4ck/s1228/Mendix-demo.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="562" data-original-width="1228" height="292" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0irn74WhMk-3_EkKHcX9Dro7AuowDrTesnkfmdWmNXuOvikRxxoyz16hJlEwAeuK_Sguzxv57q34XVzy-tPjMDmLZeQF-G0aL_YJCggp9UfhNcM0gbaJ-KmMtevKdsSfy1bo8r3nILc4hSfqofdg3hff_Drvf8NRsJY4IOw9kC-OqiuQlUMbaaLDw4ck/w640-h292/Mendix-demo.PNG" width="640" /></a></div><p></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4001838553487258943.post-14758005589921726132024-02-11T11:56:00.002+00:002024-02-14T12:15:16.019+00:00Basics to setting up an AI Transformation Program - High level <p><b>Overview</b>: Many large organisations have started on their Artificial Intelligence (AI) journeys, many have started in weird directions and some are taking the wait and see approach. As a general rule, I feel most organisations should try identify the most important use cases for AI and using a basic scoring system take the easy high values use cases first. </p><p>A good option is to get a AI focused team to put the AI program into your business. Get people seconded as they have key domain knowledge and couple with IT experts pref with strong AI skills. </p><p><b>1. AI Idea Generation</b>: Collate a detailed list of possible ideas. I like to use SharePoint, it's a good idea to open ideas up to the business or make gamification of idea generation to get a good set of ideas. You;ll get lots of overlap, distill into unique ideas, and get the team/stakeholders together.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-O68vfofdKaNArGSGxLFm3F70vgsMiWzfKLT0gPgoMdANbTmVHiytJXqvikEBq2SV9XTAy3LrobdLbzr9tIwdgmvaMQjv3NnbJbU6dLMchyphenhyphenPRJ4nkvLhuO5HfcFFkylXtPY_zrt5PtbA2IxJwDuZ-xuZ4aslSZb_Fv5vrTT3NX49B81yVaqyWxciNNBA/s817/AITransformationProgramme50kfootOverview.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="782" data-original-width="817" height="612" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-O68vfofdKaNArGSGxLFm3F70vgsMiWzfKLT0gPgoMdANbTmVHiytJXqvikEBq2SV9XTAy3LrobdLbzr9tIwdgmvaMQjv3NnbJbU6dLMchyphenhyphenPRJ4nkvLhuO5HfcFFkylXtPY_zrt5PtbA2IxJwDuZ-xuZ4aslSZb_Fv5vrTT3NX49B81yVaqyWxciNNBA/w640-h612/AITransformationProgramme50kfootOverview.png" width="640" /></a></div><b>2. Business Impact:</b> how does this help our customers or generate revenue or does this improve our operations. Can this be quantified?<p></p><p><b>3. Technological Feasibility</b>: Can technology meet the requirement, and at what cost? High level technical design is strongly advised as show below in figure 2.</p><p><b>4. Implement:</b> If the idea holds up to Business impact, and is possible, select the highest value to lowest effort ideas. It is a good idea to start with the simpler ideas to get the ball rolling.</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_Z5NSo5VoS0zVXWa8vv9WEfRWBQItfIs1QeGueH97KUIw6MbEOvKILwZFVAsokUGm7af948V_cEHK8mA6wwUJoqYi3HlBvVre9Rz6PaZcvqHFizrLH62307glB7puA124ZoF2NmaPVVMCenmni9lIFnNXcwMFOKwEM2kSMN54-lQwfzi7_hOvBYrPcUY/s1110/HLD%20useful%20for%20Feasibility.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="733" data-original-width="1110" height="422" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_Z5NSo5VoS0zVXWa8vv9WEfRWBQItfIs1QeGueH97KUIw6MbEOvKILwZFVAsokUGm7af948V_cEHK8mA6wwUJoqYi3HlBvVre9Rz6PaZcvqHFizrLH62307glB7puA124ZoF2NmaPVVMCenmni9lIFnNXcwMFOKwEM2kSMN54-lQwfzi7_hOvBYrPcUY/w640-h422/HLD%20useful%20for%20Feasibility.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Figure 2. HLD example<br /><br /><div style="text-align: left;"><i>Note</i>: This post is looking at building AI to improve your business, AI also affects all internal staff, so train them. Allow them to use AI tools like ChatGPT, and train them not to expose internal propitiatory information. Give your users the correct tools to be the most effective.</div></td></tr></tbody></table>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4001838553487258943.post-65557934258490752552024-01-31T17:15:00.005+00:002024-01-31T17:34:26.128+00:00Low code ROI/TCO and observability - Monitoring Low code Platforms<p><b>Overview</b>: With Low code gaining tremendous traction, the rate at which apps are being built is increasing quickly. More citizens can build and pro developers can build more.</p><p>Governance helps maintain the quality of the apps and their code, but as an app needs to be updated, it becomes significantly expensive to maintain and update the low code solutions. The P-F curve has been around for awhile for regular assets (I first saw this 20 years ago with Mining equipment in Southern Africa, Machine maintenance on the mines help significantly reduce the cost of the assets/equipment and reduce catastrophic outages, anyway I've digressed...). </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUC9Jky1bP36cN9iEGgc2hVjJU5u5fU0QwcUm9mqBEhO7bZ73HDQjCXLBsPCBdA44pQ884g_gx416jBOS5F6IAARgAjm9yx9DQi0eakVCPYBej3AkEQTIENQUh67OSCY33jWYtM-hCOdFod6iv10HX2NN-0nYgbBo2lLG9bXnBfJlU00F0gH0JEveTZj8/s817/Software%20P-F%20Curve.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="619" data-original-width="817" height="485" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUC9Jky1bP36cN9iEGgc2hVjJU5u5fU0QwcUm9mqBEhO7bZ73HDQjCXLBsPCBdA44pQ884g_gx416jBOS5F6IAARgAjm9yx9DQi0eakVCPYBej3AkEQTIENQUh67OSCY33jWYtM-hCOdFod6iv10HX2NN-0nYgbBo2lLG9bXnBfJlU00F0gH0JEveTZj8/w640-h485/Software%20P-F%20Curve.png" width="640" /></a></div><div><b>Microsoft Low Code/Power Platform:</b></div>All low-code platforms have the same issues, governance improves the situation but it does not address the P-F interval, and monitoring comes into play. Microsoft's Canvas Apps has the ability to ship logs to Azure Monitor (App Insights) and there are internal analytics available on the platform. These are great and should be implemented. Now most enterprises have multiple environments and tenants in Power Platform, ALM is used to improve the quality of the application being released.<div>Canvas apps has an internal testing tool called Test Studio which is fairly limited and yet still underused. Tests can be recorded, on deployment releases the recorded rules can be run and reported on in ADO or any CI/CD pipeline. </div><div><br /></div><div>You can also make web calls from CI/CD or a dedicated service to continually run advanced availability tests, you should do this. It ensure we pick up when part or all of the process changes. And you can setup alerts and respond.</div><div><br /></div><div><b>Tools:</b></div><div>You can also log to SIEM (enterprise logging tools) and use this for Monitoring. For instance, you can ship you <b>App Insights</b>/Log Analytics/Azure Monitor logs to <b>Dynatrace </b>so it is part of your overall monitoring and response strategy.</div><div><br /></div><div>You can continuously monitor API using CI/CD tools like <b>ADO </b>but I prefer to use <b>Postman's </b>Enterprise Infrastructure service (it's awesome). Similarity, I am a full convert to Microsoft <b>Playwright </b>(I was a Selenium and Cypress fan, not i'm only Playwright).</div><div><br /></div><div><b>Grafana</b>, Power BI, <b>Azure Dashboards </b>all have different pros and cones for monitoring. There is also some great AI stuff coming out at the moment around UI testing. Specifically, I've seen Dynatrace, Playwright and <b>BrowserStack </b>use AI to compare screenshots for test validation.</div><div><br /></div><div>I'll be expanding on automation, continuous testing in this series of posts. These are my initial thoughts and there is a lot of good results coming out.</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4001838553487258943.post-43568765088667976772024-01-05T00:26:00.007+00:002024-01-05T00:29:01.731+00:00Unique solution to reduce licencing costs for Power Apps for Guest users when using SharePoint for storage<p><span face="Roboto, Arial, sans-serif" style="background-color: rgba(0, 0, 0, 0.1); color: #0f0f0f; font-size: 14px; white-space-collapse: preserve;">I have a fairly unique situation where I have a user base of a company employees using a Canvas App to work with SharePoint list data. This data is used to generate word documents. This 4 minute video provides the overview of the setup i used:</span></p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="536" src="https://www.youtube.com/embed/hFMS7P9ojzY" width="645" youtube-src-id="hFMS7P9ojzY"></iframe></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://www.youtube.com/watch?v=hFMS7P9ojzY" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"><img border="0" data-original-height="523" data-original-width="1456" height="230" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_cYWKtFk8RlKxUxzzee_2QEBT1qu8O27ekT1sN9KntOz-mdCtwcrvqeDiBsahszVZU9G1nsLUI5TY73hUrmY3LREIQeNrati9ezG5-jc14JtSRsshB-Kb6Og5pv4QI3j1coXXJTmaukHM8YXUGT4c2vYmzo491DTv1nx8Td5rCNXzLVigKW5c5U6aDHU/w640-h230/scrnDIPTeaser.PNG" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4001838553487258943.post-82547764677609840832023-12-07T16:00:00.004+00:002023-12-10T13:15:32.882+00:00Upgrading Two web applications and verifying using Playwright - super fast<p><b>Overview</b>: A couple of my internal recent projects all clipped together to allow my to upgrade two websites to .NET 8. And verify the upgrade and commit to source control in a regulated controlled manor and it took less than 30 minutes.</p><p>I download the latest version of Visual Studio 2022 Enterprise edition and noticed an option to upgrade my .NET projects, so I clicked it. The .NET Upgrade Assistant downloaded and installed upgrade in Visual Studio. The upgrade is done using a vsix template import: Microsoft.NET.UpgradeAssistant.vsix</p><p>I thought I may as well upgrade my two current .NET projects:</p><p>1. App Service on Azure running Blazor .NET 6, using TFS for source control and published using my Visual Studio profile.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGagxKGsUjBjUjRh3DfpVdRyVmnxzTKZAd2-KSkAlyuw9wCXNDot8VsKjj3fMVZ6dMWVH2-O7l0_3MzNRYCfLt5_GXuC8w3PCeCH_wluaLbmAgmRmX8PAieHQ-zh0iRatAFWlxZSuSSvIW7b1pk1DaLaMDcsJzuVTHkUveoMvhkjQSIMbDPeqBivjWIwQ/s917/Upgradedotnet6to8.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="301" data-original-width="917" height="210" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGagxKGsUjBjUjRh3DfpVdRyVmnxzTKZAd2-KSkAlyuw9wCXNDot8VsKjj3fMVZ6dMWVH2-O7l0_3MzNRYCfLt5_GXuC8w3PCeCH_wluaLbmAgmRmX8PAieHQ-zh0iRatAFWlxZSuSSvIW7b1pk1DaLaMDcsJzuVTHkUveoMvhkjQSIMbDPeqBivjWIwQ/w640-h210/Upgradedotnet6to8.PNG" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;">Once the upgrade was applied took 10 seconds and i chose LTS .net8, I published. Code is still not checked in. I has a quick look and the app loos to be running correctly in a browser. </div><p>2. Static Web App hosting a Blazor .NET 6 connected to Github and published as a gated checkin using git Actions. Upgrades, and when I checked into the main github branch, the action fired and upgraded the static web app.</p><p><b>Verify Build:</b></p><p>So I had checked both apps where running using the good old open in a browser and look around. A few days ago I was playing with Playwright and my testing covered validating the App Service website can send email, is running and text is visible, it also checks a Mendix low code website and lastly it looks at the Static Web App to validate it is service pages. I did this is Visual Studio Code. </p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbz2eN-IdeX6x3plUBbwp0v6Hhdw9NH6vByuTP7K8r-I_7foEsRiXoaeV2yJ03mJoHnKPBgr_dM4ILkYVUIIJh1s-tavYNrK42nrMqUCH53ecy-4Ks_DReo_vtGQUIUdjmMdcdS8MRguNhQP2s9FjPSIAi54YuWuWac9jvjGpMf8HhhO91eKjl4tWfroE/s676/Upgradedotnet6to8-PlaywrightTesting.PNG" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="543" data-original-width="676" height="514" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbz2eN-IdeX6x3plUBbwp0v6Hhdw9NH6vByuTP7K8r-I_7foEsRiXoaeV2yJ03mJoHnKPBgr_dM4ILkYVUIIJh1s-tavYNrK42nrMqUCH53ecy-4Ks_DReo_vtGQUIUdjmMdcdS8MRguNhQP2s9FjPSIAi54YuWuWac9jvjGpMf8HhhO91eKjl4tWfroE/w640-h514/Upgradedotnet6to8-PlaywrightTesting.PNG" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">The tests tell me both applications are running, verifies WAG compliance on 1 app and also checks a Mendix website is running.<br /><br /></td></tr></tbody></table><span style="font-family: inherit;"><b>Summary</b>: By re-using the test project I could quickly verify the project upgrades and the first project still requires a commit to complete but it is way safer than my direct to production gated checking done on the static web app.</span><br /><p><br /></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4001838553487258943.post-72636098231224330612023-12-07T04:09:00.007+00:002023-12-20T16:09:33.262+00:00Mendix - Part 2 - Diving deeper (E2E automation testing of Mendix using Playwright)<p><b>Mendix Series</b></p><p>1. <a href="https://www.pbeck.co.uk/2023/10/mendix-overview.html" target="_blank"> Overview of Mendix</a> </p><p>2. Mendix - Part 2 - Diving deeper (This post)</p><p><b>AI with Mendix (current version Mendix 10.5.x):</b></p><p></p><ol style="text-align: left;"><li>Logic bot - recommends what you are likely to do, like a copilot as you go along building the app</li><li>Performance bot - shows redundancies, recommends performance improvements </li><li>Chatbot in beta</li></ol><p></p><p><b>Playwright is a good UI testing tool for Mendix:</b></p><p>For more advanced applications, Playwright is a good testing framework that can help developers know their code is running end-to-end, useful for monitoring applications and behaviour, and also can be used as part of the CI process to <a href="https://youtu.be/fRX4sHDVi4U" target="_blank">validate Mendix end user accessibility</a> as shown in this mp4 (7 minutes - good video).</p><div class="separator" style="clear: both; text-align: center;"><a href="https://youtu.be/fRX4sHDVi4U/img/b/R29vZ2xl/AVvXsEgzJ0h5AENY6Ccn1eWHSzoGgsS3IaKZk0So7KPGKcLxq7NGwbnY0CBtpGRnHHK1m__-wk5xjY-xtGxGKVdQD4Tsz3OO9M0nGMp-NU_10lYXne25kOvEhsX-ShdZU1q44Y9Z6tLGTS4FR8r4WXSYvAUxXkSzVH9EZIYJblu8pkSXRweINJVmTqPvzqjhs6U/s1013/MendixTestingwithPlaywright.png" imageanchor="1" rel="nofollow" style="margin-left: 1em; margin-right: 1em;" target="_blank"><img border="0" data-original-height="623" data-original-width="1013" height="197" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzJ0h5AENY6Ccn1eWHSzoGgsS3IaKZk0So7KPGKcLxq7NGwbnY0CBtpGRnHHK1m__-wk5xjY-xtGxGKVdQD4Tsz3OO9M0nGMp-NU_10lYXne25kOvEhsX-ShdZU1q44Y9Z6tLGTS4FR8r4WXSYvAUxXkSzVH9EZIYJblu8pkSXRweINJVmTqPvzqjhs6U/s320/MendixTestingwithPlaywright.png" width="320" /></a></div><p><b>Thoughts:</b></p><p></p><ul style="text-align: left;"><li>Deployment can take time when the project grows.</li><li>Domain modelling: can use existing models and add to Mendix.</li><li><a href="https://youtu.be/fRX4sHDVi4U" target="_blank">Playwright is perfect for Mendix testing, here is a basic dev example.</a></li><li>The <a href="https://forum.mendix.com/" target="_blank">Mendix Community</a> is a good place to post questions.</li></ul><div>I needed to change from US format to UK date time format:</div><div>Community has the answer: <a href="https://forum.mendix.com/link/space/widgets/questions/104182">Mendix Forum - Question Details</a></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhT9M7nx3mWzREQchAQU5RJ_nrfjaQza3-Hi0Ew3jB0XHyRa9vhUt0LztMsOw1y1ca672bjKQwuzecjeaeiQmbNiC0VNhJqHRUe-7H41lwV3UqKrP0xpNj0ezyaHvDyerRPrwjOgQAs3RMVNzXQ6VhHm03s38q800Y4ak4gkP-ha6leGXPoNwkJ96962QA/s778/Mendix-DateFormatChange1.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="406" data-original-width="778" height="334" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhT9M7nx3mWzREQchAQU5RJ_nrfjaQza3-Hi0Ew3jB0XHyRa9vhUt0LztMsOw1y1ca672bjKQwuzecjeaeiQmbNiC0VNhJqHRUe-7H41lwV3UqKrP0xpNj0ezyaHvDyerRPrwjOgQAs3RMVNzXQ6VhHm03s38q800Y4ak4gkP-ha6leGXPoNwkJ96962QA/w640-h334/Mendix-DateFormatChange1.PNG" width="640" /></a></div><div><br /></div><p></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4001838553487258943.post-40303814619374187922023-12-05T10:52:00.006+00:002024-01-27T13:27:29.471+00:00Playwright series - Post 1 - Overview of E2E testing using VS Code for Low Code<p><b>Setup</b>: I have installed Node 20.100.0 and the VS code extension for Playwright. The installation and getting started guides are clear and of a high quality. <a href="https://playwright.dev/docs/intro">https://playwright.dev/docs/intro</a> I am running on Windows 10 Surface 4 with 16GB. I am using TypeScript (ts) as it is the default and the recording mechanism works well with ts. Previously I have use C# as it's my language of choice but I feel ts is easier to maintain and there is no need for complex logic/functions in end-2end (e2e) UI testing. New features always come out in TS/JS first.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2w-XU7LhKQhahI86uUks6Bf4kMpKqMdjtGZA5w5EzjuvAAliX5MF9UMZot1F2ap-g0B_hKusS7kM7LWndOVM3GJA7PcYlYFB-1sW-9SDVEW5PrUrOimxSiAxkBLRIQeFl6nwpDs3fXzfahlJ3dqCkJA3VsMS_jpJwz1gfvGCffTjh3KOenwm0BJRb8hc/s776/Code-Ext-PW.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="497" data-original-width="776" height="410" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2w-XU7LhKQhahI86uUks6Bf4kMpKqMdjtGZA5w5EzjuvAAliX5MF9UMZot1F2ap-g0B_hKusS7kM7LWndOVM3GJA7PcYlYFB-1sW-9SDVEW5PrUrOimxSiAxkBLRIQeFl6nwpDs3fXzfahlJ3dqCkJA3VsMS_jpJwz1gfvGCffTjh3KOenwm0BJRb8hc/w640-h410/Code-Ext-PW.PNG" width="640" /></a></div><p><b>Thoughts</b>: Postman is easy to use, fast, configurable and flexible. UI e2e testing allows me to know my app/sites are working as expected. Manual testing is time consuming, and amending automated tests can be hard.</p><p><b>Setup Reminder:</b></p><p>1. Install the Playwright extension using VSCode (once at initial setup)</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgxpnDlclch5Sc_PlhxmnDoN0_aPjvux2TsyVC0eSp7nx-cTrae261Lbb0c8jQDfab94A4XXwMYFB3kma0K7DGd-XBsyr8qnVnQtx4YU9R_F7gNXGc4AyZU9Vy0rWNF3gjhYq0SNzbHc5Zgmj-hvgWrKxRHd7MlzQ8peaJxvLHB6RYcxTWhZp4cRpgF6B8" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="492" data-original-width="726" height="217" src="https://blogger.googleusercontent.com/img/a/AVvXsEgxpnDlclch5Sc_PlhxmnDoN0_aPjvux2TsyVC0eSp7nx-cTrae261Lbb0c8jQDfab94A4XXwMYFB3kma0K7DGd-XBsyr8qnVnQtx4YU9R_F7gNXGc4AyZU9Vy0rWNF3gjhYq0SNzbHc5Zgmj-hvgWrKxRHd7MlzQ8peaJxvLHB6RYcxTWhZp4cRpgF6B8" width="320" /></a></div>2. Open a new folder in VSCode, and open the "Command Pallette" (once for each new project)<p></p><p>><span style="background-color: #f6f8fa; color: #2e2e2c; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 15.2px; white-space: pre;">Install Playwright</span><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEh2M8ZValHlwLcMkOdTqkfUjLfFVR_jGDstP2JfiDLG7UWrzVJaRcXRUcJGav5cVYu-k5J9xMMaVHRUIsOuADo6ob73JVrpO0J7iTcPaea1sTybUqK9nfRSt4C01xbQ1F4MMxBjkNLMNC4sFKDkG7VnbL1Uvrqs8n3iLYtTZNIZiHeC241qJZzThlUaX7k" style="margin-left: auto; margin-right: auto;"><img alt="" data-original-height="523" data-original-width="1691" height="198" src="https://blogger.googleusercontent.com/img/a/AVvXsEh2M8ZValHlwLcMkOdTqkfUjLfFVR_jGDstP2JfiDLG7UWrzVJaRcXRUcJGav5cVYu-k5J9xMMaVHRUIsOuADo6ob73JVrpO0J7iTcPaea1sTybUqK9nfRSt4C01xbQ1F4MMxBjkNLMNC4sFKDkG7VnbL1Uvrqs8n3iLYtTZNIZiHeC241qJZzThlUaX7k=w640-h198" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;"><span style="text-align: left;">These are the defaults and will use TypeScript as the base language, stick to this it is the simpliest. VSCode builds the default file scaffolding as shown above</span></td></tr></tbody></table></p><p><br /></p><p><b>3. Create your first New Playwright UI Test:</b></p><p>3.1. Record new</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhw0vYQW19alsCoMby0t6mxCy8fdozbCbSfBB3eIV29G7RBS3M3oqNs_FognZXnzkPmd2C-6UtpUN5Vjoj3vhxZuN7OSA_qkW_sDFChiescXRwFZ_hfqs5MD_pTKDIThtTVBRCAQYJXhT8sOI8ay7bG24wTXz1Uo60EPiX2NWSLcPA2Zqo0tIhm3ee_Ob0/s659/PW2.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="524" data-original-width="659" height="508" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhw0vYQW19alsCoMby0t6mxCy8fdozbCbSfBB3eIV29G7RBS3M3oqNs_FognZXnzkPmd2C-6UtpUN5Vjoj3vhxZuN7OSA_qkW_sDFChiescXRwFZ_hfqs5MD_pTKDIThtTVBRCAQYJXhT8sOI8ay7bG24wTXz1Uo60EPiX2NWSLcPA2Zqo0tIhm3ee_Ob0/w640-h508/PW2.PNG" width="640" /></a></div><div><br /></div>3.2. Enter a URL in the recorder browser, and click around (optional add Asserts) <br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRkUAP1sJceKdIioclzW1eBhHa0lbqZOs9pT1NmsdTap1Hbrgju_1CV6De4O6yroxg4KZT_VoRyTCUAc8iyQ6vwiOjE0oyTwYDuu0XA-XCUfCLeHLNFda4Pk3yTMjOgOBkmskGjtdliXvWG8o6YL55XZEf_TemjXS7LW_YChjR2G_5aN88WyrujMEpDbM/s1324/PW3.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="901" data-original-width="1324" height="436" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRkUAP1sJceKdIioclzW1eBhHa0lbqZOs9pT1NmsdTap1Hbrgju_1CV6De4O6yroxg4KZT_VoRyTCUAc8iyQ6vwiOjE0oyTwYDuu0XA-XCUfCLeHLNFda4Pk3yTMjOgOBkmskGjtdliXvWG8o6YL55XZEf_TemjXS7LW_YChjR2G_5aN88WyrujMEpDbM/w640-h436/PW3.PNG" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9KSFi411obZy79avmRGMTUBgCZcu8mASeU5Qhyphenhyphenzph5jM_RaBHnUAqZd0zr9jyYLbewcO0m4vi1uLE7-HbILvTOxHYGoFdACjRpbtWiIs86adg6dXVl6s3mo5QNJvNjWZMLgW5VtpgVeb7PDzfSjci1KYHE2UEpzZ7_hnUZsULneUuo3zfCy-BOBx_mW8/s1263/PW4.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="492" data-original-width="1263" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9KSFi411obZy79avmRGMTUBgCZcu8mASeU5Qhyphenhyphenzph5jM_RaBHnUAqZd0zr9jyYLbewcO0m4vi1uLE7-HbILvTOxHYGoFdACjRpbtWiIs86adg6dXVl6s3mo5QNJvNjWZMLgW5VtpgVeb7PDzfSjci1KYHE2UEpzZ7_hnUZsULneUuo3zfCy-BOBx_mW8/w640-h250/PW4.PNG" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihub0vdE23CaBYiAmnqxZiPFyjhR9HfJpDV1dydA1gao0x2lJE4E3EBOOk2VVCX3Z8pHeHmFWjVMyOozlis9VlMHSyxxwQG-cIhGJMXMvzyQcOp9m_U1n_Mb3fbUqvy8yRGFDsx5m2fRAbpOf1rjYBOdMvpnGizMo9l48kfFQkHLbM6Ra9U7I6DVKIIC0/s1253/PW5.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="451" data-original-width="1253" height="230" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihub0vdE23CaBYiAmnqxZiPFyjhR9HfJpDV1dydA1gao0x2lJE4E3EBOOk2VVCX3Z8pHeHmFWjVMyOozlis9VlMHSyxxwQG-cIhGJMXMvzyQcOp9m_U1n_Mb3fbUqvy8yRGFDsx5m2fRAbpOf1rjYBOdMvpnGizMo9l48kfFQkHLbM6Ra9U7I6DVKIIC0/w640-h230/PW5.PNG" width="640" /></a></div><br /><p>3.3. Save the Test</p><p>3.4. Execute the test</p><p></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-W1UaC7QO6_w1PQqtnDHAfe3OlbkFO5-SUQLRC5yIgOYq7dcN7hyphenhyphenyR8lHiXhRx5hLOkLar5kGGSz1pUigYZ6DIKfeCMawoNyPzpj0v4C3dSS-3Pj66y6lrJSyMU3xr3rurWGoQl8zR7bKE_jwsjkIBCsGjWSH_HU_UCxTN2JY9vvngEv10F9VvvMBCzI/s948/PW6.PNG" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="454" data-original-width="948" height="306" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-W1UaC7QO6_w1PQqtnDHAfe3OlbkFO5-SUQLRC5yIgOYq7dcN7hyphenhyphenyR8lHiXhRx5hLOkLar5kGGSz1pUigYZ6DIKfeCMawoNyPzpj0v4C3dSS-3Pj66y6lrJSyMU3xr3rurWGoQl8zR7bKE_jwsjkIBCsGjWSH_HU_UCxTN2JY9vvngEv10F9VvvMBCzI/w640-h306/PW6.PNG" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">The Green tick can be used to quickly run the test locally. In the "Test Results" terminal, you can see the same test was run 3 times, my configuration is set to test Chrome, Firefox and webkit.</td></tr></tbody></table><p></p><p><b>Why Playwright?</b></p><p></p><p></p><p></p><p></p><ul style="text-align: left;"><li>Easy to understand/follow,</li><li>Easy to record,</li><li>Open source, </li><li>No paid licencing, </li><li>Faster than Selenium,</li><li>Various coding languages supported (bindings for C#, Python, Java, JS, TypeScript),</li><li>UI verification using screenshot and AI to minimize flakiness/static DOM reliance,</li><li>Ability to debug and trace is strong,</li><li>Can do API testing,</li></ul><p><b>Possible Playwright UI testing Layers: </b></p><p></p><ol style="text-align: left;"><li>Full regressions goes into detail and runs in Chrome, Firefox, webkit/devices </li><li>Check in tests are comprehensive on a single browser for code check ins</li><li>Continuous testing - record logging in and reading from a db and calling an API. Can write to logs i.e. Dynatrace, Azure Monitor, SolarWinds using API's, Doing this every 5 minutes will tell you at a high level if the service and it's dependencies are running and if there is a performance change.</li><li>Developer can write detailed local tests when working in an area, and reuse them if he comes back and changes any code.</li></ol><p></p><p><b>Testing Challenges:</b></p><p>Unit testing is a challenge in low code - while they are fast and ideal for C# or code, not easy to implement for Low code. Their is a new beta feature for component testing in Playwright, i don't think it adds value. API Testing - I use Postman for API testing including controlling my CI. Low code automation testing is hard in the Power Platform, E2E playwright testing in context works pretty well. API's/ network traffic needs to be mocked.</p><p><b>Challenger products:</b></p><p></p><ul style="text-align: left;"><li><b><i>Selenium </i></b>- QA's highly skilled here</li><li><b><i>Cypress </i></b>- Devs tended to use this over Selenium</li><li>Specific products like in Power Platform <b><i>Test Studio</i></b> and ...</li><li>I also like <b><i>BrowserStacks </i></b>low code testing, especially if no CI/CD and can manage from here and use different low code technology. </li></ul><p></p><p><b>Summary</b>: Generally I'd go for Playwright over all the others. </p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4001838553487258943.post-19163088873559761602023-11-23T12:22:00.006+00:002023-11-23T12:22:47.316+00:00UK Tax - MTD for ITSA Updated<p></p><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"><i><span style="color: black; font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">The MTDfITSA saga has been running for many years,
and as of 23 November 2023, this is the current state:<o:p></o:p></span></i></p>
<p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"><b><span style="color: black; font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">Go live: </span></b><span style="color: black; font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">start 5
April 2026 and apply to a way smaller base than the original intended group of
4.5 million users. These are the key changes and points: <o:p></o:p></span></p>
<ul type="disc">
<li class="MsoNormal" style="line-height: normal; mso-list: l2 level1 lfo1; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; tab-stops: list 36.0pt;"><b><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">Who is
in?</span></b><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;"> <span style="mso-spacerun: yes;"> </span>Self-employed people and
property landlords (outside of Limited companies) need to register. <span style="mso-spacerun: yes;"> </span>Initially, landlords with joint property
ownership are not mandated to join (HMRC must provide more
information). Individuals MTDfITSA that previously did a Self
Assessment can have ten or multiple self-employment businesses and 0 to 3
(4 - Foreign property is unclear) property businesses under MTDfITSA (Ord
UK property, FHL UK, FHL EEA, Foreign property).<o:p></o:p></span></li>
<li class="MsoNormal" style="line-height: normal; mso-list: l2 level1 lfo1; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; tab-stops: list 36.0pt;"><b><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">Who is
out?</span></b><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;"> <span style="mso-spacerun: yes;"> </span>Partnerships are out, and non-dom
status (has specific rules). <span style="mso-spacerun: yes;"> </span>If a
person is currently self-employed but has complications such as joint
individual property ownership that generates rental income, being a
partner in a partnership - will mean you are outside and continue to fill
in self-assessments. Trusts/estates, LLP and Ltd are out at the
start. Specific exemptions for income from foster care and
individuals without a National Insurance Number</span><span style="color: black; font-family: "Helvetica",sans-serif; mso-bidi-font-family: "Times New Roman";"> do not need to register for MTDfITSA.</span><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;"><o:p></o:p></span></li>
<li class="MsoNormal" style="line-height: normal; mso-list: l2 level1 lfo1; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; tab-stops: list 36.0pt;"><b><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">EOPS
concept is removed from MTD for ITSA</span></b><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">. <o:p></o:p></span></li>
<li class="MsoNormal" style="line-height: normal; mso-list: l2 level1 lfo1; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; tab-stops: list 36.0pt;"><b><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">Quarterly
submissions are now cumulative</span></b><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;"> booking numbers for the business.<span style="mso-spacerun: yes;"> </span>The quarterly figures are cumulative per
business for the year, i.e. Q2 submission consists of all data from Q1 and
Q2. <span style="mso-spacerun: yes;"> </span>Unlike VAT, ITSA quarters are
cumulative during the year, whereas VAT is for a specific quarter.<o:p></o:p></span></li>
<li class="MsoNormal" style="line-height: normal; mso-list: l2 level1 lfo1; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; tab-stops: list 36.0pt;"><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">For
each self-employed business or property business, a quarterly per-business
submission is due to HMRC within 30 days of the quarter’s completion.
<b>Declaration per business</b> is still required (31 January the following
year). <o:p></o:p></span></li>
<li class="MsoNormal" style="line-height: normal; mso-list: l2 level1 lfo1; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; tab-stops: list 36.0pt;"><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">A
single <b>crystallisation</b> submission for the user at the year-end is
due 31 January each following year.<span style="mso-spacerun: yes;">
</span>A yearly declaration is also required.<o:p></o:p></span></li>
</ul>
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; margin-left: 35.7pt; margin-right: 0cm; margin-top: 0cm; mso-list: l2 level1 lfo1; tab-stops: list 36.0pt; text-indent: -17.85pt;"><!--[if !supportLists]--><span style="font-family: Symbol; font-size: 10.0pt; mso-bidi-font-family: Symbol; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: Symbol; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt "Times New Roman";">
</span></span></span><!--[endif]--><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">Digital links/keeping (<b>digital records)</b>.
Can’t re-key/copy and paste. There is no requirement to use bank
feeds/PDS2 data. Some booking software firms will likely <b>file
quarterly MTDfIT</b> returns for each self-employed (and property)
business. Spreadsheets are an acceptable form of record-keeping. Excel
and bridging software are sufficient for the source for filing. Recording
sales can use daily sales totals for the digital source but, ideally, link to
the raw input system. <o:p></o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; margin-left: 35.7pt; margin-right: 0cm; margin-top: 0cm; mso-list: l0 level1 lfo2; tab-stops: list 36.0pt; text-indent: -17.85pt;"><!--[if !supportLists]--><span style="color: black; font-family: Symbol; font-size: 10.0pt; mso-bidi-font-family: Symbol; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: Symbol; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt "Times New Roman";"> </span></span></span><!--[endif]--><b><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">Quarterly
submissions requiring corrections</span></b><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;"> are cumulative now, so you merely correct a
mistake by adjusting in the next period/quarter.<span style="color: black;"><o:p></o:p></span></span></p>
<ul type="disc">
<li class="MsoNormal" style="color: black; line-height: normal; mso-list: l0 level1 lfo2; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; tab-stops: list 36.0pt;"><b><span style="color: windowtext; font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">Starting 6 April 2026, this</span></b><span style="color: windowtext; font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;"> shall
apply to less than 750k users</span><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;"><o:p></o:p></span></li>
<li class="MsoNormal" style="color: black; line-height: normal; mso-list: l0 level1 lfo2; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; tab-stops: list 36.0pt;"><span style="color: windowtext; font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">Self-assessment people with a combined income of £50k for the two
years previous need to register for MTDfITSA; the plan is to drop to £30k
the following year.</span><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;"><o:p></o:p></span></li>
<li class="MsoNormal" style="color: black; line-height: normal; mso-list: l0 level1 lfo2; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; tab-stops: list 36.0pt;"><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">There
is a new <b>penalty system</b>.<span style="mso-spacerun: yes;"> </span>Late
payment has interest <b>penalties</b>, basically no penalty for 15
days late, then 2% for 16-31 days and then 4% is paid after this. <span style="mso-spacerun: yes;"> </span>4% is on the outstanding balance from the
day past due. Payment is due the following year on the 31 January. <span style="mso-spacerun: yes;"> </span>There are points, fines, and interest
charges.<span style="mso-spacerun: yes;"> </span>Penalty points for late
filing, missing four quarters in 24 months, is £200 penalty. Record
of last 24 months retained. <o:p></o:p></span></li>
</ul>
<p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"><b><span style="color: black; font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">Summary of comparison between ITSA & SA</span></b><span style="color: black; font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">:<o:p></o:p></span></p>
<table border="0" cellpadding="0" cellspacing="0" class="MsoNormalTable" style="border-collapse: collapse; mso-padding-alt: 0cm 0cm 0cm 0cm; mso-yfti-tbllook: 1184;">
<tbody><tr style="mso-yfti-firstrow: yes; mso-yfti-irow: 0;">
<td style="background: #E7E6E6; border: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 225.4pt;" valign="top" width="301">
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-margin-top-alt: auto;"><b><span style="color: black; font-family: "Arial",sans-serif; mso-color-alt: windowtext; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">SA</span></b><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;"><o:p></o:p></span></p>
</td>
<td style="background: #E7E6E6; border-left: none; border: solid windowtext 1.0pt; mso-border-left-alt: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 225.4pt;" valign="top" width="301">
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-margin-top-alt: auto;"><b><span style="color: black; font-family: "Arial",sans-serif; mso-color-alt: windowtext; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">ITSA</span></b><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;"><o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 1;">
<td style="border-top: none; border: solid windowtext 1.0pt; mso-border-top-alt: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 225.4pt;" valign="top" width="301">
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-margin-top-alt: auto;"><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">1 SA return is done each year <b>per person</b>.<o:p></o:p></span></p>
</td>
<td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt; width: 225.4pt;" valign="top" width="301">
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-margin-top-alt: auto;"><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">Four quarterly returns via approved software per business required a
digital record link to the underlying transactions <b>per self-employed
business.</b><o:p></o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-margin-top-alt: auto;"><b><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">Ask HMRC to explain how to correct business
totals for the year as 1. <span style="mso-spacerun: yes;"> </span>missing
types of expenses, 2. <span style="mso-spacerun: yes;"> </span>As EOPS was removed,
assume you have 30 days to finalise business accounts from business
year-end, bringing this forward nearly eight months.</span></b><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;"><o:p></o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-margin-top-alt: auto;"><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">Crystallisation/Finalisation using HMRC-approved software <b>per
person, not per business.</b><o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 2; mso-yfti-lastrow: yes;">
<td style="border-top: none; border: solid windowtext 1.0pt; mso-border-top-alt: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 225.4pt;" valign="top" width="301">
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-margin-top-alt: auto;"><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">Paper submission due 31 October for the previous year.<o:p></o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-margin-top-alt: auto;"><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">Online submissions are due 31 January – 9 months after the financial/tax
year-end.<o:p></o:p></span></p>
</td>
<td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt; width: 225.4pt;" valign="top" width="301">
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-margin-top-alt: auto;"><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">Approved Digital Software to submit (no paper returns).<o:p></o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-margin-top-alt: auto;"><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">One month after each quarter, submit the quarterly cumulative return.<o:p></o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-margin-top-alt: auto;"><i><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">No EOPS is due on 31 January the following
year with new rules. <o:p></o:p></span></i></p>
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-margin-top-alt: auto;"><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">The Crystallisation/Finalisation/Final Declaration is also due 31 January
the following year.<o:p></o:p></span></p>
</td>
</tr>
</tbody></table>
<p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"><span style="color: black; font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">Quarterly MTDfITSA is done per business and is due one
month after the quarter period ends. <b>Property business
quarters </b>and year-end run in the same cycles as personal tax, starting
on 6 April and ending the following year on 5 April. As MTDfIT begins on
6 April 2026, the four quarterly submissions for the 2026-2027 tax year and
filling due dates are:<o:p></o:p></span></p>
<table border="1" cellpadding="0" cellspacing="3" class="MsoNormalTable" style="margin-left: 36.0pt; mso-cellspacing: 1.5pt; mso-padding-alt: 0cm 0cm 0cm 0cm; mso-yfti-tbllook: 1184;">
<tbody><tr style="mso-yfti-firstrow: yes; mso-yfti-irow: 0;">
<td style="padding: .75pt .75pt .75pt .75pt;">
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-margin-top-alt: auto;"><b><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">Qrt start date</span></b><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;"><o:p></o:p></span></p>
</td>
<td style="padding: .75pt .75pt .75pt .75pt;">
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-margin-top-alt: auto;"><b><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">Qtr end date</span></b><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;"><o:p></o:p></span></p>
</td>
<td style="padding: .75pt .75pt .75pt .75pt;">
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-margin-top-alt: auto;"><b><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">Qtr submission due date</span></b><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;"><o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 1;">
<td style="padding: .75pt .75pt .75pt .75pt;">
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-margin-top-alt: auto;"><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">6 Apr 2026<o:p></o:p></span></p>
</td>
<td style="padding: .75pt .75pt .75pt .75pt;">
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-margin-top-alt: auto;"><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">5 July 2026<o:p></o:p></span></p>
</td>
<td style="padding: .75pt .75pt .75pt .75pt;">
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-margin-top-alt: auto;"><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">5 Aug 2026<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 2;">
<td style="padding: .75pt .75pt .75pt .75pt;">
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-margin-top-alt: auto;"><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">6 July 2026<o:p></o:p></span></p>
</td>
<td style="padding: .75pt .75pt .75pt .75pt;">
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-margin-top-alt: auto;"><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">5 Oct 2026<o:p></o:p></span></p>
</td>
<td style="padding: .75pt .75pt .75pt .75pt;">
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-margin-top-alt: auto;"><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">5 Nov 2026<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 3;">
<td style="padding: .75pt .75pt .75pt .75pt;">
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-margin-top-alt: auto;"><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">6 Oct 2026<o:p></o:p></span></p>
</td>
<td style="padding: .75pt .75pt .75pt .75pt;">
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-margin-top-alt: auto;"><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">5 Jan 2027<o:p></o:p></span></p>
</td>
<td style="padding: .75pt .75pt .75pt .75pt;">
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-margin-top-alt: auto;"><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">5 Feb 2027<o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow: 4; mso-yfti-lastrow: yes;">
<td style="padding: .75pt .75pt .75pt .75pt;">
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-margin-top-alt: auto;"><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">6 Jan 2027<o:p></o:p></span></p>
</td>
<td style="padding: .75pt .75pt .75pt .75pt;">
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-margin-top-alt: auto;"><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">5 Apr 2027<o:p></o:p></span></p>
</td>
<td style="padding: .75pt .75pt .75pt .75pt;">
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm; mso-margin-top-alt: auto;"><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">5 May 2027<o:p></o:p></span></p>
</td>
</tr>
</tbody></table>
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm;"><b><span style="color: black; font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;"><o:p> </o:p></span></b></p>
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm;"><b><span style="color: black; font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">Self
Assessment filling options:</span></b><span style="color: black; font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;"><o:p></o:p></span></p>
<ol start="1" type="1">
<li class="MsoNormal" style="color: black; line-height: normal; mso-list: l1 level1 lfo3; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; tab-stops: list 36.0pt;"><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">Most
people use the current <b>XML online filing</b> done on 31
January after the personal tax year.<span style="mso-spacerun: yes;">
</span>+-11 million people 2026/2027.<o:p></o:p></span></li>
<li class="MsoNormal" style="color: black; line-height: normal; mso-list: l1 level1 lfo3; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; tab-stops: list 36.0pt;"><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">Some
people still use <b>paper-based self-assessments</b> due Oct
after the tax year. <o:p></o:p></span></li>
<li class="MsoNormal" style="color: black; line-height: normal; mso-list: l1 level1 lfo3; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; tab-stops: list 36.0pt;"><b><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;">MTD
for</span></b><span style="font-family: "Arial",sans-serif; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-GB; mso-font-kerning: 0pt; mso-ligatures: none;"> <b>ITSA </b>will be due one month after each business
quarter, and the finalisation/crystallisation process is due 31 January,
the year after the personal tax year.<span style="mso-spacerun: yes;">
</span>As HMRC calc tax, declarations are required from the taxable individual
for the year and after each quarter per business. +-500k people<o:p></o:p></span></li>
</ol><br /><p></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4001838553487258943.post-80869834929394080372023-11-21T13:38:00.002+00:002023-12-07T16:35:59.327+00:00Review of Browser Stacks Low Code Automated test tool<p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"><span style="font-family: inherit;"><b><span style="font-size: 13.5pt;">Overview</span></b><span style="font-size: 13.5pt;">: Low code testing relies heavily on complete UI
end-to-end testing. It needs to be fast, flexible, quick to correct,
scale-able, highly configurable and BrowserStack's low code test tool is in
beta and definitely on the right path - for me, it needs a few features.
I ran my testing against customised apps created on three platforms:<o:p></o:p></span></span></p><ol start="1" type="1">
<li class="MsoNormal" style="line-height: normal; mso-list: l2 level1 lfo1; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; tab-stops: list 36.0pt;"><span style="font-size: 12pt;"><span style="font-family: inherit;">Mendix low code,<o:p></o:p></span></span></li>
<li class="MsoNormal" style="line-height: normal; mso-list: l2 level1 lfo1; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; tab-stops: list 36.0pt;"><span style="font-size: 12pt;"><span style="font-family: inherit;">Microsoft's Blazer hosted on Azure Web App, and<o:p></o:p></span></span></li>
<li class="MsoNormal" style="line-height: normal; mso-list: l2 level1 lfo1; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; tab-stops: list 36.0pt;"><span style="font-size: 12pt;"><span style="font-family: inherit;"><span style="font-family: inherit;">Canvas app within Power Platform. </span><o:p></o:p></span></span></li>
</ol><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"><span style="font-family: inherit;"><b><span style="font-size: 13.5pt;">Tip: </span></b></span>I've looked and use BrowserStack for many years and it has moved from being an device emulators infrastructure testing provider to a full ALM testing platform. The low code Browser stack has a recorder to capture steps.</p><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"><b>Where does Low Code fit into Browser Stack:</b></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjs0d_CoIxzZDAfthrYe2T1_Gev3-jd8fezL1RYyNyeQID3v3uOyBqK6z7qZPBZfKjjzcsKzkuB_f5lXvGjmkxykFsfKDjh6eIAacFUkRzcXuh_R2gT5pugjTCJCBIUyKv_G7fYrxTxQ92EFjcfE5YePpVkuXhcFADClIqj75H_DmMQkZEIM205fV1uBbA/s1193/broswestack.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="651" data-original-width="1193" height="350" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjs0d_CoIxzZDAfthrYe2T1_Gev3-jd8fezL1RYyNyeQID3v3uOyBqK6z7qZPBZfKjjzcsKzkuB_f5lXvGjmkxykFsfKDjh6eIAacFUkRzcXuh_R2gT5pugjTCJCBIUyKv_G7fYrxTxQ92EFjcfE5YePpVkuXhcFADClIqj75H_DmMQkZEIM205fV1uBbA/w640-h350/broswestack.PNG" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;"><span style="font-size: x-small;">Image1. Low code automation works well as part of the full BrowserStack Platform or just using the product by itself.</span></td></tr></tbody></table><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"><span style="font-family: inherit;"><b><span style="font-size: 13.5pt;">Pros of the Low Code BrowserStack Product</span></b><span style="font-size: 13.5pt;">:<o:p></o:p></span></span></p><ul type="disc">
<li class="MsoNormal" style="line-height: normal; mso-list: l0 level1 lfo2; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; tab-stops: list 36.0pt;"><span style="font-size: 12pt;"><span style="font-family: inherit;">The local recording feature is easy to set up and use<o:p></o:p></span></span></li>
<li class="MsoNormal" style="line-height: normal; mso-list: l0 level1 lfo2; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; tab-stops: list 36.0pt;"><span style="font-size: 12pt;"><span style="font-family: inherit;">Seamless integration with the cloud version running on
BrowserStack's infrastructure<o:p></o:p></span></span></li>
<li class="MsoNormal" style="line-height: normal; mso-list: l0 level1 lfo2; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; tab-stops: list 36.0pt;"><span style="font-size: 12pt;"><span style="font-family: inherit;">Logical layout of UI, little to no training required<o:p></o:p></span></span></li>
<li class="MsoNormal" style="line-height: normal; mso-list: l0 level1 lfo2; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; tab-stops: list 36.0pt;"><span style="font-size: 12pt;"><span style="font-family: inherit;"><span style="font-family: inherit;">UI validation using the DOM or, more importantly, screenshots using
BrowserStack's AI verification (required further review) has the potential
to self-heal as in the screen changes, but the validation can be smart
enough to understand it is just an updated screen (example a single colour
in the page and the position of the name is moved).</span><o:p></o:p></span></span></li><li class="MsoNormal" style="line-height: normal; mso-list: l0 level1 lfo2; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; tab-stops: list 36.0pt;"><span style="font-size: 12pt;"><span style="font-family: inherit;"><span style="font-family: inherit;">SDK is available to work with the full BrowserStack platform.</span></span></span></li><li class="MsoNormal" style="line-height: normal; mso-list: l0 level1 lfo2; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto; tab-stops: list 36.0pt;">Not Low code specific but BrowserStack generally has the new phones included in their offering within days of being release.</li>
</ul><p class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"><span style="font-family: inherit;"><b><span style="font-size: 13.5pt;">Cons</span></b><span style="font-size: 13.5pt;">:<o:p></o:p></span></span></p><ul type="disc">
<li class="MsoNormal" style="line-height: normal;"><span style="font-size: 13.5pt;"><span style="font-family: inherit;">Provide a webhook or allow for a REST client call as a step (I'd
want to log directly from the test run into Azure Monitor)<o:p></o:p></span></span></li>
<li class="MsoNormal" style="line-height: normal;"><span style="font-size: 13.5pt;"><span style="font-family: inherit;">More run options, I'm sure it's already on the road map, but the
ability to run every hour for continuous monitoring.<o:p></o:p></span></span></li>
<li class="MsoNormal" style="line-height: normal;"><span style="font-size: 13.5pt;"><span style="font-family: inherit;">Refresh tokens on a schedule (allows you to not use MFA such as SMS
codes or Authenticator).<o:p></o:p></span></span></li>
<li class="MsoNormal" style="line-height: normal;"><span style="font-size: 13.5pt;"><span style="font-family: inherit;">Make it clear if the run is from the local or the browser, and keep
the historical logs for both together.<o:p></o:p></span></span></li>
<li class="MsoNormal" style="line-height: normal;"><span style="font-size: 13.5pt;"><span style="font-family: inherit;">Export results - I could not find this, but it would help compare
step performance.<o:p></o:p></span></span></li><li class="MsoNormal" style="line-height: normal;"><span style="font-size: 13.5pt;"><span style="font-family: inherit;">I use DevOps, I'm unlikely to take the whole BrowserStack platform unless i need the emulators which is what BrowserStack was originally famous for.</span></span></li>
</ul><p>
</p><p class="MsoNormal" style="line-height: normal; margin-bottom: 0cm;"><b><span style="font-size: 13.5pt;"><span style="font-family: inherit;">Summary</span></span></b><span style="font-size: 13.5pt;"><span style="font-family: inherit;">:
This is an excellent tool for testing; the low code product was still in beta when I
reviewed it. It is a nice tool and has the potential to disrupt the
market. I feel Playwright is a better point solution and integrates to CI/ALM platforms.</span></span></p><p><b>References</b>: <a href="https://www.browserstack.com/low-code-automation/features?utm_source=google&utm_medium=cpc&utm_platform=paidads&utm_content=668760067900&utm_campaign=Search-Brand-EMEA-Navigational&utm_campaigncode=Core+9045914&utm_term=e+browserstack">https://www.browserstack.com/low-code-automation/features?utm_source=google&utm_medium=cpc&utm_platform=paidads&utm_content=668760067900&utm_campaign=Search-Brand-EMEA-Navigational&utm_campaigncode=Core+9045914&utm_term=e+browserstack</a></p><p><b>Other</b>: </p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqQw_gOJh9lzb0bEsw-67sTfFmvA2iKDSYLCyL8y4YrE5DB5BsV9t5Hb3NA0Cyc3q9PmGSjcnX7WhifA3XkwGCroSELdUr9VMAdFq1t0kGslciB6E8orsivcyGE7aU2jUcy_N3aGxtdHgDSi7ZlMKiR1LfySy_RVaY2v53kvKhOgfMwiA5prfq-ddTV2E/s1404/broswestack-devicetestingdroid.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="881" data-original-width="1404" height="402" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqQw_gOJh9lzb0bEsw-67sTfFmvA2iKDSYLCyL8y4YrE5DB5BsV9t5Hb3NA0Cyc3q9PmGSjcnX7WhifA3XkwGCroSELdUr9VMAdFq1t0kGslciB6E8orsivcyGE7aU2jUcy_N3aGxtdHgDSi7ZlMKiR1LfySy_RVaY2v53kvKhOgfMwiA5prfq-ddTV2E/w640-h402/broswestack-devicetestingdroid.PNG" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;"><span style="font-size: x-small;">Image 2. Emulate a Samsung Galaxy phone on Android using the Chrome browser.</span><br /><div style="text-align: left;"><br /></div><div style="text-align: left;"><i>Thought</i>: I like BrowserStack's reporting, clean and simple on tests and easy to get the history.</div></td></tr></tbody></table>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4001838553487258943.post-4640423696230960072023-11-15T20:44:00.009+00:002023-11-16T17:34:43.169+00:00Ignite 2023 - Microsoft Fabric - Introduction<p>GA: <a href="https://www.microsoft.com/en-us/microsoft-fabric/blog/2023/11/15/prepare-your-data-for-ai-innovation-with-microsoft-fabric-now-generally-available/">Prepare your data for AI innovation with Microsoft Fabric—now generally available | Microsoft Fabric Blog</a></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsr76MFei1QZXrgWGWKWTbrLufaTZTL53yRl3PzLh9fsvRKgepvHGcQrXsbSpM01a3WmKtbWMuA7z318YUJyOGtlSpDuKjZ9AAy0CKJ2FZD1DTlA511k_Ds47G-LG2qkp1_aSmg4vLvNvaSw8WRSebYFIVgUYOb4H2samq0JBdkUFQtlRWzk-4nFVO0HM/s1208/4TenantsofFabric.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="616" data-original-width="1208" height="163" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsr76MFei1QZXrgWGWKWTbrLufaTZTL53yRl3PzLh9fsvRKgepvHGcQrXsbSpM01a3WmKtbWMuA7z318YUJyOGtlSpDuKjZ9AAy0CKJ2FZD1DTlA511k_Ds47G-LG2qkp1_aSmg4vLvNvaSw8WRSebYFIVgUYOb4H2samq0JBdkUFQtlRWzk-4nFVO0HM/s320/4TenantsofFabric.PNG" width="320" /></a></div><p>Everything brought in and available for analysis in a single Service. Microsoft Fabric is a unified platform that brings all your analytics under a single service.</p><p>OneLake - per Fabric instance. Stores all data within the SaaS data-lake (scales itself), automatically index data, abides by AIP rules/labels. Intelligent data foundations.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7aVdc7IF5eI5YjRX-L3x9rJsaFWrOmWhj2mDArUxajPLl7JLPXbHRdJHnEAonX9F6_3T3L7IcBMjtf5BerzfrPZJSZDT7MiwLOQoTq2Yz7g3u8Phoj53eMIdCdEwSif4ijOz4tdmGu5WiLL-WONclzgeRU8QMrAK0snelQ4NvTXbd62j2ZyAn7Ab-Esg/s1202/Fabric2.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="651" data-original-width="1202" height="173" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7aVdc7IF5eI5YjRX-L3x9rJsaFWrOmWhj2mDArUxajPLl7JLPXbHRdJHnEAonX9F6_3T3L7IcBMjtf5BerzfrPZJSZDT7MiwLOQoTq2Yz7g3u8Phoj53eMIdCdEwSif4ijOz4tdmGu5WiLL-WONclzgeRU8QMrAK0snelQ4NvTXbd62j2ZyAn7Ab-Esg/s320/Fabric2.PNG" width="320" /></a></div><p></p><p>All data is held in the Delta Parquet format (same format for any source). Data is ready to use. One copy of data.</p><p>SaaS single service, no need to bring pieces together, one data sources don't need to move and slice data. Can query using multiple approaches. Can create a short cut to files/folders/databricks and it becomes part of OneLake. Data stays at original source but can be worked with.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTmilmhjblQebVy_jR-Sj6jfrcnOeNZ771Uy9eNEYjvp12iU96FP-sVXyIYkfL5GN7sq7CLvTIJU98ltt_o1BliKHnzSv_Uer6oqu9PTXTT95V6sHsCXmxNAh92aGH8FBQVAc79tFLST7qjWVxYLDmXhRw8R85K9iSrL9_Iqzm0JEcyfFs6F8dUUgkvAA/s1145/Fabric3.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="634" data-original-width="1145" height="177" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTmilmhjblQebVy_jR-Sj6jfrcnOeNZ771Uy9eNEYjvp12iU96FP-sVXyIYkfL5GN7sq7CLvTIJU98ltt_o1BliKHnzSv_Uer6oqu9PTXTT95V6sHsCXmxNAh92aGH8FBQVAc79tFLST7qjWVxYLDmXhRw8R85K9iSrL9_Iqzm0JEcyfFs6F8dUUgkvAA/s320/Fabric3.PNG" width="320" /></a></div><p></p><p>Mirroring in MS Fabric - get same benefits of shortcuts, but can connect to databases including SnowFlake, Dataverse, AWS S3 buckets & CosmosDB. Mirroring is always up to date in real time. Data is stored in Delta Parquet format so can now use. With these 2 approaches can use nearly any source. lots of connectors so could use: Dataverse, Cosmos, Snowflake, SQL Server, blobs on S3,.. Then can write queries across all the data. </p><p>Copilot in Microsoft Fabric will help bring in all the data, and help analyse the data.</p><p>Copilot for Power BI is amazing for building reports - need tp play with it.</p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4001838553487258943.post-1076602024340813982023-11-15T18:16:00.011+00:002023-11-15T20:47:05.019+00:00Ignite 2023 - Keynotes - Summary<p><b><i>15 & 16 November 2023</i></b></p><p>Good <b>Keynote:</b> AI is driving a lot of innovation.</p><p><b>Microsoft Fabric </b>in GA (25k instances already). New feature is 'Mirroring' - copy cosmos/SQL et al into Fabric. OneLake. Can bring lots of data from multiple sources into Fabric in near rela time.</p><p><b>MS Teams </b>(320 million users): Bring everything to the user in one place, not just communications but a canvas for apps. Good place to build line of business applications. New teams app - way faster, easier to use. <b>Teams Premium</b> - intelligent meeting recap is working well, can integrate recap with copilot. </p><p><b>Copilots </b>- needed for nearly everything you do. understand context of where you are. MS has hundreds of copilots.</p><p><b>Copilot Studio</b> - Custom GPT's, can add plugin's to add your own data, can hook into an enterprises unique data.</p><p><b>Copilot for Service </b>- allows agents to get information to provide support, looks interesting.</p><p><b>Personal thoughts</b>: AI is going to be a mega trend that will influence the world hugely, there will be lots of weird decisions on the journey. Currently, it is mainly proving useful as another tool to help improve existing processes. AI helps me work faster and spend my time on exploration rather than bring base understanding together.</p><p><b>Part 2 Keynote:</b></p><p><b>Microsoft Graph</b> gives the copilot context within an organisation. Use plugins to add enterprise data or Open AI GPT's.</p><p><b>Surface Pro Hub 3 </b>released - looks good, rest of the hardware looks higher spec.</p><p><b>SharePoint Premium </b>- improved knowledge and content management on SharePoint.</p><p><b>Copilot Studio</b> - useful to build internal copilots. 1. Connect copilot to other systems using plugins or GPTs 2. create workflows 3. Controlled by IT.</p><p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhU26NzvcBQuaIBq3Q-NF925dYyg6wf56imPXgpp6Ut4-BOEsRsrHEDLrjHqel9D8s_UqiTXVQzUtqV3TDp_JWJSlA3p29ohSLeTqxKnfWMsJpzYyUuuXZdmrFCMBfNsH3MA3GcysJwALpncBD0DzMUunJo9LBPBGRMIItJF6bnmgMXDg8niszU71QaoAc/s1023/Copilot-studio-overview.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="512" data-original-width="1023" height="160" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhU26NzvcBQuaIBq3Q-NF925dYyg6wf56imPXgpp6Ut4-BOEsRsrHEDLrjHqel9D8s_UqiTXVQzUtqV3TDp_JWJSlA3p29ohSLeTqxKnfWMsJpzYyUuuXZdmrFCMBfNsH3MA3GcysJwALpncBD0DzMUunJo9LBPBGRMIItJF6bnmgMXDg8niszU71QaoAc/s320/Copilot-studio-overview.PNG" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Copilot Studio overview</td></tr></tbody></table></p><p><b>Mesh </b>- Teams can join immersive experience/events, not sure what this means. GA expected Jan 2024.</p><p><b>Microsoft 365 copilot</b> release to GA 1 November. </p><p><b>Why Copilot</b>? MS are describing it as a productivity multiplier. Allows users to be more productive and more creative. Improves quality of work, avoids searching - as expected. Makes mistakes but is getting better.</p><p><b>Microsoft Copilot</b> - Bing chat is just MS copilot</p><p>So when logging use Entra Id (Azure AD), get contextual enterprise information. Inherits security and privacy policies. ACL controlled. Includes MS graph and Apps.</p><p>Try it out: <b>Copilot.microsoft.com</b> - Chat data is not saved/stored by MS. Change from "web" to "work". Also available in Windows taskbar</p><p>Ability to use copilot to pull in information, show more graphs, get data. Good word example getting data from a pptx.</p><p>Great example of querying Excel using copilot, created a pivot table. Contrived but looks good, added rainfall from web to look at sales. Powerful.</p><p>Never thought of copilots for being a participant in a meeting - might us amazing. In teams meeting, takes real time notes, and pulls in info and summaries points for next meeting. Add as a collaborative partner, can visualize discussions on a meeting whiteboard.</p><p><b>Loop </b>- flexible collaboration, now with copilot. Not my area but sounds impressive - i don't get it. People, working with people, now also working with copilot. Okay.</p><p><b>Copilot for Sales </b>- looks promising. Hooks into existing CRMs.</p><p><b>Copilot for Service </b>- working with customers, get data that is correct to solve customers problems. Concise summary, helps craft emails, updates CRM. Looks very interesting!</p><p><b>Viva </b>- Microsoft copilot dashboard powered by Viva - not sure on this topic.</p><p><b>Summary</b>: People using copilot don't want to loose it. AI is bringing big changes to many industries. Promise is to take the grind out of work - sounds great let's see. Copilot/AI will be a tool and shape how we work.</p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4001838553487258943.post-42939544576065222432023-10-30T12:18:00.000+00:002023-10-30T12:18:04.485+00:00Thoughts on Logging and Monitoring<p><b>Overview</b>: I mainly work in the Microsoft stack, so my default for logging as Azure Monitor. Log Analytics/Workspace and Application Insights fall under the term Azure Monitor. </p><p>Going forward MS are storing App Insight logging data within a Log analytics instance.</p><p>There are 4 options for displaying/analysis logs in Azure:</p><p></p><ol style="text-align: left;"><li>Azure Dashboards</li><li>Power BI</li><li>Grafana</li><li>Workspaces</li></ol><p></p><p>SIEM tools take in logs from various sources such as Azure Log Analytics, Defender, other vendors Prometheus logs or Open Telemetry. </p><p>Grafana can be used on most SIEMS including Dynatrace, NewRelic, Microsoft Sentinel, or Azure Monitor. Grafana supports PromQL and has fantastic dashboarding.</p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4001838553487258943.post-86889843826406563442023-10-30T12:11:00.005+00:002023-11-03T13:24:30.846+00:00Azure DDoS Sentinel Overview: <p>Microsoft has the "Azure DDoS Sentinel" service that can help protect your network endpoints from DDoS attacks. Common DDoS attacks all basically use hundreds of bad actors to flood traffic into you architecture to overwhelm them. Restricting traffic from the bad actor sources is key. Mixing the Azure DDoS Sentinel Service with Azure WAF, allows us to identify the bad actions and just block these bad attackers.</p><p>DDoS - Increasing, multiple bad actors try overwhelm your resources. Rate limiting can help, but ideally you want to let thru valid traffic and block bad traffic. Azure DDoS Sentinel service can be coupled with WAF to protect correctly from DDoS attacks. Normally UDP flood attacks, also protects HTTP(s) flood and TCP Flood attacks. Covers level 3-4 layer attacks.</p><p><b>Two SKU's:</b></p><p></p><ul style="text-align: left;"><li><i>DDoS network protection</i>: used on a VNet, service will work out and protect your public nodes. Can put this in from for Azure WAF are Azure Firewall, After Front Door. </li><li>Cheaper Alternative is the <i>DDoS IP protection</i>, has most of the features and if only specific IP, like a web traffic IP it's a good option.</li></ul><div>More Info:</div><div><a href="https://www.pbeck.co.uk/2020/10/waf-options.html">Radimaging Ltd - Paul Beck's Technical Working Notes for Microsoft Technology: WAF Options (pbeck.co.uk)</a></div><div><a href="https://www.pbeck.co.uk/2022/07/azure-application-gateway-basics.html">Radimaging Ltd - Paul Beck's Technical Working Notes for Microsoft Technology: Azure Application Gateway Basics (pbeck.co.uk)</a></div><p></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4001838553487258943.post-15193164904061030442023-10-29T09:03:00.010+00:002023-12-07T04:10:55.583+00:00Mendix Overview<p><b>Overview</b>: Mendix is a low code app builder that is a leader in the market. While I predominately use the Power Platform, I think Mendix can be a good option. </p><p>The ALM has: <b>Version Control</b>: this is intuitive and follows a local checkout version and commit back to a main branch (simple version control) and allows to use branches so comprehensive and flexible. It is a good idea to check in small and often or you run the risk of large complex competing merges. I believe it is git but from the Mendix Studio IDE it is seamless. </p><p>Build a local Version using the <b>Mendix Studio Pro</b>, and deploy to the cloud. There are several options including on-prem. the free version is basic, and has limitations but has proven to be extremely powerful.</p><p>Mendix supports sprints, boards, so you can work with User Stories in the <b>Developer Portal for ALM.</b></p><p>An <b>App Package</b> can be stored and it is a good idea to use this as the base for all projects in your company, so basic branding and naming conventions are consistent.</p><p><b>Deployment </b>anywhere such as on-prem. via Kubernetes deployment, as well as the major cloud platforms i.e. AWS, Azure, GCP, Oracle.</p><p><b>Market Place</b> - templates, connectors, components to reuse. </p><p><b>Domain Modelling</b> is excellent, can chose your database when creating app, modelling is easy and exposing via OpenAPI contract and generating CRUD screens is easy.</p><p><b>Publishing </b>to cloud production versions is very easy and the local version as developing is seen on localhost.</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1OOSS6Qh1gE6Vs5Oi46uRE_xSDD2fg9mWrpphnrWPwFHXa4EFq7D6PrU4DTRXEl68jygqoPiGRH6e3NoKacG09KNjXJEWTCZyPwVIjLG5sN5KphxAdpDL0P2QY3UVWY38KqvyWGGsQKw2iTNr2yfCebeEw6pSP8UoA6HdtVphyphenhyphenOHSOysbOSclBN653zQ/s735/MednixHL.png" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="735" data-original-width="623" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1OOSS6Qh1gE6Vs5Oi46uRE_xSDD2fg9mWrpphnrWPwFHXa4EFq7D6PrU4DTRXEl68jygqoPiGRH6e3NoKacG09KNjXJEWTCZyPwVIjLG5sN5KphxAdpDL0P2QY3UVWY38KqvyWGGsQKw2iTNr2yfCebeEw6pSP8UoA6HdtVphyphenhyphenOHSOysbOSclBN653zQ/w542-h640/MednixHL.png" width="542" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Image 1, High level overview of the logical components making up Mendix.</td></tr></tbody></table><p><b>Pros</b>:</p><p></p><ol style="text-align: left;"><li>Easy to use.</li><li>Basics for Low code are all included such as version control, project management, deployment/publishing.</li><li>Build native mobile apps.</li><li>Improve business process easily.</li><li>Supporting multiple languages is unbelievably simple and easy.</li></ol><p></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFSFOpLfZXho7glram_J0f0qvsyaZ-OqF5mG_wakftvpWbLXcXKc7ijRoWxLrrBquGJXfscW7mHODvW8OizrXGjmByZ59EsZhYBg1ssJ-36zkSmc3CHvnTC1uwTPezPkFbjRdNuddIdnV9agXM-87rET8ymzRtwkPMwl0Balv0P-8q0giS0kZvRZdtHtU/s1365/MendixStudio-LanguageSettings.PNG" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="479" data-original-width="1365" height="224" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFSFOpLfZXho7glram_J0f0qvsyaZ-OqF5mG_wakftvpWbLXcXKc7ijRoWxLrrBquGJXfscW7mHODvW8OizrXGjmByZ59EsZhYBg1ssJ-36zkSmc3CHvnTC1uwTPezPkFbjRdNuddIdnV9agXM-87rET8ymzRtwkPMwl0Balv0P-8q0giS0kZvRZdtHtU/w640-h224/MendixStudio-LanguageSettings.PNG" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Image 2. Add multiple Languages to your app</td></tr></tbody></table><br /><p>Simple exercise: Call an key secured API and display on a Mendix page after watching this <a href="https://video.mendix.com/watch/RMw45uwCAjYi2ej7ykAseu" target="_blank">7 minute video on API Calls</a>.</p><p>The running example has:</p><p></p><ol style="text-align: left;"><li>Various pages and forms for showing and persisting database information. </li><li>A REST Call to a 3rd party using OAuth key. </li><li>Publishing a REST API based on a table and an associated entity.</li><li>Displays an Azure Chatbot</li></ol><p></p><p>Me playing around with <a href="https://radimaging-sandbox.mxapps.io/" target="_blank">a Mendix App</a>:</p><p>1. Get a REST endpoint and verify using postman (using a key for secure access)</p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjH8Dva6Dl1AcoINE6RlJVATcXl1G1Mg_ZvNSdiLAOSQ0A3CurchbjNWm5gFtXXjDz9R5w4jOWCvNqOnDzdRHSDzgylxQ72OC92vpf1dXt2uLwfnyzJWemiobMNvfcF_D522dWLBgaY8xwEq1kessxoi_cr6MaVjxBykRZgOlcFar-HLOHpeDmkUj3n88M/s1233/Mendix-Postman.PNG" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="796" data-original-width="1233" height="414" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjH8Dva6Dl1AcoINE6RlJVATcXl1G1Mg_ZvNSdiLAOSQ0A3CurchbjNWm5gFtXXjDz9R5w4jOWCvNqOnDzdRHSDzgylxQ72OC92vpf1dXt2uLwfnyzJWemiobMNvfcF_D522dWLBgaY8xwEq1kessxoi_cr6MaVjxBykRZgOlcFar-HLOHpeDmkUj3n88M/w640-h414/Mendix-Postman.PNG" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Image3. Postman showing the REST call to be used</td></tr></tbody></table><br /><p>2. Create a new "microflow" as shown below:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCuv-_lfiZK4EUMtonNpLL0UW-dIpUb_7dBr39XcszzwxQfXUHn7NjE_bEnTL1fLZLQVaNzCHmTUnmjaSjFZizF4NFCYJg9-4-1xWapM-CPI1odNw6ezAIrB64vX6cUCIWm_Swde8e0XPuo5u2PI4RyT3Aj36UCAopqhxunG3eQdKqIq1nNUtDrreGfs0/s426/Microflow.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="422" data-original-width="426" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCuv-_lfiZK4EUMtonNpLL0UW-dIpUb_7dBr39XcszzwxQfXUHn7NjE_bEnTL1fLZLQVaNzCHmTUnmjaSjFZizF4NFCYJg9-4-1xWapM-CPI1odNw6ezAIrB64vX6cUCIWm_Swde8e0XPuo5u2PI4RyT3Aj36UCAopqhxunG3eQdKqIq1nNUtDrreGfs0/s16000/Microflow.PNG" /></a></div>3. Add a new "Action" of type "REST Call"<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6Q4WuxRXy5O525xEQfiiJhA-4r6ULj1PC7S8aIvbgCmk0DdRkPHZ7DHEeHYN5coxlYkJxdoiuIMWZmZcN1Vfmrc8k-aV3MMig8jVfBl0R7tCGtZvffPGweILdN2HvVfkX8gaqtxb4kqDxhh68atzPWVVCujfBaSuerw0s_e_T20HwjxBmKo4zNJh8BrI/s1755/Microflow2.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="831" data-original-width="1755" height="152" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6Q4WuxRXy5O525xEQfiiJhA-4r6ULj1PC7S8aIvbgCmk0DdRkPHZ7DHEeHYN5coxlYkJxdoiuIMWZmZcN1Vfmrc8k-aV3MMig8jVfBl0R7tCGtZvffPGweILdN2HvVfkX8gaqtxb4kqDxhh68atzPWVVCujfBaSuerw0s_e_T20HwjxBmKo4zNJh8BrI/w320-h152/Microflow2.PNG" width="320" /></a></div>4. Add a JSON Structure file<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8Dq75QRnaJS3M3ZFrDf_Sdxm2RbRrsyjsOIJSFJU2irskzb7CsRSQxVlIypyYOiMCybHQWJJ7m8BUhcerbxM8oyq37DmyA-P-HT1LO5gXUsvUne2NYPbzgc_GOpOXp1gS_3V9aFXoTQSgXDlYE-O2LTc07MCOVTayerpRgToojrrjE7v_eRAm6OCCfGM/s1361/json-structure.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1211" data-original-width="1361" height="285" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8Dq75QRnaJS3M3ZFrDf_Sdxm2RbRrsyjsOIJSFJU2irskzb7CsRSQxVlIypyYOiMCybHQWJJ7m8BUhcerbxM8oyq37DmyA-P-HT1LO5gXUsvUne2NYPbzgc_GOpOXp1gS_3V9aFXoTQSgXDlYE-O2LTc07MCOVTayerpRgToojrrjE7v_eRAm6OCCfGM/w320-h285/json-structure.PNG" width="320" /></a></div><br /><div><br /></div><div>5. Decide which attributes to pull out<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5m9vCKxiuYMxXpeqlb8efw6yBoeEsVTLEoLSZ7GreWswxoplE1i_O2thwmTXcmBsXv-uhzWlRVH0Oo9-1kx8tCiJiXAkgE6ajYcfHCyCp0Zq1mwiW45iJe9NgflYC5ZtMxduhxYhhuyEMnGyq-OU10FZpzcQxsY9OZswho2Vinmx3XER6n4eatt7y8CM/s1478/Mendix-import-mapping2.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="836" data-original-width="1478" height="181" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5m9vCKxiuYMxXpeqlb8efw6yBoeEsVTLEoLSZ7GreWswxoplE1i_O2thwmTXcmBsXv-uhzWlRVH0Oo9-1kx8tCiJiXAkgE6ajYcfHCyCp0Zq1mwiW45iJe9NgflYC5ZtMxduhxYhhuyEMnGyq-OU10FZpzcQxsY9OZswho2Vinmx3XER6n4eatt7y8CM/w320-h181/Mendix-import-mapping2.PNG" width="320" /></a></div></div><div><br /></div><div>6. Create an "Entity" in the Domain model to hold the retrieved data.</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifGvTkLFknL8OEsg_5cY1ekfM7dP49Rp8_I8AkvWPN4vphqNGVSU9iq7ZlyqMJO-eNKJbeMofRp-Vx_0R5d7kswN8pJ6tKdeb4WVywsmF6z3bVDFo-pmj97Lx7sIvB51L3BtRIeTY84C1QncbXzZnE80g-heIxypW111TWPLoCmVcj9wn_XYd_CDwfMTY/s982/Mendix-Entity.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="427" data-original-width="982" height="139" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifGvTkLFknL8OEsg_5cY1ekfM7dP49Rp8_I8AkvWPN4vphqNGVSU9iq7ZlyqMJO-eNKJbeMofRp-Vx_0R5d7kswN8pJ6tKdeb4WVywsmF6z3bVDFo-pmj97Lx7sIvB51L3BtRIeTY84C1QncbXzZnE80g-heIxypW111TWPLoCmVcj9wn_XYd_CDwfMTY/w320-h139/Mendix-Entity.PNG" width="320" /></a></div>7. Map Model to the Import as shown below<div><p></p></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgu1UkPGFx0SU1CIudxaqcIvTU4expbBuI6tOXzPcbKZ6PsvEuTXIO8j5NPzmMg4Kwxi9PFFwWlcWW_TMiy8UxNGM86Yyt4LuA2CrNynxFjjkrg1N_oxG1Aes9DHe-mNIVYWxXVrRfV9CBV06Ve2bhQxwA23P7ffWTiEaFGd5zVNRXwS8qDaK5IkoUbdwk/s1791/Mendix-map.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="878" data-original-width="1791" height="157" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgu1UkPGFx0SU1CIudxaqcIvTU4expbBuI6tOXzPcbKZ6PsvEuTXIO8j5NPzmMg4Kwxi9PFFwWlcWW_TMiy8UxNGM86Yyt4LuA2CrNynxFjjkrg1N_oxG1Aes9DHe-mNIVYWxXVrRfV9CBV06Ve2bhQxwA23P7ffWTiEaFGd5zVNRXwS8qDaK5IkoUbdwk/w320-h157/Mendix-map.PNG" width="320" /></a></div>...<div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgJezXGqT06PLXpAsEdr41EZBBzGPQj0aaDDZgo6p8mLS4AqvcNMqxGHwxIXEtNrum3dhUqDIgKwV1_8vXNtJO-IT8q-TzRXcr8fXf1sGTxNaEkbH3RIKRGZEMUOXPgOYRuq3ChxJZRvkNR8cOcff4CLgJK9pOn2nmTZnwUP8a4WNFiYleBhIZJatSYfJA" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="913" data-original-width="1422" height="410" src="https://blogger.googleusercontent.com/img/a/AVvXsEgJezXGqT06PLXpAsEdr41EZBBzGPQj0aaDDZgo6p8mLS4AqvcNMqxGHwxIXEtNrum3dhUqDIgKwV1_8vXNtJO-IT8q-TzRXcr8fXf1sGTxNaEkbH3RIKRGZEMUOXPgOYRuq3ChxJZRvkNR8cOcff4CLgJK9pOn2nmTZnwUP8a4WNFiYleBhIZJatSYfJA=w640-h410" width="640" /></a></div><br /><p><b>Mendix Series</b></p><p>1. <a href="https://www.pbeck.co.uk/2023/10/mendix-overview.html" target="_blank"> Overview of Mendix</a> (this post)</p><p>2. <a href="https://www.pbeck.co.uk/2023/12/mendix-part-2-diving-deeper.html" target="_blank">Mendix - Part 2 - Diving deeper</a></p></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4001838553487258943.post-7030581583700964302023-10-10T14:38:00.003+01:002023-10-10T14:38:30.197+01:00Dynamics & Power Platform browser extensions and tools<p>Key Tools and Browser Extensions for Dynamics and Power platform Developers:</p><p></p><ul style="text-align: left;"><li>Level up for Dynamics (extension)</li><li>Dynamics 365 Power Pane (extension)</li><li>Microsoft power automate Desktop (extension)</li></ul><p></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4001838553487258943.post-63253966863313755222023-09-14T18:00:00.170+01:002023-09-14T18:00:00.141+01:00Microsoft Azure Artificial Intelligence (AI) - AZ-900 Notes<p><b>1. Artificial Intelligence (AI) </b></p><p></p><ul style="text-align: left;"><li>AI making PC behave like human intelligence. </li><li>Teach PC to do task for us. </li><li>PC predicts using patterns and can act. And good at looking for anomalies.</li><li>PC uses camera/photos to look for patterns.</li><li>Engage in useful conversations, use multiple sources of knowledge.</li></ul><p></p><p><b>2. Machine Learning (ML)</b></p><p></p><ul style="text-align: left;"><li>Train PC's to see patterns and see patterns, and look for anomalies.</li><li>Example. predict stock prices by looking at factors that affect stock price.</li><li><b>Anomaly Detection - </b>Detects unusual patterns e.g. CC used in Asia when normally in Europe, but transactions 10 min apart. Therefore likely to be fraudulent. Sort rubbish.</li><li>Predictive models by finding relationships. Give model data and train the model. </li><li>Example: flowers have features/characteristics e.g. colour, size, no petals, ...</li><li>Using data to teach machine</li><li>Supervise ML - need quality data including labels. Avg humidity, hrs sunshine, rainfall, temp, month of year (features), ice creams sold(label/class), so we feed in temp is Regression ML. Patient has features (weight, sex, age, bmi,...) give value btwn 0-1 of the person developing diabetes. is Classification ML</li><li>Unsupervised ML - data is not labelled. Just feature provided, will group into clusters. Pulls data out and figures out it's own criteria is Clustering ML. Useful for fraud detection.</li><li>Training - good data based on a training set and a validation set. Train model, with most data, then check with remaining - allows us to see how close to what happened. Service tries to figure out relationships. Model is used by test data - see how close/useful model is.</li></ul><p></p><p><b>3. Compute Vision </b></p><p></p><ul style="text-align: left;"><li>Self driving cars, sorting. Sort rubbish.</li><li>Facial recognition, object recognition,..</li><li>How do computers see? picture is cut up into pixels, data is pulled and used to find possible ans. </li><li>Some types on Azure: object detection i.e. car, bike, car, bus. Image classification i.e horse, car. Semantic segmentation i.e. Teams blur background. Image analysis contect by bring various tougher. Face detection. OCR - read image and converts to text.</li></ul><p></p><p><b>4. Natural Language Processing</b> (NLP) </p><p></p><ul style="text-align: left;"><li><span> </span>interpret e.g grammerly, spam check, Alexia, </li><li><span> </span>Knowledge Mining - Extract info from knowledge and gain insights e.g. social media marketing.</li></ul><p></p><p><b>Principals:</b></p><p></p><ol style="text-align: left;"><li>Fairness - ensure bias is excluded e.g based on gender.</li><li>Reliable & Safety - need high confidence and in certain systems cannot fail e.g. health systems, autonomous cars.</li><li>Privacy & Security - Ensure data is protected and not giving away sensitive data.</li><li>Inclusiveness - should be fair i.e. VI users</li><li>Transparency - what is the model based on, what could be an issue.</li><li>Accountability - who is liable for AI decisions</li></ol><div><b>Azure:</b></div><div><ol style="text-align: left;"><li>Scalability & Reliability</li><li>AI Resources: sit in an Azure Resource Group</li></ol></div><div><br /></div><div><b>AI Services in Azure:</b></div><div><ol style="text-align: left;"><li>Azure Machine Learning - Developers to train, test and deploy ML models. Within a subscription, create a Azure ML Workspace (consists of: compute, data, jobs, models) can then publish as a service. Azure ML Designer, used for creating ML pipeline, data in to train model. Automated Machine Learning user only needs to provide the data and select the model to use, service figures it out. </li><li>Cognitive Services - vision, speak, language, decision. Rest API endpoints - have already been trained, choose the model. Can deploy multiple parts individually or together.<a href="https://blogger.googleusercontent.com/img/a/AVvXsEh-E5lLAazCtgGDGIG5Gjkk-0KCK7ELlgmNq8GKIip8wXvwiUksSfuVXMYuahMOqAiinoeM1Ojezg0WmkihUba09YB-BXYsGV78PTrBuckG4zUBO6EqJ6K6DTov_p8OAwdYb_ZwJZhcIcY316ByIgACNunGZvhOl7QFRPwjLsXzBxoptQRuw23OG8MZhrs" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img alt="" data-original-height="185" data-original-width="311" src="https://blogger.googleusercontent.com/img/a/AVvXsEh-E5lLAazCtgGDGIG5Gjkk-0KCK7ELlgmNq8GKIip8wXvwiUksSfuVXMYuahMOqAiinoeM1Ojezg0WmkihUba09YB-BXYsGV78PTrBuckG4zUBO6EqJ6K6DTov_p8OAwdYb_ZwJZhcIcY316ByIgACNunGZvhOl7QFRPwjLsXzBxoptQRuw23OG8MZhrs=s16000" /></a></li></ol><div><br /></div><span> </span>3. Azure Bot Service - develop & managing intelligent bots like chat-bots<br /><span> </span>4. Azure Cognitive Search - Data extraction, & enrichment for indexing. Makes data searchable.</div><div><br /></div><div>Anomaly detector resource - wizard to setup - Add Keys and endpoints to allow access.</div><div><br /></div><div><b>Create a new Azure Machine Learning Service</b>, will create a Workspace. Use multiple azure services such as key-vault, AI, storage accounts. </div><div><ul style="text-align: left;"><li>Launch Studio</li><li>Add Compute Cluster</li><li>Add Data (csv, spreadsheets, nearly any form,...)</li><li>AutomateML (figure it out without me) and run job</li><li>Will show trends</li><li>Deploy the model (i.e. to a web service)</li><li>Shows "Endpoints" - get url and a test rig.</li></ul></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4001838553487258943.post-87292076096502231002023-09-08T21:13:00.036+01:002023-09-13T11:36:19.435+01:00Notes for running Agile Power Platform Projects including DevOps<p><b>Overview</b>: General overview notes on setting up Power Platform projects/programs. Before I get into the mechanics, my overriding goal is to have high functioning teams, and be a member of high functioning teams. "<i><span style="color: #999999;">Create an environment where team members can do there best work</span></i>". for instance, I visit and work with a lot of businesses and I many teams that are in an "Artificial Harmony" state (pretend all is well with the world). Everyone says it's wonderful but it's a snake-pit with relationships and fear. Teams members need to be happy, open to conversations, accept risk and aware mistakes are going to happen. Basically, these teams need to be identified and trust build, this often involves an adjustment to a particular mid-level manager. The worst offenders tend to be offshore teams, and there are amazing teams and people so this definitely is a generalization. The teams tend to be hierarchical as opposed to flat or matrix. it's terrible for software projects. Look out for Technical leads, ISV Project managers, Deliver Leads, they can breed the wrong tone/attitude across multiple team members and teams. Check out Amy Edmondson's book the Right kind of wrong: the Science of failing well. Anyway, rant over. </p><p>Learn from mistakes, simple mistakes, remove them ASAP, strategically think automation, if we learn mistakes ensure they don't happen on the next project or sooner. Encourage transparency, and open communication.</p><p><br /></p><p>Here are my notes for setting up ADO and guidance for Agile PP projects....</p><p><b>Agile Artifact Hierarchy:</b></p><p>Epics > User Stories (max 5 days work) > Tasks </p><p><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> </span><span> > Bugs</span></p><p><span>Epics > Spike</span></p><p><b>Guide</b>:</p><p></p><ul style="text-align: left;"><li>User Stories mush be written in the format: <span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; font-size: 13.2px;">As the <</span><em style="background-color: white; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;">role></em><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; font-size: 13.2px;"> </span><em style="background-color: white; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"><role>,</role></em><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; font-size: 13.2px;"> I want to <</span><em style="background-color: white; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;">feature></em><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; font-size: 13.2px;"> so that <</span><em style="background-color: white; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;">benefit></em><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; font-size: 13.2px;">.</span><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; font-size: 13.2px;">, and have 1 to many </span><a href="https://www.pbeck.co.uk/2012/09/scrum-for-sharepoint-part-2.html" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" target="_blank">Acceptance Criteria using Gherkin</a><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; font-size: 13.2px;"> </span></li><li>Ability to add a release note to User Story, Spike, Task or Bug.</li><li>Automate pipelines from unmanaged to UAT Managed.</li><li>Min three env (Dev-unmanaged), and UAT/Prod-both managed), use ADO pipelines or Power platform pipelines</li><li>Adding annotated images is great for improved communication. Recorded voice narrated mp4 walk thrus are also great for proofs, and explaining issues.</li><li>US, bug, Task, Spike artifact items, each has a Release note tab. So if a User Story needs more than 1 solution package changed, use child tasks and add the release notes to the User Story.</li></ul><p></p><p><b>Flow of bugs and User Stories:</b></p><p></p><ol style="text-align: left;"><li>New (Anyone)</li><li>Approved (Product Owner (PO)) </li><li>Ready - (PO)</li><li>Committed - (Team Member/dev)</li><li>Dev - In Progress (dev)</li><li>Dev - Complete (dev)</li><li>Dev - Show QA (dev & QA)</li><li>UAT - Ready to Deploy in UAT (dev)</li><li>UAT - Deployed Ready for Testing (QA)</li><li>UAT - In Tested Manaual (QA & PO)</li><li>UAT - Complete Ready for Deployment to Prd (QA)</li><li>PRD - Deployed</li><li>PRD - Sanity Check (can include automate smoke testing)</li><li>PRD - Done</li></ol><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQtkzMu74gyE1idBJTGghyygthGrFwLxRqOwTSxPt-A17TZNP8VFDJbPsR0YioJa7-ElLeEYsl9_ilzSYSEFMPDJpQVS3kDa8QGof-4gjVlmre4r196CvmpBhO5iMXi0zmvvx91vy3ZMc6Tvem82PkjECQCPZcTXkvnZNfz68iDBnVC0THyVFsBpk1SJ0/s285/StatusNotes.PNG" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="179" data-original-width="285" height="179" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQtkzMu74gyE1idBJTGghyygthGrFwLxRqOwTSxPt-A17TZNP8VFDJbPsR0YioJa7-ElLeEYsl9_ilzSYSEFMPDJpQVS3kDa8QGof-4gjVlmre4r196CvmpBhO5iMXi0zmvvx91vy3ZMc6Tvem82PkjECQCPZcTXkvnZNfz68iDBnVC0THyVFsBpk1SJ0/s1600/StatusNotes.PNG" width="285" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Example Status's</td></tr></tbody></table><div><b>Other states:</b></div><p></p><ul style="text-align: left;"><li>Removed</li><li>Duplicate</li><li>Not Applicable</li></ul><p><b>Release Notes</b> for Power Platform packages need to include the following fields in ADO against artefacts:</p><p></p><ol style="text-align: left;"><li>Package Name (dropdownlist), </li><li>Current Package Version, </li><li>New Package Version (Default TBC), </li><li>Change Note, </li><li>Deployed Status (dropdown list: NA, UAT, PRD), </li><li>Pre deployment steps, </li><li>Post Deployment steps</li></ol><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh94n7S4aVxIoyrDYv70m5EYhHazff8gt2KtXN0FNNm7AmxVt6zBbtISqYLYYKJHwqGNebya7NuFcqBcDJhEn4qT3OE_pC4IY08_WcZA2L4wmh6L9kkTPi1njOIEYapcxB936Pz8Q3wzxBDjV-1NAaRexnzfKuNd8bSoW5L0c1t10BVYMJ_QXK0ijvWd-o/s679/ReleaseNotes.PNG" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="291" data-original-width="679" height="274" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh94n7S4aVxIoyrDYv70m5EYhHazff8gt2KtXN0FNNm7AmxVt6zBbtISqYLYYKJHwqGNebya7NuFcqBcDJhEn4qT3OE_pC4IY08_WcZA2L4wmh6L9kkTPi1njOIEYapcxB936Pz8Q3wzxBDjV-1NAaRexnzfKuNd8bSoW5L0c1t10BVYMJ_QXK0ijvWd-o/w640-h274/ReleaseNotes.PNG" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Example of ADO Release Notes assigned against tasks, bugs, and user stories.</td></tr></tbody></table><p></p><p><b>Quick fixes/urgent bugs/Emergency changes:</b></p><p></p><ul style="text-align: left;"><li>Try make release cycles as short as possible, and only do emergency changes if absolutely required.</li><li>Take a snapshot copy of dev/label, for each proposed production deployment - unmanaged env - part of ADO pipeline, this allows us to build Dev, and UAT env for the specific emergency change.</li><li>Take a snapshot of UAT - managed env - part of ADO pipeline</li><li>Deploy to PRD from Emergency UAT.</li><li>Developer integrates emergency change into Dev from the Dev Copy. And follows the full path.</li></ul><div><b>Team/Teams:</b></div><div><ul style="text-align: left;"><li>Try keep teams as small as possible. I prefer 1 team to multiple scrum teams unless their is a clear distinction/break.</li><li>Product Owner (PO) needs to be available all the time and answer immediately. To me they act as the business and the traditional BA role, and are responsible for the product backlog.</li><li>Scrum masters. Your job is to ensure the team members are happy and confident to take risks and work, Scrum ceremonies are merely a way to help out.</li><li>Team members are mainly pro and citizen developers, if I use dedicated QA testers in the scrum team, they need to be responsible for the AC with the PO. They tend to be analyst/developers.</li><li>Automate, automate, automate. there are fantastic tools including low code test tools, use them. Ensure you have automate smoke tests, regression tests, and performance tests for each DTAP env.</li><li>Have short coding standards and naming conventions, error handling patterns and enforce them, have a defined ADO process, have a pipeline for deployments, automate tests and continuously update. Have a Monitoring strategy i.e. Azure Monitor, log via AppInsights on a Log Analytics workspace. Each env logs to it's own Azure Log Analytics. Does each Log analytics belong to their own workspace? I pref Non-prod, and prod workspaces. </li><li>Teams/Slack, okay just Microsoft Teams, remote work make happier team members and gives people more time, use it. But encourage camera to be on, email is not a defence (ever), people must IM/chat/ping and call each other. </li><li>Encourage meeting up, join with social inclusive events at once a month to once a week. Encourage people to work together online including peer programming. </li></ul></div><p></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4001838553487258943.post-17140139984895420032023-09-07T20:59:00.003+01:002023-09-12T12:24:32.322+01:00Extend Power Automate Logging<p></p><ol style="text-align: left;"><li>Power Automate has a Connector to query other Power Automate environments to list, update flows,...</li><li>PowerShell to examine Flow/Power automate</li></ol><p></p><p><span class="ui-provider eo bpd bln caw cax cay caz cba cbb cbc cbd cbe cbf cbg cbh cbi cbj cbk cbl cbm cbn cbo cbp cbq cbr cbs cbt cbu cbv cbw cbx cby cbz cca ccb" dir="ltr"><a aria-label="Link https://www.cloudsecuritea.com/2019/09/generate-an-overview-of-all-microsoft-flows-with-powershell/" class="fui-Link ___1eya986 f3rmtva f1ewtqcl fyind8e f1k6fduh f1w7gpdv fk6fouc fjoy568 figsok6 f1hu3pq6 f11qmguv f19f4twv f1tyq0we f1g0x7ka fhxju0i f1qch9an f1cnd47f fqv5qza f1vmzxwi f1o700av f13mvf36 f1cmlufx f9n3di6 f1ids18y f1tx3yz7 f1deo86v f1eh06m1 f1iescvh fhgqx19 f1olyrje f1p93eir f1nev41a f1h8hb77 f1x7u7e9 f10aw75t fsle3fq f17ae5zn" href="https://www.cloudsecuritea.com/2019/09/generate-an-overview-of-all-microsoft-flows-with-powershell/" rel="noreferrer noopener" style="overflow-wrap: break-word;" target="_blank" title="https://www.cloudsecuritea.com/2019/09/generate-an-overview-of-all-microsoft-flows-with-powershell/">https://www.cloudsecuritea.com/2019/09/generate-an-overview-of-all-microsoft-flows-with-powershell/</a></span></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHhNmmewKzCMOxdq4Ozl2aPLJPqXQBBxVvVGtSyxW2ZksHLCVwCUy316D8F3xEfqH_Qcsam5S6JcpbCKx4g5WgpJhi7qznSW1n1kPIMtIKDeHkeoZHnYe9rsO3ME_yMqo_DSxvz5Ug91PIEutQZDIkYHQUCDrxOMj4cONWfiX_o01ETVA7IQpeQC9mvck/s974/BearerTokenUsingCredentialFlowAAD.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="473" data-original-width="974" height="155" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHhNmmewKzCMOxdq4Ozl2aPLJPqXQBBxVvVGtSyxW2ZksHLCVwCUy316D8F3xEfqH_Qcsam5S6JcpbCKx4g5WgpJhi7qznSW1n1kPIMtIKDeHkeoZHnYe9rsO3ME_yMqo_DSxvz5Ug91PIEutQZDIkYHQUCDrxOMj4cONWfiX_o01ETVA7IQpeQC9mvck/s320/BearerTokenUsingCredentialFlowAAD.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Use postman to Interact with an API - get the bearer token first.</td></tr></tbody></table>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4001838553487258943.post-716115764727469902023-09-06T13:09:00.012+01:002023-09-28T11:48:18.051+01:00App Insights for Power Platform - Part 11 - Custom Connector<p><b>Overview</b>: Power Automate can set retry policies on custom connectors, Canvas apps using a Custom Connector, does not have any retry configuration. FYI is the Custom Connector gets a 5.x.x error it shall retry 4 times. Proven using 500 and 502 errors. 408 (timeout) and 429 (to busy) errors appear to throw 4 times (retry driven by canvas app; using the Custom Connector trigger shall only try once). </p><p><b>My example:</b> My Canvas app uses a custom connector, that calls my Azure Function, in turn this calls my APIM, and APIM calls the 3rd party.<br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi79C6ubYpnUEjGYq5NKXPSi7Yp6IybbD0cBomfQ9_FGRLOKDJxwrKW0jwVj_-awIuDY16pzB0D7ApILlI-4DIiA_LVmBsnnQmXpb4wFX2KUlwgX1I-iiiL3QtBXajTT3b_faYxxxBnU4DbmzLObLX85KqPH6L6bFbLaCosbNDdHGHtizJIa4rfVvOxc3Y/s1015/CustomConnectBehabiourCanvasApps.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="439" data-original-width="1015" height="276" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi79C6ubYpnUEjGYq5NKXPSi7Yp6IybbD0cBomfQ9_FGRLOKDJxwrKW0jwVj_-awIuDY16pzB0D7ApILlI-4DIiA_LVmBsnnQmXpb4wFX2KUlwgX1I-iiiL3QtBXajTT3b_faYxxxBnU4DbmzLObLX85KqPH6L6bFbLaCosbNDdHGHtizJIa4rfVvOxc3Y/w640-h276/CustomConnectBehabiourCanvasApps.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">My Azure function returns a 500 or 502 or 408 (response timeout) or 429 if the response has not been received in 10 seconds, and I push the http code back to the Custom connector. I can see the response from the 3rd party is taking +-35 seconds. I can see from network traces 4 invoked calls that all fail with 408 http response codes.</div><div class="separator" style="clear: both; text-align: left;"><b><br /></b></div><div class="separator" style="clear: both; text-align: left;"><b>Result</b>: The custom connector retries 4 times resulting in my Power App being locked for 40+ seconds.</div><p></p><p><b>Possible remediation</b>: </p><p>1. Return a 418 HTTP response code (I am a teapot), my app calls the function using the custom connector once. So using 418 (also tested with 400 - but 400 is not the right response) errors behaves differently from the 5xx, 408, 429 errors from the API. </p><p><i>Note</i>: Originally I was caught out as I trigger using the custom connector test rig, this only tries once. But when called from Power Apps, it shall try four times. Returning 408 is not a fix. Returning 418 ensures I only try once, get a better user experience and now I have 418 logs that I add error details to.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGreFMciFF-fo3Q5uhJiRTFwvHaNgVricCz9bfHf2ZG6borbfTHolWdYOf1OpdIm8T1zoCjtgXkeEX1hMekdFeOqYRE1ZtqVmkXw0SEvLvA-5RCJyH-NOPb1UrybJ4TWOBk9k_ye1hHwrxHGvghLGhvBYneoem-KZmjY6d9S0KvBhAnrfU6ce3xF0E3S8/s1537/xhr-repeated.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="384" data-original-width="1537" height="160" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGreFMciFF-fo3Q5uhJiRTFwvHaNgVricCz9bfHf2ZG6borbfTHolWdYOf1OpdIm8T1zoCjtgXkeEX1hMekdFeOqYRE1ZtqVmkXw0SEvLvA-5RCJyH-NOPb1UrybJ4TWOBk9k_ye1hHwrxHGvghLGhvBYneoem-KZmjY6d9S0KvBhAnrfU6ce3xF0E3S8/w640-h160/xhr-repeated.PNG" width="640" /></a></div><p>2. 3rd party API should not take 35 seconds, improve it. </p><p>3. I could set my timeout on the specific function to 40 seconds, however if the call starts going to 41 seconds, my canvas app will be locked for over 160 seconds. </p><p>4. Go to all API's and if they are fast set the timeout as short as possible so the app does not get locked out while waiting for the 4 responses.</p><p><b>Summary</b>: Examine the 3rd party API's, get them stable and performant and per the agreed SLA's. If you only want to try once ensure that time outs on the 3rd arty are set to the SLA or if you intercept the request, you can choose the timeout, by examining the API's you can see the optimum time to avoid timeouts and using the 418 response code, the call only happens once.</p><p><b>Series</b></p><p><a href="https://www.pbeck.co.uk/2023/06/app-insights-for-power-platform-part-1.html">App Insights for Power Platform - Part 1 - Series Overview </a></p><p><a href="https://www.pbeck.co.uk/2023/06/app-insights-for-power-platform-part-2.html">App Insights for Power Platform - Part 2 - App Insights and Azure Log Analytics</a> </p><p><a href="https://www.pbeck.co.uk/2023/08/app-insights-for-power-platform-part-3.html">App Insights for Power Platform - Part 3 - Canvas App Logging (Instrumentation key)</a></p><p>App Insights for Power Platform - Part 4 - Model App Logging</p><p><a href="My Technical Working Notes for Microsoft Technology: App Insights for Power Platform - Part 5 - Logging for APIM (pbeck.co.uk)">App Insights for Power Platform - Part 5 - Logging for APIM </a></p><p><a href="https://www.pbeck.co.uk/2023/06/app-insights-for-power-platform-part-6.html">App Insights for Power Platform - Part 6 - Power Automate Logging</a></p><p><span style="font-family: inherit;"><a href="https://www.pbeck.co.uk/2023/06/app-insights-for-power-platform-part-7.html">App Insights for Power Platform - Part 7 - Monitoring Azure Dashboards</a><span style="background-color: white;"> </span></span></p><p><span><span style="background-color: white;"><a href="https://www.pbeck.co.uk/2023/06/app-insights-for-power-platform-part-8.html">App Insights for Power Platform - Part 8 - Verify logging is going to the correct Log analytics</a></span></span></p><p><span><a href="https://www.pbeck.co.uk/2023/08/app-insights-for-power-platform-part-9.html">App Insights for Power Platform - Part 9 - Power Automate Licencing</a></span></p><p><a href="https://www.pbeck.co.uk/2023/08/custom-connector-logging-thoughts.html" target="_blank">App Insights for Power Platform - Part 10 - Custom Connector enable logging</a></p><p><a href="https://www.pbeck.co.uk/2023/09/app-insights-for-power-platform-part-11.html" target="_blank">App Insights for Power Platform - Part 11 - Custom Connector Behaviour from Canvas Apps Concern</a> (this post)<br /><br /></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4001838553487258943.post-59468638804779073392023-08-28T21:25:00.009+01:002023-09-26T09:01:08.630+01:00App Insights for Power Platform - Part 10 - Custom Connector Logging Thoughts<p><b>Overview</b>: One of our developers was asking about a log he was struggling to trace, and it took me awhile and a lot of help from the community to truly understand the issue. My scenario is shown below:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhur1MfIX8bklsTJVdtsAGukJwY7ZIKBOoQsqIp3tfMCAAp6BMvLojm9sae53AQ8nrV18bH7ZvAeN_JNVas7vo2Gyzbh8-PDCUIiTS-p4xmmkBx8qHhPi2uf8ugksmhc3kGFxaqU7kBfF2GO98W08QtfSAouYl3sgpMYsWpYzSv9b9Y1aAMpS2L2vPZFec/s1002/CustomConnecgtorLogging.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="305" data-original-width="1002" height="194" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhur1MfIX8bklsTJVdtsAGukJwY7ZIKBOoQsqIp3tfMCAAp6BMvLojm9sae53AQ8nrV18bH7ZvAeN_JNVas7vo2Gyzbh8-PDCUIiTS-p4xmmkBx8qHhPi2uf8ugksmhc3kGFxaqU7kBfF2GO98W08QtfSAouYl3sgpMYsWpYzSv9b9Y1aAMpS2L2vPZFec/w640-h194/CustomConnecgtorLogging.png" width="640" /></a></div><br /><p><b>Scenario</b>: I have a Dataverse change triggering a flow, the flow calls a Custom Connector, that in turn calls an Azure Function (that I control). So the flow fails, and I have used a pattern in the flow to catch the error and log it into Log Analytics. All good, then I don't see the event where the action calls the function, my function has logging enabled. I can see I am getting a 401 unauthorized error. </p><p><b>Initial Hypothesis:</b> The Power Platform use APIM internally to implement Custom Connectors, and there is no access for clients/tenants to see the internal logging/traffic. Microsoft have provide the ability to use iLogger on the custom connector to log the traffic. </p><p>We have flows that intermittently get a 401, when the flow is manually rerun, the flow works and I can see the traffic coming into the Function.</p><p>The failure rate is extremely low and retries almost always fix the issue, and a third try always ensures the transaction goes thru.</p><p><b>Resolution</b>: Add logging to the custom connector so we can speak with MS support about the issue. Add alerting to notify support, they can contact the user or chose to rerun the flow. </p><p><b>Alternative</b>: If I enable the code, I can override the behaviour and inject C# code to work with the backend, or handle logic such as replacing text,... </p><p>1. In step "4. Code" tab of the custom connector, add the code below:</p><p></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgAbWj5trWApK7jJNo6UZ6979ipVFTeWK3HJb9lbKXn4EsI3G5BtRPrPS4jyOFIxohWtabvv4GeE_tktGOwV5zRo1tNuNNOtFL13R0TQig_mqAftvuNkUjDDYhRq-IdncISL7OQhZh8hn8gpJjQiQ5TM6OsWQDDJVI5ZVfURIvVn9_a2hrVFNMACiDB2io" style="margin-left: auto; margin-right: auto;"><img alt="" data-original-height="929" data-original-width="1636" height="364" src="https://blogger.googleusercontent.com/img/a/AVvXsEgAbWj5trWApK7jJNo6UZ6979ipVFTeWK3HJb9lbKXn4EsI3G5BtRPrPS4jyOFIxohWtabvv4GeE_tktGOwV5zRo1tNuNNOtFL13R0TQig_mqAftvuNkUjDDYhRq-IdncISL7OQhZh8hn8gpJjQiQ5TM6OsWQDDJVI5ZVfURIvVn9_a2hrVFNMACiDB2io=w640-h364" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">You can do any C# logic, I'm sending the original request thru and if it doesn't return me a 200, I'm logging it as critical. </td></tr></tbody></table><p></p><p>2. Update the connector, go to the next step "5. Test" > "Update Connector" (Tip: follow the steps)</p><p>3. Run the "Test operation", open the Response and validate the response body is correct, then open the "Code logs" tab. If it is blank, re-run the "Update Connector" (irritating but true). </p><p></p><div class="separator" style="clear: both; text-align: center;"><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjaEvncPkKXVH3cNzJJjVyB2WlfAkhTwRDKptN81OhKBeN5M_iyX0dX-TxiSgIR5UdBCnwnL7uyWs94crjAzfJs1Cn-fnq18aM83CPTx9GUDFvkNSRdywwUEOB2tTQUsidjeF6j-y2IjiTSywGIIkZg5H4AlSmdyl5IXtGElndkrWSCJC5huhU93Uacrik" style="margin-left: auto; margin-right: auto;"><img alt="" data-original-height="720" data-original-width="1548" height="298" src="https://blogger.googleusercontent.com/img/a/AVvXsEjaEvncPkKXVH3cNzJJjVyB2WlfAkhTwRDKptN81OhKBeN5M_iyX0dX-TxiSgIR5UdBCnwnL7uyWs94crjAzfJs1Cn-fnq18aM83CPTx9GUDFvkNSRdywwUEOB2tTQUsidjeF6j-y2IjiTSywGIIkZg5H4AlSmdyl5IXtGElndkrWSCJC5huhU93Uacrik=w640-h298" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">304 return from the API, which is cached and not a problem, but 400, 500 would be an issue, could also look out for 429s.</td></tr></tbody></table><br /></div><b>Full C# Code</b>:<p></p><p></p><blockquote><p></p><blockquote><p><span style="font-family: courier; font-size: x-small;">public class Script : ScriptBase</span></p><p><span style="font-family: courier; font-size: x-small;">{</span></p><p><span style="font-family: courier; font-size: x-small;"> public override async Task<HttpResponseMessage> ExecuteAsync()</span></p><p><span style="font-family: courier; font-size: x-small;"> { </span></p><p><span style="font-family: courier; font-size: x-small;"> this.Context.Request.Method = HttpMethod.Get;</span></p><p><span style="font-family: courier; font-size: x-small;"> HttpResponseMessage response = await this.Context.SendAsync(this.Context.Request, this.CancellationToken).ConfigureAwait(continueOnCapturedContext: false);</span></p><p><span style="font-family: courier; font-size: x-small;"> Context.Logger.LogTrace("Custom Connector ListBooks called "); </span></p><p><span style="font-family: courier; font-size: x-small;"> if (response.StatusCode == HttpStatusCode.OK)</span></p><p><span style="font-family: courier; font-size: x-small;"> { Context.Logger.LogTrace("Success"); } </span></p><p><span style="font-family: courier; font-size: x-small;"> { Context.Logger.LogCritical("Critical | " + response); }</span></p><p><span style="font-family: courier; font-size: x-small;"> return response;</span></p><p><span style="font-family: courier; font-size: x-small;"> }</span></p><p><span style="font-family: courier; font-size: x-small;">}</span></p></blockquote></blockquote><p><b>More Info:</b></p><p><a href="https://learn.microsoft.com/en-us/connectors/custom-connectors/write-code">https://learn.microsoft.com/en-us/connectors/custom-connectors/write-code</a> (NB)</p><p><a href="https://never-stop-learning.de/logging-in-custom-connector-code/">https://never-stop-learning.de/logging-in-custom-connector-code/</a> (NB) The 2nd part of this post on the Alternative , is a rehash of this amazing post - I amended the logic and now I'm wondering is I could write to App Insights using the SDK?</p><p><b>Series</b></p><p><a href="https://www.pbeck.co.uk/2023/06/app-insights-for-power-platform-part-1.html">App Insights for Power Platform - Part 1 - Series Overview </a></p><p><a href="https://www.pbeck.co.uk/2023/06/app-insights-for-power-platform-part-2.html">App Insights for Power Platform - Part 2 - App Insights and Azure Log Analytics</a> </p><p><a href="https://www.pbeck.co.uk/2023/08/app-insights-for-power-platform-part-3.html">App Insights for Power Platform - Part 3 - Canvas App Logging (Instrumentation key)</a></p><p>App Insights for Power Platform - Part 4 - Model App Logging</p><p><a href="My Technical Working Notes for Microsoft Technology: App Insights for Power Platform - Part 5 - Logging for APIM (pbeck.co.uk)">App Insights for Power Platform - Part 5 - Logging for APIM </a></p><p><a href="https://www.pbeck.co.uk/2023/06/app-insights-for-power-platform-part-6.html">App Insights for Power Platform - Part 6 - Power Automate Logging</a></p><p><span style="font-family: inherit;"><a href="https://www.pbeck.co.uk/2023/06/app-insights-for-power-platform-part-7.html">App Insights for Power Platform - Part 7 - Monitoring Azure Dashboards</a><span style="background-color: white;"> </span></span></p><p><span><span style="background-color: white;"><a href="https://www.pbeck.co.uk/2023/06/app-insights-for-power-platform-part-8.html">App Insights for Power Platform - Part 8 - Verify logging is going to the correct Log analytics</a></span></span></p><p><span><a href="https://www.pbeck.co.uk/2023/08/app-insights-for-power-platform-part-9.html">App Insights for Power Platform - Part 9 - Power Automate Licencing</a></span></p><p><a href="https://www.pbeck.co.uk/2023/08/custom-connector-logging-thoughts.html" target="_blank">App Insights for Power Platform - Part 10 - Custom Connector enable logging</a> (this post)</p><p><a href="https://www.pbeck.co.uk/2023/09/app-insights-for-power-platform-part-11.html" target="_blank">App Insights for Power Platform - Part 11 - Custom Connector Behaviour from Canvas Apps Concern</a></p><p><br /></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4001838553487258943.post-2592600969821395492023-08-20T11:59:00.003+01:002023-09-01T12:33:54.102+01:00Common Scrum Team improvements<p> <span style="color: red;"><b>WIP</b></span></p><p><b>Problem</b>: Bugs must not change scope - common to see a bug and it morphs into improvements, other changes. </p><p><b>Fix</b>: Raise new bug. Don't keep amending and adding new features.</p><p><b>Problem</b>: Team testers/automation testers do not understand the requirement. Cause by the User Story (US) or bug being ambiguous and Acceptance Criteria (AC)</p><p><b>Fix</b>: Ensure User Stories are in a standard format i.e. "As a <>, I want to <>, so that <>.". Ensure Gherkin is used for AC (Scenario, Given, When, Then, and preferably more than 1 AC per user story. Could have: Annotate diagrams to clearly convey artefact information. Also a narrated recording for bugs. This could be the person recording the bug, the person that fixed the bug as proof to increase understanding. </p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4001838553487258943.post-50314969538100878852023-08-13T06:59:00.008+01:002024-01-11T10:37:16.553+00:00App Insights for Power Platform - Part 9 - Power Automate Licencing<p><b>Overview</b>: Licencing is extremely complicated, but there are threshold limits that are being reduced at the moment, August 2023. </p><p>O365 users get get the lowest priority profile, can only run the standard connectors, and have a "request" limit of 6,000 requests per day.</p><p><b>What is a Request?</b></p><p>Each flow consists of a combination of triggers, actions, and responses when cloud flow is run, the instance walks thru the actions such as Create a SharePoint list item, setting variables, </p><p><a href="https://learn.microsoft.com/en-gb/power-platform/admin/power-automate-licensing/types#power-platform-requests" target="_blank">What counts as a Power Platform Request</a></p><p style="background-color: white; box-sizing: inherit; color: #161616; font-family: "Segoe UI", SegoeUI, "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 16px; margin: 1rem 0px 0px; outline-color: inherit; overflow-wrap: break-word; padding: 0px;">"Here are some guidelines to estimate the request usage of a flow.</p><ul style="background-color: white; box-sizing: inherit; color: #161616; font-family: "Segoe UI", SegoeUI, "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 16px; list-style: none; margin: 16px 0px 16px 38px; outline-color: inherit; padding: 0px;"><li style="box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding: 0px;"><p style="box-sizing: inherit; margin: 1rem 0px 0px; outline-color: inherit; overflow-wrap: break-word; padding: 0px;">One or more actions run as part of a flow run. A simple flow with one trigger and one action results in two "actions" each time the flow runs, consuming 2 requests.</p></li><li style="box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding: 0px;"><p style="box-sizing: inherit; margin: 1rem 0px 0px; outline-color: inherit; overflow-wrap: break-word; padding: 0px;">Power Automate Flows, by default, run in the context of the Flow Owner. The "actions" are worked out against the Flow Owner.</p></li></ul><span style="background-color: white; color: #161616; font-family: "Segoe UI", SegoeUI, "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 16px;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhegxeo2CrST500P8jiGq1yKroq00ZSWO5S-Pf_3-9cZYUyUXawj7bPwPt0lKpy8OBAvO0OR53QPaTqVJkuLYYWFW-1n4Ea0d0rGSAbWd9qI0-2iNKC41Un7ZgmIHK1lEPFUsdFvJS1u3OjgxNHyiPyTJv5SzGoc5F0bhksBOfKWn0TpfxXs8hZdMbDLfM/s877/PowerAutomateLimits.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="225" data-original-width="877" height="165" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhegxeo2CrST500P8jiGq1yKroq00ZSWO5S-Pf_3-9cZYUyUXawj7bPwPt0lKpy8OBAvO0OR53QPaTqVJkuLYYWFW-1n4Ea0d0rGSAbWd9qI0-2iNKC41Un7ZgmIHK1lEPFUsdFvJS1u3OjgxNHyiPyTJv5SzGoc5F0bhksBOfKWn0TpfxXs8hZdMbDLfM/w640-h165/PowerAutomateLimits.png" width="640" /></a></div></span><ul style="background-color: white; box-sizing: inherit; color: #161616; font-family: "Segoe UI", SegoeUI, "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 16px; list-style: none; margin: 16px 0px 16px 38px; outline-color: inherit; padding: 0px;"><li style="box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding: 0px;"><p style="box-sizing: inherit; margin: 1rem 0px 0px; outline-color: inherit; overflow-wrap: break-word; padding: 0px;">Every trigger/action in the flow generates Power Platform requests. All kinds of actions like connector actions, HTTP actions, built-in actions (from initializing variables, creating scopes to a simple compose action) generate Power Platform requests. For example, a flow that connects SharePoint, Exchange, Twitter, and Dataverse, all those actions are counted towards Power Platform request limits.</p></li><li style="box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding: 0px;"><p style="box-sizing: inherit; margin: 1rem 0px 0px; outline-color: inherit; overflow-wrap: break-word; padding: 0px;">Both succeeded and failed actions count towards these limits. Skipped actions aren't counted towards these limits.</p></li><li style="box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding: 0px;"><p style="box-sizing: inherit; margin: 1rem 0px 0px; outline-color: inherit; overflow-wrap: break-word; padding: 0px;">Each action generates one request. If the action is in an apply to each loop, it generates more Power Platform requests as the loop executes.</p></li><li style="box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding: 0px;"><p style="box-sizing: inherit; margin: 1rem 0px 0px; outline-color: inherit; overflow-wrap: break-word; padding: 0px;">An action can have multiple expressions but it's counted as one API request.</p></li><li style="box-sizing: inherit; list-style: disc; margin: 0px; outline-color: inherit; outline-style: initial; outline-width: 0px; padding: 0px;"><p style="box-sizing: inherit; margin: 1rem 0px 0px; outline-color: inherit; overflow-wrap: break-word; padding: 0px;">Retries and additional requests from pagination count as action executions as well."</p></li></ul><p>Here are my thoughts which seem to differ from the MS notes provide above: Not all Actions count as a request, If i look at the Power Automate Analytics it gives me a break down on the API calls to understand the "Request" counting. Basically any action that does an API call when run adds to the request count. </p><p><b>Guide for planning for limitations:</b></p><p></p><ul style="text-align: left;"><li>O365 users get 6k request per days</li><li>Dynamics and most per user plans get 40k requests per day.</li><li>As a rough guide, I count simple workflows as 3 requests average, medium as 7 requests, large can be over 100 so it is better to build the workflow and from the analytics you can get the number of requests per day.</li><li>For each flow multiply by the estimated number of calls</li><li>Understand who the quest is attributed to (either the user or the owner of the flow, the requests are counted against the flow owner unless the flow use a pay per flow model.)</li></ul><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3Q6q_4JFMDKhcRn4KRw5RTg_uospRa5VN-uUNmJZ5lUiuB8ovs2KGO9fOk_24V_Aztvblt6-AKb2hewxyY7iuTInBUApPwNatWVKw-v_zAfwdiyGdL-NdEay_oK38CIlzhBqRmMAiFBK4aaCPGQfhXv25jXEomSyzKsg_vo-biHLEiy4N2UdFtAUal14/s944/PowerAutomateLimits.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="509" data-original-width="944" height="346" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3Q6q_4JFMDKhcRn4KRw5RTg_uospRa5VN-uUNmJZ5lUiuB8ovs2KGO9fOk_24V_Aztvblt6-AKb2hewxyY7iuTInBUApPwNatWVKw-v_zAfwdiyGdL-NdEay_oK38CIlzhBqRmMAiFBK4aaCPGQfhXv25jXEomSyzKsg_vo-biHLEiy4N2UdFtAUal14/w640-h346/PowerAutomateLimits.png" width="640" /></a></div><br /><div><br /></div><div><b>Example: to calculate billable actions/billable requests</b></div><div><br /></div><div>I have a single Flow running against my O365, the flows has a Power Apps trigger, then creates a new list item and lastly responds to Power Apps.</div><div><br /></div><div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQXp93fFAM6PNt4Yhj_MQfnDcM0lWYhMfzZU-K6wx2Ubn3qPG4x43eRx-xgtfi_R6OAxDp1qHJbgDvny42fwAXgMjQA17jT93Dq4OIWera3TBBK0wb-OaLdAWNqB6eX4mm2vY9tmsrXNT6fouyAUbtAE5TC2vBVbMffRUAt2aMRQwCguVQo_PtM5zK0uo/s1325/billableActions.PNG" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1111" data-original-width="1325" height="536" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQXp93fFAM6PNt4Yhj_MQfnDcM0lWYhMfzZU-K6wx2Ubn3qPG4x43eRx-xgtfi_R6OAxDp1qHJbgDvny42fwAXgMjQA17jT93Dq4OIWera3TBBK0wb-OaLdAWNqB6eX4mm2vY9tmsrXNT6fouyAUbtAE5TC2vBVbMffRUAt2aMRQwCguVQo_PtM5zK0uo/w640-h536/billableActions.PNG" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">1 Cloud flows that has 3 billable actions run 5 times will result in 15 billable actions.</td></tr></tbody></table><br /></div><div>I have 6k per 24 hrs on an O365 licence, most of the other licences such as Power Automate premium, an account has 40k requests per 24 hours.</div><div>I could run the flow 1,200 times in 24 hrs under an O365 licence.<br /><span style="color: red;"><br /></span></div><div><b>Series</b></div><div><p><a href="https://www.pbeck.co.uk/2023/06/app-insights-for-power-platform-part-1.html">App Insights for Power Platform - Part 1 - Series Overview </a></p><p><a href="https://www.pbeck.co.uk/2023/06/app-insights-for-power-platform-part-2.html">App Insights for Power Platform - Part 2 - App Insights and Azure Log Analytics</a> </p><p><a href="https://www.pbeck.co.uk/2023/08/app-insights-for-power-platform-part-3.html">App Insights for Power Platform - Part 3 - Canvas App Logging (Instrumentation key)</a></p><p>App Insights for Power Platform - Part 4 - Model App Logging</p><p><a href="My Technical Working Notes for Microsoft Technology: App Insights for Power Platform - Part 5 - Logging for APIM (pbeck.co.uk)">App Insights for Power Platform - Part 5 - Logging for APIM </a></p><p><a href="https://www.pbeck.co.uk/2023/06/app-insights-for-power-platform-part-6.html">App Insights for Power Platform - Part 6 - Power Automate Logging</a></p><p><span style="font-family: inherit;"><a href="https://www.pbeck.co.uk/2023/06/app-insights-for-power-platform-part-7.html">App Insights for Power Platform - Part 7 - Monitoring Azure Dashboards</a><span style="background-color: white;"> </span></span></p><p><span><span style="background-color: white;"><a href="https://www.pbeck.co.uk/2023/06/app-insights-for-power-platform-part-8.html">App Insights for Power Platform - Part 8 - Verify logging is going to the correct Log analytics</a></span></span></p><p><span><a href="https://www.pbeck.co.uk/2023/08/app-insights-for-power-platform-part-9.html">App Insights for Power Platform - Part 9 - Power Automate Licencing</a> </span>(this post)</p><p><a href="https://www.pbeck.co.uk/2023/08/custom-connector-logging-thoughts.html" target="_blank">App Insights for Power Platform - Part 10 - Custom Connector enable logging</a></p><p><a href="https://www.pbeck.co.uk/2023/09/app-insights-for-power-platform-part-11.html" target="_blank">App Insights for Power Platform - Part 11 - Custom Connector Behaviour from Canvas Apps Concern</a></p></div><p></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4001838553487258943.post-16143426858844732632023-08-11T18:19:00.005+01:002023-09-26T09:02:23.643+01:00App Insights for Power Platform - Part 3 - Canvas App Logging (Instrumentation key)<p><a href="https://www.pbeck.co.uk/2023/06/app-insights-for-power-platform-part-1.html">App Insights for Power Platform - Part 1 - Series Overview </a></p><p><a href="https://www.pbeck.co.uk/2023/06/app-insights-for-power-platform-part-2.html">App Insights for Power Platform - Part 2 - App Insights and Azure Log Analytics</a> </p><p><a href="https://www.pbeck.co.uk/2023/08/app-insights-for-power-platform-part-3.html">App Insights for Power Platform - Part 3 - Canvas App Logging (Instrumentation key)</a> (this post)</p><p>App Insights for Power Platform - Part 4 - Model App Logging</p><p><a href="My Technical Working Notes for Microsoft Technology: App Insights for Power Platform - Part 5 - Logging for APIM (pbeck.co.uk)">App Insights for Power Platform - Part 5 - Logging for APIM </a></p><p><a href="https://www.pbeck.co.uk/2023/06/app-insights-for-power-platform-part-6.html">App Insights for Power Platform - Part 6 - Power Automate Logging</a></p><p><span style="font-family: inherit;"><a href="https://www.pbeck.co.uk/2023/06/app-insights-for-power-platform-part-7.html">App Insights for Power Platform - Part 7 - Monitoring Azure Dashboards</a><span style="background-color: white;"> </span></span></p><p><span><span style="background-color: white;"><a href="https://www.pbeck.co.uk/2023/06/app-insights-for-power-platform-part-8.html">App Insights for Power Platform - Part 8 - Verify logging is going to the correct Log analytics</a></span></span></p><p><span><a href="https://www.pbeck.co.uk/2023/08/app-insights-for-power-platform-part-9.html">App Insights for Power Platform - Part 9 - Power Automate Licencing</a></span></p><p><a href="https://www.pbeck.co.uk/2023/08/custom-connector-logging-thoughts.html" target="_blank">App Insights for Power Platform - Part 10 - Custom Connector enable logging</a></p><p><a href="https://www.pbeck.co.uk/2023/09/app-insights-for-power-platform-part-11.html" target="_blank">App Insights for Power Platform - Part 11 - Custom Connector Behaviour from Canvas Apps Concern</a></p><p><b>Overview</b>: Logging & monitoring for Canvas apps is done in two parts: App Insights, and using the Canvas app Monitor. This post focuses on logging via App Insights.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5CTFw-O9gg0V2LST15PnCY1egGvxLZVEDDkrWelEOEk_KqLCHH4Hlqv5DIX8ld1R-iozpE3JqpO-YJlZHVJeMtJgYFFsTOTjreXgZGT2eUpGQE_MdYK3B1c9ExQt4kjZ6LFzdz6LUurTBWZB5DEEyRrHN-rtBGCsw75Pd2gh4bvIa-OpilTKdrgHEFdE/s1144/Monitor-appinsights.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="584" data-original-width="1144" height="326" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5CTFw-O9gg0V2LST15PnCY1egGvxLZVEDDkrWelEOEk_KqLCHH4Hlqv5DIX8ld1R-iozpE3JqpO-YJlZHVJeMtJgYFFsTOTjreXgZGT2eUpGQE_MdYK3B1c9ExQt4kjZ6LFzdz6LUurTBWZB5DEEyRrHN-rtBGCsw75Pd2gh4bvIa-OpilTKdrgHEFdE/w640-h326/Monitor-appinsights.PNG" width="640" /></a></div><br /><p><b>Note</b>: Once a solution that contains a Instrumentation key, they app logging key cannot be alter unless you make the environment have unmanaged layers. You can use PowerCli and compose a new managed solution for each DTAP environment but it's a new compile for each environment.</p><p><b>Example:</b></p><p>In the annotated diagram below including a log snippet. </p><p>1. Canvas App has an instrumentation key, the log captures the front end action</p><p>2. Calls to Dataverse & Power automate Flows are logged (relies on step 1)</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjMBDZdckrJZNdRLuQHCi8-kRGdwnHkms6I0DFFlqhY3C_EIuILkrbi4pw0TlC70qFU4IhSWbGRTVdRCO4ZcTFN4MToq6QHYLXEoUqo7KknjeaUinYA0Su-6LI6BtBCwWl09xtvqmLdaR7vb_oyd77jbU0woV0soHrM_pSvyrjBEOrAVhXy8QQMvubjj3Q" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="853" data-original-width="1143" height="478" src="https://blogger.googleusercontent.com/img/a/AVvXsEjMBDZdckrJZNdRLuQHCi8-kRGdwnHkms6I0DFFlqhY3C_EIuILkrbi4pw0TlC70qFU4IhSWbGRTVdRCO4ZcTFN4MToq6QHYLXEoUqo7KknjeaUinYA0Su-6LI6BtBCwWl09xtvqmLdaR7vb_oyd77jbU0woV0soHrM_pSvyrjBEOrAVhXy8QQMvubjj3Q=w640-h478" width="640" /></a></div>3. Custom connector is calling an Azure Function (Function is logging to Log Analytics or app Insights),<p></p><p>4. the function logs into APIM and sends APIM a request (APIM logging is setup on the end points), and</p><p>5. APIM sends an outbound API request and captures the response (relies on step 4)</p><p>Note in this example I have Correlation tracking enabled on the Canvas App to get the full timeline, as shown below, it has been an experimental feature for a few years now.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiSdstf_qgTv7sulZPrMngMpcINBoLzlzRsmtsRPcag7skhR__jkXMSP3gb6tCYTl_Pq1iCdsxddG1BLSJKBlL8ifvWO9jpyygce_4Nu_e4ZHBOJKKbjCcp5P8NF4iik1OJz1TDs11bp3k9fXlawM-6W10U1YwYiqOkGtSzmucDH5eV3QIq0PWPJawHdpU" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="478" data-original-width="647" height="295" src="https://blogger.googleusercontent.com/img/a/AVvXsEiSdstf_qgTv7sulZPrMngMpcINBoLzlzRsmtsRPcag7skhR__jkXMSP3gb6tCYTl_Pq1iCdsxddG1BLSJKBlL8ifvWO9jpyygce_4Nu_e4ZHBOJKKbjCcp5P8NF4iik1OJz1TDs11bp3k9fXlawM-6W10U1YwYiqOkGtSzmucDH5eV3QIq0PWPJawHdpU=w400-h295" width="400" /></a></div><br />When I turn off the Correlation, it is not as easy to trace items from start to finish. All I get by default is the steps 3&4 data in my transaction search timeline.<p>All 5 pieces are still captured but the timeline has to be pieced together for tracing.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivZxzligo8jue7hpWJ4_FKl20fGyLEJ9v-jaktvvern_rYDnWq4U50pgqQJkmaVqddJ2NdfEpWs0wh253zIjZ84yN0j_BTnuA27zyRDAiby4fSd08mgApOf1PwYxqRXAOlJQfmLo3ypIrvuBoyYFRPwwHovZPbdjmv3iGcYnWhn_TKOCuz37dIWIrZ8-k/s1133/MonitoringCanvasApps2.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="733" data-original-width="1133" height="414" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivZxzligo8jue7hpWJ4_FKl20fGyLEJ9v-jaktvvern_rYDnWq4U50pgqQJkmaVqddJ2NdfEpWs0wh253zIjZ84yN0j_BTnuA27zyRDAiby4fSd08mgApOf1PwYxqRXAOlJQfmLo3ypIrvuBoyYFRPwwHovZPbdjmv3iGcYnWhn_TKOCuz37dIWIrZ8-k/w640-h414/MonitoringCanvasApps2.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">I would also enable the preview feature for logging as well as the experimental if the clients governance allows experimental features to be turned on.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><b>Summary</b>: Always add as many logging features as possible in Canvas Apps, think about where your logs go and also setup logging on Azure services to transaction can be traced.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><p><a href="https://www.pbeck.co.uk/2023/06/app-insights-for-power-platform-part-1.html">App Insights for Power Platform - Part 1 - Series Overview </a></p><p><a href="https://www.pbeck.co.uk/2023/06/app-insights-for-power-platform-part-2.html">App Insights for Power Platform - Part 2 - App Insights and Azure Log Analytics</a> </p><p><a href="https://www.pbeck.co.uk/2023/08/app-insights-for-power-platform-part-3.html">App Insights for Power Platform - Part 3 - Canvas App Logging (Instrumentation key)</a> (this post)</p><p>App Insights for Power Platform - Part 4 - Model App Logging</p><p><a href="My Technical Working Notes for Microsoft Technology: App Insights for Power Platform - Part 5 - Logging for APIM (pbeck.co.uk)">App Insights for Power Platform - Part 5 - Logging for APIM </a></p><p><a href="https://www.pbeck.co.uk/2023/06/app-insights-for-power-platform-part-6.html">App Insights for Power Platform - Part 6 - Power Automate Logging</a></p><p><span style="font-family: inherit;"><a href="https://www.pbeck.co.uk/2023/06/app-insights-for-power-platform-part-7.html">App Insights for Power Platform - Part 7 - Monitoring Azure Dashboards</a><span style="background-color: white;"> </span></span></p><p><span><span style="background-color: white;"><a href="https://www.pbeck.co.uk/2023/06/app-insights-for-power-platform-part-8.html">App Insights for Power Platform - Part 8 - Verify logging is going to the correct Log analytics</a></span></span></p><p><span><a href="https://www.pbeck.co.uk/2023/08/app-insights-for-power-platform-part-9.html">App Insights for Power Platform - Part 9 - Power Automate Licencing</a></span></p><p><a href="https://www.pbeck.co.uk/2023/08/custom-connector-logging-thoughts.html" target="_blank">App Insights for Power Platform - Part 10 - Custom Connector enable logging</a> (this post)</p><p><a href="https://www.pbeck.co.uk/2023/09/app-insights-for-power-platform-part-11.html" target="_blank">App Insights for Power Platform - Part 11 - Custom Connector Behaviour from Canvas Apps Concern</a></p></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-4001838553487258943.post-84329333966624972302023-08-06T15:00:00.001+01:002023-10-31T15:34:32.029+00:00Microsoft Purview DLP Policies<p><b>Overview</b>: Microsoft Purview allows a company to create end device DLP policies and push out to all client devices.</p><p><b>Create policies</b>, and takes up to 2 hours to update end client devices and show on the "Device Monitoring" dashboard. <b>Client Analyser tool </b>- check endpoint client devices are getting the latest policies, and can speed it up. Device obviously has to be online to get the latest update.</p><p><b><span style="color: red;">WIP</span></b></p>Unknownnoreply@blogger.com0