Skip to content

Tag: Dataverse

KeyBox – A Dataverse solution to govern credentials

Posted in Power Platform, and Dynamics 365

Most of the time, I create solutions based on customer requirements. Sometimes, I create solutions to learn something new and “KeyBox” was my last personal project to learn some new skills.

KeyBox – The features

It is a solution to store and govern credentials (stand alone or in regard to a customer) in Dataverse. You can store usernames & passwords or client IDs & client secrets. It reminds you when the “valid until” or “remind me on” date is reached. Additionally, a note can be placed at the MFA switch and a URL.

KeyBox Record

Additionally, you can create new passwords, based on the rules of the organization.

KeyBox Config

I’ve learned in my KeyBox project:

Get your KeyBox!

Sounds like I try to sell you something, but I don’t. I put it on GitHub under MIT licence. Means you can use and modify it in any way you want.

KeyBox

Retrieve EnvironmentVariableValue in JavaScript

Posted in Power Platform, and Dynamics 365

In my private project (Key Box), I stored a JSON configuration in an Environment Variable. To retrieve its value, I had could use two queries. The first query to retrieve the GUID of the Environment Variable Definition and the second query to retrieve the Environment Variable Value. But there is a better way: the RetrieveEnvironmentVariableValue WebApi function.

Below is the async function I wrapped around it to make it easy reusable.

Retrieve EnvironmentVariableValue JavaScript

async function getEnvironmentVariableValue (schemaName) {
  return Xrm.WebApi.online
    .execute({
      DefinitionSchemaName: schemaName,
      getMetadata: function () {
        return {
          boundParameter: null,
          parameterTypes: { 
            DefinitionSchemaName: { 
              typeName: "Edm.String", 
              structuralProperty: 1, 
            } ,
          },
          operationType: 1,
          operationName: "RetrieveEnvironmentVariableValue",
        };
      },
    })
    .then(function success(response) {
      if (response.ok) {
        return response.json();
      }
    })
    .then(function (responseBody) {
      return responseBody["Value"];
    })
    .catch(function (error) {
      console.error(error.message);
    });
}

Retrieve EnvironmentVariableValue in Power Fx

Posted in Power Platform, and Dynamics 365

In my private project (Key Box), I store a JSON configuration in an Environment Variable. To retrieve its value, I use two queries. The first query to retrieve the GUID of the Environment Variable Definition and the second query to retrieve the Environment Variable Value. I don’t use the Retrieve EnvironmentVariableValue function because I also need to update the environment variable later.

Power Fx to query an EnvironmentVariable and its EnvironmentVariableValue

1. Get the environment variable definition record by schema name

Set(
    envVarDefRec; 
    First(
        Filter(
            'Environment Variable Definitions';
            'Schema Name' = "new_YourSchemaName"
        )
    )
);;

Set(name; value) to create the variable envVarDefRec and store the value.
First(table) to get the first record of the passed table.
Filter(table; condition) to filter the Environment Variable Definitions table by scheme name.

2. Get the EnvironmentVariableValue record

Set(
    envVarValRec; 
    First(
        envVarDefRec.'Environment Variable Values'
    )
);;

Set(name; value) to create the variable envVarValRec and store the value.
First(table) to get the first record of the passed table.

3. Get the value from the EnvironmentVariableValue record

Set(name; value) to create the variable envVarVal and store the value of envVarValRec.Value.

Set(envVarVal; envVarValRec.Value);;

Bonus: Apply the default value from EnvironmentVariableDefinition record if the EnvironmentVariableValue is empty.

If(condition; then) to do the next action only if the condition is fulfilled.
IsBlank(value) to check is envVarVal contains data.
Set(name; value) to fill the variable envVarVal and store the value of envVarValRec.Value.

If(
    IsBlank(envVarVal);
    Set(envVarVal;envVarDefRec.'Default Value')
);;

Update EnvironmentVariableValue in Power Fx

Posted in Power Platform, and Dynamics 365

In my private project (Key Box), I stored a JSON configuration in an Environment Variable. The configuration is displayed in a custom page and can be edited there. Here is how to update an EnvironmentVariableValue in Power Fx.

To update a Dataverse record, you need a reference to it. In my case, I already retrieved it as record in the step before, stored as global variable “envVarValRec” and I just reuse it now.

Update EnvironmentVariableValue in Power Fx

Patch(
   'Environment Variable Values'; // the table name
   envVarValRec; // the record to update
   Defaults('Environment Variable Values');
   {
      Value: "payload" // the string to store
   }
)

Working with FetchXML aliases in Power Automate

Posted in Power Automation, Dynamics 365, and Power Platform

For my private project (Key Box), I’ve built a FetchXML statement to group data already during the query, instead of building a logic in Power Automate. For that, I had to set an alias in the query.

KeyBox

When I tried to access the “myOwner” alias, I did not find it in the Dynamics Content list of Power Automate. It only provided me the default Owner choices.

KeyBox

Hoping that this is only a question of visualization, I tried to insert the “Owner (Value)” and got nothing. Therefore, I looked into the result of the Fetch query and found “myOwner”.

FetchXML aliases in Power Automate

tl;dr; How to access now FetchXML aliases in Power Automate?

  1. Select the original owner (or whatever you have) from the dynamic content list
  2. Place the cursor inside your action and copy the inserted formula
  3. Delete the inserted formula
  4. Paste the copied formula inside the expression area of the dynamics content
  5. Replace ‘@{‘ at the start and ‘}’ at the end
  6. Replace the original attribute name with your alias and press “OK”
KeyBox