Japan Dynamics CRM Team Blog

Microsoft Dynamics CRM technical information for partners and customers

Dynamics CRM 2011 SDK Client Side 開発 新しいオブジェクトモデル

Dynamics CRM 2011 SDK Client Side 開発 新しいオブジェクトモデル

  • Comments 0

みなさん、こんにちは。

今日は Dynamics CRM 2011 で採用された新しいオブジェクトモデルを紹介します。
このモデルは、主にクライアントサイドの拡張に利用され、JScript や Silverlight から
フォーム上のオブジェクトにアクセスする際に用いられます。

Xrm.Page オブジェクト

image

新しいオブジェクトモデル階層のトップは Xrm.Page です。配下に 3 種類のオブジェクトがあります。

context
組織や実行ユーザーの情報、また引数として渡されたパラメーターを取得することができます。

data
エンティティのデータにアクセスすることができます。

ui
フォーム上のコントロールを取得することができます。

また Xrm.Page のコレクションとして、以下のものを提供します。

attributes
Xrm.Page.data.entity.attributes コレクションは、フォーム上にあるフィールドのコレクションです。

controls
controles コレクションは以下の3 種類に分類されます:

ui.contorols
Xrm.Page.ui.contorls コレクションは、フォーム上のコントロールのコレクションです。

attribute.controls
Dynamics CRM 2011 では、同じフィールドを何度もフォームに追加できるため、フォーム上にある特定の
フィールドのコントロールが 1 つとは限りません。 Xrm.Page.data.entity.attributes.controls コレクション
は、 それらを別のコントロールとして扱うコレクションです。

section.controls
Xrm.Page.ui.tabs.sections.controls コレクションは、特定セクション内のコントロールのコレクションです。

navigation.items
Xrm.Page.ui.navigation.items コレクションは、ナビゲーションペイン上のアイテムのコレクションです。

formSelector.items
ユーザーが複数のフォームにアクセスできる権限がある場合、Xrm.Page.ui.formSelector より
各フォームの アイテムにアクセスが可能です。

tabs
Xrm.Page.ui.tabs コレクションはフォーム上のタブのコレクションです。

sections
Xrm.Page.ui.tabs.sections コレクションは、特定タブ上のセクションのコレクションです。

上記の通り、フォーム上のあらゆるオブジェクトは、Xrm.Page 構造に含まれています。
より詳細な説明は SDK に譲るとして、具体的なサンプルを紹介したいと思います。

Xrm.Page.context のサンプル

まずは Xrm.Page.contex から見ていきましょう。いくつか有用なメソッドがありますが、
今回は組織とユーザーに 関する情報を取得してみたいと思います。

1. Internet Explorer で Dynamics CRM 2011 に接続します。

2. 設定 | カスタマイズ | システムのカスタマイズ を開きます。

3. Web リソースを選択して、新規ボタンをクリックします。任意の名前と表示名を入力します。
ここではContextSample としました。

4. 種類からスクリプト (JScript) を選択して、テキスト エディターをクリックします。

5. 以下のコードを入力します。

function getOrgUniquName()
{
var OrgUniqueName = Xrm.Page.context.getOrgUniqueName();
alert( OrgUniqueName );
}

6. 上書き保存をクリックして、公開をクリックします。画面はそのまま空けておきます。

7. 取引先企業エンティティからフォームを開き、既存のフォームを編集します。

8. フォームのプロパティをクリックして、ライブラリに作成した Web リソースを追加します。

image

9. イベント ハンドラーより、フォームの OnLoad に関数を追加します。

image

10. OK をクリックしてフォームの編集画面に戻り、プレビューよりフォームの作成をクリックします。

11. 組織の名前が表示されます。

12. 開いたままにしている Web リソースの画面に戻り、再度テキストエディターをクリックします。

13. ソースに以下の関数を追加します。

function getUserInfo()
{
// ユーザーにアサインされているセキュリティーロールが配列で返る
var SecurityRoleIds = Xrm.Page.context.getUserRoles();
var UserRoles = "RoleID: ";
// 配列で返った情報を文字列に置き換える
for(var i =0; i < SecurityRoleIds.length; i++)
{
UserRoles += SecurityRoleIds[i] + "\n";
}
// 情報を画面に出力
alert("User Id: " + Xrm.Page.context.getUserId() + "\nUser Language Id: " +
Xrm.Page.context.getUserLcid() + "\n" + UserRoles );
}

14. OK をクリックしてエディターを閉じ、上書き保存をクリックしてから公開をクリックします。

15. 取引先企業のフォームのプロパティを再度開きます。

16. 新しく追加した getUserInfo 関数を OnLoad に追加します。

image

17. OK でプロパティを閉じて、プレビューからフォームの作成をクリックします。

18. 先ほどと同じように、まず組織の名前が出ます。OK をクリックします。

image

19. 次にユーザーの情報が出ます。(ここではユーザーに 3 つのセキュリティーロールをアサイン)

image

このほかにも、実行しているサーバーの URL やOutlook クライアントを使用しているかなど
さまざまな情報が取得できます。いろいろ試してみてください。

Xrm.Page.data のサンプル

では次に、フォーム上にあるデータに関連するサンプルを作ってみたいと思います。

フォーム上のフィールド取得

1. Internet Explorer で Dynamics CRM 2011 に接続します。

2. 設定 | カスタマイズ | システムのカスタマイズ を開きます。

3. Web リソースを選択して、新規ボタンをクリックします。任意の名前と表示名を入力します。
ここでは dataSample としました。

4. 種類からスクリプト (JScript) を選択して、テキスト エディターをクリックします。

5. 以下のコードを入力します。

function getAttributeInfo()
{
var attributes = Xrm.Page.data.entity.attributes.get();
var attributesinfo = "";
alert("このフォームには、合計" + attributes.length + "フィールドあります");
for(var i=0; i < attributes.length; i++)
{
attributesinfo  += "attribute " + i + ": " + attributes[i].getName() + " Type: " +
attributes[i].getAttributeType() + "\n";
}
alert(attributesinfo );
}

6. 上書き保存をクリックして、公開をクリックします。画面はそのまま空けておきます。

7. 取引先企業エンティティからフォームを開き、既存のフォームを編集します。

8. フォームのプロパティをクリックして、ライブラリに作成した Web リソースを追加します。

image

9. イベント ハンドラーより、フォームの OnLoad に関数を追加します。

image

image

10. OK をクリックしてフォームの編集画面に戻り、プレビューよりフォームの作成をクリックします。

11. フォーム上にあるフィールドの合計数や一覧が表示されます。

12. フォームに戻って、未使用のフィールドを 1 つ追加して、再度プレビューを確認します。
フィールドの数が増えることがわかります。よってフォーム上にあるフィールド数のみカウントしてい���
ことが分かります。逆に、同じフィールドを再度フォームに追加しても、フィールドの合計数は変わりません。
これはフォーム上のコントロール数をカウントしているわけではないからです。

フィールドへの値入力

13. 再度 Web リソースに戻り、以下の関数を追加します。

function setValueToName()
{
// フィールドを名前で指定して取得し、値をセット
Xrm.Page.data.entity.attributes.get("name").setValue("test");
}

14. 上書き保存をして公開をクリックします。

15. 取引先企業フォームに戻り、関数を追加します。

image

16. プレビューよりフォームの作成をクリックします。

17. 取引先企業名に"test" が入力されることを確認します。

値はフィールドに渡すことができ、フォーム上のコントロールには渡しません。同じフィールドが
複数フォームに追加されている場合は、すべてのコントロールで同じ値が表示されます。

Xrm.Page.ui のサンプル

コントロールの表示/非表示

1. Internet Explorer で Dynamics CRM 2011 に接続します。

2. 設定 | カスタマイズ | システムのカスタマイズ を開きます。

3. Web リソースを選択して、新規ボタンをクリックします。任意の名前と表示名を入力します。
ここでは uiSample としました。

4. 種類からスクリプト (JScript) を選択して、テキスト エディターをクリックします。

5. 以下のコードを入力します。

function hideTelephone1()
{
// コントロールを名前で指定して取得
var telephone = Xrm.Page.ui.controls.get("telephone1");
// 非表示
telephone.setVisible(false);
}

function hideAddressSection()
{
// タブを番号で、セクションを名前で指定して、コントロールを取得
var AddressSection = Xrm.Page.ui.tabs.get(0).sections.get("address3");
// 非表示
AddressSection.setVisible(false);
}

6. 上書き保存をクリックして、公開をクリックします。画面はそのまま空けておきます。

7. 取引先企業のフォームに戻り、ライブラリと関数を追加します。

image

8. プレビューよりフォームの作成をクリックします。

9. 代表電話コントロールと、国/地域がある住所のセクションが隠れることを確認します。

ナビゲーションアイテムの非表示

10. 再度 Web リソースに戻り、以下の関数を追加します。

function hideNavigationActivity()
{
// ナビゲーションを名前を指定して取得
var NavActivity = Xrm.Page.ui.navigation.items.get("navActivities");
// 非表示
NavActivity.setVisible(false);
}

11. 上書き保存をして公開をクリックします。

12. 取引先企業フォームに戻り、関数を追加します。

image

13. ナビゲーションはプレビューで出ないので、フォームを保存して公開します。

14. ワークプレースより取引先担当者のグリッドへ移動し、既存のレコードを開くか、新規作成で
フォームを表示し、活動のナビゲーションが非表示になることを確認します。

Tips

新しいオブジェクトモデルは柔軟な反面、コントロールにたどり着くまで階層が深くなります。そこで
開発者のためにショートカット形式も提供されています。

Xrm.Page.getAttribute
このショートカットは、Xrm.Page.data.entity.attributes.get メソッドと同じです。

Xrm.Page.getControl
このショートカットは、Xrm.Page.ui.controls.get メソッドと同じです。

また特定のタブやセクション内のコントロールに頻繁にアクセスする場合に、事前にそれらの
コントロールを変数に入れておくことで、ショートカット的にアクセスが可能になります。

例)フォーム上 3 つめのタブにある、1 つめのセクションのコントロールを取得
var contosoControls = Xrm.Page.ui.tabs.get(2).sections.get(0).controls.get();

次に留意点を紹介します。
- フォームには最大 50 のライブラリを追加可能。
- 各イベントハンドラには最大 50 の関数を追加可能。実行される順序が変更できる他、無効にできる。
- Web リソースは変更後、毎回保存して発行する必要がある。
- ナビゲーションの動作確認には、フォーム自体の発行が必要。

まとめ

Dynamics CRM 2011 から、より柔軟にコントロールに対する制御が行えるようになりました。
Dynamics CRM 4.0 のスクリプトはそのまま動きますが、サポートされない方法で実現していた
機能がある場合には、Dynamics CRM 2011 の SDK を使って、書き換えを検討してください。

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

  • Loading...
Leave a Comment
  • Please add 3 and 8 and type the answer here:
  • Post