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:

27.02.2011

CRM on the Fast Lane: Recently Visited

Ein neues Feature von CRM 2011, durch dessen Nutzung man die Klickrate drastisch reduzieren kann, ist "Recently Visited". Dabei handelt es sich um eine Liste der zuletzt geöffneten CRM Objekte und Ansichten. Es werden die letzten 40 CRM Objekte und die letzten 10 Ansichten gespeichert. Geleert werden kann diese Liste nicht - CRM Objekte bzw. Ansichten werden automatisch entfernt, sobald die jeweilige maximale Anzahl erreicht ist und neue CRM Objekte bzw. Ansichten hinzukommen. Dabei arbeitet Recently Visited nach dem First-In-First-Out-Prinzip.

Damit ein Eintrag nicht aus der Recently Visited Liste rutscht, kann man ihn durch einen Klick auf den Pin rechts neben dem Eintrag fixieren.

CRM Objekte und Ansichten, welche im Microsoft Dynamics CRM Mobile Express Client geöffnet werden, werden nicht von Recently Visited nicht verfolgt.

CRM Objekte und Ansichten, welche im Webclient oder im Outlook Client geöffnet werden, werden verfolgt.

Die Einträge in Recently Visited werden serverseitig gespeichert und sind auch über eine Session hinweg verfügbar.

#1: Recently Visited im CRM Webclient
Um Recently Visited im Webclient zu öffnen, genügt ein Klickt auf das Icon am oberen rechten Rand der Navigation Pane.

1.1 Recently Visited im CRM Webclient


Zusätzlich werden die Recently Visited Einträge gefiltert nach Entitäten im Shortcut Menü einer Entität unter den Ansichten angezeigt. Hier ist die maximale Anzahl auf 6 beschränkt und CRM Objekte können nicht fixiert werden.

1.2 Recently Visited im Shotcut Menü der Leads

#2: Recently Visited im CRM Outlook Client
Im CRM Outlook Client ist Recently Visited ebenfalls unter "File/CRM Recent" verfügbar. Allerdings werden hier nur die zuletzt geöffneten CRM Objekte angezeigt und keine Ansichten.


2.1 Recently Visited im CRM Outlook Client

ACHTUNG:
Die Einträge unter Recently Visited werden nicht validiert, d.h. gelöschte CRM Objekte verbleiben so lange auf der Liste, bis sie auf natürliche Weise unten "herausfallen". Man sollte also darauf achten, dass gelöschte CRM Objekte nicht unter Recently Visited mit dem Pin fixiert sind.