M365関連 技術

PowerApps内に組み込んだスクリプトから環境変数を呼び出す

今回は自作のコマンドバーに仕込んだJavaScriptアクションから環境変数を読み込みます
ただ、環境変数の取得は非同期処理となるため処理がネスト化していきますので注意が必要です

環境変数を作成する

まず始めに、今回取得する環境変数を作成します。環境変数の設定は以下です

Xrmを使用して読み込む

Xrmプロパティを使用して環境変数を取得します。以下は、環境変数を取得する全文となります
取得順序としてはこうなります

  1. XrmにあるretrieveMultipleRecordsを使用して対象となる環境変数のGUIDを取得
  2. 1で取得したGUIDを元に再度XrmのretrieveMultipleRecordsを使用して対象となる環境変数の情報を取得
  3. 2で取得した情報の中から現在値を取得
// ここに作成した環境変数の名前(schemaname)を設定。今回の場合は以下
var ENV_VAR_KEY = "crcf6_testing_environmentvariablevalue";
   
Xrm.WebApi.retrieveMultipleRecords("environmentvariabledefinition", `?$select=environmentvariabledefinitionid&$filter=schemaname eq '${ENV_VAR_KEY}'`).then(
    function success(result) {
        if (result.entities.length > 0) {
            var keyDefinitionId = result.entities[0]["environmentvariabledefinitionid"];
            // Environment Variable DefinitionレコードGUIDをキーに環境変数の現在値を取得
            Xrm.WebApi.online.retrieveMultipleRecords("environmentvariablevalue", `?$select=value&$filter=_environmentvariabledefinitionid_value eq '${keyDefinitionId}'`).then(
                function success(result) {
                    if (result.entities.length > 0) {
                        var emvValue = result.entities[0]["value"];
                        console.log(`環境変数の現在値(Xrm):${emvValue}`);
                    }
                },
                function (error) {
                    Xrm.Utility.alertDialog(`Error:${error.message}`);
                }
            );
        }
    },
    function (error) {
        Xrm.Utility.alertDialog(`Error:${error.message}`);
    }
);

コンソールに取得した環境変数の値が書き出されました

XMLHttpRequestを使用して読み込む

XMLHttpRequest関数を使用して環境変数を取得します。以下は、環境変数を取得する全文となります
取得順序としてはこうなります。順序としてはXrmと変わりはありません

  1. XMLHttpRequestのヘッダーやGET先のURLを設定する
  2. 1で設定した内容でリクエストを投げ、対象となる環境変数のGUIDを取得
  3. 2で取得したGUIDを元に1で作成したようにXMLHttpRequestを作成して対象となる環境変数の情報を取得
  4. 3で取得した情報の中から現在値を取得
// ここに作成した環境変数の名前(schemaname)を設定。今回の場合は以下
var ENV_VAR_KEY = "crcf6_testing_environmentvariablevalue";
var READYSTATE_COMPLETED = 4;
var HTTP_STATUS_OK = 200;
var currentHostName = location.hostname;
var webApiVersion = 9.2;
var webApiUrl = `https://${currentHostName}/api/data/v${webApiVersion}/`;
var entitySetName = "environmentvariabledefinitions";
var options = `?$select=environmentvariabledefinitionid,schemaname,displayname&$filter=schemaname eq '${ENV_VAR_KEY}'`
var query = webApiUrl + entitySetName + options;

var xhr = new XMLHttpRequest();
xhr.open("GET", encodeURI(query));
xhr.setRequestHeader('Accept', "application/json");
xhr.setRequestHeader('Content-Type', 'application/json;charset=utf-8');
xhr.setRequestHeader('OData-MaxVersion', '4.0');
xhr.setRequestHeader('OData-Version', '4.0');
xhr.setRequestHeader('Prefer', 'odata.include-annotations="*"');
xhr.onreadystatechange = function () {
    if (this.readyState == READYSTATE_COMPLETED) {
        if (this.status == HTTP_STATUS_OK) {
            var data = JSON.parse(this.response);
            var result = data.value;
            if (result.length > 0) {
                var definitionGuid = result[0].environmentvariabledefinitionid;

                // Environment Variable DefinitionレコードGUIDをキーに環境変数の現在値を取得
                var entitySetName = "environmentvariablevalues";
                var options = `?$select=value&$filter=_environmentvariabledefinitionid_value eq '${definitionGuid}'`;
                var query = webApiUrl + entitySetName + options;

                var xhr = new XMLHttpRequest();
                xhr.open("GET", encodeURI(query));
                xhr.setRequestHeader('Accept', "application/json");
                xhr.setRequestHeader('Content-Type', 'application/json;charset=utf-8');
                xhr.setRequestHeader('OData-MaxVersion', '4.0');
                xhr.setRequestHeader('OData-Version', '4.0');
                xhr.setRequestHeader('Prefer', 'odata.include-annotations="*"');
                xhr.onreadystatechange = function () {
                    if (this.readyState == READYSTATE_COMPLETED) {
                        if (this.status == HTTP_STATUS_OK) {
                            var data = JSON.parse(this.response);
                            var result = data.value;
                            if (result.length > 0) {
                                console.log(`環境変数の現在値(XMLHttpRequest):${result[0].value}`);
                            }
                        }
                    }
                };
                xhr.send(); //リクエストを送信
            }
        }
    }
};
xhr.send(); //リクエストを送信

コンソールに取得した環境変数の値が書き出されました

-M365関連, 技術
-, ,