29.01.2014

How to Configure IFD Hosted Setup in Dynamics CRM

In diesem Beitrag möchte ich die Schritte für ein IFD dokumentieren. Da es sich um eine Demoumgebung handelt wurden alle benötigten Komponenten auf einem Server installiert. Die Installation fand auf einem Windows Server 2012 in der Domain "CRM2013" statt.

0. Schematische Darstellung eines IFD-Logins (hier noch unter CRM 2011)


Die benötigten Komponenten und Rollen sind:
  • Active Directoy (AD)
  • Active Directory Federation Services (ADFS)
  • Datenbank (SQL Server 2012)
  • CRM (Microsoft Dynamics CRM 2013 On-Premise + UR 1)
  • DNS-Server
ADFS-Server
Unter Windows 2012 ist ADFS keine Komponente, die man herunterläd und zusätzlich installiert, sondern eine Serverrolle:

01. ADFS Server-Rolle in Windows Server 2012

CRM-Server
Da sich ADFS automatisch in die Default Website installiert, muss das CRM auf einem anderen Port installiert werden (z.B. 5555). Auch das HTTPS des CRMs kann nicht über die gewohnte 443 laufen. Ich habe das CRM HTTPS auf 444 konfiguriert.


02. HTTP Ports der CRM Installation

Zertifikat
Als erstes benötigt man ein SLL Zertifikat. Da wir mehrere (Sub-)Domain über HTTPS laufen lassen wollen, eigenet sich ein Wildcard Zertifikat wie "*.akquinet.de" am Besten. Dieses muss auf dem Server installiert werden.


02. Wildcard SSL Zertifikat

DNS Einträge
Des Weiteren benötigen wir einige Einträge im DNS, die in unserem Fall alle gegen die IP des Server, auf dem wir installieren, aufgelöst werden müssen.


04. Benötigt DNS Einträge

Auf Server und Client hilft nach der Einrichtung der DNS Einträge oft ein

ipconfig /flushdns 

um Probleme bei der korrekten Autlösung zu beheben.

Firewall
Zusätzlich sollte man darauf achten, dass alle eingerichteten Ports auch durch die Firewall hindurch kommen und von den Clients aus erreicht werden können. In unserem Fall sind das
  • 80
  • 443
  • 444
  • 5555 (nur intern) 
Alternativ kann man auch die Firewall komplett ausschalten - dies sollte man allerdings nur bei Test- oder Demo-Umgebungen machen.

ADFS konfigurieren
Um ADFS initial zu konfiguerieren, wählt man im Wizard folgende Einstellungen:
  • "Create a new Federation Service"
  • Deployment Type: Stand-alone federation server
  • Federation Service name: "sts1.akquinet.de"
Danach sollte ADFS erfolgreich konfiguriert sein:

05. ADFS Configuration Results
Wenn die Konfiguration erfolgreich war, kann man über die URL

https://sts.akquinet.de/federationmetadata/2007-06/federationmetadata.xml

die Metadaten im Browser anschauen.

06. ADFS Metadata

Microsoft Dynamics CRM Properties
Im Deployment Manager des CRMs öffnet man die Deployment Properties, stellt das Binding auf HTTPS um und aktualisiert die URLs wie folgt:

07. CRM Deployment Properties

Claims-Based Authentication konfigurieren
Nun kann man den Wizard für die Claims-Based Authentication im Deployment
Als Federation Metadata URL ist die bereits verwendete URL einzugeben:


08. Claims-Based Authentication Wizard: Federation Metadata URL

Als Zertifikat wähl man das Wildcard Zertifikat aus:

09 Claims-Based Authentication: Select Certificate

Nachdem man sich über diverse Next-Buttons bis zum Ende geklickt hat, darf man nicht vergessen, das Log zu öffnen, nach unten zu scrollen und sich die dort angezeigte URL zu speichern:


10. Claims-Based Authentication: End


Auch diese URL kann man im Browser validieren.

Edit Claim Rules
Im ADFS Management Tool zu Trust Relationships -->Claims Provider Trust --> Active Directory navigieren und dort im Kontextmenü "Edit Claim Rules..." auswählen. 


11. Edit Claim Rules

Hier muss nun eine neue Rule über "Add Rule..." angelegt werden. Dafür gibt es auch wieder einen Wizard. Die Werte können den folgenden Screenshots entnommen werden:


12. Claim rule template "Send LDAP Attributes as Claims"
13. UPN Claim Rule

Relying Party Trust konfigurieren (intern)
Im ADFS Manager muss nun ein neuer Relying Party Trust hinzugefügt werden. Wichtig ist hier, als Federation metadata address die URL anzugeben, die wir uns beim Einrichten der Claims-Based Authentication im CRM aus dem Log-File gemerkt haben:

https://crm2013demointernal.akquinet.de:444/FederationMetadata/2007-06/FederationMetadata.xml

14. Relying Party Trust hinzufügen

Nachdem erfolgreichen Anlegen des Trusts, müssen im Claim Rule Editor folgende drei Claim Rules angelegt werden:

1. Pass Through UPN
  • Claim rule template: Pass Through or Filter Incoming Claim
  • Incoming claim type : UPN
  • Pass through All claim values
2. Pass Through Primary SID

  • Claim rule template: Pass Through or Filter Incoming Claim
  • Incoming claim type : Primary SID
  • Pass through All claim values

3. Transform Windows Account Name to Name

  • Claim rule template: Transform an Incoming Claim
  • Incoming claim type: Windows account name
  • Outgoing claim type: * Name
  • Pass through All claim values


15. Claim Rules

CRM 2011 IFD konfigurieren
Jetzt kann man im CRM Deployment Manager den Wizard für IFD starten:


16. IFD Wizard 1: URLs


17. IFD Wizard 2: External Domain


18. IFD Wizard 3: System Checks

Relying Party Trust konfigurieren (extern)
Im ADFS Manager muss nun ein weiterer Relying Party Trust hinzugefügt werden. Die Federation metadata address hat diesmal die Subdomain auth. - die wir im vorherigen Schritt im IFD Wizard konfiguriert haben:

https://auth.akquinet.de:444/FederationMetadata/2007-06/FederationMetadata.xml


19. Relying Party Trust hinzufügen

Acuh hier müssen nach erfolgreichem Anlegen des Trusts, folgende drei Claim Rules angelegt werden:

1. Pass Through UPN
  • Claim rule template: Pass Through or Filter Incoming Claim
  • Incoming claim type : UPN
  • Pass through All claim values
2. Pass Through Primary SID

  • Claim rule template: Pass Through or Filter Incoming Claim
  • Incoming claim type : Primary SID
  • Pass through All claim values

3. Transform Windows Account Name to Name

  • Claim rule template: Transform an Incoming Claim
  • Incoming claim type: Windows account name
  • Outgoing claim type: * Name
  • Pass through All claim values
20. Claim Rules

FERTIG!
Damit sind wir fertig und auch der extern Zugriff sollte funktionieren. Das Login Form kann hier

C:\inetpub\adfs\ls\FormsSignIn.aspx

bzw. hier

C:\inetpub\adfs\ls\MasterPages\MasterPage.master

angepasst werden.

21. Login Form
Achtung
Eventuell muss ADFS, der ISS oder am besten gleich der gesamte Server neu gestartet werden.

18.10.2013

Microsoft Dynamics CRM 2013 Downloads and Trial Product Keys

Am 24.09.2013 wurde von Microsoft offiziell das nächste "Major Release" der On-Premise Version von Dynamics CRM veröffentlicht. Hier sind nun die wichtigsten Download-Links zu Dynamics CRM 2013 (Version 06.00.0000.0809):

Installationsdateien

Microsoft Dynamics CRM Server 2013

Microsoft Dynamics CRM 2013 Email Router

Microsoft Dynamics CRM 2013 Language Packs

Microsoft Dynamics CRM 2013 Report Authoring Extension

Microsoft Dynamics CRM 2013 List Component for Microsoft SharePoint Server

Microsoft Dynamics CRM 2013 for Microsoft Office Outlook


Dokumentation

Microsoft Dynamics CRM 2013 Software Development Kit

Microsoft Dynamics CRM 2013 Implementation Guide


Trial Keys (90 Tage)

Microsoft Dynamics CRM Workgroup Server 2013 (5 CAL limit):
NX77Y-BTBCV-JP3T3-8W7JH-94QJP

Microsoft Dynamics CRM Server 2013 (no CAL limit): 
CQWW3-TNXBF-HRQWC-CVTW9-M968H

31.07.2013

Advertorial

Die CRM Akademie für Mitarbeiter aus Fachbereichen
 
Die meisten Projekte zur Einführung und Weiterentwicklung von Microsoft Dynamics CRM werden heute entweder selbständig von internen Projektteams oder in Zusammenarbeit mit externen Partnern umgesetzt.
 
Um die Mitglieder des internen Projektteams über den gesamten Lebenszyklus des Projektes hinweg – von der Erstellung eines Pflichtenheftes bis zur kontinuierlichen Weiterentwicklung der vorhandenen Lösung – mit dem erforderlichen Rüstzeug auszustatten, vermittelt die akquinet ihre umfangreichen Erfahrungen und Best Practices im Rahmen der „CRM Akademie“ an  Endkunden, die eine Einführung von Microsoft Dynamics CRM planen oder dies bereits einsetzen.
 
Die CRM-Akademie ergänzt dabei die klassischen vom Hersteller inhaltlich definierten Seminare um das konkrete Praxiswissen der akquinet aus zahlreichen erfolgreichen Projekten. Sie stellt im Baukastenprinzip, das sich an der Projektsituation der Teilnehmer orientiert, Inhalte für 3 klassische Zielgruppen bereit.
 
Diese offenen Seminare richten sich an alle Mitarbeiter aus Fachbereichen im Projektteam des Endkunden:
 
Zielgruppe: Technische Berater
18. – 20.09. in Hamburg
 
Zielgruppe: Projektleiter
16. – 18.10. in Hamburg
 
Zielgruppe: Mitarbeiter Fachbereiche
13. – 15.11. in Hamburg

28.05.2012

Form Message Box for CRM 2011 Forms

Schon in CRM 4 gab es die Möglichkeit via JavaScript eine "Bandarole" samt Benutzernachricht direkt über einem Formular anzuzeigen. Im Blog Pete's CRM 2011 Stuff gibt es ein Script, was genau diese Funktionalität für CRM 2011 bereitstellt.

0.1 Account Formular mit Message Boxen

Dieses JavaScvript-Bibliothek inklusiv Beispiel-Aufruf steht in der Solution CRMFormMessage_1_0_0_0.zip bereit. Nach dem Import müssen folgende Schritte ausgeführt werden, damit die Funktionalität genutzt werden kann:

1) Hinzufügen der Bibliothek zum Account-Formular
Die Bibliothek "akq_form_message" unter "Form Properties" dem Account-Formular hinzufügen.

1.1 Account-Formular Form Properties

2) Hinzufügen des Event Handler
Für das Ereignis "OnLoad" des Formulars einen Event Handler hinzufügen, welcher mit der Bibliothek "akq_form_message" verknüpft ist. Der Name der aufgerufenen Funktion lautet "Test".

2.1 Event Handler Test-Aufruf


Dieser Schritt ist optinal und nur zur Demonstration gedacht. Normalerweise können folgende Aufrufe bereits nach Schritt 1 in eigenen Scripten eingebunden werden:
  • ShowMessage("My Test Info Message", "info");
  • ShowMessage("My Test Warning Message", "warn");
  • ShowMessage("My Test OK Message", "ok");
  • ShowMessage("My Test Error Message", "error");
--
Links / Weiterführende Information:

24.05.2012

CleanUp PrincipalObjectAccess after installing Update Rollup 6

In der Tabelle PrincipalObjectAccess (Organisations-Datenbank) speichert das CRM sämtliche Informationen über Sicherheitsfreigaben aller Objekte. Durch einen Fehler im CRM wächst diese Tabelle schnell auf mehrere Millionen Datensätze an, was zu Performance-Problemen führen kann.

Dieser Fehler wurde mit Update Rollup 6 behoben. Allerdings nur für neu angelegte Objekte. Um die Tabelle zu säubern und von Artefakten zu befreien stellt Microsoft in KB2664150 ein SQL-Script bereit.

Vor Ausführung des SQL-Scriptes:
  1. Update Rollup 6 auf dem CRM-Server installieren
  2. Organization_MSCRM in Zeile 1 Datenbank Namen ersetzen 
Laufzeit:
Datensätze vor dem Script: 3.000.000+
Datensätze nach dem Script: 200.000+
Laufzeit: ~5:00 min


USE [Organization_MSCRM] GO BEGIN TRY BEGIN TRAN t1 create table #ToDeletePoaEntries ( ObjectId uniqueidentifier, Otc int ) CREATE UNIQUE NONCLUSTERED INDEX [mainindex] ON [dbo].[#ToDeletePoaEntries] ( [ObjectId] ASC, [Otc] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] declare entity_cursor cursor local FORWARD_ONLY READ_ONLY for select distinct e.ObjectTypeCode, e.BaseTableName, a.PhysicalName from EntityView e inner join AttributeView a on e.EntityId = a.EntityId and a.IsPKAttribute = 1 where e.IsReplicated = 0 and e.IsDuplicateCheckSupported = 0 and e.OwnershipTypeMask & 1 = 1 open entity_cursor declare @baseTableName sysname declare @otc nvarchar(20) declare @primaryKey sysname declare @totalCollected int = 0 declare @totalDeleted int = 0 fetch next from entity_cursor into @otc, @baseTableName, @primaryKey while @@FETCH_STATUS = 0 begin print 'Cleaning up POA for ' + @baseTableName declare @deletestatement nvarchar(max) -- Insert records to be deleted in [#ToDeletePoaEntries] set @deletestatement = 'insert into #ToDeletePoaEntries(ObjectId, Otc) select distinct poa.ObjectId, poa.ObjectTypeCode from PrincipalObjectAccess poa left join ' + @baseTableName + ' e on poa.ObjectId = e.' + @primaryKey + ' where e.' + @primaryKey + ' is null and poa.ObjectTypeCode = ' + @otc; print @deletestatement exec(@deletestatement) set @totalCollected = @@ROWCOUNT print CAST(@totalCollected as nvarchar(20)) + ' records collected for deletion for ' + @baseTableName fetch next from entity_cursor into @otc, @baseTableName, @primaryKey end close entity_cursor deallocate entity_cursor print CAST(@totalCollected as nvarchar(20)) + ' total records collected' -- Delete query -- delete all records of the current entity type which don't have corresponding object in the base table delete from PrincipalObjectAccess from PrincipalObjectAccess poa join #ToDeletePoaEntries e on poa.ObjectId = e.ObjectId and poa.ObjectTypeCode = e.Otc -- delete PrincipalObjectAccess records set @totalDeleted = @@ROWCOUNT print CAST(@totalDeleted as nvarchar(20)) + ' records deleted for ' + @baseTableName COMMIT TRAN t1 PRINT 'EXECUTION SUCCEED' END TRY BEGIN CATCH ROLLBACK TRAN t1 PRINT 'EXECUTION FAILED :' + ERROR_MESSAGE() END CATCH

--
:: Links / Weiterführende Informationen:

28.01.2012

Change Excel Export Limit

In CRM 2011 ist die Anzahl der Datensätze, die man nach Excel exportieren kann, auf 10.000  begrenzt. Es gibt keine Möglichkeit diese Grenze zu erhöhen – kein supportete Möglichkeit.

Unsupportet sieht das ganze schon anders aus. Mit folgendem SQL-Statement kann man die Grenze auf z.B. 2 Millionen erhöhen:

UPDATE [OrganizationDatabaseName].[dbo].[OrganizationBase] SET [MaxRecordsForExportToExcel] = 2000000

Folgende Parameter muß man ersetzen:
-    OrganizationDatabaseName: Name der Datenbank der Organisation
-    2000000: Neue Grenze der maximal zu exportierenden Datensätze




Natürlich sollte man immer damit rechnen, dass das Ganze in einem Timeout endet, wenn man es übertreibt.

--
:: Links / Weiterführende Informationen:

04.11.2011

Mapping between CRM 4 and CRM 2011 Data Types

Da sich die Datentypen von CRM 4 zu CRM 2011 geändert haben, hier eine kleines Mapping zwischen alten und neuen Datentypen



CRM 4

CRM 2011

CrmBoolean

bool

CrmDateTime

DateTime

CrmDecimal

decimal

CrmFloat

double

CrmMoney

Money

CrmNumber

int

Customer

EntityReference

DynamicEntity

Entity

Key

Guid

Lookup

EntityReference

Owner

EntityReference

Picklist

OptionSetValue

Status

OptionSetValue

string

string





Legende / Farbcodes

*CRM Datentypen                              

*.NET Datentypen

:: Links / Weiterführende Informationen:

22.05.2011

There was an error while retrieving the data from Microsoft Dynamics CRM.

Fehlermeldung im CRM
Wenn in Microsoft Dynamics CRM 2011 Charts nicht angezeigt werden und stattdessen die Fehlermeldung "There was an error while retrieving the data from Microsoft Dynamics CRM." erscheint, liegt das daran, dass die Anzahl der für das Chart zu analysierenden Datensätze 50.000 überschreitet.

Dieser Fehler kann durch Hochsetzen der Grenze von 50.000 auf z.B. 200.000 behoben werden. Die dafür benötigten Schritte unterscheiden sich, je nachdem ob man die Grenze auf dem Server (Web Client) oder in Outlook (Offline Client) manipulieren will.



 #1: Erhöhen der Grenze auf dem Server
Der relevante Wert ist in der CRM-Konfigurationsdatenbank hinterlegt. Um den Wert zu erhöhen muß in der Datenbank „MSCRM_CONFIG“ die Tabelle „DeploymentProperties“ geöffnet werden. In dieser Tabelle filtert man die Spalte „ColumnName“ nach dem Wert „AggregateQueryRecordLimit“. Im gefundenen Datensatz kann man die maximale Anzahl über die Spalte „IntColumn“ festlegen.

1.1 Datensatz in der MSCRM_CONFIG Datenbank
Um die Änderungen zu aktivieren, muß der Webserver neu gestartet werden. Dies geschieht über ein „iisreset“ in der Kommandozeile.

1.2 Neustarten des Webservers









#2: Erhöhen der Grenze im Client
Hier ist der relevante Wert in der Registry hinterlegt. Über die Kommandozeile startet man mit dem Befehl „regedit“ den Registrierungseditor. In diesem kann man unter dem Schlüssel

 HKEY_CURRENT_USER\Software\Microsoft\MSCRMClient\AggregateQueryRecordLimit

die maximale Anzahl festlegen.

Nun sollten die alle Charts wieder korrekt angezeigt werden.
Charts werden wieder angezeigt






































--
:: Links / Weiterführende Information:

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: