Results for tag "custom-rule"

CRM 2011 – Ribbon Button hinzufügen + Custom Rule

Christian Wagnsonner 1 Comment

Eine gängige Anforderung in einem CRM-Projekt ist es div. Schaltflächen den Ribbons hinzuzufügen, auszublenden oder zu aktivieren/deaktivieren.

Ich zeige euch in diesem Blog, wie man einen Button hinzufügt, der nur sichtbar ist, wenn die aufgerufene Entität bereits über eine ID verfügt (also bereits gespeichert wurde).

Zunächst muss man der Solution eine „Clienterweiterung“ hinzufügen, nämlich die „Anwendungsmenübänder“. Das geht wie folgt:

Danach ist es notwendig die Solution zu exportieren. Die heruntergeladene ZIP-Datei müsst Ihr irgendwohin extrahieren und die Datei „customizations.xml“ mit einem Editor öffnen. Ich empfehle euch dies direkt im Visual Studio zu tun, dort kann man auch recht einfach die Schema-Dateien zur Validierung einbinden. Wie das funktioniert, erfährt Ihr in folgendem Blog: Customizations XML validieren

Sucht nun in der Datei nach der Entität, welcher Ihr den Ribbon-Button hinzufügen möchtet. Solltet Ihr diese nicht finden, müsst Ihr diese zuerst der Solution hinzufügen und den Export wiederholen.

[sourcecode language=“xml“]
<Entity>
<Name LocalizedName="Lead" OriginalName="Lead">Lead</Name>
<ObjectTypeCode>4</ObjectTypeCode>
<strong><RibbonDiffXml></strong>
<CustomActions />
<Templates>
<RibbonTemplates Id="Mscrm.Templates"></RibbonTemplates>
</Templates>
<CommandDefinitions />
<strong><RuleDefinitions></strong>
<TabDisplayRules />
<DisplayRules />
<strong><EnableRules /></strong>
</RuleDefinitions>
<LocLabels />
</RibbonDiffXml>
</Entity>
[/sourcecode]

Das Beispiel zeigt eine Standard-Entität. Für dieses Beispiel ist nur die Bearbeitung der „RibbonDiffXml“-Sektion notwendig.
Zunächst fügt man eine CustomAction hinzu:

[sourcecode language=“xml“]
<CustomAction Id="Mscrm.Isv.wit_schnellerfassung.FormCustomAction" Location="Mscrm.Form.wit_schnellerfassung.MainTab.Groups._children" Sequence="6000">
<CommandUIDefinition>
<Group Id="Mscrm.Isv.wit_schnellerfassung.Form.Group0" Sequence="400" Command="Mscrm.Isv.wit_schnellerfassung.Form.Group0" Title="$LocLabels:CustomGroup.Title" Description="$LocLabels:CustomGroup.Description" Template="Mscrm.Templates.3.3">
<Controls Id="Mscrm.Isv.wit_schnellerfassung.Form.Group0.Controls">
<Button Id="Mscrm.Isv.wit_schnellerfassung.Form.Group0.Control0" Sequence="10" <strong>Command="Mscrm.Isv.wit_schnellerfassung.Form.Group0.Control0"</strong> Image16by16="$webresource:wit_icon_schnellerfassung" Image32by32="$webresource:wit_icon_schnellerfassung" TemplateAlias="o1"></Button>
</Controls>
</Group>
</CommandUIDefinition>
</CustomAction>
</CustomActions>
[/sourcecode]
Achtet auf die fett markierte Stelle. Der Command ist für das Hinzufügen der Rules (aktivieren/deaktivieren) wichtig. Die Attributes „Image16by16“ und „Image32by32“ zeigen auf Resourcen (in diesem Fall Icons), welche schon vorweg in der Solution sein müssen. Habt Ihr noch keine hinzugefügt, könnt Ihr diese Attributes vorerst auch leer lassen.

Nun sehen wir uns die „“-Sektion genauer an und fügen eine CommandDefinition hinzu:

[sourcecode language=“xml“]
<CommandDefinitions>
<CommandDefinition <strong>Id="Mscrm.Isv.wit_schnellerfassung.Form.Group0.Control0"></strong>
<EnableRules>
<EnableRule Id="schnellerfassungEnableDisable"></EnableRule>
</EnableRules>
<DisplayRules />
<Actions>
<JavaScriptFunction Library="$webresource:wit_schnellerfassung" FunctionName="Generate" />
</Actions>
</CommandDefinition>
</CommandDefinitions>
[/sourcecode]

Die fett markierte ID der CommandDefinition ist ident mit dem Command-Attribut von vorhin!! Achtet darauf, dass dies auch bei euch ident ist.
Unter EnableRules fügen wir nun eine Rule hinzu. Auch hier wird die ID später noch benötigt!! Unter Actions fügen wir eine Javascript Action hinzu. In diesem Fall soll bei Klick auf den Button die Funktion „GenerateName“ aus der WebResource „wit_schnellerfassung“ aufgerufen werden.

Und zu guter letzt muss noch die -Sektion angepasst werden:

[sourcecode language=“xml“]
<EnableRules>
<EnableRule Id="schnellerfassungEnableDisable">
<CustomRule FunctionName="ShowHideGenerateButton" Library="$webresource:wit_schnellerfassung"></CustomRule>
</EnableRule>
</EnableRules>
</RuleDefinitions>
[/sourcecode]

Die ID der EnableRule muss mit jener von vorhin übereinstimmen! Die CustomRule ruft wieder eine Javascript-Funktion aus der Resource „wit_schnellerfassung“ auf, welche true/false retournieren muss.

In meinem Fall sieht diese Funktion (noch) wie folgt aus:

[sourcecode language=“javascript“]
function ShowHideGenerateButton() {
var entityId = Xrm.Page.data.entity.getId();
if (!Utils.StringIsNullOrEmpty(entityId)) {
return true;
}
else {
return false;
}
}
[/sourcecode]

Viel Spaß beim Nachmachen.

Happy Programming!