Allgemeine Richtlinien für die Entwicklung von Widgets

  • Freigeben Version: Yokohama
  • Aktualisiert 30. Januar 2025
  • 5 Minuten Lesedauer
  • Beachten Sie bei der Entwicklung anwenderdefinierter Widgets diese allgemeinen Richtlinien, um eine optimale Leistung, eine skalierbare Entwicklung und eine gute Anwender-Experience zu gewährleisten.

    Erstellen Sie einen Standardstatus, der dem Endanwender ein Beispiel bietet

    Für ein Widget sind keine Instanzoptionen definiert, wenn es anfänglich einer Seite hinzugefügt wurde. Ein Widget in diesem leeren Status kann leer erscheinen und zu Verwirrung führen. In Situationen, in denen ein Widget eine anfängliche Konfiguration erfordert, stellen Sie sicher, dass Ihr Widget einen Standardstatus hat, der dem Administrator mitteilt, welche Konfiguration erforderlich ist.

    Widgets können auch mit Demodaten erstellt werden. Demodaten können auch verwendet werden, um:

    • Demonstrieren Sie dem Anwender die Widget-Funktionalität deutlich.
    • Geben Sie Daten an, wenn Sie eine Vorschau des Widgets im Widget-Editor anzeigen. (Demodaten sind im Designer nicht sichtbar.)

    Weitere Informationen: Tutorial: Erstellen Sie ein anwenderdefiniertes Widget.

    Betten Sie ein Widget ein, anstatt, wenn möglich, zu klonen

    Durch das Einbetten eines vorhandenen Widgets in Ihr anwenderdefiniertes Widget werden bereits vorhandene Funktionen ohne Klonen oder Duplizieren von Code genutzt. Sie können weiterhin Parameter an das eingebettete Widget übergeben, um dessen Verhalten zu steuern.

    Weitere Informationen: Bettet ein vorhandenes Widget ein

    Vermeiden Sie die Verwendung großer Datensätze, um die Leistung zu verbessern

    Das Abfragen von Daten, das Auswerten von ACLs, das Ausführen von Business-Regeln und die Datenverarbeitung dauern einige Zeit und können die Leistung verlangsamen. Bestimmen Sie, wie viel Datenportal-Anwender benötigen, und wenden Sie dann die entsprechenden Grenzwerte und Filter auf Ihre Skripts und Abfragen an. Isolieren Sie Widgets, die signifikante Daten erfordern oder die Verarbeitung auf eigenen separaten Seiten im Portal durchführen. Vermeiden Sie die Implementierung der folgenden Elemente, die große Datensätze verwenden:

    • Geskriptete Menüelemente, die große Datenmengen laden, was dazu führen kann, dass jede Seite im Portal langsam geladen wird.
    • Große Dateien und Anhänge, z. B. hochauflösende Mediendateien oder Schriftarten aus der Tabelle „Anhänge“ [sys_attachment].
    • Widgets werden automatisch aktualisiert. Jedes Mal, wenn der Client-Controller eines Widgets aufruft Server.Update() , SpUtil.Update() , Server.REFRESH() , Oder SpUtil.refresh() , Führt die Anwendung das Serverskript des Widgets aus und sendet ein Datenobjekt an den Client zurück.
    • Ungefilterte Datensatzbeobachter. Die Record Watch() Die Funktion überwacht auf Aktualisierungen an einer Tabelle oder einem Filter und gibt den Wert aus der Rückruffunktion zurück. Durch das Hinzufügen von Filtern für bestimmte zu überwachende Felder wird die Anzahl der Aufrufe eines Widgets an den Server reduziert. Wenn Sie angeben, wann Widgets aktualisiert werden sollen, als Reaktion auf einen Datensatzersteller, der den Client über ein Update in der Rückruffunktion benachrichtigt, kann dies auch die Leistung verbessern.
    • Serverseitige Skripts mit GlideRecord-Abfragen ohne SetLimit Funktion. Mit SetLimit Die Funktion kann die Anzahl der zurückgegebenen Datensätze einschränken und die Antwortzeit für Abfragen verbessern. Um die Flexibilität zu erhöhen, können Sie diesen Grenzwert an eine Instanzoption binden, anstatt einen hartcodierten Wert zuzuweisen (z. B.: gr.setLimit(options.limit || 100) ).
    Erstellen Sie eine Anweisung, anstatt ein komplexes Widget einzubetten

    Wenn ein eingebettetes Widget vom Server aufgerufen wird, werden alle diesem Widget zugeordneten Skripts zurückgegeben. Wenn Sie nur einen Unterabschnitt eines Widgets benötigen, entsteht durch das Einbetten des gesamten Widgets unnötiger Overhead. Verwenden Sie stattdessen Anweisungen, um reduzierten Code zwischen Widgets freizugeben. Anweisungen sind beispielsweise beim Erstellen von UI-Komponenten nützlich. Komplexe Komponenten mit serverseitiger und clientseitiger Funktionalität sollten am besten als Widgets belassen werden. Verwenden Sie eine Anweisung anstelle eines eingebetteten Widgets, um:

    • Geben Sie das Verhalten des Bereichs oder des anwenderdefinierten Umfangs mit mehreren Widgets frei.
    • Geben Sie einen wiederverwendbaren, reduzierten Unterabschnitt eines Widgets frei.
    • Geben Sie eine allgemeine UI-Funktion frei, z. B. eine Liste oder einen Avatar.
    • Erweitern Sie das Widget-Verhalten.

    Weitere Informationen: Komponenten mit Winkelanbietern wiederverwenden.

    Verwenden Sie einen Service oder eine Fabrik, um Daten freizugeben und den Status beizubehalten

    Datenservices und -Fabriken behalten den Status in einem Widget bei, ohne dass mehrere Aufrufe des Servers erforderlich sind. So können Sie:

    • Lassen Sie Widgets synchronisiert, wenn Sie Datensätze oder Filter ändern.
    • Geben Sie Daten zwischen Widgets frei.
    • Entwickeln Sie leistungsstärkere Widgets.

    Weitere Informationen: Komponenten mit Winkelanbietern wiederverwenden.

    Verarbeiten Sie Ereignisse mit einem Veröffentlichungs-/Abonnementservice

    Vermeiden Sie die Verwendung $Broadcast Im DOM. $Broadcast Sendet den Ereignisnamen an alle untergeordneten Bereiche, um registrierte Listener zu benachrichtigen. Dies kann ein teurer Anruf sein, der die Verwendung von erfordert $rootScope Globales Objekt.

    Verwenden Sie stattdessen einen Veröffentlichungs-/Abonnementservice, um Ereignisse zu verarbeiten. Bei Verwendung eines Veröffentlichungs-/Abonnementservice entsteht über Rückruf-Handler eine klare Beziehung zwischen Ihren Widgets. In diesem Modell können Sie den Status Ihrer Ereignisse besser steuern.

    Verwenden Sie REST-Aufrufe oder Server.Abrufen Dient zum Abrufen von Daten vom Server

    Wenn Sie anrufen Server.Update() , Das gesamte Widget wird vom Server zurückgegeben. Wenn Ihr Widget abweichende Codepfade enthält, können mehrere Aufrufe zum Aktualisieren des Servers die Leistung beeinträchtigen. Verwenden Sie in der Regel Ihr Serverskript, um den Anfangsstatus Ihres Widgets einzurichten. Verwenden Sie für nachfolgende Updates geskriptete REST-APIs, die Skripteinbindungen in Ihrer Instanz aufrufen. Diese Praxis:

    • Trennt Geschäftslogik von UI-Elementen.
    • Zentralisiert Ihren Code, sodass Änderungen an einem Ort vorgenommen werden können.
    Sie können auch verwenden Server.Abrufen Um Informationen an den Server zu übergeben. Verwenden Sie diese Funktion zusammen mit Eingabe.Aktion Zum Ausführen bestimmter Teile des Serverskripts.
    Entwickeln Sie sich mit Blick auf Lokalisierung, Barrierefreiheit und UI

    Befolgen Sie diese Richtlinien, um die beste Experience für Ihre Anwender zu erstellen:

    • Berücksichtigen Sie die Auswirkungen Ihres Widgets in einer mobilen Umgebung. Vermeiden Sie beispielsweise die Verwendung der Maus oder anderer Ereignisse, die nicht auf ein Mobilgerät übertragen werden.
    • Verwenden Sie SCSS-Variablen, um Elemente wiederzuverwenden. Weitere Informationen finden Sie unter SCSS-Variablen.
    • Verwenden Sie Variablennamen, wenn Sie Farben verwenden.
    • Zeichenfolgen für die Übersetzung in Lokalisierungs-APIs umbrechen. Weitere Informationen finden Sie unter Internationalisieren Sie ein Widget.
    Entfernen Sie nicht verwendete Winkelanbieter aus dem Client-Skript
    Um die Wartung zu erleichtern, entfernen Sie alle nicht verwendeten Angular Provider, die in die Client-Skriptfunktionsanweisung eingefügt wurden.
    Vermeiden Sie die Verwendung <script> tags in HTML templates
    Um die Wahrscheinlichkeit von Produktionsproblemen in zu verringern Serviceportal, Vermeiden Sie die Verwendung von Inline-Vorlagen mit <script> tags in a widget's HTML template. Instead, create a related Angular ng-template record for the widget.