エクスポート (0) 印刷
すべて展開

Microsoft Dynamics CRM で Javascript を使用する

適用対象: Microsoft Dynamics CRM 2013, Microsoft Dynamics CRM Online

Microsoft Dynamics CRM 2013 および Microsoft Dynamics CRM Online には、JavaScriptを使用する機会が多くあります。Microsoft Dynamics CRM で使用されるすべての JavaScript は、JScript Web リソースを作成することによって追加されます。このトピックには、JavaScript を使用する開発者のための情報と、Microsoft Dynamics CRM SDK およびそのほかのソースの関連するトピックへのリンクが含まれます。

Microsoft Dynamics CRM で Javascript を使用する領域

JavaScript を使用して、フォーム スクリプト、コマンド バー (リボン) コマンド、および Web リソースでのアクションを実行できます。

Microsoft Dynamics CRM の JavaScript の最も一般的な用途は、エンティティ フォーム イベントのイベント ハンドラーとして関数を追加することです。詳細については、「Microsoft Dynamics CRM フォームのコードを記述する」を参照してください。

Microsoft Dynamics CRM コマンド バーをカスタマイズすると、追加するコントロールのコマンドを構成できます。次のコマンドには、コントロールを有効化するかどうか、コントロールが使用されたときはどのアクションを実行するかを制御するルールが含まれています。詳細については、「コマンドおよびリボンをカスタマイズする」を参照してください。

Microsoft Dynamics CRM は、URL を使用してアクセスできるファイルのバイナリ表現を保管する組織所有のエンティティを提供します。このファイルは、Web リソースと呼ばれます。Web リソースには複数の種類があります。JavaScript ライブラリを表す Web リソースは、JScript Web リソースと呼ばれます。Web ページ (HTML) Web リソースを使用して、Web サーバーのファイルにするように、JavaScript ライブラリを使用するユーザー インターフェイスを提供できます。これらのファイルは Microsoft Dynamics CRMの一部であるため、これらにアクセスするユーザーはすでに認証されています。したがって、ユーザーを認証するためにコードを記述せずに Microsoft Dynamics CRM Web サービスを使用できます。詳細については、「Microsoft Dynamics CRM の Web リソース」を参照してください。

jQuery の使用

HTML Web リソースで jQuery を使用する
マイクロソフトは、jQuery は優れたクロスブラウザー ライブラリなので、HTML Web リソースとともに jQuery を使用して、ユーザー インターフェイスを提供することをお勧めします。

HTML Web リソースで、提供されたライブラリを制御します。DOM の操作に対しての制限はありません。HTML Web リソース内で jQuery を気軽に使用してください。

フォーム スクリプトまたはリボン コマンドに jQuery の使用を避ける
フォーム スクリプトおよびリボン コマンドで jQuery を使用することをお勧めしません。

jQuery が提供する最大の益は、DOM のクロスブラウザー操作が簡単になることです。これにより、フォーム スクリプトとリボン コマンドは明示的にサポートされていません。スクリプトを制限して、フォーム スクリプトとリボン コマンドで使用できる Xrm.PageXrm.Utility ライブラリを使用します。Microsoft Dynamics CRM で有用な jQuery のそのほかの機能を使用し、$.ajaxを使用する機能を含めることにした場合、次のことを考慮します。

  • 最良のパフォーマンスを得るには、必要でない場合、jQuery をロードしないでください。

  • OData および最近のアプリの SOAP エンドポイントに対するリクエストを実行するのに $.ajax を使用することはサポートされますが、代替手段です。$.ajax を使用する代替策は、ブラウザーの XMLHttpRequest オブジェクトの直接使用することです。jQuery $.ajax メソッドは、このオブジェクトのラッパーのみです。ネイティブ XMLHttpRequest オブジェクトを直接使用する場合、jQuery を読み込む必要はありません。

    サンプル: OData エンドポイントと JavaScript を使用した作成、取得、更新、および削除」および「サンプル: OData エンドポイントと JavaScript および jQuery を使用した作成、取得、更新、および削除」にある SDK.REST.js および SDK.JQuery.js サンプル ライブラリを比較します。どちらも同じ操作を行いますが、SDK.REST.js では、jQuery は必要ではありません。

  • ページに読み込まれる jQuery の各バージョンは、違うバージョンの場合があります。jQuery のさまざまなバージョンはさまざまな動作をするので、jQuery の複数バージョンが同じページで読み込まれるときは、問題が発生する可能性があります。これはこの問題を軽減する手法ですが、jQuery ライブラリと jQuery 依存する他のライブラリの編集によって異なります。詳細 :「Microsoft Dynamics CRM 2011 & 2013 での jQuery および jQuery UI」、「jQuery.noConflict()」を参照してください。

複数のブラウザーで Javascript を記述する

どのブラウザーが使用されるかわからないので、使用するスクリプトはサポートされているすべてのブラウザーで動作することを確認してください。Internet Explorer と他のブラウザーの重要な違いのほとんどは、HTML および XML DOM の操作と関係しています。HTML DOM の操作がサポートされていないため、スクリプト ロジックだけがサポートされる操作を実行し、Xrm.Page API を使用している場合、他のブラウザーをサポートするために大きな変更は必要ではありません。Custom Code Validation Tool を使用して、Internet Explorerでのみ動作するコードを識別します。

jQuery などのクロスマッピング ライブラリは、Web リソース開発のための良いソリューションですが、フォーム スクリプトまたはリボン コマンドに必要ありません。詳細 : jQuery の使用

そのほかのブラウザーのサポート

Microsoft Dynamics CRM 2013 および Microsoft Dynamics CRM Onlineは W3C 標準をサポートするため、アプリケーションは最近のブラウザーを使用したり、それらの標準をサポートする任意のプラットフォームからアクセスできます。ただし、Microsoft Dynamics CRM は特定のブラウザー セットおよびプラットフォームを使用してのみテストされます。サポートされるプラットフォームとブラウザーの一覧については、「サポートされる Web ブラウザー」を参照してください。

サポートされていないブラウザーまたはブラウザー バージョンを使用しており、サーバー名または URL として組織のサーバー名を入力している場合、電話用 Microsoft Dynamics CRM ページにリダイレクトされます。電話用の CRM ページは、モバイル デバイスで使用できる機能が制限されているブラウザーなどほとんどのブラウザーで適切に動作するはずです。

組織またはソリューションのブラウザーのサポートを制御する

公開されている Web サイトの作成には現代ほとんどのブラウザーをサポートできるようすることが必要ですが、いままで存在したすべてのブラウザーをサポートしている公開されている Web サイトはほとんどありません。どのブラウザーをサポートできるかを確立する必要があります。開発とテストのコストを節約するには、多くのビジネス アプリケーションでは、ユーザーが特定のブラウザーを使用していることが必要になります。

Microsoft Dynamics CRMを使用している組織にソリューションを準備している ISV の場合、組織が Microsoft Dynamics CRM 2013 および Microsoft Dynamics CRM Online でサポートされるブラウザーの 1 つを使用していることを想定します。ただし、ユーザーが特定のブラウザーを使用する必要がある組織に対してのカスタマイズのみを準備している場合、組織がサポートしていないブラウザーのカスタマイズを開発およびテストする理由はありません。

ネットワーク管理者は、ソフトウェア制限ポリシーAppLocker の両方またはいずれかを使用して、どのアプリケーションがドメインで実行またはインストールされるのを許可するかを施行します。

技術記事: 組織のブラウザーのサポートを制御するにより、開発者が Microsoft Dynamics CRM アプリケーション専用のブラウザ ポリシー オプションを実装するように変更できる方法を提供します。

XMLHttpRequest 状態値

Internet Explorer では、onreadystatechange イベント ハンドラーで使用する別の XMLHttpRequest 状態値を使用することがあります。UPDATE または DELETE のアクションを適用すると、Internet Explorer は 204 の期待値ではなく 1223 の状態の値を返す場合があります。これを補正するには、次のコード サンプルに示すように、両方を確認する必要があります。

if (this.readyState == 4 /* complete */) {
this.onreadystatechange = null; //avoids memory leaks
if (this.status == 204 || this.status == 1223) {
//Success
}
else {
//Error
}
}

SDK.REST.js ライブラリおよび SDK サンプルの他のライブラリは、このテクノロジを使用して可能性のある両方の状態値を確認します。これらのライブラリの詳細については、「サンプル: OData エンドポイントと JavaScript を使用した作成、取得、更新、および削除」および「サンプル: JavaScript を使用したエンティティ メタデータの取得」を参照してください。

JavaScript を使用して XML を解析する必要があるさまざまな機会があります。Internet Explorer を使用するのと他のブラウザを使用するのと XML を解析する方法に大きな違いがあることに注意してください。Internet Explorer は Microsoft XML Core Services (MSXML) APIs を使用して、XML ドキュメント オブジェクトと対話します。これらの APIs は、他のブラウザーでは利用できない W3C DOM へのいくつかの拡張機能が含まれています。以下は、2 つの例です。

  • Internet Explorer を使用して XML ドキュメントのデータを抽出するのに使用される 2 件の一般的なメソッドは、selectNodesおよび selectSingleNodeです。これら両方のメソッドは、パラメーターとして XPath 式を使用し、ノードまたはノードの一覧を返します。他のブラウザーでは、XPath 式を使用する場合、evaluate メソッドを使用します。代わりに、ドキュメント階層に移動し getElementsByTagNameNS メソッドを使用するのにコードをリファクターできます。

  • Internet Explorer は、text プロパティを使用して、要素のテキストにアクセスします。他のブラウザーでは、textContent プロパティを使用します。

これらの違いに対処できるようなさまざまな方法があります。使用する方法は、コードの参照および条件によって異なります。

サンプル: JavaScript を使用したエンティティ メタデータの取得 にある SDK.MetaData.js ライブラリは、helper 関数を使用します。このライブラリは Web リソース のSOAP エンドポイントを使用して、エンティティおよび属性メタデータを取得します。このライブラリは、 XMLHttpRequest.responseXML として返される XML ドキュメントからの解析データによって異なります。このライブラリで、次の helper 関数がライブラリの他の関数全体で追加され使用されました。

これらの helper 関数を使用して、Internet Explorer 専用に記述された既存コードは、次に示すように更新されました。

 

Internet Explorer 専用の元のコード 複数のブラウザーをサポートできる新しい関数

node.selectNodes(XPathExpr);

SDK.MetaData._selectNodes(node,XpathExpr);

node.selectSingleNode(XPathExpr);

SDK.MetaData._selectSingleNode(node, XPathExpr);

node.selectSingleNode(ElementName).text;

SDK.MetaData._selectSingleNodeText(node, ElementName);

node.text

SDK.MetaData._getNodeText(node);

JavaScript を使用するデータ アクセス

JavaScript を使用してデータにアクセスするアプリケーションで使用する 2 の Web サービスがあります。

以前は "Web リソース用 REST エンドポイント" として知られていました。OData エンドポイントを使用すると、URI (Uniform Resource Identifier) ベースの Web サービスで HTTP リクエストを実行できます。"RESTful" Web サービスは、プログラミングが簡単なので人気があります。

OData エンドポイントの現在の実装は、操作の作成、取得、更新、および削除に制限されています。サンプル: OData エンドポイントと JavaScript を使用した作成、取得、更新、および削除 には、OData エンドポイントの使用をさらに簡単にする再利用可能ライブラリの例を提供する SDK.REST.js ライブラリが含まれています。

OData エンドポイントの利点の 1 つは、OData プロトコル を実装していることで、データをクエリおよび更新する方法を提供します。JavaScriptを使用する場合、通常 JavaScript Object Notation (JSON) 形式のオブジェクトを取得します。これにより結果が扱いやすくなります。OData エンドポイントの主な制限は、IOrganizationService.Execute メソットを使用してメッセージ(RequestResponse クラス) を実行できないことです。Web リソースの SOAP エンドポイントを使用して、メッセージを実行します。

詳細については、「Web リソースで OData エンドポイントを使用する」を参照してください。

SOAP エンドポイントによりメッセージを実行できます。REST エンドポイントでは実行できません。この Web サービスの Create、Retrieve、Update、Delete および RetrieveMultiple メソッドを呼び出すこともできますが、REST エンドポイントを使用するほど簡単ではありません。

Microsoft Dynamics CRM は SOAP エンドポイントの使用を容易にする JavaScript ライブラリを提供していません。SOAP エンドポイントを使用すると、リクエストを定義する XML を含む http リクエストを投稿する必要があり、応答で返された XML を解析する必要があります。

SDK は、SoapLogger と呼ばれるMicrosoft Visual C# のソリューションを提供します。それにより、Visual C# を使って Microsoft Dynamics CRM Web サービスで操作を実行する際に送受信される XML をキャプチャできます。この情報を使用して、自分自身の JavaScript ライブラリを作成することができます。Microsoft CRM MVP Jamie Miley は、Codeplex に CRM 2011 Jscript Soap Request Formatter プログラムをリリースしました。このプログラムはさらに進んだ手順を踏み、実際に JavaScript ライブラリを作成することができます。

SDK には、エンティティおよび属性メタデータの取得方法を示す例が含まれます。詳細については、「サンプル: JavaScript を使用したエンティティ メタデータの取得」を参照してください。このサンプルの SDK.MetaData.js ライブラリは、エンティティまたは属性メタデータを取得する際に使用できます。

詳細については、「Web リソースで最近のアプリケーションのための最近のアプリの SOAP エンドポイントを使用する」を参照してください。

JavaScript プログラミングのベスト プラクティス

以下のセクションは Microsoft Dynamics CRMで JavaScript を使用する際のベスト プラクティスについて説明します。

インターネットでは、サポートされていないメソッドを使用するさまざまな例や提案があります。これらは、ページ コントロールに文書化されていない内部関数を活用するものもあります。これらのメソッドは機能するかもしれませんが、サポートされていないため Microsoft Dynamics CRMの将来のバージョンでも引き続き使用できるとは期待できません。

Custom Code Validation Tool を使用して、サポートされていないメソッドを使用しているコードを特定します。

jQuery のようなクロスブラウザー JavaScript ライブラリには、複数のブラウザーをサポートする HTML Web リソースを開発する際は多くの利点があります。jQuery などの JavaScript ライブラリは、Microsoft Dynamics CRMでサポートされるすべてのブラウザーに統合開発環境を提供します。これらの機能は、HTML Web リソースを使用してユーザー インターフェイスを提供するのに適しています。jQuery のような JavaScript ライブラリは、ドキュメント オブジェクト モデル (DOM) と対話する一貫性のある方法を提供します。

マイクロソフトはアプリケーション内のどのページでも jQuery を使用することをお勧めしませんし、サポートもしません。これには、フォーム スクリプトおよびリボン コマンドが含まれています。詳細 : jQuery の使用.

コンテンツ デリバリ ネットワーク (CDN) の JavaScript ライブラリは、公開されている Web サイトに多くの利点を提供します。これらのライブラリはインターネットでホストされるため、ライブラリのコンテンツを含む Web リソースを作成する必要はありません。Microsoft Dynamics CRM では、CDN JavaScript ライブラリを使用する前に、以下の問題を考慮する必要があります。

  • オフライン アクセス対応 Microsoft Office Outlook 用 Microsoft Dynamics CRM クライアントのユーザーは、オフライン作業中にインターネット接続がない状態で作業できます。JavaScript ライブラリにインターネット接続が必要な場合、コードは失敗します。

  • 組織によっては、従業員のインターネット アクセスを制限することがあります。ネットワークを CDN ライブラリのサイトにアクセスできるように構成しないと、それらの組織において、コードが失敗することがあります。

CDN ライブラリの使用の代替方法は、ライブラリのコンテンツと共にスクリプト (JavaScript) Web リソースを作成することです。Web リソースは組織所有のエンティティなので、オフライン アクセス対応 Outlook 用 Microsoft Dynamics CRM ユーザーがオフラインのときに同期されます。これらの Web リソースはアプリケーションの一部になるため、組織がインターネットへのアクセスを制限しても妨げられません。

jQuery のようなクロスブラウザー ライブラリを使用する場合でも、ブラウザー間の違いを認識する必要があります。navigator.useragent プロパティのクエリに使用されるブラウザーを検出できます。これでは、ブラウザーの検出と呼ばれます。ブラウザーの検出は、新しいバージョンのブラウザーにどんな機能があるかを検討することはできないので、通常適切な方法ではありません。また、一部のブラウザーには navigation.useragent プロパティを変更する機能があるので、別のブラウザーのように見えます。

機能検出が推奨されている方法です。利用できる機能を検出することで、どのブラウザーを使用しているかわからなくても、サポートするブラウザーのコード パスを作成できます。機能検出に関する詳細については、「ブラウザーではなく機能を検出する方法」を参照してください。

JavaScript デベロッパは、コードのドキュメント オブジェクト モデル (DOM) 要素との対話に使用されます。window.getElementById メソッドまたは jQuery ライブラリを使用する場合があります。HTML Web リソースでこれらの方法を自由に使用できますが、Microsoft Dynamics CRM アプリケーション ページまたはエンティティ フォームの要素にアクセスするためにはサポートされていません。代わりに、エンティティ フォーム要素へのアクセスは、Xrm.Page オブジェクト モデルを通して公開されます。Microsoft Dynamics CRM 開発チームが、要素の ID の値を含むページの構成方法を変更する権利を保持します。それで、Xrm.Page オブジェクト モデルを使用することで、コードがページの実装方法の変更から保護されます。詳細については、「Xrm.Page オブジェクト モデルの使用」を参照してください。

HTML ページの開発者が一人しかいない場合、使用する JavaScript 関数名を簡単に管理できます。Microsoft Dynamics CRMで、他のソリューションは JavaScript 関数を関数が使用されているページに追加する場合があります。

ページに同じ名前の 2 種類の JavaScript 関数がある場合は、最初に定義された関数は 2 番目の関数で上書きされます。したがって JavaScript 関数に一意の名前を定義してください。詳細については、「スクリプト ライブラリの作成」を参照してください。

Web リソースに REST または SOAP エンドポイントを使用する Microsoft Dynamics CRM Web サービスを使用してデータへアクセスするときに、同期的に実行するように構成されている XMLHttpRequest を常に使用します。なぜならば、ブラウザーは単一スレッドで作動するからです。そのスレッドが長時間のプロセスを同期して実行するのに使用されている場合、ブラウザーは応答を停止します。

Microsoft Dynamics CRM で Javascript デバッグする

各ブラウザーは特定の種類のデバッグ拡張機能を提供します。Internet Explorer は Microsoft Dynamics CRM でスクリプトをデバッグするのに使用できる開発者ツールを提供します。Internet Explorerを使用してページを表示しているときに、Internet Explorer 開発者ツールは F12 を押して開くことができます。詳細については、「使い方シリーズ: IE8 の CRM JavaScript コードを簡単にデバッグする」および「開発ツールを使用したスクリプトのデバッグ」を参照してください。

Google Chromeで、F12 を押して開発者ツールを開きます。Firebug は、Mozilla Firefox を使用する Web 開発の一般的なブラウザー拡張機能です。Apple Safariでは、最初に [高度な設定][メニュー バー メニューに開発メニューを表示する] を選択する必要があります。次に [開発] メニューから [Web 検査の表示] を選択できます。

Microsoft Visual Studio を使用することもできます。詳細については、「Microsoft Dynamics CRM 2011 で JScript をデバッグする方法」を参照してください。

Microsoft Dynamics CRMで JavaScript ライブラリを使用すると、ライブラリはさまざまなライブラリを含むページに追加されます。デバッグ環境では、自分の特定なライブラリを分離することが困難な場合があります。Internet Explorerでデバッグ ツールを使用している場合、[スクリプト] タブで、使用できるスクリプトを展開し、次に示す new_debugging_example_script.js Web リソースなど JavaScript Web リソース名に対応する名前を持つスクリプトを見つけます。

さまざまなブラウザーのデバッグ ツールは、同様の機能を備えています。ライブラリを見つけたら、ブレーク ポイントを設定し、コードが実行する原因となるイベントを再作成します。

JavaScript をデバッグするときに window.alert メソッド を使用することは、アプリケーションのコードをトラブルシューティングする一般的な方法です。最近のすべてのブラウザーでは、デバッグ ツールへ簡単にアクセスできますが、デバッグしているアプリケーションを他の人が使用している場合、ベスト プラクティスではありません。

代わりにコンソールにメッセージを記述することを検討してください。次に、ライブラリに追加できる小さな関数を示します。それにより、コンソールを開いたときに表示するメッセージを送信するために使用できます。

function writeToConsole(message)
{
if (typeof console != 'undefined') {
console.log(message);
}
}

alert メソッドとは異なり、この関数を使用するコードを削除することを忘れた場合は、アプリケーションを使用するユーザーにはメッセージが表示されません。

関連項目

Microsoft Dynamics CRM 2013 and Microsoft Dynamics CRM Online
Send comments about this topic to Microsoft.
© 2014 Microsoft Corporation. All rights reserved.
表示:
© 2014 Microsoft