Client-Scripting – Best Practices

Abgeschlossen

Während das Entwickeln von Clientskripten für erfahrene JavaScript-Entwickler eine scheinbar einfache Aufgabe ist, ist es wichtig, bei ihrer Verwendung bewährte Methoden zu berücksichtigen. Oft übersehen Entwickler auch, dass Benutzer auf andere Weise auf die Daten zugreifen können. Sie können beispielsweise Datenimport/-Export, Entwicklerstudio, Canvas-Apps, Desktop-Apps von Drittanbietern, Shell-Scripting Client-Scripting usw. verwenden, um bestimmte clientseitige Benutzeroberflächenprobleme zu lösen und die Benutzererfahrung in einer bestimmten modellgesteuerten App zu verbessern. Es handelt sich weder um eine Sicherheitsmaßnahme noch um eine Lösung für alle Probleme. In vielen Fällen müssen Sie einen clientseitigen mit einem serverseitigen Ansatz, wie einem Dataverse-Plug-In kombinieren, um sicherzustellen, dass alle Zugriffspunkte die Geschäftsanforderungen erfüllen.

Lösungsüberprüfung verwenden

Die Lösungsprüfung kann eine statische Analyseprüfung Ihrer Lösungen anhand einer Reihe von Regeln für bewährte Methoden durchführen und diese problematischen Muster schnell identifizieren. Diese Prüfung umfasst das JavaScript, das für das Client-Scripting verwendet wird. Die Prüfung kann auftretende Leistungs‑, Stabilitäts‑ und Zuverlässigkeitsprobleme erkennen, die sich negativ auf die Benutzererfahrung auswirken können. Die Prüfung kann auch die Verwendung von veralteten Methoden erkennen. Bei regelmäßiger Ausführung können Sie die Probleme proaktiv erkennen und beheben, bevor sie für Benutzer freigegeben werden. Wenn nötig, können Sie die Lösungsprüfung über das Maker Portal oder als Teil eines automatisierten Erstellungsprozesses ausführen. Durch diese Automatisierung kann sie regelmäßig ausgeführt werden und wird Teil Ihres laufenden Application Lifecycle Management-Prozesses.

Weitere Informationen zur Verwendung der Lösungsprüfung finden Sie unter Lösungsprüfung verwenden, um Ihre Apps in Power Apps in der Produktdokumentation.

Geschäftsregeln im Vergleich zum Client-Skript

Geschäftsregeln sind eine verfügbare Funktion in modellgesteuerten Anwendungen, mit der Benutzer häufig erforderliche Aktionen in einem Formular ausführen können, basierend auf bestimmten Anforderungen und Bedingungen. Geschäftsregeln können insbesondere die folgenden Aufgaben ausführen:

  • Feldwerte festlegen

  • Feldwerte löschen

  • Anforderungsebenen für Felder festlegen

  • Formular-Spaltensteuerelemente ein‑ oder ausblenden

  • Formular-Spaltensteuerelemente aktivieren oder deaktivieren

  • Daten validieren und Fehlermeldungen anzeigen

  • Empfehlungen basierend auf Business Intelligence erstellen

Eine der eindeutigen Merkmale von Geschäftsregeln besteht darin, dass die tabellenbezogenen Regeln die Logik gegebenenfalls automatisch im Back-End anwenden können. Durch diesen Geltungsbereich wird die Konsistenz der App sichergestellt, unabhängig davon, ob eine Aktion über die Benutzeroberfläche, den Datenimport oder einen API-Methodenaufruf ausgeführt wird. Das Client-Skript allein ist in diesen Szenarien kein vollständiges Äquivalent.

Obwohl das verfügbare Geschäftsregel-Framework robust ist, existieren möglicherweise einige Szenarien, in denen Geschäftsregeln eine bestimmte Anforderung nicht vollständig implementieren können. Client-Scripting kann in diesen Fällen die Geschäftsregeln näher an eher herausfordernde Anforderungen heranbringen. Hier werden einige häufig auftretende Einschränkungen bei Geschäftsregeln untersucht. In diesen Fällen stellen Client-Skripts möglicherweise eine bessere Lösung dar.

Wenn Sie auf Daten verweisen müssen, die in einer verwandten Tabelle enthalten sind, z. B. die Adresse des primären Kontakts eines Kontos, müssen Sie Client-Skript und die Web-API verwenden.

Die Logik muss für das Ereignis „Formularspeicherung“ ausgeführt werden

Geschäftsregeln werden nur beim Laden von Formularen und beim Ändern eines Felds ausgeführt, es sei denn der Umfang ist auf Tabelle eingestellt. Wenn Sie von der Geschäftslogik die Ausführung des Formularereignisses OnSave benötigen, müssen Sie dazu ein Client-Skript verwenden.

Komplexe Bedingungen

Wenn Ihr Zustand über mehrere and‑Aussagen verfügt oder or-Aussagen benötigt, ist es möglicherweise effizienter, diese Bedingungstypen in Client-Skripts zu schreiben als über Geschäftsregeln.

Werte von Formulardaten löschen

Das Löschen von Daten aus einer Formularspalte kann nicht ohne Weiteres durch eine Geschäftsregel durchgeführt wird. Es gibt zwar Problemumgehungen, die durch Zuweisen von „Dummy“-Spalten erzielt werden können, die immer NULL-Werte enthalten, dies wird jedoch eleganter durch Client-Skripte erreicht.

Berechnete Spalten im Vergleich zu Client-Skript

Berechnete Spalten führen die Logik für das Abrufen berechnet, sodass clientseitige Änderungen nicht in berechneten Spalten dargestellt werden, bis das Formular aktualisiert wird. Wenn die Daten sofort im Formular aktualisiert werden sollen, ist Client-Skript die bevorzugte Methode. Client-Skript ergänzt häufig eine Back-End-Implementierung, die berechnete oder Rollup-Spalten, Plug-Ins usw. verwendet. Dieser kombinierte Ansatz kann eine konsistente Benutzererfahrung in der App bieten und gleichzeitig die Datenkonsistenz und ‑integrität im Back-End sicherstellen.

Codierungsstandards und Best Practices

In den folgenden Abschnitten werden die Best Practices und Standards für die Codierung beschrieben.

Eindeutige Skriptfunktionsnamen definieren

Die Funktionen, die Sie schreiben, befinden sich höchstwahrscheinlich in einem Formular mit vielen anderen Bibliotheken. Wenn eine andere Bibliothek eine Funktion enthält, die denselben Namen hat wie die von Ihnen bereitgestellte, ist die zuletzt geladene Funktion diejenige, die von diesem Formular verwendet wird. Stellen Sie sicher, dass Sie eindeutige Funktionsnamen verwenden, um mögliche Konflikte zu vermeiden. Sie können die folgenden Strategien anwenden, wenn Sie oder Ihre Organisation noch keine festgelegt haben:

  • Einzigartiges Funktionspräfix – Definiert jede Ihrer Funktionen mithilfe der Standardsyntax mit einem konsistenten Namen, der eine eindeutige Namenskonvention enthält, wie im folgenden Beispiel gezeigt.

      function MyUniqueName_performMyAction()
      {
      // Code to perform your action.
      }
    
  • Bibliotheken mit Namespaces – Verknüpfen Sie jede Ihrer Funktionen mit einem Skriptobjekt, um einen Namespace zu erstellen, der beim Aufrufen Ihrer Funktionen verwendet wird (siehe folgendes Beispiel).

      //If the MyUniqueName namespace object isn’t defined, create it.
      if (typeof (MyUniqueName) == "undefined")
         { MyUniqueName = {}; }
         // Create Namespace container for functions in this library;
         MyUniqueName.MyFunctions = {
       performMyAction: function(){
       // Code to perform your action.
       //Call another function in your library
       this.anotherAction();
         },
         anotherAction: function(){
       // Code in another function
        }
      };
    

Wenn Sie Ihre Funktion verwenden, geben Sie den vollständigen Namen an, wie im folgenden Beispiel gezeigt.

    MyUniqueName.MyFunctions.performMyAction();

Tipp

Wenn Sie eine Funktion innerhalb einer anderen Funktion im gleichen Namespace aufrufen, können Sie dieses Schlüsselwort als Verknüpfung zu dem Objekt verwenden, das beide Funktionen enthält. Wenn Ihre Funktion jedoch als Ereignishandler verwendet wird, verweist dieses Schlüsselwort auf das Objekt, für das das Ereignis auftritt.

Nicht unterstützte Methoden vermeiden

Einige Ressourcen von Drittanbietern im Internet schlagen möglicherweise vor oder enthalten Beispiele dafür, wie Sie nicht unterstützte Methoden zum Ausführen bestimmter Aktionen verwenden können. Dies wird nicht unterstützt und nicht empfohlen. Es kann nicht garantiert werden, dass diese Methoden in zukünftigen Versionen Ihrer App funktionieren und möglicherweise zur Instabilität Ihrer Implementierung beitragen. Sie sollten auch Methoden vermeiden, die Sie durch Untersuchen der API-Objekte im Debugger ermitteln, wenn die entdeckten Methoden nicht wie in der Client-API-Referenzdokumentation unterstützt offiziell dokumentiert sind.

Ihren Code auf veraltete Methoden überprüfen

Die Client-API wird kontinuierlich weiterentwickelt und verbessert. Es ist wichtig, Ihre Codebasis für die Verwendung veralteter Methoden zu überprüfen und die Dokumentationsempfehlungen für deren Ersetzung zu befolgen. Wenn Sie die Lösungsprüfung verwenden, werden diese Methoden als Probleme gekennzeichnet.

Die Verwendung von jQuery in Formularen und Menübandbefehlen vermeiden

jQuery und andere direkte HTML-DOM-Manipulationsbibliotheken werden in Formularskripten oder Befehlsleistenbefehlen nicht unterstützt. Sie sollten Ihre Skripts auf die Verwendung von Methoden im Client-API-Objektmodell beschränken. Weitere Informationen finden Sie unter Grundlegendes zum Client API-Objektmodell.

Nicht blockierenden Code schreiben

Stellen Sie beim Ausführen von Abfragen oder prozessintensiven Aktivitäten sicher, dass Sie asynchrone Muster verwenden, um eine nicht blockierende Benutzererfahrung zu gewährleisten.

Versuchen Sie, Methoden zu vermeiden, die die Benutzeroberfläche blockieren, wie Bestätigungsdialoge, Blockieren von Fortschrittsanzeigen usw. Die bevorzugte Interaktionsmethode mit Benutzern besteht in nicht aufdringlichen Benachrichtigungsmechanismen wie einem gut sichtbaren Warnbereich in der App oder im Formular.

Code für mehrere Browser schreiben

Stellen Sie sicher, dass alle Skripte, die Sie schreiben, auf allen Browsern und Geräteformfaktoren implementiert wurden, die von Benutzern Ihrer modellgesteuerten Apps unterstützt werden. Weitere Informationen finden Sie unter Unterstützte Webbrowser und Mobilgeräte.