Results for tag "subgrid"

CRM 2011 – Doubleclick im Subgrid deaktivieren/verhinden

Nach langer Zeit mal wieder was zum Thema CRM:

Nachdem wir in einem Projekt leider sehr große Hierarchien haben und die Subgrids bekanntermassen ja nur zwei Ebenen anzeigen, haben wir uns eine Art Schattenentität als Lösung einfallen lassen. Diese fungiert quasi als Linker zu den einzelnen Abhängigkeiten. Wie auch immer. Wir zeigen nun auf ein paar Formularen eine Art „Überblick“ an, die Daten in den Subgrids sind vom Typ „cust_linkentity“.

Das hat die negative Folgeerscheinung, dass bei Doppelklick das Standard-Formular der Entität „cust_linkentity“ geöffnet wird, obwohl diese Entität rein aus funktionellen Gründen existiert und für den Kunden eigentlich unsichtbar sein sollte.

Leider gibt es keinen von Microsoft unterstützten Weg, das zu verhindern. Meine Recherche hat mich zur Datei „AppGrid_DefaultData.htc“ gebracht, welche unter anderem die Funktion „handleDblClick()“ enthält.

ACHTUNG: Die nachfolgende Lösung ist von Microsoft explizit nicht supported!! Bitte nur machen, wenn Ihr euch über die Folgen im Klaren seid!

Original

function handleDblClick()
{
o = getSrcRow();
if (!IsNull(o))
if ((event.ctrlKey || event.srcElement.tagName == "INPUT" && event.srcElement.type == "checkbox") && o.selected)
unselectRow(o, true, true);
else
handleSelectRow(o);

var oSelectedRecords = getSelectedRecords();

if (oSelectedRecords.length == 0)
return;

var oSelRec = oSelectedRecords[0], oTr = oSelRec[3];

openRecord(oTr);

}
[/pre]

Wie Ihr seht, wird als Letztes mit "openRecord" das Formular der Entität geöffnet.

Angepasst

[sourcecode language="javascript"]
function handleDblClick()
{
o = getSrcRow();
if (!IsNull(o))
if ((event.ctrlKey || event.srcElement.tagName == "INPUT" && event.srcElement.type == "checkbox") && o.selected)
unselectRow(o, true, true);
else
handleSelectRow(o);

var oSelectedRecords = getSelectedRecords();

if (oSelectedRecords.length == 0)
return;

var oSelRec = oSelectedRecords[0], oTr = oSelRec[3];

var typename = o.getAttribute("otypename");
if (typename != "cust_linkentity") {

openRecord(oTr);
}
}
[/sourcecode]

Ich habe hier eine einfache Condition eingebaut, die das Formular nur öffnet, wenn es sich nicht um diesen einen bestimmten Typ handelt.

Cheers,
Chris

CRM 2011 – Custom View für Subgrid

In einem anderen Blog beschreibe ich, wie man einen Custom View zu einem Lookup hinzufügen kann. Heute habe ich die gleiche Funktionalität für ein Subgrid benötigt. Nachdem ich nicht gleich eine Lösung dafür gefunden habe, möchte ich euch meine nicht vorenthalten bzw. die Unterschiede zeigen:

[sourcecode language=“javascript“]
//Add your new view to the Lookup’s set of availabe views and make it the default view
$("#" + lookupFieldId).attr("disableViewPicker", "0");
Xrm.Page.getControl(lookupFieldId).addCustomView(viewId, entityName, viewDisplayName, fetchXml, layoutXml, viewIsDefault);
$("#" + lookupFieldId).attr("disableViewPicker", "1");
[/sourcecode]
So funktionierts für ein Lookup…

[sourcecode language=“javascript“]
var grd = document.getElementById(lookupFieldId);
if (grd.readyState != "complete") {
setTimeout("SetLookupForm(…params…);", 500);
}

grd.control.setParameter("fetchXml", fetchXml);
grd.control.refresh();
[/sourcecode]
… und so für ein Subgrid.

Achtet besonders auf die Abfrage auf „readystate“. Wenn Ihr die Funktionalität im OnLoad-Event verwendet, muss das Grid noch nicht geladen sein!! In diesem Fall rufe ich die Funktion einfach erneut auf…

Viel Spaß beim Nachmachen!