Thursday, May 2, 2024

Permission error when running "Power Platform Backup Environment" in Azure DevOps

 When we run action "Power Platform Backup Environment" in Azure Devops with an App Registration account, we get the error "Principal with id '...' for application *** does not have permission to access the path 'https://10.0.1.21:20414/providers/Microsoft.BusinessAppPlatform/environments/.../backups?api-version=2020-08-01' in tenant ...". This means this account is missing the permission to run the backup. However we cannot setup the permission for it in Power Platform Admin Center for Microsoft 365 Admin Center. You can setup this permission by using powershell with the guideline in this link: https://learn.microsoft.com/en-us/power-platform/admin/powershell-create-service-principal#registering-an-admin-management-application


$appId = "CLIENT_ID_FROM_AZURE_APP"

# Login interactively with a tenant administrator for Power Platform
Add-PowerAppsAccount -Endpoint prod -TenantID $tenantId 

# Register a new application, this gives the SPN / client application same permissions as a tenant admin
New-PowerAppManagementApp -ApplicationId $appId

 After that, the action can run successfully.

Thursday, March 21, 2024

Error (ESLint) i.CLIEngine is not a constructor in Visual Studio 2019

To correct the ESLint error 'i.CLIEngine is not a constructor' in Visual Studio 2019 with ESLint version 8.57.0, you can follow these steps:


1. Navigate to the following file path and open the file in a text editor: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\ServiceHub\Services\TypeScriptLintingService\TypeScriptLintingService.all.js. It is recommended to create a backup of the original file before proceeding.


2. Locate the function e.prototype.eslint within the file and replace it with the following code:


e.prototype.eslint = function(e) {

return new Promise(async (resolve) => {

try {

var config = JSON.parse(e);

var ESLintModule = this.dynamicRequire(config.linterPath + n.sep + "node_modules" + n.sep + "eslint");

var results = [];


if (ESLintModule.ESLint) {

var options = {

cwd: config.projectRoot,

resolvePluginsRelativeTo: config.linterPath

};


var eslintInstance = new ESLintModule.ESLint(options);

results = await eslintInstance.lintText(config.fileContents, { filePath: config.fileName });

} else {

var optionsLegacy = {

cwd: config.projectRoot,

ignorePattern: ["wwwroot/lib/**", "**/node_modules/**", "**/bower_components/**", "**/jspm_packages/**"],

resolvePluginsRelativeTo: config.linterPath

};


if (config.parserPath) {

optionsLegacy.parser = config.parserPath;

}


results = new ESLintModule.CLIEngine(optionsLegacy).executeOnText(config.fileContents, config.fileName).results;

}


var report = results[0];

if (report) {

report.messages.forEach(this.addRuleIdToParseError);

var validMessages = report.messages.filter((message) => message.ruleId != null);

validMessages.forEach(this.addLocationInfoFromSourceCode);

resolve({ lintMessages: validMessages });

} else {

resolve({});

}

} catch (error) {

resolve({ errorMessage: error.message });

}

});

}


3. After making the changes, save the file and restart Visual Studio to apply the update.


Permission error when running "Power Platform Backup Environment" in Azure DevOps

 When we run action "Power Platform Backup Environment" in Azure Devops with an App Registration account, we get the error "P...