Section verbergen mit Businessrules – ohne JavaScript

Eine Section (dt. Abschnitt) auf einem Form verstecken, kann man einfach mit JavaScript:

Xrm.Page.ui.tabs.get(“tab_name”).sections.get(“section_name”).setVisible(false);

Will oder kann man nicht JavaScript verwenden, dann geht dies auch mit Businessrules. Denn sobald alle Felder der Section mit Businessrules versteckt werden, verschwindet auch automatisch die Section.

Vorteil: Auch ein Nicht-JavaScript-Kenner kann so sehr einfach GUI-Anpassungen an einem Formular vornehmen.

Beispiel: Die Section “Adresse” auf der Entität Firma soll versteckt werden, wenn das Feld “Adresse verstecken” den Wert “Ja” enthält.

image

Mit Javascript würde diese wie folgt aussehen:

var showAddress = Xrm.Page.getAttribute(“procrm_toggleaddress”).getValue();
Xrm.Page.ui.tabs.get(“tab_name”).sections.get(“section_name”).setVisible(showAddress)
;

Mit einer Businessrule ohne JavaScript:

image

In beiden Fällen wird die Section nun ausgeblendet wenn “Adresse verstecken” = “Ja”:

image


LogicalName von Feldern auf Form sichtbar machen

Will man den LogicalName eines Feldes auf einem Formular herausfinden (Bsp. für JavaScripts, Reports etc.), muss man normalerweise das Edit-Form öffnen, dort die Eigenschaften des Attributes anzeigen, in welchem dann der Name gefunden werden kann:

image

Das geht einfacher! Und zwar mit Hlife des folgenden Scripts:

(function(){var frm=(window.Xrm&&window.Xrm.Page&&window.Xrm.Page.ui&&window)||(frames[1]&&frames[1].Xrm&&frames[1].Xrm.Page.ui&&frames[1])||frames[0];var Xrm=frm.Xrm;if(!Xrm||!Xrm.Page||!Xrm.Page.ui){alert(‘Unable to find CRM form’);return;}Xrm.Page.ui.tabs.forEach(function(tab){tab.setVisible(true);tab.sections.forEach(function(section){section.setVisible(true);});});var $=frm.jQuery||(frm.CEI&&frm.CEI.$);if(!$){var head=frm.document.getElementsByTagName(‘head’).item(0);var s=frm.document.createElement(‘script’);s.setAttribute(‘type’,'text/javascript’);s.setAttribute(‘src’,'https://ajax.aspnetcdn.com/ajax/jquery/jquery-1.9.0.js’);s.async=false;head.appendChild(s);waitForJQ();}else{setLabels();}function waitForJQ(){if(frm.jQuery){$=frm.jQuery.noConflict(true);setLabels();}else{setTimeout(waitForJQ,1000);}}function setLabels(){Xrm.Page.data.entity.attributes.forEach(function(a){a.controls.forEach(function(c){var lblText=c.getLabel();c.setVisible(true);var attr=a.getName();var lbl=$(‘#’+c.getName()+’_c’).html(”);lbl.css(‘text-align’,'left’);if(lbl.is(‘td’)){lbl.closest(‘table’).children(‘colgroup’).children(‘col:even’).attr(‘width’,’400′);}$(‘<input/>’).width(200).val(attr).appendTo(lbl).focus(function(){$(this).select()});$(‘<span></span>’).text(lblText).appendTo(lbl);});});}})();

Das Script wird via Konsole der Developer-Tools ausgeführt. Dazu das gewünschte Formular im IE öffnen und mit F12 die Developer-Tools starten. Hier unter “Konsole” das Script einfügen und ausführen und siehe da, die Labels zeigen nun den LogicalName des Feldes an:

image