2012-03-09 5 views
1

リボンで現在のグリッドを探す....CRM 2011:この1つは怒っ私を運転しているJavaScriptの

私は形でいくつかのサブグリッド、同じエンティティのすべてと異なるフィールドにフィルタを持っています。グリッドのリボンのボタンは、決定を行うために正確なグリッド「インスタンス」を知る必要のある関数を呼び出します。これが完全に失われた場所です。

リボンの定義では、CrmParameter SelectedControlを呼び出された関数に渡します。これはアクティブグリッドであると考えられています。少なくとも明らかにそうです。

私のJavaScriptコードで何をしたいのですか?その名前を使ってグリッドを取得し、それを関数に渡されたオブジェクトと比較します。これは完全に異なるオブジェクトであり、次に行うことができますそれと何の関係もありません。 名前、ID、ラベルを取得することはできません。 SDKのコントロールにリストされているすべてのメソッドのうち、getVisible()、setVisible()、setFocus()、およびrefresh()の4つのみが使用されます。これらは、私がする必要があるものにはあまり役に立ちません。

同僚はXrm.Page.ui.getCurrentControl()を試してみるように言いましたが、まったく同じ振る舞いをしていますが、2つのオブジェクトが同じではないことは珍しくありません。

私は、。getControl()で取得したコントロールの.controlプロパティを使用して、漠然としたものを見つけました。そのため、.getCurrentControl()で取得したコントロールと比較しています。残念ながら、 "現在のコントロール"はすべてのサブグリッドの.controlプロパティと一致します。

何が何であるか、それをより明確にするためにいくつかのコード:コメントはGRID1がアクティブである間にリボンボタンがクリックされたときに何が起こるかを教えてくれ

function ribbonAction(param) // param is the SelectedControl parameter 
{ 
    var current = Xrm.Page.ui.getCurrentControl(); 
    var grid1 = Xrm.Page.getControl("grid1"); 
    var grid2 = Xrm.Page.getControl("grid2"); 

    alert(param == current);   // false 
    alert(param == grid1);    // false 
    alert(param == grid1.control);  // false 
    alert(current == grid1);   // false 
    alert(current == grid1.control); // true 
    alert(current == grid2.control); // true 

    alert(current.getName());   // throws an error 
    alert(param.getName());    // throws an error 

    current.refresh();     // refreshes the correct grid 
    param.refresh();     // refreshes the correct grid 
} 

この状況で実際にアクティブなサブグリッドコントロールを識別する方法についてのヒントは非常に感謝しています。

+0

"grid1"というコントロールでgrid2を設定するのは普通ですか?それは、第六の表現についても真実を返すものを説明するでしょう。 –

+0

いいえ、それはちょうどその行のコピーから来ました。これはすべての私の観察を要約するためのコード例にすぎません。私の実際のコントロールには、簡単に混同しないような別名があります。そのタイポを指摘していただきありがとうございます。 – TeaDrivenDev

答えて

1

これも私を怒らせていました。ここで私はそれを分解した方法です:

サブグリッドが存在するエンティティフォームのJavaScriptライブラリでグローバル変数を指定します。

function TagGrid(SubGridName) 
{ 
      if(document.getElementById(SubGridName + "_d") != null) 
      { 
         document.getElementById(SubGridName + "_d").onclick = function() { SelectedSubGrid = SubGridName }; 
      } 
} 

は次に以下のようにGetCurrentGridと呼ばれる第2の機能を追加し、同じライブラリ以下のようTagGridと呼ばれる機能を追加で

var SelectedSubGrid; 

....

function GetCurrentGrid() 
{ 
      // add code here to check current grid and execute differently as required... 
      alert('Current Grid is ' + SelectedSubGrid);   
} 

インクルード同じエンティティタイプの各サブグリッドに対するTagGrid関数の呼び出し。下の例では、カスタムエンティティタイプの「Business Pitch Event」という2つのサブグリッドと、「DocumentationEvents」という名前のグリッドと、もう1つの「BusinessPitchEventEvents」という2つのグリッドがあります。

function OnLoad() 
{ 
      TagGrid("DocumentationEvents"); 
      TagGrid("BusinessPitchEventEvents"); 
} 

次に、サブグリッドのリボンボタンで、GetCurrentGrid関数を呼び出します。

関連する問題