Microsoft Dynamics CRM 2011 | Ausführungskontext & JS-Code

Update Rollup 12 steht kurz vor der Tür und damit auch der Cross-Browser Support. Dies ist nicht nur die Gelegenheit, sich den verwendeten JavaScript-Code auf Cross-Browser-Kompatibilität hin anzusehen, sondern auch auf mögliche Optimierung hin zu untersuchen.

An einem Praxisbeispiel möchte ich Euch aufzeigen, welches Potenzial auch in Euren Code-Zeilen liegen könnte.

JS_onChangeAddressFields

Nehmen wir an, wir möchten bei diversen onChange-Ereignissen von Adress-Feldern einen Code ausführen. In meinem Beispiel eine einfache Alert-Meldung. In der Praxis vielleicht eine Vervollständigung, wie zuletzt vorgestellt mit Hilfe von jQuery.

Wir wissen, dass auf einem Formular mehrere Adressfelder existieren können. Neben eigenen Benutzerdefinierten Feldern auch die im Standard vorhandenen Adresse1_xxx- bzw. Adresse2_xxx – Felder.

JS_onChange_LinesOfCode_oldfashioned

In der Praxis finden sich in einer oder mehrerer JS-Bibliotheken “Tonnen” von Code-Zeilen.

Jedes Feld hat möglicherweise seine eigene onChange-Funktion in der die Code-Zeilen meist nur kopiert und leicht modifiziert wurden.

JS_onChange_LinesOfCode_oldfashioned3Da neben den Adresse1_ -Feldern auch noch Adresse2_-Felder existieren können, sind die Funktionen dann auch noch für diese Felder kopiert worden und somit entstehen, wie in meinem Beispiel leicht 340-Zeilen Code, die speziell auf jedes einzelne Feld zugeschnitten sind.

Diese sind dann an jedes Feld über das onChange-Ereignis gebunden.

Da eine derartige Funktion aber nicht nur auf dem Kontakt-Formular, sondern auch z.B. auf dem Firmen-, dem Lead und dem Weitere-Adressen-Formular genutzt werden soll, sind entsprechende Duplikate der Code-Zeilen in unterschiedlichen Bibliotheken nicht auszuschließen.

Dies stellt insbesondere bei der Pflege der Code-Zeilen ein enormes Gefahren-Potenzial dar. Noch dazu sind die JS-Dateien unnötig groß und kosten unter Umständen auch eine Performance beim Laden selbiger Formulare.

Glücklicherweise bietet uns Microsoft Dynamics CRM eine Funktion, mit deren Hilfe die Code-Zeilen in vorliegendem Beispiel auf gerade einmal 35 Zeilen optimiert werden können.

Das Stichwort ist hier der Ausführungskontext.

JS_onChange_FieldPropertyWir richten uns eine allgemeingültige Bibliothek ein, die wir auf allen Formularen, die mit Adressfeldern bestückt sind, einbinden können.

Anschließend binden wir unsere Funktion über das onChange-Ereignis an die unterschiedlichen Feldern, die unsere Funktion “triggern” soll.

JS_onChange_FieldProperty_Field2

Dabei können wir bei allen Feldern die gleiche Funktion nutzen, unabhängig davon, auf welchem Formular (Lead, Firma, Kontakt, Weitere Adressen) unser Feld platziert wurde.

JS_onChange_FormularHandler

Entscheidend bei der Einrichtung ist die Über-mittlung des Ausführungskontext als ersten Parameter.

Mit diesem Parameter ist es uns möglich, unsere Funktion für alle Feldwerte nutzbar zu machen.

JS_onChange_LinesOfCode

In unserer Funktion fügen wir den Ausführungskontext (executionContext) als Parameter hinzu und werten diese in den ersten Zeilen mit

var eventSource = executionContext.getEventSource().getName();

aus.

In einem Zweiten Schritt schneiden wir den Feldnamen ab, um lediglich ein Präfix zur Hand zu haben.

var prefix = eventSource.substring(0, eventSource.lastIndexOf(‘_’)+1);

Nunmehr haben wir unser Präfix (address1_ oder auch address2_ oder auch <Entwicklerpräfix>_addressX_) und können damit arbeiten.

In den nachfolgenden Code-Zeilen brauchen wir die einzelnen Felder jetzt nur noch mit prefix+”letzterTeildesFeldnamens” (z.B. country) anzusprechen.

Wenn Ihr bei der Anlage Eurer Benutzerdefinierten Adressfelder die Semantik

<Entwicklerpräfix>_(addressX)_line1,

<Entwicklerpräfix>_(addressX)_line2,

(Wert in Klammern = optional)

eingehalten habt, dann funktioniert der Code auch optimal im Zusammenspiel mit selbigen Feldern.

Ihr seht also, im Ausführungskontext steckt ein enormes Potenzial. In jüngsten Projekten habe ich unzählige Code-Zeilen dahingehend optimieren können und das System damit deutlich “entschlacken” können.

Da der Code nunmehr in einer zentralen Bibliothek liegt, die von allen Entitäten mit Adress-Feldern genutzt werden kann, lässt sich die Funktion auch viel leichter in der Folgezeit betreuen und pflegen.

Ich hoffe, Euch damit erneut einen wertvollen Tipp präsentiert zu haben und jetzt viel Spass in der Umsetzung.

 

Technorati Tags:

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s