ローカル オーバーライドを使用して JavaScript Web リソースをデバッグする

モデル駆動型アプリでイベント ハンドラーとして使用する JavaScript Web リソースを開発およびデバッグする場合は、通常、いくつかの変更を行い、それらがどのように動作するかをテストする必要があります。 変更のたびに Web リソースをアップロードして発行すると、このプロセスが遅くなります。

最新のブラウザー開発者ツールには、Web リソースのローカル コピーを保存する機能が用意されています。 モデル駆動型アプリが Web リソースを要求すると、ブラウザーはサーバー上のファイルではなくローカル コピーを読み込みます。 Web リソースを繰り返しアップロードして発行することなく、ローカル コピーの編集、ページの更新、変更のテストを行うことができます。 プロキシ ソフトウェア、ブラウザー拡張機能、または証明書をインストールする必要はありません。

最新のブラウザーでこれらの機能がどのように提供されるかについて詳しく見る。

Important

ローカル オーバーライドでは、お使いのブラウザーで読み込まれるリソースのみが変更されます。 Microsoft Dataverseの JavaScript Web リソースは更新されません。また、他のユーザーにも変更内容が表示されません。 トラブルシューティングが完了したら、保持する変更をソース ファイルにコピーし、通常のプロセスを使用して Web リソースを更新して発行してください。 この記事では、そのプロセスについては説明していません。

Prerequisites

準備:

  • フォームのイベント ハンドラーを提供するために使用される JavaScript Web リソースを持つモデル駆動型アプリが必要です。

    この記事では、「 最初のクライアント スクリプトの記述」で説明されている JavaScript Web リソースを使用します。 このチュートリアルでは、JavaScript Web リソース example_form-script.js を作成し、アカウント フォームに追加し、フォーム On Load イベントと On Save イベント、および Name 列の On Change イベントの関数を登録します。

    Note

    JavaScriptWebResourceExampleSolution_1_0_managed.zipをダウンロードできます。 このマネージド ソリューションをインストールすると、最初のクライアント スクリプトの記述 に関するチュートリアル記事の完成した結果を表すモデル駆動型アプリケーションを見つけることができます。

  • この記事ではMicrosoft Edgeを使用しますが、Google Chrome、Firefox、Safari の開発者ツールも同様の機能を備えています。

  • Microsoft Edge DevTools がローカル オーバーライドを格納するための空のフォルダーをコンピューター上に作成します。 ソース ファイル、資格情報、証明書、またはその他の機密情報を含むフォルダーは使用しないでください。 DevTools は、このフォルダー内に必要なフォルダー構造を作成します。 この記事では C:\temp\overrides を使用しますが、C:\Users\<your user name>\overrides を使用することをお勧めします。

この記事では、最初のクライアント スクリプトを作成する のスクリプトを使用します。

// Define a unique namespace for the sample library.
window.Example ??= {};

(() => {
    const notificationId = "_myUniqueId";
    const currentUserName = Xrm.Utility.getGlobalContext().userSettings.userName;
    const message = `${currentUserName}: Your JavaScript code in action!`;

    // Code to run in the form OnLoad event
    window.Example.formOnLoad = (executionContext) => {
        const formContext = executionContext.getFormContext();

        // Display the form level notification as an INFO
        formContext.ui.setFormNotification(message, "INFO", notificationId);

        // Wait for 5 seconds before clearing the notification
        window.setTimeout(
            () => formContext.ui.clearFormNotification(notificationId),
            5000
        );
    };

    // Code to run in the column OnChange event
    window.Example.attributeOnChange = (executionContext) => {
        const formContext = executionContext.getFormContext();

        // Automatically set some column values if the account name contains "Contoso"
        const accountName = formContext.getAttribute("name").getValue();
        if (accountName?.toLowerCase().includes("contoso")) {
            formContext.getAttribute("websiteurl").setValue("https://www.contoso.com");
            formContext.getAttribute("telephone1").setValue("425-555-0100");
            formContext.getAttribute("description").setValue("Website URL, Phone and Description set using custom script.");
        }
    };

    // Code to run in the form OnSave event
    window.Example.formOnSave = () => {
        // Display an alert dialog
        Xrm.Navigation.openAlertDialog({ text: "Record saved." });
    };
})();

この JavaScript Web リソースには、次のイベントに登録される 3 つの関数が用意されています。

Function Event
Example.formOnLoad Form OnLoad
Example.attributeOnChange Field OnChange
Example.formOnSave Form OnSave

この手順は、フォーム イベント ハンドラーとして登録されている JavaScript Web リソースでも機能します。 Web リソースの名前を使用し、手順がサンプルを参照している場合はそのイベントをトリガーします。

発行されたスクリプトが機能することを確認する

オーバーライドを作成する前に、発行された Web リソースの現在の動作を確認してください。

  1. Microsoft Edgeでモデル駆動型アプリを開きます。

  2. 既存のアカウント レコードを開くか、新しいアカウント レコードを作成します。

  3. 次のメッセージのようなフォーム通知が 5 秒間表示されることを確認します。

    <Your Name>: Your JavaScript code in action!

この手順では、フォームが Web リソースを読み込み、 Example.formOnLoad イベント ハンドラーを呼び出すことを確認します。

ローカル オーバーライドを設定する

Microsoft Edge ブラウザー プロファイルで初めてローカル オーバーライドを使用する場合にのみ、オーバーライド フォルダーを選択する必要があります。

  1. アカウント フォームを開いた状態で、 F12 キーまたは Ctrl+Shift+I キーを押して DevTools を開きます。

  2. [ソース] ツールを選択してください。

  3. [ナビゲーター] ウィンドウで、[オーバーライド] タブを選択します。タブが表示されない場合は、[その他のタブ] を選択し、[オーバーライド] を選択します。

  4. オーバーライド用フォルダーを選択。

  5. オーバーライド用に作成した空のフォルダーを選択し、[フォルダーの選択] を選択します。

  6. DevTools がフォルダーへのフル アクセスを要求したら、許可 を選択します。

    ローカル オーバーライド フォルダーへのフル アクセスを要求する DevTools プロンプトのスクリーンショット。

  7. [ローカル オーバーライドを有効にする] が選択されていることを確認します。

    オーバーライド フォルダーが選択された後の Sources ツールの [Overrides] タブのスクリーンショット。[ローカル オーバーライドを有効にする] が選択されています。

サービス ワーカーのネットワーク バイパスを有効にする

Important

ネットワークに対してバイパスを有効にすると、Service Worker がキャッシュされた応答を返さないようにすることで、DevTools のローカルオーバーライドが確実に適用されます。 この手順を実行しない場合、ローカルオーバーライドはモデル駆動型アプリでは機能しません。

  1. DevTools で、[ アプリケーション ] タブを選択します。

    タブが表示されない場合は、 + (その他のタブ) を選択し、[ アプリケーション] を選択します。

  2. 左側のナビゲーション ウィンドウで、[Service Workers] を選択します。

  3. 要求でサービス ワーカーをバイパスして代わりにネットワークを使用するには、ネットワークに対してバイパス を選択します。

    [ネットワークのバイパス] が選択されている [サービス ワーカー] ウィンドウのスクリーンショット。

  4. ページを更新して変更を適用してください。

Web リソースのオーバーライドを作成する

ネットワーク ツールを使用して、アカウント フォームを開いたときに読み込まれる JavaScript ファイルを見つけます。

  1. 「ネットワーク」ツールを選択します。

  2. ネットワーク アクティビティが記録されていない場合は、ネットワーク ログを記録 を選択してください。

  3. フォームで Web リソースが再び読み込まれるように、ページを更新します。

  4. [フィルター] ボックスに、Web リソースの名前を入力し始めます (例: example_form-script.js)。

  5. ネットワーク要求の一覧で、 example_form-script.jsを右クリックし、[ コンテンツのオーバーライド] を選択します。

    [コンテンツのオーバーライド] コマンドが選択された example_form-script.js でフィルター処理されたネットワーク ツールのスクリーンショット。

  6. [ソース] ツールを選択し、[オーバーライド] タブを選択します。

  7. DevTools で作成されたフォルダーを展開し、example_form-script.jsを選択します。

    [オーバーライド] タブの example_form-script.js のスクリーンショット。紫色のオーバーライド インジケーターが表示されています。

    DevTools は、オーバーライド フォルダーに Web リソースをコピーします。 ファイル アイコンの紫色の点は、DevTools がリソースをオーバーライドしたことを示します。

Tip

Sources ツールの [ページ] タブからオーバーライドを作成することもできます。 Web リソースを見つけて右クリックし、[ コンテンツのオーバーライド] を選択します。

Microsoft Edgeがローカル コピーを読み込むかどうかを確認する

オーバーライドが機能していることを確認できるように、認識しやすい変更を行います。

  1. DevTools エディターで、次の行を見つけます。

    const message = `${currentUserName}: Your JavaScript code in action!`;
    
  2. この行に置き換えます:

    const message = `${currentUserName}: Local override in action!`;
    

    Note

    DevTools エディターにコードを貼り付けようとすると、このダイアログが表示されます。 allow pasting入力し、続行するには [許可] を選択する必要があります。 変更を直接入力した場合、このダイアログは表示されません。

    [許可] ボタンが表示された DevTools の貼り付けに関する警告ダイアログのスクリーンショット。

  3. 通知期間を 5000 から 15000 に変更します。

  4. + Sを押してローカル ファイルを保存します。

  5. アカウントフォームを更新

  6. 通知にローカルオーバーライドが有効です!が表示され、15 秒間表示されたままであることを確認します。

    ローカルオーバーライドの動作を示すアカウント フォーム通知のスクリーンショット。

変更されたメッセージと継続時間によって、Microsoft Edge が発行された Web リソースではなくローカル オーバーライドを読み込んだことが確認されます。

イベント ハンドラーをデバッグする

オーバーライドが機能することを確認したら、DevTools デバッガーを使用してスクリプトを調査してください。

フォーム OnLoad イベントをデバッグする

  1. ソース ツールで、オーバーライドされたexample_form-script.js ファイルを開きます。

  2. ブレークポイントを設定するには、このステートメントの行番号を選択します。

    Example.formOnLoad イベント ハンドラーにブレークポイントがある DevTools エディターのスクリーンショット。

  3. アカウントフォームを再読み込みします。

  4. スクリプトの実行が一時停止したら、[ スコープ ] ウィンドウを使用して executionContext と formContextを検査します。

    executionContext と formContext の値を示す DevTools スコープ ペインのスクリーンショット。

  5. 関数をステップ実行し、 setFormNotificationの呼び出しを観察します。

  6. [ スクリプトの実行を再開 する] を選択して続行します。

アカウント名 OnChange イベントをデバッグする

  1. Example.attributeOnChange でこのステートメントにブレークポイントを設定:

    const accountName = formContext.getAttribute("name").getValue();
    
  2. アカウント フォームでアカウント 名を変更し、列からフォーカスを外して On Change イベントをトリガーします。

  3. 実行が一時停止したら、 accountNameの値を調べます。

    accountName の検査中に Example.attributeOnChange イベント ハンドラーで一時停止された DevTools のスクリーンショット。

  4. Contosoを含むアカウント名を使用し、関数をステップ実行して、スクリプトによって Web サイト、メイン電話、説明の値がどのように設定されるかを確認します。

フォーム OnSave イベントをデバッグする

  1. Xrm.Navigation.openAlertDialog の Example.formOnSave ステートメントにブレークポイントを設定します。

  2. レコードを保存します。

  3. 実行が一時停止したら、呼び出し履歴を調べて、フォームのOn Saveイベントが予期された関数を呼び出したことを確認します。

    Example.formOnSave イベント ハンドラーで一時停止されている DevTools デバッガー呼び出し履歴のスクリーンショット。

  4. スクリプトの実行を再開し、アラート ダイアログが開くことを確認します。

修正の可能性をテストしたいときはいつでも、オーバーライドを編集して保存できます。 フォームを更新して、フォームの読み込み時に実行されるコードの変更をテストしてください。 関連するフォームまたは列イベントをトリガーして、他のイベント ハンドラーをテストします。 コンソール ツールを使用してエラーとログ出力を確認します。

オーバーライドを公開された Web リソースと比較する

ローカルの変更によって問題が発生しているかどうかを確認するには:

  1. ソース ツールで、[オーバーライド] タブを選択します。
  2. [ローカル オーバーライドを有効にする] をオフにします。
  3. アカウントフォームを更新し、イベントを再度テストしてください。

Microsoft Edge で公開された Web リソースがサーバーから読み込まれるようになりました。 ローカル オーバーライドを有効にする を選択し、フォームを更新して、ローカル コピーの使用を再開します。

トラブルシューティングを完了する

ローカル オーバーライド ファイルは、Dataverse 内の Web リソースやご使用のソリューションのソース ファイルに接続されていません。

  1. オーバーライド ファイルから保持する変更を、Web リソースの管理に使用するソース ファイルにコピーします。
  2. 通常の開発およびデプロイ プロセスを使用して、JavaScript Web リソースを更新して発行します。
  3. [ローカルオーバーライドを有効にする] がオフの状態で、発行された Web リソースをテストします。
  4. オーバーライド構成が不要になったら、[オーバーライド] タブで [構成のクリア] を選択します。

Caution

オーバーライド フォルダー内のファイルを Web リソースのソース ファイルとして扱わないようにします。 構成をクリアする前に、またはローカルオーバーライドファイルを削除する前に、残しておきたい変更は保存してください。

ローカルオーバーライドのトラブルシューティング

ローカル オーバーライドを使用するときに発生する可能性がある問題を次に示します。

Web リソースがネットワーク ツールに表示されない

ネットワーク ツールが記録中であることを確認し、フィルターをクリアして、フォームを更新します。 フォームが表示される前に、Web リソースを読み込む必要があります。 また、JavaScript ライブラリがフォームに追加されていること、およびフォームのカスタマイズが公開されていることも確認してください。

[コンテンツのオーバーライド] コマンドは使用できません

ソース ツールに戻り、オーバーライド フォルダーを選択し、DevTools にアクセスを許可し、[ローカル オーバーライドを有効にする] を選択したことを確認します。 次に、フォームを更新して、もう一度やり直してください。

フォームでは公開済みスクリプトが引き続き使用されます

DevTools を開いたままにし、[ローカルオーバーライドを有効にする] が選択されていることを確認し、Web リソースの [ネットワーク] ツールまたは [ソース] ツールに紫色のドットがあることを確認します。 オーバーライドを保存し、フォームを更新します。

ブレークポイントに達しない

オーバーライドされたファイルにブレークポイントを設定し、有効に表示されることを確認してください。 その関数に関連付けられているイベントをトリガーします。読み込み時 のフォームを更新するか、変更時 用に構成された列の値を変更するか、または 保存時 のレコードを保存します。 また、コンソールツールで、スクリプトの読み込みを妨げている構文エラーを確認します。