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(); //リクエストを送信

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

会社紹介

私が所属しているアドバンスド・ソリューション株式会社(以下、ADS)は一緒に働く仲間を募集しています

会社概要
「技術」×「知恵」=顧客課題の解決・新しい価値の創造

この方程式の実現はADSが大切にしている考えで、技術を磨き続けるgeekさと、顧客を思うloveがあってこそ実現できる世界観だと思っています
この『love & geek』の精神さえあれば、得意不得意はno problem!
技術はピカイチだけど顧客折衝はちょっと苦手。OKです。技術はまだ未熟だけど顧客と知恵を出し合って要件定義するのは大好き。OKです
凸凹な社員の集まり、色んなカラーや柄の個性が集まっているからこそ、常に新しいソリューションが生まれています

ミッション
私たちは、テクノロジーを活用し、業務や事業の生産性向上と企業進化を支援します

ホームページ
アドバンスド・ソリューション株式会社
アドバンスド・ソリューション株式会社

アドバンスド・ソリューションは主にMicrosoft製品を使用して、企業の生産性向上に取り組んでいます。要件定義から導入 ...

サイトへ移動

お問い合わせ
お問い合わせ  | アドバンスド・ソリューション株式会社
お問い合わせ | アドバンスド・ソリューション株式会社

お問い合わせはこちら

-M365関連, 技術
-, ,