Quantcast
Viewing all articles
Browse latest Browse all 13977

Microsoft Dynamics CRM 2015 | Update 1 – Lessons Learned Part III

Image may be NSFW.
Clik here to view.
Lessons_Learned
Ihr steht also kurz vor einem Update auf CRM 2015 Update 1 und wollt von den zahlreichen neuen Funktionen profitieren? Möglicherweise habt Ihr bereits meinen 1. und 2. Teil gelesen. Nachdem ich zahlreiche Projekte in den letzten drei Wochen begleitet habe, folgen heute weitere Hinweise für euch, die das CCV Tool nicht identifiziert.

Nehmen wir an, eine Abfrage wurde via FetchXML oder einem Retrieve(Multiple) für ein Suchfeld durchgeführt und Ihr wollt mit dem Ergebnis ein Suchfeld auf eurer Maske setzen. Quasi eine 1:1 Kopie der Feldwerte von Entität A zu Entität B. Ihr verwendet für das Setzen der Werte:

Xrm.Page.getAttribute(“euerAttribut”).setValue([{ id: result.euerQuellLookup.Id, name: result.euerQuellLookup.Name, entityType: result.euerQuellLookup.LogicalName}]);

Dann wundert euch nicht über eine Fehlermeldung, sollte euer Quell-Suchfeld keine Werte enthalten. Ihr bekommt im Update 1 dann eine Fehlermeldung, dass EntityTypeundefiniert sei und weiterer Script-Code wird möglicherweise nicht korrekt ausgeführt.

In früheren Versionen konnte CRM mit einer leeren Quellangabe umgehen und ein Setzen des Feldwertes wurde schlichtweg nicht durchgeführt.

Nach einigen Tests mit CRM 2015 Update 1 scheint es nunmehr, dass hier gezielt im Ergebnis kontrolliert werden muss, ob ein Ergebnis vorliegt und nur im Erfolgsfall sollte dann auch das Ziel-Suchfeld mit obigem Befehl gesetzt werden.

Des Weiteren haben wir einige Installation analysieren dürfen, die jQueryUI verwendet haben, um einige Dialogfenster in der CRM Maske anzuzeigen. Diese Modifikationen zogen einige DOM Manipulationen nach sich. Jegliche Art von DOM Manipulation im CRM 2015 Update 1 zu einer Fehlermeldung bei der Initialisierung des Scripts.

Um hier in einer unterstützten Umgebung zu bleiben, empfehle ich daher diese Scripte entsprechend umzustellen. Handelt es sich bei der Ausgabe lediglich um Benutzerinformationen, so stehen hierfür die beiden Methoden:

  • Xrm.Utility.alertDialog(message,onCloseCallback)
  • Xrm.Utility.confirmDialog(message,yesCloseCallback,noCloseCallback)

zur Verfügung. Will man jedoch beispielsweise einige Daten tabellarisch in einem Dialog-Fenster darstellen, oder möchte andere HTML/CSS Formatierungen nutzen, so empfehle ich die Umstellung hin auf eine benutzerdefinierte HTML Web Ressource. Diese können wir unterstützt mit dem Befehl

Xrm.Utility.openWebResource(webResourceName,webResourceData,width, height)

aufrufen und haben über webResourceData sogar die Möglichkeit, entsprechende Ausgabewerte für eine Tabelle zu übergeben.

Doch Vorsicht: Schaut man sich das Beispiel im SDK zur Übertragung mehrerer Daten via encodeURIComponent an, so fehlt hier ein entscheidender Hinweis auf den wir in der Praxis gestoßen sind. Schauen wir uns die Beispiel URL an: 

http://<server name>/WebResources/new_/ShowDataParams.htm?Data=first%3DFirst%20Value%26second%3DSecond%20Value%26third%3DThird%20Value 

Man übersieht hier leicht, daß man schnell an das Limit der maximalen Länge einer URL heranreichen kann. Insbesondere dann, wenn ihr dem Beispiel folgt und eure Parameter tatsächlich mit first=, second=, third=, etc. beginnen lasst. Ich empfehle deutlich kleinere Schlüssel – Wertepaare. z.B. a=, b=, c=.

Dies ist zwar schlechter zu lesen, aber auf der Empfänger-Seite könnt Ihr daraus immer noch eure tatsächlichen Bezeichnungen als Variablen-Deklarationen verwenden.

Ihr seht schon, es haben sich einige Empfehlungen aus den bereits getätigten Umstellungen ergeben und ich versuche euch diese möglichst kompakt in dieser Serie zu vermitteln. Daher, bis zur nächsten “Session”…


Einsortiert unter:CRM 2015, CRM 2015 OnlineImage may be NSFW.
Clik here to view.
Image may be NSFW.
Clik here to view.
Image may be NSFW.
Clik here to view.

Viewing all articles
Browse latest Browse all 13977

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>