Dynamics CRM 2013/Fall '13 タブレット用 CRM アプリケーション その 5

みなさん、こんにちは。

前回に続き、Microsoft Dynamics CRM 2013 および、Microsoft Dynamics
CRM Online Fall '13 向けタブレット用 CRM アプリケーションを紹介します。

今回はスクリプト開発を紹介します。

Xrm.Page オブジェクトモデル

タブレット用 CRM アプリケーションでも、Xrm.Page オブジェクトモデル
を利用してスクリプト開発が行えますが、以下の注意事項があります。

ダイアログメッセージ

メイン UI の処理を中断する window.alert, window.confirm, window.prompt
はサポートされません。代わりに Xrm.Utility.alertDialog/confirmDialog を
使用してください。これらの関数はスクリプトを中断しないため問題なく
動作します。

もしカスタマスクリプトがすでに window.alert を含んでいる場合、自動的
に Xrm.Utility.alertDialog 関数に置き換えられますが、これは一時的な処置
のため、早い時点で明示的に置き換えを検討してください。

制限

以下の関数はタブレット用 CRM アプリケーションでは動作しません。

Xrm.Page.context.getCurrentTheme
Xrm.Page.uiViewPort
Xrm.Page.data.entity.getDataXml
Xrm.Page.ui control Web リソースおよび IFRAME 関連の関数
Xrm.Page.ui.formSelector
Xrm.Page.ui tab.setDisplayState
Xrm.Page.ui.navigation.items コレクション
Xrm.Utility.openWebResource
Xrm.Page.ui.refreshRibbon

これらの関数はなにも実行されず、結果も返りません。カスタムコード
内で返り値を利用している場合、undefined となります。

クライアントの識別とコードの分離

Web クライアントとタブレットクライアントでフォームを共有するため
タブレットクライアントで利用できないコードが必要になる場合が多く
あります。その場合、以下の様にクライアントの種類を判別することで
対応が可能です。

 var isCrmForTablets = (Xrm.Page.context.client.getClient() == "Mobile")
if (isCrmForTablets)
{
 // Code for CRM for Tablets only goes here
}
else
{
 // Code for web browser or Outlook Client only goes here
}
// Code for any Client goes here

またコマンドバーから <JavaScriptFunction> ブロックを利用してコード
を実行する際も、クライアントのタイプを取得して、コードを分離する
ことが可能です。もし実行するアクションがタブレット用クライアント
でサポートされない場合、DisplayRule を利用してコマンドを隠すことが
できます。既定では明示的に指定しない限りコマンドは表示されます。

以下にタブレット用アプリケーションで利用できないコマンドを非表示
にする DisplayRule の例を示します。

 <DisplayRule Id="My.HideOnModern">
 <CommandClientTypeRule Type="Modern"
                        InvertResult="true" />
</DisplayRule>

ブラウザクライアントとの違い

Xrm.Page オブジェクトモデルでサポートされない関数がある以外にも
ブラウザクライアントとのは以下の違いがあります。

コンポジットコントロール

タブレット用 CRM アプリケーションではコンポジットコントロールは
サポートされないため、個別のフィールドとして表示されます。

Web リソースと IFRAME

タブレット用 CRM アプリケーションでは、Web リソースと IFRAME が
サポートされません。カスタマスクリプトでそれらの要素にアクセス
している場合問題となるため、コードを分離する必要があります。

スクリプトのデバッグ

ブラウザ用のスクリプトデバッグツールは利用できないため、代わりに
以下の方法をとる必要があります。

1. Web ブラウザでスクリプトを事前に十分検証する。
2. Xrm.Page.context.client.getClient 関数でコードを分離している場合、
一時的に分離をやめて Web ブラウザでテストを行う。タブレット用
CRM アプリケーションで動作するスクリプトは Web ブラウザでも
動作するためテストは十分に行える。
3. スクリプトに debugger ステートメントを含めておき、Visual Studio
がインストールされている Windows 8 コンピューターでテストする。
4. Xrm.Utility.alertDialog を利用して変数などを確認する。

まとめ

タブレット用 CRM アプリケーションでもスクリプトが動作する事は
ビジネスロジックの整合性の観点から非常に重要ですが、サポート
されない関数や利用できるフィールド数の上限など、タブレット用
CRM アプリケーションの特性を理解した開発が必要になります。

カスタムスクリプトで問題が出る場合は、サポートされない関数を
利用していないかなど制限の観点からまずはご確認ください。

- 中村 憲一郎