Dynamics CRM 2011 SDK スクリプティング getServerUrl メソッドが返す値

みなさん、こんにちは。

今回は開発者向けの情報として、JScript 内で利用する事ができる
Xrm.Page.context.getServerUrl の Tips を紹介します。

概要

JScript を利用した開発を行っている場合、REST エンドポイントの
指定などで、サーバー名を指定する必要がある場合があります。

しかし、以下の理由からアドレスの直指定は避ける必要があります。

- 開発から本番環境への移動等、スクリプトのポータビリティが下がる
- IFD 環境の場合、接続する組織により URL が異なる
- Outlook でオフライン機能を利用する場合も、URL が異なる

これらの問題を解消するために、Xrm.Page.context.getServerUrl() で
サーバー名を動的に取得することが可能です。ただしこのメソッドが
どのような値を返すかを理解する必要があります。

返される値

getServerUrl メソッドが返す値のパターンは、以下の通りです。

設置型の場合

http(s)://[Server Name] : [Port Number]/[Organization Name]

プロトコルの種類およびサーバー名は、展開マネージャーのプロパティの
Web アドレスに指定した値を利用します。例えば、以下のような設定を
行っている場合、ブラウザで http プロトコルを指定して、 CRM という名称の
組織に接続している場合でも https://crm2011.contoso.local/CRM という値が
返されます。

image

IFD の場合

https://[Organization Name].[Domain Name] : [Port Number]

IFD の場合、プロトコルは HTTPS のみです。ドメイン名部分は、IFD を
構成した際に指定したドメイン名が利用されます。

Outlook オフライン利用の場合

https://localhost:2525

Outlook のオフライン機能を利用した場合、どのような接続形態でも
サーバー名等は変わりません。

まとめ

ネットワーク負荷分散構成を利用している場合等、実際のサーバー名とは
異なる名前でアクセスしている場合、getServerUrl メソッドがどのような値を
返すか理解しておく必要があります。テスト時等に、展開マネージャーに設定
した名前とは異なる名前でアクセスすることがあると思いますが、その際も
スクリプトでは、展開マネージャーや設定時の値を利用してアドレスを動的に
生成していますので、クロスドメインスクリプティングエラーなどが発生する
場合もあります。

‐ Dynamics CRM サポート 中村 憲一郎