Wednesday, 4 December 2024

Power Platform licensing capability Notes

 Power Apps Premium Licensing Costs (4 Dec 2024): 

The retail price is $20/user per month, but it drops to $12/user/month for 2k licenses per org.  Large customers can negotiate as always.  Premium connectors & 40k requests per user (24-hours rolling)

Power Apps Pricing | Microsoft Power Platform

Power Automate Premium allows 40k requests per user (per 24-hour rolling), and the E365 allows 6k requests. Circa $18 TBC.

Dynamics 365 professional allows 40k requests per user (per 24-hour rolling) and gives the user premium Power Apps licensing.

Tuesday, 19 November 2024

Playwright Series - Post 4 - 6 Min walkthru of Playwright testing with Azure Monitor

Overview: Install VS Code and Playwright Extensions, create tests, set MFA for Canvas Apps/Power Apps, loop through Power App applications and check the home page is loading, write logs to Azure App Insights and show via the Azure Dashboard.


6 min - annotated Playwright setup and use video


========================

Playwright Series

Saturday, 9 November 2024

Playwright Series - Post 3 - Add App Insights logging inside your tests

 

Run > npm install @microsoft/applicationinsights-web

Add the code to log from Playwright to your App Insights as shown below:


=========================

Playwright Series

Friday, 8 November 2024

Playwright series - Post 2 - Refactored TS code for Consciously verify Apps in Production

Overview: Create a function with Playwright tests that loops through all my production apps, logs in, and validates the Page title load on each app's home page.

Steps:

1. Create the spec.ts code that reads app.json to loop thru and validate sites

2. Record and Store the session state for all future test runs (Used for MFA in the tests runs)

3. Create an apps.json file containing URLs to open and validate


4. After running the test, you'll see that the 3 tests were completed successfully. In my case, there were 2 Power Apps with MFA enabled and an anonymous public website that had been checked.

Optional
Create short cuts to run your tests using PowerShell
PS C:\repos\PW> npx playwright test -g "Prod-CanvasApps" --project=chromium --headed

Next Steps:

Run continuously using the Azure Playwright Service.

=========================

Playwright Series

Playwright Post 1 - Overview of E2E testing using Playwright

Playwright Post 2 - Continuously Test/Monitor Canvas apps and website with MFA enabled (this post)

Playwright Post 3 - Add App Insights logging inside your Playwright tests 

Playwright Post 4 - 6 Min walkthru of Playwright testing with Azure Monitor


Wednesday, 6 November 2024

Fix links within Pdf files when moving from a File share to web hosting

Overview: Build a console to help migrate more than 80k PDF document internal links. The client used a DFS SMB file share to hold index PDFs and multiple documents that needed to be moved to a SharePoint document library.

Hypothesis: Loop through all pdf's in a folder; if there are links, identify the file server links and convert them to web links so they work in the new SharePoint document library.  Various tools were identified as possible solutions but came up short in the migration.  Two good tools are Replace Magic & PDF-XChange Editor.

Resolution: Below is the C# code I wrote to change the links in the VS code.  The debugger was useful as there were many different types of links within the plethora of PDFs.


C# Code

using iText.Kernel.Pdf;
using iText.Kernel.Pdf.Annot;
using iText.Kernel.Pdf.Action;
using iText.Bouncycastle.Crypto;  // pdf fails at runtime periodically without the directive
using System.Text.RegularExpressions;
class Program
{
    static void Main(string[] args)
    {
        string folderPath = @"C:\Users\PaulBeck\Downloads\Software\LinkConvert\ConvertLinksCsharp\"; // Replace with your folder path          
        Console.WriteLine("Please enter a folder Path: e.g. " + folderPath);
        string inputPath = Console.ReadLine();        
        Console.WriteLine("Last Path: e.g. Childfolder2");
        string inputPathVol = Console.ReadLine();
        if (inputPath.Length>5)  {
            folderPath = inputPath;   }
        string[] pdfFiles = Directory.GetFiles(folderPath, "*.pdf");
        foreach (string file in pdfFiles)
        {
            Uri fileUri = new Uri(file);
            string directory = Path.GetDirectoryName(file);
            string filename = Path.GetFileNameWithoutExtension(file);
            string extension = Path.GetExtension(file);           
            string newFilename = $"{filename}_new{extension}";  // Create the new filename
            string newFilePath = Path.Combine(directory, newFilename); // Combine the directory and new filename to form the new URL
            UpdatePdf(fileUri.AbsoluteUri,newFilePath, inputPathVol);
        }
    }
private static void UpdatePdf(string inputFilePath, string outputFilePath, string lastPathPart)
{
    var varInnerName = "";
    PdfDocument pdfDoc = new PdfDocument(new PdfReader(inputFilePath), new PdfWriter(outputFilePath));
        for (int i = 1; i <= pdfDoc.GetNumberOfPages(); i++)        // Iterate through the pages
        {
            var page = pdfDoc.GetPage(i);
            var annotations = page.GetAnnotations();
            foreach (var annotation in annotations)            // Iterate through the annotations
            {
                if (annotation.GetSubtype().Equals(PdfName.Link))
                {
                    var linkAnnotation = (PdfLinkAnnotation)annotation;
                    var action = linkAnnotation.GetAction();                                                        
                    if (action is PdfDictionary dictionary)
                    {
                        foreach (var key in dictionary.KeySet())
                        {
                            var value = dictionary.Get(key);
                            Console.WriteLine($"{key}: {value}");
                            var varPdfNameF = dictionary.Get(PdfName.F);
                            if (varPdfNameF is PdfDictionary varF2Dict)      {
                                varInnerName = varF2Dict.Get(PdfName.F).ToString();  }
                        }
                    }
                    else
                    {   Console.WriteLine("No URL found.");    }  
if (action != null && (action.Get(PdfName.S).Equals(PdfName.GoToR) || action.Get(PdfName.S).Equals(PdfName.Launch)))                
                      {
                        var varF = action.GetAsString(PdfName.F)?.ToString() ?? "";
                        var uri = $"https://radimaging.sharepoint.com/sites/Documents/Standards/{lastPathPart}/{varInnerName}";          
                       string pattern = @"\.\./";
                       if(uri.Contains("../"))    // string cleanUrl1 = Regex.Replace(uri, pattern, string.Empty);
                       {          
                        uri = $"https://radimaging.sharepoint.com/sites/Documents/Standards/{varInnerName}";
                        uri= Regex.Replace(uri, pattern, string.Empty);                       
                       }
                        var newAction = PdfAction.CreateURI(uri);
                        if (varF.Length > 20)      {
                            newAction = PdfAction.CreateURI(varF);     }
                        linkAnnotation.SetAction(newAction);
                    }           
                }
            }
        }
        pdfDoc.Close();
        Console.WriteLine("PDF links updated successfully!");
    }
}



Thursday, 10 October 2024

Network calls intermittently do not occur in Published play mode on a Canvas app

Problem: An app created does not run Patch or any other network call when published and in run mode. The network calls work in edit mode.  Looking at the logs, I identified some users are successfully updating using network calls

Figure 1. Monitoring shows the Edit/Play working and the Publish/Play not making any network calls.

Initial Hypothesis:

The Patch call works in edit mode, and then intermittently, some users get it to work in Published/Play mode.  This tells me the data in the Patch call is causing the network patch call to fail.

Using a Trace and running in play mode, I remove properties until I find the offending property.

Figure 2. In edit mode, a label control, CurrentDateVaue_1.Text is used

Once, we traced the value of CurrentDateValue_1, which is set by the global variable varCurrentDateTime. As this is done on a random screen, if the user does not open the screen in Publish /Play mode, the label control CurrentDateValue_1.Text is never set. 

Resolution: Replace all the code using CurrentDateValue_1.Text with the variable varCurrentDateTime. The label control is not set when the network/patch call is made, and bizarrely, it does not happen. I'd expect it to send regardless and let the error handling catch the issue.

Monday, 16 September 2024

Opening Canvas App in Edit mode takes excessive time to open

Problem: Two Canvas apps in my enterprise portfolio took over 20 minutes to load in edit mode.

Initial Hypothesis: If I specify the version of a studio in the URL to an old version, the offending app loads in edit mode in under a minute.

&studio-version=v3.24052.30.298708436 onto the Canvas app edit URL

This tells me that something in my app is offending when the latest studio versions are used to edit the app.  While this was okay for a few weeks as a workaround, MS support eventually gave me two settings that fixed both my apps.

Resolution

  • Turn off "Collection access in component scope"
  • Turn on "New analysis engine"

Monday, 9 September 2024

Microsoft Learn company training plans is worth a look

Overview: Microsoft Learn has a nice feature to ensure users are trained on MS technologies. You can create collections of learning resources and add these to plans. Then, specify who should do the training and record the progress.

An example of a plan for new joiners to ensure they are skilled.

Thoughts: I like this tool as you can create a set of courses for users to attend, and it tracks their completion/progress.  For instance, in a Centre of Excellence, users are expected to have completed some training before being given access to a Power Platform Dev environment.

I have not been able to add my own company's content, so I may have a recording of governance and standards for an environment that devs need to be aware of. I'd like the ability to add wikis or mp4s that users watch and then accept they have completed. It may be there, but I can't find it. Also, the portal's branding should allow enterprises to add their own logos. This would be a great Learning Management System (LMS) with customised content.

Tuesday, 3 September 2024

Power Automate Flows naming for documentation

I was recently shown this format and I think it's fantastic.  I'm moving all my flows to this Action naming approach:


Format: <Original OOTB name of the Action> | <Verb on Noun> 

Also, see my Flow tips here

Tuesday, 13 August 2024

Pulumi to create App Insights on Azure with VS Code

Overview: Provision Azure App Insights using Pulumi on VS Code using TypeScript, code generate by Pulumi's AI web code engine.  It is so lovely. 


Series on Pulumi:

Introduction and setup Pulumi on VS Code

Pulumi to create App Insights on Azure with VS Code (This post)


An Introduction to Pulumi for Azure

Overview:  I have been using Pulumi predominantly on AWS.  This post is an introduction to setting up Pulumi on VS Code and building resources out on Azure.

Setup Pulumi a new Pulumi project using VS Code, connect to Azure and retrieve a specific Azure Resource Group", the video below walks thru me setting it up.

Summary:  At this point you should have a VS code TypeScript pulumi project setup that can read/access a resource group in Azure.

Series on Pulumi:

Introduction and setup Pulumi on VS Code (This post)

Pulumi to create App Insights on Azure with VS Code 

Power Automate, calling child flow Bad Request Error

Problem: When I call a child flow that uses a connection, the parent calling flow receives the error "Bad Request" with the following details "Action 'Run_Child_Flow' failed: Failed to parse invoker connections from trigger 'manual' outputs. Exception: Could not find property 'headers.X-MS-APIM-Tokens' in the trigger outputs. Workflow has connection references '["shared_wordonlinebusiness","shared_sharepointonline"]' with invoker runtime source.". 

Error shows in the parent flow runs.

Initial Hypothesis: Reading the message originally to me suggested that permissions are being lost between the parent and child flows.  I did some Googleing/copiloting to see if anyone had seen the issue before and Darren Lutchner has a video that explains the issue and fixes it perfectly (https://www.youtube.com/watch?v=Yuh3Nlf9wrs).  

Resolution: Watch Darren's video for a great walkthrough to understand the issue fully. 

Resolution Summary:

1. Go to the "Child Flow", Edit the "Run only users"

2. I had two connections: Word Online (Business) & SharePoint, change them both from "Provided by run-only user" to "Use this connection (...)".  Save and the parent flow starts working and calls the child flow correctly.

Saturday, 10 August 2024

What is a Digital Twin?

Digital Twins: Predict and optimise asset performance.  Provides digital simulation by integrating data and models of physical assets from design to tear down with a real-world physical asset.

A digital twin is a virtual, real-time representation of a physical object, system, or process. It mirrors its behaviour, characteristics, and performance and is connected to its real-world counterpart through a two-way flow of data.

Tuesday, 6 August 2024

Using Power automate to populate Excel files with data

 



Power Automate Flows containing Approvals failing with XrmApprovalsUserRoleNotFound

Overview: The Power Automate Approval action on an existing flow stops working and throws the error:  "'XrmApprovalsUserRoleNotFound'. Error Message: The 'Approvals User' role is missing from the linked XRM instance."  I did not have control on the environment so I needed others to perform the fix so that I could verify.

Problem:

The ‘Start and wait for an approval’ action/connector used in a Power Automate flow has been failing for 3 weeks in Dev, I now need this functionality to change the workflow ‘IDC-StartApprovalCertificateWorkflow’.  The error show is “Action ‘Start_and Wait_for_an_approval_xx” failed.  The request failed: Error code: ‘XrmApprovalsUserRoleNotFound”. Error Message: The ‘Approvals User’ role is missing from the linked XRM instance.'

Initial Hypothesis:

All the runs of my flow have been failing for 3 weeks in Dev for 3 weeks on the ‘Start and wait for an approval’ in the dev env.  I have tried creating a new vanilla flow using the ‘Start and wait for an approval’ action and it fails with the same issue.

Triggering the flow in other environment including my production, and the ‘Start and wait for an approval’ action works.  I cannot see any difference except the environments.  The error message "XrmApprovalsUserRoleNotFound" is basically telling me that my user should be in the Approval Users role. I have the role assigned.

  • Env: Client-DEV
  • Type: Automated
  • Plan: This flow runs on owner's plan (paul@client.com)

Resolution:

Microsoft Support: Check the user running the flow is int he 'Approvals User' role is correctly assigned in the environment user security roles. 

Admin: The user running the flow already has the role assigned. We have re-assigned the role again.  Did not test, got the developer/owner to test.

Developer/me/flow owner: The approval has started working again in the Dev environment, I just retested and flow that was not firing yesterday is now working again.  New flows also fire/work correctly.

Summary: The user role in the Dataverse was correctly assigned, it looks like a refresh of the user in the 'Approver User' role corrected the issue.

Research:

https://www.linkedin.com/pulse/power-automate-approvals-flows-failing-adrian-colquhoun



Saturday, 3 August 2024

Mendix Notes 2024

Extendibility: Mendix Studio Pro IDE

  • Currently, Aug 2024 you can build Extensions with Mendix with C#.  Extend the Mendix Studio Pro/IDE/editor e.g. Connect to Azure, and query for resources, unit testing,..
  • Mendix look like they will also support TypeScript (TS) and JS for extensions.  Eventually, we may add low-code extensions using Mendix...

Mendix Series

1.  Overview of Mendix 

2. Mendix - Part 2 - Diving deeper

3. Extensibility for Mendix Studio (this post)

4. Building a Mendix Widget for the Mendix Market Place (Convert text to Audio using Azure AI)

5. Mendix Tips & Thoughts



Wednesday, 31 July 2024

Low Code testing with Playwright - 1. Intro Exercise (15 min)

Exercise 1.  Install and setup you first Playwright Test

1. Verify VS Code is installed 
2. Ensure the Microsoft Playwright Extension is installed (use the default language TypeScript)
 
3. Create a folder using Windows Explorer as shown here: C:\Users\paulb\source\repos\Playwright\Mendix

4. Open the folder in VS Code and ensure the project is initialised C:\Users\paulb\source\repos\Playwright\Mendix> npm init playwright@latest --yes -- --quiet --browser=chromium --browser=webkit

5. Verify your screen looks similar to this...




Exercise 2.  Record and run your first Playwright test

1. On the "Testing" area, select "Record new"


2. The recorder opens, type in a url in my case I used "https://www.paulbeck.co.uk"


3. Click and assert text exists on the page

4. Stop the recorder and close the browser.

5. Run the test, as shown below, validate the result

Sunday, 21 July 2024

Simple comparison of Cloud Storage options

Azure offers 3 main options for storing files:

Azure File Store (Supports SMB, no version control)

Azure Blob Storage (No SMB, has version control via apis, tiers for archiving)

Azure Data Lake Storage -Gen2 (No SMB, no versioning), more relevant to Big data/DataLake

 

AWS also has options to consider:


Amazon Simple Storage Service (S3), similar to Azure Blob Storage with an API and tiers

Amazon FSx, similar to Azure File Store, supports SMB and NFS

Amazon Elastic Block Store (ESB) supports NFS


Office 365/SharePoint Archive option:

https://adoption.microsoft.com/en-gb/microsoft-365-archive/

Extra SPO/O365 storage costs about $0.20/GB per month, using the SP Achieve service cost 0.05$/TB per month.  Also you only get changed for what you use, no pre-provisioned size.  Security & compliance is maintained so for old data needed to be archive this is a great easy option.

Sunday, 7 July 2024

PowerAutomate Flow to populate a word document table with Dynamic Rows

Overview: I recently needed to generate a dynamic table within word using Power automate, there are lots of resources out there to do it.  I found the order I did the core steps in determines if the process works so thought I'd blog this as a reminder and simple guide.

Objective: Use a flow to build an dynamic array and display the output within a Word document.

Steps

1. Create a new Flow in Power Automate (here I am initialising an array but you can build this up as you need too.  The Select option and nested actions allow for creating most required data sets)


2. Create a Word document for the template (in my scenario, I've created the MS word document inside a SharePoint Document library, as shown below)

3. Edit the word Document to Display the dynamic Rows (you need to edit in the Word app not the browser version of word).  
  • Add/Insert a Table (mine needs three columns)

  • Ensure you have the "Developer" ribbon setup and give the focus to the position where the fist dynamic field is needed.

  • Insert the "Plain Text Content Control" within the table at the desire places
  • Add the "key" name from the array to each plain text control as shown below:


  • The word document should looks as shown below.  Save and close the docx file.



Sunday, 2 June 2024

AAD/EntraID with Power Platform and SharePoint Guideance

Overview

Keeping a clean hierarchical Active Directory (AD) is essential to managing permissions and having good governance in the Power Platform. This post outlines the key core concepts of securing your platforms.

Power Platform is managed at three levels:

  1. App (model, canvas or power pages),
  2. Environment (user needs permissions to the tenant environment)
  3. Source (Dataverse, SQL, SharePoint)
AAD/EntraId
Azure Active Directory (AAD) is the backbone of permissions in the Power Platform. Security groups are normally well set up within AD, but when creating a new group, I tend to use "Microsoft 365"groups to handle permissions.

The process is to add users to Groups (Security or Microsoft 365) and then give permissions using the group.  Security groups can be managed dynamically i.e. if you are in a division you automatically belong to a security group. Or Security groups allow for users to be added individually (there is also a bulk upload).

This keeps management simple, as the Microsoft groups and Security groups can be reused to grant various apps and reports permissions.

Tip: You cannot use distribution groups to assign rights to SharePoint or Power Platform.

Wednesday, 29 May 2024

Mendix tips & thoughts

Mendix Charting/dashboarding options:

  • E-Charts (Community supported) are simple and nice,
  • Anycharts (very common),

Grafana can be integrated, but I haven't tried it with Mendix.

Power BI can show reports using an iFrame widget.  I like this approach.

Module/Widget Support Note: Check whether libraries are supported by Mendix/Platform or Partner.

Community-supported obviously can be changed by the community. Partner-supported is also an option if you have an agreement with the partner or trust them.

Performance Testing Tool options:

A colleague has used JMeter and feels it was not ideal. 

I'm considering using the Microsoft Playwright Testing service and Playwright testing.

Enterprise Logging/SIEM SaaS integrations supported by Mendix:

  1. App Dynamics.
  2. Datadog,
  3. New Relic,
  4. Dynatrace, and
  5. Splunk

Watch out for:

Logging
Each system logs to loc files on the local machine; these can be pushed into the Postgres local instance.  This can result in a massive storage load being added for auditing and logging.  

Monitoring
Logs can be shipped out using backup and restored or by calling the REST Open API.

Maintenance
Mendix builds a database per app per environment, so the recommendation is to use at least 3 per app as you need dev, Test, and Prod. Each instance, by default, uses PostgreSQL (you can only use PostgreSQL if you use the Mendix-provided images deployed on AWS).  

Global Variables
Mendix doesn't have a concept of a global variable at the start or per session. You can load lookup data, which is often held centrally in your enterprise. This can get heavy quickly, but you can copy Open API results into the local PostgreSQL database so it only gets local data.  

Costs
With Mendix, the cost can escalate rather quickly. Reduce cost by scaling back to the most minor instance in dev and test, especially post-go-live. Each app has a separate database, so management and connectivity can become hard to control. 

Performance
Number of Controls & Size of each application.



Wednesday, 22 May 2024

Weird behaviour on App Onstart for collection creating when the 'Delay Load' preview feature is enabled

Problem: We recently had a few canvas apps start behaving strangely where our menu which used a SharePoint list to populate a collection on the App onStart() was not working on all pages with the exception of the Home page.  This only happened to the published applications, in edit and play mode, it worked perfectly.

Initial Hypothesis: Looking at the logs between the "edit and play" and the "Publish" was showing hundreds to transactions saying something along the lines of "text is blank and therefore will be zero".  When I set the start page to a different page and run the "Published " app, the first page works but not the other pages navigation.  Looking at the difference in the logs, it appears that the collection is seen as empty on subsequent page loads only when running in "Published" mode.

Resolution: I don't remember turning the "delay load" feature on, it only showed up on the 22 May 2024 (or at least we noticed it), I merely turn off the feature and all the affected applications started working again.

Thoughts: The behavior bug must have been caused by either upgrade in Canvas App platform version, or the feature being automatically turn on.  If you get an issue, turn off the experimental feature.


MS Build Conference 2024 Online Notes

A slick keynote, but I'm summarising the items i liked from the online sessions I watched:

Sunday, 12 May 2024

New SharePoint Options to be aware of

SharePoint Embedded

We have all used SharePoint and the API's but this is really useful as it allows me to have full SharePoint API access to use with my applications.  So it can be protected and scale.  I've had tons of projects that should have used this but instead backed on dedicated Site Collections.

External user on SPO have to be guests, and you use the subscription model, so i think you can have 5 guests for each O365 paid user.  Issue is this is then giving access to your internal SharePoint/collaboration area.  SharePoint Embedded provides a dedicated area and offers two types of consumption/billing models: 

  • ISV-led, and
  • and direct-to-customer billing.

SharePoint Premium

SharePoint Premium offers advanced features such as AI/copilot...

Sunday, 7 April 2024

Power BI Licencing Explained

 Power BI Licencing (Simple Overview)

(Simplified April 2024)

Power BI Free is for individual users who need to create personal reports and dashboards.  Perfect for people that don't need to share and want to analyse data in the business.
Power BI Pro is for individuals that need to share content, collaborate with others, and use all Power BI service features.  Circ $10/user/month.  People building reports and can share amonst other users with the Power BI Pro licence.
Power BI Premium is for large organizations with extensive data needs and a large number of users, including those who do not require full Power BI Pro capabilities.  All the content viewers of the reports and dashboards, don't need any licences.  Circe from $5k per month.  Perfect for 1 user creates a report and multiple users use the report.

Wednesday, 6 March 2024

Low code CoE thoughts

Key areas to address for a Low Code CoE:

  1. Portfolio of Products
  2. People/Skills/Experts
  3. Process/ALM
  4. Platform/Governance/Cleanup/Architecture/NFR's (scalability, SLAs)
  5. Promotion/delivery/training

Consider putting the project through a Business case validation, particularly for larger projects.  The business case is how your business visualises and communicates a proposed project, which should continuously be refined.  Points to cover:

  1. Business Case (Idea)
  2. Customer Segment >
  3. Value Proposition (what do they get) > 
  4. Channels (API, website, AI Services, .. ) Customer Achievement (get and retain) >
  5. Revenue (how to make money)
  6. Key Resources (patches, maintenance) covers technology and data.  What tech, people need to build and continue delivering.  Data: where does it come from, quality, restrictions, relevancy.
  7. Partners (dependency e.g. AWS, Azure, Mendix, OutSystems, UiPath, Microsoft, and backup options)
  8. Cost breakdown
CoE needs to clearly understand its boundaries and responsibilities.  


I am a big fan of Total Ownership, clear requirements and goals, using RACI, and stand-ups. For the rest, I try to be agile and malleable. Big projects require more oversight and planning, so I allow teams to change and focus on delivery.  

Sunday, 11 February 2024

Basics to setting up an AI Transformation Program - High level

Overview: 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. 

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.  

1. AI Idea Generation: 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.

2. Business Impact: how does this help our customers or generate revenue or does this improve our operations.  Can this be quantified?

3. Technological Feasibility: Can technology meet the requirement, and at what cost?  High level technical design is strongly advised as show below in figure 2.

4. Implement: 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.

Figure 2. HLD example

Note:  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.

Wednesday, 31 January 2024

Low code ROI/TCO and observability - Monitoring Low code Platforms

Overview: 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.

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...).  

Microsoft Low Code/Power Platform:
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.
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.  

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.

Tools:
You can also log to SIEM (enterprise logging tools) and use this for Monitoring.  For instance, you can ship you App Insights/Log Analytics/Azure Monitor logs to Dynatrace so it is part of your overall monitoring and response strategy.

You can continuously monitor API using CI/CD tools like ADO but I prefer to use Postman's Enterprise Infrastructure service (it's awesome).  Similarity, I am a full convert to Microsoft Playwright (I was a Selenium and Cypress fan, not i'm only Playwright).

Grafana, Power BI, Azure Dashboards 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 BrowserStack use AI to compare screenshots for test validation.

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.

Friday, 5 January 2024

Unique solution to reduce licencing costs for Power Apps for Guest users when using SharePoint for storage

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: