Mein Name ist Christoph Mäder und arbeite schon seit der Version 1.2 mit Microsoft Dynamics CRM. Während dieser Zeit hat sich ein umfangreiches Wissen über das Produkt angesammelt. Um dieses Wissen auch anderen MSCRM-Evangelisten und MSCRM-Begeisterten mitzuteilen, habe ich diese Website ins Leben gerufen. Sie wird in den nächsten Tagen, Wochen und Jahren mit Wissen angereichert.


Sitemap-Editor in Dynamics 365 – Well done Microsoft!

Did you already use the new sitemap-editor in Dynamics 365? If not, do it!

First time I used it, when I was trying to edit the sitemap in XrmToolBox. It said:

image

So I did the following:

  1. Create a new solution per example “procrm.sitemap” and add the sitemap to it:
    image
    image
  2. Now, open the sitemap with a double-click. Here we go, the new sitemap-editor pops up:
    image
  3. Now add by drag’n’drop new sections, groups and per example entites:
    image[30]

Latest version compatibility overview

Nice overview of the version compatibility and also nice information about solutions can be found here: https://msdn.microsoft.com/en-US/library/gg334576.aspx#BKMK_VersionCompat

 image


How to detect deactivated business rules of all entities?

Problem: Sometimes after a deployment of customizations business rules are deactivated. (Reason unknown..)

How can we check now all business-rules for their state if we don’t want to open every entity and check every single rule for its state? image

Solution: By the advanced find! (Column “Status”)

image


Dynamics 365 – Was steckt dahinter?

Microsoft packt mit Dynamics 365 CRM und ERP in eine grosse App-Familie.
Es scheint als möchte Microsoft weg vom Verkauf von Fachapplikationen wie bsp. CRM. Anstatt werden nun Prozesse oder Themen verkauft. image

In der Cloud positioniert Microsoft “Dynamics 365” neben Azure-Produkten wie bsp. Office 365 oder Power BI:

image

Die Dynamics 365 Apps im Detail

Doch was beinhalten die Dynamics 365 Apps nun überhaupt? Was bleibt wie es war und was ist neu? Und welche Apps sind nur Umbenennungen von bereits vorhandenen Produkten wie bsp. Dynamics CRM?

App Details
Dynamics 365 for Sales Technologie(n)
- Dynamics CRM

Beinhaltet die Benutzung von allen Sales Funktionalitäten im CRM wie besp. Kundenmanagement,  Leads, Verkaufschancen etc.

Dynamics 365 for Customer Service Technologie(n)
- Dynamics CRM
Dynamics 365 for Operations Technologie(n)
- Dynamics AX

Namensänderung: Dynamics AX wird neu unter dem Namen Dynamics 365 for Operations vertrieben.

Dynamics 365 for Financials (ehemals “Project Madeira”) Technologie(n)
- Azure based NAV

Erscheint nicht auf der obenstehenden Grafik, da Dynamics 365 for Financials zur Zeit in der Schweiz noch nicht erhältlich ist. Dabei handelt es sich um ein vollständig in der Cloud eingebettetes Produkt auf Basis von MS Dynamics NAV.

Dynamics 365 for Field Service Technologie(n)
- Dynamics CRM 8.2.0.779

Ehemals eine AddOn-Solution von FieldOne. Heute eigene Solution von Microsoft.

Dynamics 365 for Project Service Automation Technologie(n)
- Dynamics CRM 8.2.0.779

Diese App basiert auf Dynamics CRM mit der PSA Solution von Microsoft on top.

Dynamics 365 for Marketing Betitelt primär die Partnerschaft zwischen Microsoft und Adobe. (Enterprise Edition von Microsoft Dynamics 365 umfasst die Adobe Marketing Cloud). Zur Zeit gibt es keine technische Out-Of-The-Box Integration der Adobe Marketing Cloud in Dynamics CRM oder eine andere Dynamics App.
Dynamics 365 for Customer Insights Scheint ein Zusammenspiel von Dynamics CRM und div. anderen Apps wie bsp. Social Engagement zu sein. Mehr Informationen dazu werden wir wohl in den nächsten Monaten erhalten.

Error beim Solution deployen

Problem
Beim Deployen einer verwalteten Lösung, welche unverwaltete Komponenten in verwaltete konvertiert, trat folgender Fehler auf:

The AttributeLookupValue (Id=00000000-0000-0000-0000-000000000000) entity or component has attempted to transition from an invalid state: ComponentStateName: SystemUnpublished; ComponentOperation: Delete; ComponentSolutionType: Active; SolutionOperationContext: None; IsProtected: False; IsBeingPublished: True. 

Lösung
Nach einer fast stündigen Fehlersuche war am Schluss die Lösung einfach: Auf dem Zielsystem alle Anpassungen veröffetnlichen. Danach konnte die verwaltete Lösung ohne Fehler importiert werden.


Datenbank ist riesig! Aber wo liegen die Daten?

Datenbanken brauchen oftmals viel Speicherplatz (ohne Logs), ohne dass wissentlich viel Daten darin abgelegt wurden. Gerade eine CRM-Datenbank kann sehr schnell wachsen, wenn besp. viele Mails mit Anhängen getracked werden.

Wie finde ich aber nun heraus, wo der Speicherplatz “verloren” geht? Nach ein wenig googlen bin ich auf dieverse SQL-Queries gestossen. Doch es geht einfacher. Einfach per Rechtsklick auf der gewünschten Datenbank zu den Standardreports navigieren und bsp. den “Disk Usage by Top Tables” ausführen.

image

Via Header kann der Report sortiert werden und so sieht man sehr schnell welche Tabelle am meisten Speicherplatz braucht:

image


Invalid parameter ‘regardingobjectidtype=account’ in Request.QueryString

Im CRM ist es möglich via URL ein Formular zum Erfassen eines neuen Datensatzes zu öffnen. Dabei können  meisten Felder eines Formulars direkt mit URL-Parameter gesetzt werden. Bsp. zum Setzen des Feldes “Name”:

/main.aspx?etn=account&extraqs=name%3DNew%20Account&pagetype=entityrecord

https://msdn.microsoft.com/en-us/library/gg334375.aspx

Es gibt jedoch Ausnahmen wie bsp. das Feld “RegardingObjectId” auf einer Aktivität-Entität. Dieses Feld kann (wahrscheinlich da es sich um ein ActivityParty handelt) nicht via URL gesetzt werden. Versucht man es trotzdem findet man im CRM-Server-Trace folgenden Fehler:

System.InvalidOperationException: CRM Parameter Filter - Invalid parameter 'regardingobjectidtype=account' in Request.QueryString

Ist das Setzen des Feldes jedoch trotzdem gewünscht, kann mit Form-Parametern gearbeitet werden. Hierzu sind drei Parameter notwendig:

image

Diese drei Parameter können in der URL dem Formular übergeben werden:

main.aspx?etn=phonecall&newWindow=true&pagetype=entityrecord&extraqs=is_regardingobjectid%3D%7B67D26E69-082B-4F30-B70D-EF202530CD41%7D%26is_regardingobjectidtype%3Daccount%26is_regardingobjectidname%3DCompanyname

Auf dem Formular kann nun mit Hilfe von JavaScript das Feld “RegardingObjectId” gesetzt werden:

function addToPartyListFromFormParameters(propertyName, idBaseName, replaceExisting) {
    var queryParams = Xrm.Page.context.getQueryStringParameters();
    var idParam = queryParams[idBaseName];
    var nameParam = queryParams[idBaseName + "name"];
    var typeParam = queryParams[idBaseName + "type"];

    if (idParam && nameParam && typeParam) {
        addToPartyList(propertyName,
            {
                Id: idParam,
                Name: nameParam,
                LogicalName: typeParam,
            }, replaceExisting
        );
        return true;
    }
    return false;
}

Ein möglicher Inhalt wie die Funktion “addToPartyList” aussehen könnte, kann hier gefunden werden:

https://rajeevpentyala.wordpress.com/2012/04/02/get-and-set-partylist-fields-using-jscript/


‘navBarData’ is undefined error

Problem

Nach der Migration von einer CRM 2011 Organisation auf 2016 (via 2013 und 2015) kann das Edit-Formular von verschiedenen Entitäten nicht mehr geöffnet werden resp. es bleibt eine weisse Seite und die Daten werden nicht geladen.

image

Lösung

Auf dem Form war die Anzeige der Navigationselemente ausgeschaltet:

image

Nachdem diese wieder eingeschalten worden war, konnte das Formular ohne Probleme geladen werden.


Prozessaktivierung: “Ganzzahliger Wert liegt ausserhalb des gültigen Bereichs”

Problem

Beim Aktiveren eines Workflows erscheint folgende Fehlermeldung:

image

Die Protokolldatei liefert mehr Informationen:

A validation error occurred.  The value of ’1033′ in attribute ‘languagecode’ on record of type ‘workflow’ not a provisioned LCID.

Lösung

Auf dem Development-System, auf welchem der Prozess erstellt worden war, war das englische Sprachpaket aktiviert. Nach dem auf Prod-Mandanten auch das englische Sprachpaket (1033) aktiviert worden war, konnte der Workflow aktiviert werden.


Active Directory-Benutzer mit Powershell erstellen

Gerade bei Test- oder Entwicklungs-Umgebungen kommt es immer wieder vor, dass mehrere Benutzer auf einmal im CRM erfasst werden müssen. Ergo müssen auch die Benutzer im Active Directory her. Bei ein zwei Benutzern mit dem Wizard kein Problem. Bei mehr Benutzern kann das Geklicke aber sehr schnell mühsam werden.

Lösung: Powershell! Mit Powershell ist es sehr einfach möglich die AD-Beutzer automatisiert zu erstellen.

  1. Die Benutzer in einer CSV-Datei erfassen:
    image
  2. Die PowerShell-Datei mit folgendem Inhalt erstellen:
    Param(
          [string]$filePath,
          [string]$initPassword
    )
    
    Import-Csv $filePath | New-ADUser -Path 'DC=PROCRM,DC=CH' -PassThru | Set-ADAccountPassword -Reset -NewPassword (ConvertTo-SecureString -AsPlainText '$initPassword' -Force) -PassThru | Enable-ADAccount

    Bemerkung: Der Parameter “Path” ist optional. Wird dieser wegglassen werden die Benutzer einfach im Root erstellt.

  3. CMD-Datei zum Aufruf der PS-Datei erstellen:
    Powershell.exe Set-ExecutionPolicy –ExecutionPolicy RemoteSigned –Scope CurrentUser Powershell.exe -File CreateAdUsers.ps1 -filePath crmusers.csv -initPasswort 'Passw0rd'
  4. Zum Erstellen der Benutzer nun einfach die eben erstellte CMD-Datei ausführen