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.


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

Nice to know: Custom Activities und Quick-Forms

You can enable custom activity entities to support quick create forms, and you can create quick create forms for those entities. However, the quick create form for custom activity entities will not be used when people click the Create button on the nav bar. These quick create forms can be used only when people add a new record for a subgrid that displays that specific custom activity entity.

Source: https://technet.microsoft.com/en-us/library/dn531126.aspx#BKMK_QuickCreateFormEntities


Preview feature: Voice of the Customer surveys

Das Microsoft Dynamics CRM Team hat vor ca. einer Woche News zum Feature “Voice of the Customer” auf ihrem Blog veröffentlicht: http://blogs.msdn.com/b/crm/archive/2016/01/12/preview-feature-voice-of-the-customer-surveys.aspx

Das Feature ist ab sofort als Preview verfügbar (Scheinbar jedoch leider bis jetzt nur für US-Mandanten…)

We’re making a new feature available as a preview feature that you install as a preferred solution. With Voice of the Customer surveys, you can create and send out surveys to get feedback from your customers about your products or services. Respondents can take the surveys on a phone, tablet, or computer

Aktivieren kann man das Feature via CRM Online-Verwaltungskonsole. Hier einfach die Lösung “Voice of the Customer” installieren:

image

Die Installation macht dann nichts anderes, als eine CRM-Solution zu deployen:

image

Um das neue Feature nutzen zu können, muss zum Schluss die Solution geöffnet werden und die “Terms and Conditions” akzeptiert werden.

In einem meiner nächsten Blog-Einträge werde ich zeigen, wie eine Umfrage aussieht und wie diese eingerichtet wird.