Schreiben von Code für Microsoft Dynamics 365-Formulare

 

Veröffentlicht: Januar 2017

Gilt für: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

Formularprogrammierung bietet Möglichkeiten, mit Entitätsformularen zu interagieren, durch die Verwendung von JavaScript, das für Ereignisse im Formular ausgeführt wird.

In diesem Thema

Verwendung von Formularprogrammierung

Faktoren, die bei Verwendung von Formularprogrammierung zu berücksichtigen sind

Verwalten von Bibliotheksabhängigkeiten

Schreiben von leistungsstarken Formularskripts

Verschiedene Formularpräsentationen

Entwicklungstools

Verwendung von Formularprogrammierung

Microsoft Dynamics 365 bietet zahlreiche Optionen, Geschäftsprozesse zu steuern. Formularprogrammierung ist eine Option. Aber Bedenken Sie, dass Sie eine andere Option haben: Unternehmensregeln. Geschäftsregeln stellen eine Methode für Benutzer zur Verfügung, die JavaScript nicht kennen und keine Entwickler sind, um in einem Formular Geschäftsprozesslogik anzuwenden. Vgl. das Anpassungshandbuchthema: TechNet: Erstellen und Bearbeiten von Geschäftsregeln für weitere Informationen.

Der Hauptvorteil von Formularprogrammierung und Geschäftsregeln ist, dass sie direkt sind. Sie erfordern nicht, dass Daten an den Server gesendet werden, und bieten daher die beste Leistung für viele Szenarien. Da sie menschliche Interaktion erlauben, sind sie auch flexibelste Option.

Während Geschäftsregeln den Vorteil haben, dass sie von Benutzern erstellt und verwaltet werden können, die keine Entwickler sind, haben sie auch bestimmte Einschränkungen und sollen nicht Formularskripts ersetzen. Formularprogrammierung bietet Möglichkeiten, die mithilfe von Geschäftsregeln noch nicht erreicht werden können.

Zu den häufigsten Aufgaben, die mithilfe von Formularprogrammierung ausgeführt werden, gehören:

  • Datenüberprüfung: Wenn möglich, sollten Sie die Daten überprüfen, während sie bearbeitet werden. Die Definition des Formularfelds führt die gebräuchlichste Datenüberprüfung für Sie aus. Beispielsweise kann in ein Feld Single Line of Text, das für eine E-Mail-Adresse formatiert ist, kein ungültiger Wert eingegeben werden.

    Verwenden Sie Formularprogrammierung für weitere Überprüfungen von Daten, die für Ihre Organisation eindeutig sind. Beispielsweise kann Ihre Organisation bestimmte Regeln dafür haben, wie Telefonnummern formatiert werden sollten oder welche Mindestlänge das Feld Subject in einer Serviceaktivität haben soll.

  • Automatisierung: Sie können bedeutende Produktivitätsverbesserungen erzielen, wenn Sie Formularskripts verwenden, um allgemeine Aufgaben zu automatisieren. Sie können Feldwerte festlegen, die von den Daten abhängen, die in ein Formular eingegeben werden, wodurch Benutzer beträchtliche Zeit sparen können, wenn sie Daten eingeben. Das Verwenden von Formularprogrammierung für die Automatisierung ist von Nutzen, da der Benutzer dadurch feststellt, dass in einem speziellen Fall ein Standardverfahren gültig ist. Benutzer können notwendige Anpassungen vornehmen, bevor sie einen Datensatz speichern.

  • Prozesserweiterung und -lenkung: Sie können festlegen, welche Daten im Formular oder Layout des Formulars angezeigt werden, um es für bestimmte Aufgaben zu optimieren, die von Personen in der Organisation durchgeführt werden. Sie können Formularprogrammierung verwenden, um spezielle Formularelemente ein- oder auszublenden oder verschiedene Formulare zu öffnen, die für eine Entität definiert wurden. Sie können steuern, welche Felder erforderlich sind, basierend auf den Daten , die im Formular oder in verknüpften Datensätzen vorhanden sind.

    MitMicrosoft Dynamics CRM 2015 und Microsoft Dynamics CRM Online 2015-Update können Sie Code schreiben, um die Geschäftsprozessflüsse zu steuern, die oben im Formular angezeigt werden.Weitere Informationen:Schreiben von Skripts für Geschäftsprozessflüsse.

Faktoren, die bei Verwendung von Formularprogrammierung zu berücksichtigen sind

Die Logik, die in der Formularprogrammierung angewendet wird, kann nur im Browser einer Person ausgeführt werden, die innerhalb des Microsoft Dynamics 365-Anwendungsentitätsformulars interagiert. Aus diesem Grund sollten Sie nicht nur Formularprogrammierung verwenden, um Prozesse in Verbindung mit Ihren Daten einzuleiten oder zu lenken. Datensätze können direkt über die Webdienst-APIs oder durch Workflows außerhalb des Formularkontexts erstellt oder aktualisiert werden. Formularprogrammierung sollte die Geschäftslogik ergänzen, die mithilfe von Plug-Ins und Prozessen angewendet wird, sodass alle Datensätze, die erstellt oder in irgendeiner Form aktualisiert werden, mit denselben Prozessen übereinstimmen.

Unternehmensregeln können im Entitätsumfang definiert werden, sodass dieselbe Logik auf den Server angewendet wird, unabhängig davon, von wem die Aktion stammt.Weitere Informationen:TechNet: Erstellen und Bearbeiten von Geschäftsregeln

Während Formularprogrammierung Funktionen zum Ausblenden von Formularfeldern enthält, sodass Benutzer nicht in der Lage sind, einige Entitätsdaten anzuzeigen oder zu aktualisieren, stellt es keine umfassende Lösung zum Erzwingen von Sicherheitsanforderungen dar. Ein Benutzer kann Entitätsdaten sehen, die nicht im Formular sichtbar sind, indem er eine Reihe von Methoden verwendet, wie beispielsweise Erweiterte Suche.Weitere Informationen:Das Sicherheitsmodell von Microsoft Dynamics 365

Verwalten von Bibliotheksabhängigkeiten

Als Leistungsoptimierung laden Microsoft Dynamics 365-Formulare JavaScript-Webressourcen asynchron und parallel. Das bedeutet, dass die Reihenfolge, in der die Bibliotheken für ein Formular konfiguriert werden, nicht gewährleistet, dass eine Bibliothek vollständig heruntergeladen und initialisiert wird, bevor eine andere Bibliothek möglicherweise versucht, eines der in ihr definderten Objekte zu verwenden.

Wenn Sie über Code verfügen, der davon abhängig ist, dass eine andere Bibliothek vollständig heruntergeladen und initialisiert wurde, ist die einfachste Methode, beide Bibliotheken in einer einzelnen JavaScript-Webressource mit Ihrem Code unter dem Bibliothekscode zu kombinieren. Ein ausgereiftere Methode besteht darin, Bibliotheken wie head.js oder require.js zu verwenden, um zu steuern, wie separate Bibliotheken geladen werden.

Schreiben von leistungsstarken Formularskripts

Beim Schreiben von Skripts für Formulare können Sie die folgenden Methoden verwenden, um eine bestmögliche Leistung zu erzielen:

  • Vermeiden Sie nicht benötigte JavaScript-Webressourcebibliotheken
    Je mehr Skripts Sie dem Formular hinzufügen, um so länger dauert ihr Download. Normalerweise werden Skripts in Ihrem Browser zwischengespeichert, wenn sie zum ersten Mal geladen werden, die Leistung beim ersten Anzeigen eines Formulars macht oft erheblichen Eindruck.

    Für ein bestimmtes Beispiel, fügen Sie jQuery nicht in den Formularskripts hinzu, nur weil Sie XMLHttpRequests verwenden möchten. Während jQuery die $.ajax-Funktion hat, mit der viele Benutzer vertraut sind, um diese Anforderungen auszuführen, ist es eine Entwicklerpräferenz und keine Notwendigkeit. Es ist möglich, diese Anforderungen mithilfe des systemeigenen XMLHttpRequest-Objekts auszuführen, das in allen Browsern enthalten ist, die von Microsoft Dynamics 365 unterstützt werden.Weitere Informationen:Verwendung von jQuery

  • Vermeiden Sie es, alle Skripts im Onload-Ereignis zu laden
    Wenn Sie Code haben, der nur OnChange-Ereignisse für Felder oder das OnSave-Ereignis unterstützt, stellen Sie sicher, die Skriptbibliothek mit dem Ereignishandler für diese Ereignisse anstelle des OnLoad-Ereignisses festzulegen. Dadurch kann das Laden dieser Bibliotheken verschoben werden, was die Leistung beim Laden des Formulars erhöht.

    Es wird nicht empfohlen, die addOnChange-Methode im OnLoad-Ereignishandler nur der Einfachheit halber anzuwenden. Während dies möglicherweise die Anzahl der erforderlichen Schritte verringert, um den Ereignishandler hinzuzufügen, wird das Formular langsamer geladen.

  • Verwenden Sie eingeklappte Registerkarten, um das Laden von Webressourcen zu verschieben
    Wenn Webressourcen oder IFRAMES in Abschnitten einer eingeklappten Registerkarte enthalten sind, werden sie nicht geladen, wenn die Registerkarte eingeklappt ist. Sie werden geladen, wenn die Registerkarte erweitert wird. Wenn sich der Status der Registerkarte ändert, tritt das TabStateChange-Ereignis auf. Jeder Code, der erforderlich ist, um Webressourcen oder IFRAMEs in eingeklappten Registerkarten zu unterstützen, kann Ereignishandler für das TabStateChange-Ereignis verwenden und Code reduzieren, der andernfalls im OnLoad-Ereignis auftreten müsste.

  • Richten Sie Standard-Sichtbarkeitsoptionen ein
    Vermeiden Sie die Verwendung von Formularskripts im OnLoad-Ereignis, die Formularelemente ausblenden. Stellen Sie stattdessen die standardmäßigen Sichtbarkeitsoptionen für Formularelemente, die ausgeblendet werden können, so ein, dass sie beim Laden des Formulars nicht standardmäßig sichtbar sind. Verwenden Sie dann Skripts im OnLoad-Ereignis, um die gewünschten Formularelemente anzuzeigen.

Verschiedene Formularpräsentationen

Es gibt mehrere verschiedene Möglichkeiten, Formulare zu präsentieren. Diese beeinflussen den Typ des Codes oder der verfügbaren Ereignisse, die Sie jeweils verwenden können.

Altes Formularrendering

In Microsoft Dynamics CRM Online 2015-Update 1 und Dynamics 365 (lokal) wurde eine neue Systemeinstellung namens Altes Formularrendering verwenden eingeführt. In diesen Versionen wurde das Rendering von Formularen verbessert und die interne Struktur der Seite wurde geändert. Aus diesem Grund können Formularskripts, die nicht unterstützte Methoden verwenden, nicht auf Elemente des DOM zugreifen, die in vorherigen Versionen verfügbar waren. Wenn nach dem Upgrade auf diese Versionen neue Fehler auftreten, können Sie diese Einstellung anwenden und überprüfen, ob die Fehler dann behoben sind. Ist dies der Fall, ist die Wahrscheinlichkeit hoch, dass die Skripts, die diese Fehler verursachen, nicht unterstützte Methoden sind.

Sie können Altes Formular-Rendering verwenden festlegen, damit genügend Zeit für die Problembehebung zur Verfügung steht. Sie können dann jedoch nicht von den Leistungsverbesserungen profitieren, die die Infrastruktur des neuen Formularrenderings bietet.

Hinweis

Die Einstellung Altes Formularrendering verwenden wird in der nächsten Hauptversion entfernt. Dann müssen alle Formularskripts mit dem neuen Formularrendering funktionieren.

Aktualisierte Entitäten

Alle benutzerdefinierten Entitäten und bestimmte Systementitäten verfügen über eine aktualisierte Benutzeroberfläche, die die Verwendung der Befehlsleiste und neue Formular-APIs umfasst. Die aktualisierten Systementitäten sind in der folgenden Tabelle aufgeführt:

Konto

Termin

Kampagne

Kampagnenaktivität

Kampagnenreaktion

Anfrage

Mitbewerber

Kontakt

Vertrag

Vertragsposition (ContractDetail)

E-Mail

Berechtigung

Anspruchsvorlage

Faxnummer

Rechnung

Rechnung (Produkt) (InvoiceDetail) *

Lead

Schreiben

Marketingliste

Verkaufschance

Verkaufschance (Produkt)

Reihenfolge

Auftrag (Produkt) (SalesOrderDetail) *

Telefonanruf

Position

Preislistenelement

Produkt

Produktzuordnung

Produktbeziehung (ProductSubstitute)

Warteschlange

Schnellkampagne (Massenvorgang)

Angebot

Angebot (Produkt) (QuoteDetail) *

Terminserie (RecurringAppointmentMaster)

Vertriebsdokumentation

SLA

SLA-KPI-Instanz

Social Media-Aktivität

Social Media-Profil

Aufgabe

Teams

Benutzer

* Diese Entitäten wurden in CRM Online 2016-Update 1 und Dynamics 365 Service Pack 1 (lokal) aktualisiert.

Hinweis

Einige aktualisierte Entitäten umfassen zusammengesetzte Attribute. Diese erfordern die Berücksichtigung einiger Besonderheiten:Weitere Informationen:Schreiben von Skripts für zusammengesetzte Attribute.

Aktualisierte Entitätsformulare können auch ein Steuerelement für Zusammenarbeit enthalten, das Zugriff auf Notizen, Aktivitäten und Beiträge bietet, wenn sie für die Entität aktiviert werden. Das Xrm.Page-Objekt bietet keinen Zugriff auf das Steuerelement für Zusammenarbeit. Sie können auf das Abschnittselement zugreifen, das das Steuerelement für Zusammenarbeit enthält, wenn Sie es anzeigen oder ausblenden möchten, indem Sie Skripts verwenden.

Formularprogrammierverfahren und PreSearch-Ereignis für aktualisierte Entitäten

In der folgenden Tabelle sind die Formularprogrammierverfahren aufgeführt, die nur für aktualisierte Entitäten verfügbar sind.

Methode

Beschreibung

Xrm.Page.context.client.getClient

Gibt einen Wert zurück, um anzugeben, in welchem Client das Skript ausgeführt wird.

Xrm.Page.context.client.getClientState

Gibt einen Wert zurück, um den Status des Clients anzugeben.

Xrm.Page.context.getUserName

Gibt den Namen des aktuellen Benutzers zurück.

Xrm.Page.data.entity.getPrimaryAttributeValue

Ruft eine Zeichenfolge für den Wert des primären Attributs der Entität ab.

Xrm.Page.data.refresh

Aktualisiert asynchron die Daten des Formulars, ohne die Seite erneut zu laden.

Xrm.Page.data.Speichern

Speichert asynchron den Datensatz mit der Option, die auszuführenden Rückruffunktionen festzulegen, nachdem der Speichervorgang abgeschlossen ist.

Xrm.Page.data.entity attribute.getIsPartyList

Legt fest, ob ein Suchattribut eine PartyList-Suche darstellt.

Xrm.Page.ui control.clearNotification

Entfernt eine Nachricht, die bereits für ein Steuerelement angezeigt wird.

Xrm.Page.ui control.setNotification

Zeigt eine Meldung neben dem Steuerelement an, um anzugeben, dass Daten ungültig sind.

Xrm.Page.ui.clearFormNotification

Verwenden Sie diese Methode, um Formularebenenbenachrichtigungen zu entfernen.

Xrm.Page.ui.setFormNotification

Verwenden Sie diese Methode, um Formularebenenbenachrichtigungen anzuzeigen.

Xrm.Page.ui control.addCustomFilter

Verwenden Sie fetchXml, um weitere Filter zu den Ergebnissen hinzufügen, die in der Suche angezeigt werden, . Jeder Filter wird mit zuvor hinzugefügten Filtern als eine UND-Bedingung kombiniert.

Xrm.Page.ui control.setShowTime

Gibt an, ob ein Datumssteuerelement den Zeitteil des Datums anzeigen soll.

Xrm.Utility.alertDialog

Zeigt einen nicht blockierenden Warnungsdialog mit einer Rückruffunktion an.

Xrm.Utility.confirmDialog

Zeigt einen nicht blockierenden Bestätigungsdialog mit unterschiedlichen Rückrufen an, je nach Schaltfläche, auf die der Benutzer geklickt hat.

PreSearch-Ereignis

Das neue PreSearch-Ereignis tritt auf, bevor das Suchdialogfeld geöffnet wird, wenn Sie einen Suchwert festlegen. Dieses Ereignis besitzt keine Benutzeroberfläche, um einen Ereignishandler in der Anwendung festzulegen; er kann nur mithilfe der Xrm.Page.ui control.addPreSearch-Methode festgelegt werden. Verwenden Sie dieses Ereignis mit den addCustomFilter-, addCustomView- und setDefaultView-Methoden, um die Ansichten zu steuern, die geöffnet werden, wenn Benutzer nach einem Datensatz suchen, der als Wert für das Suchfeld festgelegt werden soll.

Entitäten, die klassische Formulare verwenden

Systementitäten, die nicht aktualisiert wurden, verwenden die klassische Formularpräsentation. Formulare für diese Entitäten verwenden weiterhin das Menüband, wenn sie es in CRM 2011 verwendet haben, und haben keinen Zugriff auf Formular-APIs, die in dieser Version hinzugefügt wurden. Diese Entitäten sind in der folgenden Tabelle aufgeführt:

Adresse

Artikel

Kommentar zu Artikel

Massenlöschungsvorgang

Unternehmenseinheit

Verbindung

Rabatt

Rabattliste

Dokumentort

E-Mail-Anlage

Folgen

Ziel

Zielmetrik

Importquelldatei

Rechnung (Produkt)

Auftrag (Produkt)

Preisliste

Warteschlangenelement

Angebot (Produkt)

Rollupfeld

Rollupabfrage

Gespeicherte Sicht

Dienst

Serviceaktivität

SharePoint-Website

Standort

Gebiet

Einheit

Einheitengruppe

Entitäten, die für Dynamics 365 für Tablets aktiviert sind

Nur ausgewählte Systementitäten und benutzerdefinierte Entitäten sind für die Anzeige mithilfe von Microsoft Dynamics 365 für Tablets verfügbar. Die folgenden Systementitäten verfügen möglicherweise über bearbeitbare Formulare in Dynamics 365 für Tablets.

Konto

Aktivität

Termin

Anfrage

Mitbewerber

Verbindung

Kontakt

Lead

Hinweise

Verkaufschance

Verkaufschance (Produkt)

Telefonanruf

Warteschlangenelement

Social Media-Aktivität

Social Media-Profil

Aufgabe

Da Dynamics 365 für Tablets nicht das gleiche Verhalten aufweist wie Formulare in der Webanwendung, sind einige APIs nicht verfügbar. Beispielsweise können Dynamics 365 für Tablets Registerkarten nicht erweitert oder reduziert werden, deshalb tritt das Registerkarte TabStateChange-Ereignis nicht auf und Xrm.Page.ui tab. setDisplayState kann nicht verwendet werden, um Registerkarten zu erweitern oder zu reduzieren.Weitere Informationen:Schreiben und Debuggen von Skripts für Dynamics 365 für Smartphones und Tablets.

Entwicklungstools

Ihre Erfahrung beim Schreiben von JavaScript für Dynamics 365-Formulare wird besser sein, wenn Sie geeignete Tools verwenden.

Verwenden geeigneter Erstellungstools

Da JavaScript eine interpretierte Sprache ist, sind keine speziellen Entwicklungstools erforderlich.JavaScript ist nur Text, deshalb kann es in der Anwendung oder in einem Texteditor, wie Notepad, bearbeitet werden. Sie können jedoch bedeutende Produktivitätsgewinne erzielen, wenn Sie geeignete Erstellungstools verwenden, die Funktionen bereitstellen, um speziell die Bearbeitung von JavaScript-Dateien zu unterstützen, wie beispielsweise Microsoft Visual Studio und Microsoft Visual Studio Express. Sie können Visual Studio Community 2013 kostenlos erhalten.

Verwenden von Browserentwicklertools

Alle modernen Browser stellen integrierte Tools bereit, um Debuggingskripte zu aktivieren. Diese Tools können eine ungeheure Hilfe sein, wenn Sie Skripts für Dynamics 365-Formulare schreiben. Diese Entwicklertools werden häufig als F12-Tools bezeichnet, da dies die Taste ist, mit der sie geöffnet werden. Siehe W3Schools JavaScript Debugging für Informationen zur Verwendung dieser Tools.

Verwenden Sie die Entwicklertools, um die Syntax von Skripts zu überprüfen, die Sie als Skriptwebressourcen hochladen. Mithilfe dieser Tools können Sie ein besseres Verständnis des Objektmodells erlangen, für das Sie programmieren. Wenn Sie z. B. Code für den Zugriff auf bestimmte Objekte in einem Formular schreiben, müssen Sie häufig anhand des Namens auf diese zugreifen. Statt nach dem Namen des Objekts im Formular-Editor zu suchen, verwenden Sie die Konsole in den Entwicklertools, um das Xrm.Page-Objektmodell abzufragen und dann die Namen der Attribute oder Steuerelemente abzurufen, auf die Sie zugreifen. Wenn Sie z. B. anhand des Namens auf ein bestimmtes Unterrastersteuerelement zugreifen möchten, können Sie die Konsole des Browserentwicklertools verwenden, um den folgenden Code zu schreiben.

Xrm.Page.ui.controls.get(
function(ctrl,i){
 if(ctrl.getControlType() == "subgrid")
  console.log(ctrl.getName()
  );
});

Die Namen aller Unterrastersteuerelemente werden in den Ausgabebereich der Konsole geschrieben. Dieses Skripts nutzt die Funktion, eine anonyme Stellvertretungsfunktion an die Methode get zu übergeben, die in Sammlungen gefunden wird, sowie an andere Methoden, die für Objekte gefunden werden, um nach Typ zu filtern und den Objektnamen zurückzugeben (wie Xrm.Page.ui control.getControlType und Xrm.Page.ui control.getName in diesem Beispiel).

Wichtig

Dynamics 365-Formulare bestehen aus mehreren Frames. Damit der Code in der Konsole funktioniert, müssen Sie den richtigen Frame auswählen. Wählen Sie für die Dynamics 365-Webclientformulare den Frame namens ClientApiWrapper.aspx aus. Wählen Sie für die neuen interaktiven Servicehub-Clientformulare den Frame namens engagementhub.aspx aus.

Im Folgenden finden Sie einige weitere Beispiele.

  • Anzeigen der Namen aller Attribute in einem Formular mit ihrem Typ

    Xrm.Page.getAttribute(
    function (att, i) {
     console.log(att.getName() + " : " + att.getAttributeType())
    });
    
  • Anzeigen der gültigen Optionswerte für optionset-Attribute

    Xrm.Page.getAttribute(
    function (att, i) {
     if (att.getAttributeType() == "optionset") {
      console.log(att.getName())
      var options = att.getOptions();
      var optionsLength = options.length;
      for (var i = 0; i < optionsLength; i++) {
       var option = options[i];
       console.log("   value: " + option.value + " Label: " + option.text)
      }
     }
    });
    

Siehe auch

Erweitern von Microsoft Dynamics 365 auf dem Client
Öffnen von Formularen, Ansichten, Dialogen und Berichten mit einer URL
Kurzübersicht zum Formularskripting
Verwendung von JavaScript mit Microsoft Dynamics 365
JavaScript-Bibliotheken für Microsoft Dynamics 365
Anpassen der Microsoft Dynamics 365-Anwendungen
Formular- und Feldereignisse verwenden
Verwenden des Xrm.Page-Objektmodells
Schreiben und Debuggen von Skripts für Dynamics 365 für Smartphones und Tablets
Schreiben von Skripts für zusammengesetzte Attribute
Schreiben von Skripts für Geschäftsprozessflüsse
Schreiben von Skripts für Unterraster
Verwenden von Ausführungskontext und der Formularereignispipeline
Verwenden von IFRAME- und Webressourcen-Steuerelementen in einem Formular
Erste Schritte mit der Microsoft Dynamics 365-Web-API (clientseitiges JavaScript)

Microsoft Dynamics 365

© 2017 Microsoft. Alle Rechte vorbehalten. Copyright