Dynamics CRM 2011 Xrm.Page サンプルライブラリ紹介 その 4

みなさん、こんにちは。

クライアントサイドスクリプト紹介第 4 回は、ナビゲーション操作の
サンプルを紹介していきます。

サンプルを確認するにあたり準備があるため、こちらの記事
ご覧いただき、サンプルのインストールを行ってください。

サンプル紹介

今回紹介するサンプルは、以下のフォルダにあります。
SDK\SampleCode\JS\FormScripts\SDK.NavigationSamples.js SDK\SampleCode\JS\FormScripts\SDK.NavigationCollection.js

ナビゲーション操作サンプル

ナビゲーションも、フォームの要素同様 Xrm.Page オブジェクトモデルで 操作を行います。表示/非表示の切り替えや、表示文字列の変更が可能です。

[toggleVisibleItems 関数] ナビゲーションアイテムの表示/非表示を切り替えます。方法は 他のオブジェクトと同じです。

toggleVisibleItems: function () {
  // Xrm.Page.ui.nagivation.items の get メソッドで
  // フォーム上のナビゲーションアイテムを取得
  var items = Xrm.Page.ui.navigation.items.get();

  for (var i in items) {
   // ナビゲーションアイテムを 1 つ取得
   var item = items[i];
   // アイテムが表示されているか確認
   if (item.getVisible()) {
    // 表示されている場合は非表示に設定
    item.setVisible(false);
   }
   else {
    // 非表示の場合は表示に設定
    item.setVisible(true);
   }
  }
}

[showNavigationItemInfo 関数]
ナビゲーションを操作する際に、ナビゲーションアイテムの ID が
必要になる場合があります。以下のサンプルでは、アイテムの ID や
表示の状態を取得して、別のウィンドウに表示します。

showNavigationItemInfo: function () {
  // 情報表示用の HTML を作成
  var html = "<html><head><title>Navigation Items Info</title>";
  html += "<style type=\"text/css\">body { font-family:Calibri;}";
  html += "table {border:1px solid gray; border-collapse:collapse;}";
  html += "th {text-align:left; border:1px solid gray;}";
  html += "td {border:1px solid gray;}</style>";
  html += "</head><body>";
  // 別関数を呼び出して情報を取得
  html += SDK.NavItemSamples.buildNavigationInfoTable();
  html += "</body></html>";
  var myWindow = window.open("", "_blank");
  myWindow.document.open();
  myWindow.document.write(html);
  myWindow.document.close();
},

[buildNavigationInfoTable 関数]
ナビゲーションアイテムの情報を取得します。

buildNavigationInfoTable: function () {
  var html = "<table><thead><th>Item Name</th><th>Item Id</th><th>Is Visible</th></thead><tbody>";
  // Xrm.Page.ui.nabigation.items の get メソッドで
  // 全てのナビげージョンアイテムを取得
  var items = Xrm.Page.ui.navigation.items.get();

  for (var i in items) {
   // ナビゲーションアイテムを 1 つ取得
   var item = items[i];

   // getLabel、getId、getVisible メソッドで、アイテムの情報取得
   html += "<tr><td>" + item.getLabel() + "</td>" +
        "<td>" + item.getId() + "</td>" +
        "<td>" + item.getVisible() + "</td>";
  }
  html += "</tbody></table>";
  return html;
},

※特定のナビゲーションアイテムを get メソッドで取得したい場合には
アイテムの ID が必要となります。フィールドと違って ID が分かりづらい
問題がありますが、こちらのサンプル関数で簡単に確認できます。

ナビゲーションアイテム操作サンプル

ナビゲーションは複数のナビゲーションアイテムを含んでいます。この
サンプルでは、それらのアイテムに対する操作方法を紹介しています。

[listFirstActivityItem 関数]
ナビゲーション内でいちばん最初のアイテムを取得、表示します。

listFirstActivityItem: function () {
  // Xrm.Page.ui.navigation.items の get メソッドに番号を渡して
  // 一番初めのナビゲーションアイテムを取得
  var firstItem = Xrm.Page.ui.navigation.items.get(0);
  if (firstItem != null) {
   alert("The first navigation item is '" + firstItem.getLabel() + "'.");
  }
  else {
   alert("There are not currently any navigation items on the form.");
  }
},

[doesActivityItemExist 関数]
具体的なアイテム ID を渡してナビゲーションアイテムを取得します。

doesActivityItemExist: function () {
  // Xrm.Page.ui.navigation.items の get メソッドにアイテム ID を渡して
  // 活動のナビゲーションアイテムを取得
  var activityItem = Xrm.Page.ui.navigation.items.get("navActivities");
  // 取得できたか確認
  if (activityItem != null) {
   alert("The '" + activityItem.getLabel() + "' item does exist in this form's navigation area.");
  }
  else {
   alert("The 'Activities' item does not exist in this form's navigation area.");
  }
},

[showNavItemsCount 関数]
ナビゲーションアイテムの個数を表示します。

showNavItemsCount: function () {
  // Xrm,Page.ui.navigation.items の get メソッドで
  // 全てのナビゲーションアイテムを取得
  var items = Xrm.Page.ui.navigation.items.get();
  // getLength メソッドで個数を確認
  var count = Xrm.Page.ui.navigation.items.getLength();

  if (items.length == count) {
   alert("There are " + count + " navigation item(s) on the form.");
  }
  else {
   alert("An error has occurred:\n\nUnable to determine how many navigation items are on the form.");
  }
}

まとめ

ナビゲーションアイテムも、コントロールやセクションと同じ方法で
操作が可能であることを、このサンプルは示しています。違う点としては
アイテムの ID 情報が UI から取得できないことです。例えば UI から活動を
確認すると、以下のように Account_ActivityPointers ですが、アイテム ID は
navActivities となっています。

image

image

次回からは、UI 上に直接表示されないオブジェクトの扱いを紹介します。

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