CRM 2011 – Original Ribbon Button – Andere (Javascript) Aktion hinterlegen

Hallo Leute,

aufbauend auf meinem letzten Beispiel (siehe Original Ribbon Button ausblenden) möchte ich euch nun zeigen, wie Ihr die Aktion, die hinter einem Original-Ribbon-Button liegt verändern könnt.

Im Konkreten möchte ich euch zeigen, wie Ihr dem Button „Verkaufschance als verloren schließen“ (im Form, nicht auf der Hauptseite) eine eigene Javascript-Funktion zuweisen könnt.

Dafür geht Ihr bitte wie im Artikel Original Ribbon Button ausblenden beschrieben vor.

Extrahiert also das ZIP-File und öffnet die Customizations.xml. Parallel dazu öffnet Ihr bitte wieder die „opportunityribbon.xml“-Datei aus dem SDK-Sample-Projekt.
Sucht in der XML-Datei nun nach „MarkAsLost“. Ihr werden nun folgende Zeile finden:

Kopiert das gesamte -Element am besten temporär in einen Text-Editor (Notepad) und merkt euch die ID des übergeordneten Elements. Wechselt in die Customizations.xml. Sucht dort (wie im anderen Artikel beschrieben) nach dem RibbonDiffXml-Node und fügt dort die folgenden Zeilen ein:

[sourcecode language=“xml“]
<CustomAction Id="eigeneid" Location="Mscrm.Form.opportunity.MainTab.Actions.Controls._children">
<CommandUIDefinition>

</CommandUIDefinition>
</CustomAction>
[/sourcecode]

Als Location gebt bitte die ID des übergenordneten Elements ein und fügt ein „._children“ an.
Zwischen die beiden CommandUIDefinition-Tags kopiert nun das zwischengespeichert Button-Element. Fertig sieht das nun ungefähr wie folgt aus:

[sourcecode language=“xml“]
<CustomAction Id="eigeneid" Location="Mscrm.Form.opportunity.MainTab.Actions.Controls._children">
<CommandUIDefinition>
<Button Id="Mscrm.Form.opportunity.MarkAsLost" Command="Mscrm.Form.opportunity.MarkAsLost" Sequence="4" Alt="$Resources:Ribbon.Form.opportunity.MainTab.Actions.MarkAsLost" LabelText="$Resources:Ribbon.Form.opportunity.MainTab.Actions.MarkAsLost" Image16by16="/_imgs/SFA/MarkAsLost_16.png" Image32by32="/_imgs/SFA/MarkAsLost_32.png" TemplateAlias="o1" ToolTipTitle="$Resources:Mscrm_Form_opportunity_MainTab_Actions_MarkAsLost_ToolTipTitle" ToolTipDescription="$Resources:Mscrm_Form_opportunity_MainTab_Actions_MarkAsLost_ToolTipDescription" />
</CommandUIDefinition>
</CustomAction>
[/sourcecode]

Nun ist es notwendig den „Command“ des Button-Elements zu verändern, z.B. auf: Mscrm.Isv.Form.opportunity.MarkAsLost.
Nachdem dieser „Command“ noch nicht existiert, muss er nun hinzugefügt werden, z.B. so:

[sourcecode language=“xml“]
<CommandDefinition Id="Mscrm.Isv.Form.opportunity.MarkAsLost">
<EnableRules />
<DisplayRules />
<Actions>
<JavaScriptFunction Library="$webresource:prefix_cs_opportunity" FunctionName="MarkAsLost" />
</Actions>
</CommandDefinition>
[/sourcecode]

Beachtet hier vor allem die JavaScriptFunction. Dort wird die Webresource angegeben, in der sich die JS-Methode befinden soll und der Name der JS-Methode selbst angegeben.

Passt das entsprechend euren Wünschen an und erstellt im Anschluss ein ZIP-File. Dieses kann dann wieder in gewohnter Manier in das CRM importiert werden.

Cheers,
Christian

Comments ( 2 )

  1. Andreas Müller

    Hallo! Sehr interessanter Eintrag für die Erweiterung der Standardfunktionalität. Ich habe eine ähnliches Vorhaben vor. Ich möchte eine Custom Funktion aufrufen um einen custom V"erkaufschancen Schließen" Dialog zu öffnen. Dies hatte ich bisher über einen eigenen Button realisiert - dort funktioniert auch alles prima. Nun zu meiner Frage ich gehe mal von aus, dass die Änderung nicht von Microsoft supportet ist und dadurch ggfs. durch ein Update Rollup die Änderung überschrieben wird! Also müsste man ggfs. nach Einspielen eines URs die Ribbon Leiste kontrollieren. Viele Grüße Andreas

    • Christian

      Hallo Andreas, das ist wohl nicht so einfach zu beantworten. Fest steht jedenfalls, dass wenn du nicht die Standard-Funktionalität verwendest, vom Standard abweichst und deine eigene Logik verwendest. Diese wird wohl auch in Zukunft funktionieren, ausser Microsoft stellt das CRM gravierender um. Was ich in der Regel mache ist, dass ich programmatisch die Standard-Funktionalität verwende und (vorher/nachher) um eigenen Code anreichere. LG Christian

Leave a reply