//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);
}
);
}