リボンで現在のグリッドを探す....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
}
。
この状況で実際にアクティブなサブグリッドコントロールを識別する方法についてのヒントは非常に感謝しています。
"grid1"というコントロールでgrid2を設定するのは普通ですか?それは、第六の表現についても真実を返すものを説明するでしょう。 –
いいえ、それはちょうどその行のコピーから来ました。これはすべての私の観察を要約するためのコード例にすぎません。私の実際のコントロールには、簡単に混同しないような別名があります。そのタイポを指摘していただきありがとうございます。 – TeaDrivenDev