17.03.2011

Simple Form-Button w/ JavaScript-Function

Dieses Beispiel zeigt das Erstellen eines neuen Buttons auf dem Kontakt-Formular innerhalb einer neuen Gruppe. An den Button ist eine JavaScript-Funktion gebunden. Der Button soll nur bei bestehenden Kontakten angezeigt werden.


Umgebung:Microsoft Dynamics CRM 2011 RC
(vanilla/Out-Of-The-Box)

Deployment:
onpremise

Benötigte Komponenten:
  • 2 Icons
  • simplebuttonlib.js
  • SimpleButton_1_0.zip

#1: Lösung SimpleButton erstellen
Zuerst erstellt man eine neue Lösung "SimpleButton" im CRM. Dieser Lösung fügt man die bereits vorhandene Entität "Kontakt" hinzu.

1.1 Lösung SimpleButton


#2: Icons der Lösung hinzufügen
Für den Button benötigt man zwei Icons. Diese müssen die Auflösung 16x16 Pixel und 32x32 Pixel haben.
 
SimpleButton16.png
 



SimpleButton32.png





Diese beiden Bilddateien werden ebenfalls der Solution "SimpleButton" als Webressource hinzugefügt.

2.1 Lösung SimpleButton mit Icons

#3: JavaScript-Bibliothek der Lösung hinzufügen
Der Code, der bei einem Klick auf den Button ausgeführt werden soll, wird in der Datei "simplebuttonlib.js" hinterlegt.

function buttonClick()
{
   alert("Do some action here!");
}


Die JavaScript-Datei wird der Lösung auch hinzugefügt.

3.1 Lösung SimpleButton mit JavaScript-Bibliothek

#4: Lösung "SimpleButton" exportieren
Die Lösung wird nun in die Datei "SimpleButton_1_0.zip" exportiert. Der Export muß "unmanaged" vorgenommen werden.


#5: Button-XML (RibbonDiffXml) in die Lösung einfügen
Die ZIP-Datei aus #4 entpacken und die XML-Datei "customizations.xml" zum Bearbeiten öffnen. Ziemlich am Ende der Datei sollte sich folgender Textblock finden:

<RibbonDiffXml>
  <CustomActions /> 
  <Templates>
    <RibbonTemplates Id="Mscrm.Templates" />
  </Templates>
  <CommandDefinitions />
  <RuleDefinitions>
    <TabDisplayRules />
    <DisplayRules />
    <EnableRules />
  </RuleDefinitions>
  <LocLabels />
</RibbonDiffXml>


Dieser XML-Knoten ist durch den folgenden zu ersetzen:

<RibbonDiffXml>

<CustomActions>
  <CustomAction Id="MyCustomGroup.MaxSize.CustomAction"
    Location="Mscrm.Form.contact.MainTab.Scaling._children"
    Sequence="120">
    <CommandUIDefinition>
    <MaxSize Id="MyCustomGroup.MaxSize"
        GroupId="MyCustomGroup.Group"
        Sequence="61"
        Size="LargeLarge" />
    </CommandUIDefinition>
  </CustomAction>
  <CustomAction Id="MyCustomAction"
    Location="Mscrm.Form.contact.MainTab.Groups._children"
    Sequence="60">
    <CommandUIDefinition>
      <Group Id="MyCustomGroup.Group"
      Command="MyCustomGroup.Command"
      Title="$LocLabels:MyGroupTitle"
      Sequence="62"
      Template="Mscrm.Templates.Flexible2"
      Image32by32Popup="$webresource:new_SimpleButton32.png">
        <Controls Id="MyCustomGroup.Controls">
          <Button Id="MyButton"
            Command="MyCommand"
            LabelText="$LocLabels:MyLabelText"
            ToolTipTitle="$LocLabels:MyLabelText"
            ToolTipDescription="$LocLabels:MyToolTip"
            TemplateAlias="o1"
            Image16by16="$webresource:new_SimpleButton16.png"
            Image32by32="$webresource:new_SimpleButton32.png" />
        </Controls>
      </Group>
    </CommandUIDefinition>
  </CustomAction>
</CustomActions>


<Templates>
  <RibbonTemplates Id="Mscrm.Templates"></RibbonTemplates>
</Templates>


<CommandDefinitions>
  <CommandDefinition Id="MyCommand">
    <EnableRules>
      <EnableRule Id="MyWebClient.EnableRule" />
      <EnableRule Id="MyNotNew.EnableRule"/>
    </EnableRules>
    <DisplayRules>
      <DisplayRule Id="MyFormStateNotNew.DisplayRule" />
      <DisplayRule Id="MyWebClient.DisplayRule" />
    </DisplayRules>
    <Actions>
      <JavaScriptFunction
        Library="$webresource:new_simplebuttonlib.js"
        FunctionName="buttonClick" />
    </Actions>
  </CommandDefinition>
  <CommandDefinition Id="MyCustomGroup.Command">
    <EnableRules>
      <EnableRule Id="MyNotNew.EnableRule" />
    </EnableRules>
    <DisplayRules>
      <DisplayRule Id="MyWebClient.DisplayRule" />
    </DisplayRules>
    <Actions />
  </CommandDefinition>
</CommandDefinitions>


<RuleDefinitions>
  <TabDisplayRules />
  <DisplayRules>
    <DisplayRule Id="MyFormStateNotNew.DisplayRule">
      <FormStateRule State="Create" InvertResult="true" />
    </DisplayRule>
    <DisplayRule Id="MyWebClient.DisplayRule">
      <CrmClientTypeRule Type="Web"/>
    </DisplayRule>
  </DisplayRules>
  <EnableRules>
    <EnableRule Id="MyWebClient.EnableRule">
      <CrmClientTypeRule Type="Web" />
    </EnableRule>
    <EnableRule Id="MyNotNew.EnableRule">
      <FormStateRule State="Create" InvertResult="true" />
    </EnableRule>
  </EnableRules>
</RuleDefinitions>


<LocLabels>
  <LocLabel Id="MyLabelText">
    <Titles>
      <Title languagecode="1033" description="Simple Button" />
    </Titles>
  </LocLabel>
  <LocLabel Id="MyToolTip">
    <Titles>
      <Title languagecode="1033" description="Simple Button Demo" />
    </Titles>
  </LocLabel>
  <LocLabel Id="MyGroupTitle">
    <Titles>
      <Title languagecode="1033" description="Demo" />
    </Titles>
  </LocLabel>
</LocLabels>


</RibbonDiffXml> 

Nach dem Speichern muß noch die "customizing.xml" in der ZIP-Datei aktualisiert, bzw. das Archiv neu erstellt werden.

#6: Lösung importieren und veröffentlichen
Die neuerstellte Anpassungsdatei aus #5 wird nun in das CRM importiert. Anschließend werden alle Anpassunge veröffentlich.

#7: Ergebnis überprüfen
Öffnet man nun ein Kontakt-Formular, erscheint unser "SimpleButton" auf dem Ribbon. Ein Klick auf ihn öffnet eine MessageBox.

7.1 SimpleButton in Aktion!

--
:: Links / Weiterführende Information:

Behind the Scenes: Metadata Browsers for CRM 2011

Leider wurde CRM 2011 um das von CRM 4 bekannte Feature "/sdk/list.aspx" beraubt. Es ist allerdings möglich, CRM 2011 durch Installation einer Managed Solution mit einer ähnlichen Funktionalität zu erweitern.

Momentan gibt es zwei verschiedene Solutions, die jeweils Vor- und Nachteile haben.

ACHTUNG:
Nach der Installation funktionieren beide Metadata Browser nur, wenn man über den Server-Namen auf den CRM-Webclient zugreift. Bei einem Zugriff über die IP oder "localhost" funktioniert zwar das CRM, aber nicht die Metadata Browser.

#1: Entity Metadata Browser
Der "Entity Metadata Browser" ist im aktuellen CRM 2011 SDK unter dem Pfad
"\sdk\tools\metadatabrowser\metadatabrowser_1_0_0_1_managed.zip"
zu finden. Nach der Installation der Lösung im CRM ist unter Settings/Customization der Punkt "Metadata Browser" verfügbar.

1.1 Entity Metadata Browser
Hier erhält man eine Übersicht aller Entitäten sowie zugehöriger Properties. Man kann diverse Filter über das Grid legen, sortieren ist leider nicht möglich. Auch kann man nicht das gesamte Grid sondern nur einzelne Zellen kopieren, um die Daten z.B. in Excel weiterzuverarbeiten.
Ein Rechtsklick auf die Werte in der Spalte "Schema Name" öffnet ein Kontextmenü, über das man zur jeweiligen Entität in der Default Solution gelangt, oder die Detailansicht der jeweiligen Entität im Entity Metadata Browser öffnen kann.

1.2 Entity Metadata Browser - Detail View "Account"
Im "Detail View" bekommt man Properties, Attribute, Relationships und Privileges präsentiert. Das UI gestaltet sich ähnlich dem vorherigen: Filtern ist möglich, Sortieren oder Exportieren der Listen nicht. Dafür erhält man über die Properties so ziemlich jede Meta-Information, die es im CRM 2011 über eine Entität gibt. Zu Picklist-Attributen werden u.a. auch die kompletten Option-Sets angezeigt.

#2: CRM 2011 Metadata Browser
Der "CRM 2011 Metadata Browser" ist eine Silverlight 4 Anwendung, welche in eine CRM 2011 Lösung gepackt wurde. Nach Download und Installation der Lösung
"CRMToolsMetadatabrowser_1_0_0_1_managed.zip"
 ist unter Settings/Customization der Punkt "Metadata Browser" verfügbar.

2.1 CRM 2011 Metadata Browser
Hier werden alle Entitäten als sehr "breite" Liste präsentiert. Sortieren der einzelnen Spalten und Exportieren des gesamten Grids in die Zwischenablage ist hier möglich.
Durch einen Klick auf den "Logical Name" einer Entität gelangt man zum Detail View.

2.2 CRM 2011 Metadata Browser - Detail View "Account"
Im "Detail View" erhält man Listen aller Attribute und Relationships der jeweiligen Entität. Auch hier ist Sortieren der einzelnen Spalten und Exportieren des gesamten Grids möglich.

Auf der Projektseite des CRM 2011 Metadata Browser ist nachzulesen, dass dieser in Zukunft um zusätzliche Funktionen erweitert werden soll.

--
:: Links / Weiterführende Information: