これは私を怒らせています....
フォームに複数のサブグリッドがあり、すべて同じエンティティで、異なるフィールドにフィルター処理されています。グリッドのリボンのボタンは、決定を下すために正確なグリッドの「インスタンス」を知る必要がある関数を呼び出します。これは、私が完全に迷っているところです。
リボンの定義では、呼び出された関数に CrmParameter SelectedControl を渡します。これはアクティブ グリッドであると想定されていますが、少なくともある意味ではそうです。
私が JavaScript コードでやりたいことは、その名前でグリッドの 1 つを取得し、それを関数に渡されたオブジェクトと比較することです。ただし、これは完全に異なるオブジェクトであり、それを使用してほとんど何もできません。 . その名前、ID、ラベルを取得することはできません。SDK のコントロール用にリストされているすべてのメソッドのうち、getVisible()、setVisible()、setFocus()、refresh() の 4 つだけが機能します。これらは、私がする必要があることにはあまり役に立ちません。
その後、同僚から Xrm.Page.ui.getCurrentControl() を試すように言われましたが、これはまったく同じ動作を示しますが、おかしなことに 2 つのオブジェクトは等しくありません。
.getControl() 経由で取得したコントロールの .control プロパティを使用する Google であいまいなものを見つけたので、.getCurrentControl() 経由で取得したものと比較したところ、一致しました。残念ながら、「現在のコントロール」はすべてのサブグリッドの .control プロパティと一致します。
何が何であるかを明確にするためのいくつかのコード:
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
}
コメントは、grid1 がアクティブなときにリボン ボタンをクリックすると何が起こるかを示しています。
そのような状況でアクティブなサブグリッド コントロールを実際に識別する方法についてのヒントをいただければ幸いです。