JavaScript

How to create a button in a Model Driven (Dataverse) Power App that launches P.A. Flow in a Solution

//This JavaScript allows a button in a Model Driven (Dataverse) Power App that launches a Power Automate Flow in a Solution
//D.Lutchner
//Jan 2023

function LaunchFlow(formContext){

//Retrieves current Dataverse Record ID
var thisId = formContext.data.entity.getId().replace("{", "").replace("}", "");
console.log(thisId); //For Debugging Purpose

//Get the current Users Name
var UserName = Xrm.Page.context.getUserName();
console.log(UserName); //For Debugging Purpose

//Headers required by flow trigger
var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");

//Retrives current Power Apps UserName and Customer ORder ID
var raw = JSON.stringify({"username": UserName,"AccountID":thisId});
console.log(raw); //For Debugging Purpose

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: raw
};
console.log(requestOptions); //For Debugging Purpose

//Retrieves Environment Variable that contains the Flow URL
Xrm.WebApi.retrieveMultipleRecords("environmentvariabledefinition", "?$select=defaultvalue&" + "$filter=schemaname eq 'new_MyFlowsURL'").then(
    function success(results) {
        console.log(results); //For Debugging Purpose
		for (var i = 0; i < results.entities.length; i++) {
			var result = results.entities[i];
			// Columns
			var flowURL = result["defaultvalue"]; // URL
			console.log('This is flowURL ',flowURL); //For Debugging Purpose
			//Run the Power Automate Flow. This URL comes from copying the Trigger in the Flow Action - When a HTTP request is received
			fetch(flowURL, requestOptions)
			.then(response => response.text())
			.then(result => console.log(result))
			.catch(error => console.log('error', error));	
		}
        // perform operations on record retrieval
    },
    function (error) {
        console.log(error.message);
        // handle error conditions
	}
);


var alertStrings = { confirmButtonLabel: "OK", text: "Your flow is running you will receive a message when it is complete", title: "Flow running" };
var alertOptions = { height: 120, width: 260 };
Xrm.Navigation.openAlertDialog(alertStrings, alertOptions).then(
    function (success) {
        console.log("Alert dialog closed");
    },
    function (error) {
          console.log(error.message);
    }
);
}