Beispiele für benutzerdefinierte interaktive Filter

  • Freigeben Version: Washingtondc
  • Aktualisiert 1. Februar 2024
  • 5 Minuten Lesedauer
  • Als Administrator können Sie benutzerdefinierte interaktive Filter-Widgets erstellen, um erweiterte Filteroptionen in Dashboards bereitzustellen.

    Anwendungsfall

    In diesem Beispiel wird beschrieben, wie Sie einen benutzerdefinierten Filter erstellen, um Berichte in der Aufgabentabelle oder ihren untergeordneten Tabellen zu filtern. Der Filter zeigt nur Datensätze an, bei denen der aktuelle Benutzer der Anrufer ist. Der Filter stellt dem Benutzer zwei Schaltflächen zur Verfügung, eine Schaltfläche zum Hinzufügen des Filters und eine zum Entfernen des Filters.

    Erstellen Sie ein benutzerdefiniertes interaktives Filter-Widget

    Erstellen Sie benutzerdefinierte interaktive Filter-Widgets, um erweiterte Filteroptionen für Dashboards bereitzustellen.

    Vorbereitungen

    Erforderliche Rolle: admin

    Prozedur

    1. Öffnen Sie ein Dashboard, dem Sie den benutzerdefinierten interaktiven Filter hinzufügen möchten.
    2. Klicken Sie auf das Symbol zum Hinzufügen von Inhalten ().
    3. Wählen Sie in der Liste „Widget-Kategorie“ die Option Inhaltsblöckeaus.
      Widget-Kategoriemenü mit ausgewählten Inhaltsblöcken
    4. Wählen Sie in der Liste der Inhaltsblöcke Neuer dynamischer Inhaltaus.
    5. Klicken Sie im Bereich „Neuer dynamischer Inhalt“ auf Hinzufügen.
      Neue Widget-Option für dynamische Inhalte
      Dem Dashboard wird ein neuer dynamischer Inhaltsblock hinzugefügt.
    6. Klicken Sie im Dashboard auf den Link Klicken Sie hier, um diesen wiederverwendbaren dynamischen Inhaltsblock zu konfigurieren.
      Neue Widget-Option für dynamische Inhalte
    7. Definieren Sie die Filterlogik im Feld Dynamischer Inhalt.
      Dynamischer Inhalt - Neuer Datensatz

    Nächste Maßnahme

    Definieren Sie die Filterlogik.

    Erstellen Sie eine benutzerdefinierte Datums-/Uhrzeitfilteroption

    Wenn die Standardauswahl der Datums-/Uhrzeitfilteroptionen nicht Ihren Anforderungen entspricht, können Sie eine benutzerdefinierte Option erstellen.

    Vorbereitungen

    Befolgen Sie diese Schritte, um eine benutzerdefinierte Datums-/Uhrzeit-Filteroption zu erstellen, die dann in einen beliebigen datums-/uhrzeitbasierten interaktiven Filter zur Verwendung in einem Dashboard aufgenommen werden kann. In diesem Beispiel erstellen Sie eine Filteroption für den Zeitraum von zwei Wochen, alle zwei Wochen.

    Erforderliche Rolle: admin.

    Prozedur

    1. Navigieren zu Alle > Systemdefinition > Business-Regeln.
    2. Öffnen Sie die Geschäftsregel Datumsfilteroptionen für Datumsfilter abrufen.
      Diese Regel füllt die Liste der auswählbaren Optionen in Formularen für neue oder vorhandene interaktive Filter für Datumstypen aus.
    3. Ändern Sie auf der Registerkarte Erweitert das Feld Skript so, dass es das JavaScript enthält, das zum Hinzufügen der neuen Option erforderlich ist.
      Fügen Sie die folgende Zeile hinzu:
      answer.add('<Time_Period_Name>@javascript:<Beginning_Time_Period>@javascript:<Ending_Time_Period>', gs.getMessage('<Textual_Representation_Of_Time_Period>'));
    4. Nehmen Sie in der hinzugefügten Zeile die folgenden Ersetzungen vor.
      OptionBezeichnung
      <Time_Period_Name> Ein eindeutiger Name für den ausgewählten Zeitraum. Diese Zeichenfolge wird intern vom System verwendet, um die Option zu identifizieren, und auf einen Wert festgelegt, der den beschriebenen Zeitraum beschreiben kann.

      Geben Sie den Wert 112_Last Fortnight ein.

      <Beginning_Time_Period> Das spezifische Datum und die Uhrzeit, zu der dieser Filter beginnt. Dieser Wert kann absolute oder relative Werte verwenden. Es ist viel üblicher, einen relativen Wert zu verwenden, der die JavaScript-URL-Syntax verwendet.

      Geben Sie den Wert gs.daysAgoStart(14) ein, um anzugeben, dass das Zeitintervall für diese Auswahl genau zwei Wochen zurückliegen muss.

      <Ending_Time_Period> Das Datum und die Uhrzeit, zu der der Zeitraum für diese Filteroption enden soll. Dieser Wert kann auch absolute oder relative Werte verwenden. Ähnlich wie Beginning_Time_Period ist dieser Wert normalerweise ein relativer Zeitraum für die Verwendung der JavaScript-URL-Syntax.

      Geben Sie den Wert gs.daysAgoStart(0) ein, um anzugeben, dass der Zeitraum am aktuellen Datum und zur aktuellen Uhrzeit endet.

      <Textual_Representation_Of_Time_Period> Eine kurze Textzeichenfolge, die in der Liste der Datums-/Uhrzeit-Filteroptionen angezeigt wird, die in aufsteigender alphabetischer Reihenfolge angezeigt werden.

      Geben Sie Letztezwei Wochen ein, um anzugeben, dass diese Auswahl einen Zeitraum von zwei Wochen vor dem aktuellen Datum und der aktuellen Uhrzeit angibt.

      Die vollständige Anweisung lautet nun:
      answer.add('112_Last Fortnight@javascript:gs.daysAgoStart(14)@javascript:gs.daysAgoEnd(0)', gs.getMessage('Last fortnight'));
    5. Wählen Sie Aktualisieren aus, um Ihre Änderungen an der Geschäftsregel zu speichern.
    6. Überprüfen Sie, ob die neue Option verfügbar ist, wenn Sie einen Datums-/Uhrzeitfilter bearbeiten oder erstellen.
      1. Navigieren zu Alle > Berichte > Administration > Interaktive Filter.
      2. Wählen Sie einen Datumsfilter aus.
        Zu den verfügbaren Filtern gehören Letzte zwei Wochen.
        Verfügbare Datumsfilteroptionen, einschließlich der letzten zwei Wochen
    7. Bearbeiten Sie einen Datumsfilter, um den neuen Wert einzubeziehen, und fügen Sie den Filter einem Dashboard hinzu.
      Ein Datumsfilter mit der Option der letzten zwei Wochen

    Filterlogik definieren – Beispiel

    Nachdem Sie den interaktiven Filter erstellt haben, fügen Sie die Filterlogik hinzu.

    Vorbereitungen

    Erforderliche Rolle: admin

    Filter verwenden die Klasse DashboardMessageHandler, um aktive Filter zu verwalten. Instanziieren Sie DashboardMessageHandler mit einem eindeutigen Wert.
    Hinweis:
    Die ID des benutzerdefinierten interaktiven Filters muss eindeutig sein. Wenn er dieselbe ID wie ein anderer interaktiver Filter oder benutzerdefinierter interaktiver Filter hat, funktioniert die Filterlogik ordnungsgemäß.

    Prozedur

    1. Fügen Sie im Datensatz für dynamische Inhalte die Filterlogik zum XML-Block für dynamische Inhalte hinzu.
    2. Die Schaltfläche Nur meine publiziert einen Filter für die Berichte der Aufgaben-Tabelle mit der codierten Abfrage caller_idDYNAMIC90d1921e5f510100a9ad2572f2b477fe.
      Mit der Schaltfläche Alle Aufgaben wird der Filter entfernt.
    3. Anschließend können Sie dem dynamischen Inhalt beliebige Schaltflächen oder andere Schnittstellenelemente hinzufügen. In diesem Beispiel werden der Code für die Funktion clearFilter() und die Schaltflächen im Filter unterhalb der Funktion publishFilter() hinzugefügt.
      <?xml version="1.0" encoding="utf-8" ?>
      <j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
       <script>
           var my_dashboardMessageHandler = new DashboardMessageHandler("my_unique_id");
          
          function publishFilter () {
              var filter_message = {};
              filter_message.id = "my_unique_id";
              filter_message.table = "task";
          
          <!--     Add your own filter query logic here -->
              filter_message.filter = "assigned_toDYNAMIC90d1921e5f510100a9ad2572f2b477fe";
              SNC.canvas.interactiveFilters.setDefaultValue({
                      id: filter_message.id,
                      filters: [filter_message]
                  }, false);
              my_dashboardMessageHandler.publishFilter(filter_message.table, filter_message.filter);
          }
          
          function clearFilter() {
              var filter_message = {};
              filter_message.id = "my_unique_id";
              filter_message.table = "task";
              filter_message.filter = "";
              SNC.canvas.interactiveFilters.setDefaultValue({
                      id: filter_message.id,
                      filters: [filter_message]
                  }, false);
              my_dashboardMessageHandler.removeFilter();
          }
       </script>   
       
      Example of a filter that generates a static filter on 'task' table reports, or removes it <br/>
          <input id="allTasks" type="button" value="All tasks" onclick="clearFilter();" />
          <input id="onlyMine" type="button" value="Only mine" onclick="publishFilter();" />
          
      </j:jelly>
    4. Wählen Sie Absenden.

    Ergebnisse

    Der benutzerdefinierte interaktive Filter wird in dem Dashboard angezeigt, zu dem Sie den dynamischen Inhaltsblock hinzugefügt haben. Sie befindet sich auch in der Liste der Inhaltsblöcke im Bereich Widgets hinzufügen.

    Beispiel für einen benutzerdefinierten interaktiven Filter – Mehrere Berichte

    Sie können einen benutzerdefinierten interaktiven Filter verwenden, um mehrere Berichte anhand verschiedener Tabellen zu filtern. Es gibt zwei verschiedene APIs zum Veröffentlichen eines interaktiven Filters für eine einzelne Tabelle oder mehrere Tabellen. In diesem Beispiel wird ein Bericht in den Incident- und Problem-Tabellen nach Zuweisungsgruppe mithilfe eines benutzerdefinierten interaktiven Filters gefiltert.

    Über benutzerdefinierte interaktive Filter in mehreren Tabellen

    Beachten Sie Folgendes, wenn Sie einen benutzerdefinierten interaktiven Filter erstellen:
    • Benutzerdefinierte interaktive Filter, die nur für eine Tabelle gelten, verwenden die Funktion DashboardMessageHandler.publishFilter().
    • Benutzerdefinierte interaktive Filter, die für mehrere Tabellen gelten, verwenden die Funktion DashboardMessageHandler.publishMessage().
    • Vor der Veröffentlichung ist ein interaktiver Filteraufruf an die Funktion SNC.canvas.interactiveFilters.setDefaultValue() erforderlich.
    • Ein Aufruf der Funktion SNC.canvas.interactiveFilters.removeDefaultValue() oder DashboardMessageHandler.removeFilter() ist erforderlich, bevor Sie den Filter zurücksetzen.

    Ein benutzerdefinierter interaktiver Filter, der die veröffentlichenFilter()-Methode mehrmals aufruft, aktualisiert den zugeordneten Bericht gleich oft. Wiederholte Aufrufe dieser Methode können Leistungsprobleme verursachen.

    So wenden Sie einen benutzerdefinierten interaktiven Filter auf mehrere Tabellen an

    Das folgende Beispiel filtert den Bericht nach Zuweisungsgruppe in den Tabellen „Incident“ [incident] und „Problem“ [problem].

    DashboardMessageHandler.publishMessage() akzeptiert mehrere Filter als Array. Erstellen Sie das Filter-Array, und erstellen Sie dann eine einzelne Instanz von DashboardMessageHandler, die DashboardMessageHandler.publishMessage([filters])aufruft. Diese Methode aktualisiert das Widget nur einmal.

    <?xml version="1.0" encoding="UTF-8"?>
    <j:jelly xmlns:j="jelly:core" xmlns:g="glide" xmlns:g2="null" xmlns:j2="null" trim="false">
       <script>
          var my_dashboardMessageHandler = new DashboardMessageHandler("my_unique_id");
    
    function publishMultipleFilter() {
          <!-- Mutliple filters can be passed as an array -->
          var finalFilter = [{"table":"incident","filter":"assignment_group=6fcd3b573b331300ad3cc9bb34efc447"}, {"table":"problem","filter":"assignment_group=6fcd3b573b331300ad3cc9bb34efc447"}];
          <!-- call setDefaultValue first -->
          SNC.canvas.interactiveFilters.setDefaultValue({
    id: my_dashboardMessageHandler._unique_id,
    filters: finalFilter,
    }, false);
          <!-- then call Publishmessage to publish filters-->
          my_dashboardMessageHandler.publishMessage(finalFilter);
    }
    
    function clearFilter() {
    SNC.canvas.interactiveFilters.removeDefaultValue(my_dashboardMessageHandler._unique_id, false);
    my_dashboardMessageHandler.removeFilter();
    }
       </script>
       
    Example of a filter that filters incident and problem table where the assignment group is Problem solving
       <input id="allTasks" type="button" value="All" onclick="clearFilter();" />
       <input id="onlyMine" type="button" value="Assignment group is [Problem solving]" onclick="publishMultipleFilter();" />
    </j:jelly>