FetchXML-Editor für Offlineprofile (Vorschau)

[Dieser Artikel ist die Vorabveröffentlichungsdokumentation und unterliegt Änderungen.]

FetchXML ist die systemeigene Abfragesprache von Dataverse, mit der Entwickler Datenfilter als XML-Code schreiben können, ähnlich wie das Schreiben einer Formel, aber leistungsstärker. Verwenden Sie den FetchXML-Editor, um komplexe Profile für eine bessere Leistung zu optimieren und Synchronisierungstimeouts in großen Tabellen (100K+ Datensätze) zu vermeiden.

Dieses Feature eignet sich am besten für fortgeschrittene Entwickler und Entwickler, die mit XML arbeiten und mehr Kontrolle benötigen als der visuelle Filter-Generator.

Wichtig

  • Dies ist eine Vorschaufunktion.
  • Funktionen in der Vorschauversion sind nicht für den Produktionseinsatz gedacht und können eine eingeschränkte Funktionalität aufweisen. Für diese Features gelten ergänzende Nutzungsbedingungen. Die Features werden vor einer offiziellen Veröffentlichung zur Verfügung gestellt, sodass die Kundschaft frühzeitig Zugriff erhält und Feedback geben kann.
  • Diese Funktion wird schrittweise in allen Regionen eingeführt und ist möglicherweise in Ihrer Region noch nicht verfügbar.

Vorteile des FetchXML-Editors

Der FetchXML-Editor bietet gegenüber dem visuellen Ausdrucks-Generator mehrere Vorteile zum Definieren von Offlinedatenfiltern.

  • Unterstützung für hierarchische Bedingungen:

    Der FetchXML-Editor unterstützt das Erstellen komplexer, hierarchischer Bedingungen wie under, eq-or-under, above und eq-or-above auf hierarchiefähigen Suchvorgängen. Weitere Informationen zum Abfragen hierarchischer Daten

    <fetch>
      <entity
        name="account">
       <filter
           type="and">
           <condition
           attribute="statecode"
           operator="eq"
           value="0" />
       </filter>
       <link-entity
           name="businessunit"
           from="businessunitid"
           to="owningbusinessunit"
           link-type="any">
           <filter
           type="and">
           <condition
              attribute="businessunitid"
              operator="eq-or-under"
              value="{YOUR-PARENT-BU-GUID}" />
           </filter>
      </link-entity>
    </entity>
    </fetch>
    
  • Unterstützung für Überprüfungen auf nicht verknüpfte Tabellen:

    Mit dem FetchXML-Editor können Sie eine Verknüpfung mit anderen Tabellen herstellen, auch wenn sie keine direkte Beziehung mit der Primärtabelle haben, vorausgesetzt, Sie geben gültige Von und zu Attributen an. Diese Funktion ist besonders in komplexen Offlineszenarien hilfreich, in denen mehrere Entitäten einen gemeinsamen Fremdschlüssel gemeinsam nutzen, aber nicht direkt miteinander verknüpft sind.

    <fetch
        distinct="false"
        latematerialize="true"
        options="DisableRowGoal, EnableOptimizerHotfixes">
    <entity
        name="cr57f_producttranslation">
        <filter
           type="and">
           <link-entity
           name="cr57f_userlanguagepreference"
           from="cr57f_language_id"
           to="cr57f_language_id"
           link-type="any">
           <filter
              type="and">
              <condition
                 attribute="cr57f_user_id"
                 operator="eq"
                 value="user_002" />
           </filter>
           </link-entity>
       </filter>
      </entity>
    </fetch>
    
  • Unterstützung der Optimierung von Abfragen mithilfe von späten Materialisierungs- und Abfragehinweisen:

    Der Editor macht erweiterte Optimierungssteuerelemente direkt auf dem <fetch> Element verfügbar, darunter:

  • latematerialize="true": Durch die Verwendung latematerialize="true"optimieren Sie die Abfrageleistung, indem Sie übereinstimmende Datensätze eingrenzen, bevor Sie alle spaltendaten abrufen. Dieses Attribut reduziert die Last beim Synchronisieren großer Tabellen während der Offlinesynchronisierung. Weitere Informationen zur Verwendung von verzögerter Materialisierung

    <fetch
      distinct="false"
      latematerialize="true"
      options="OptimizeForUnknown,ENABLE_HIST_AMENDMENT_FOR_ASC_KEYS">
    <entity
      name="msdyn_workorder">
      <filter
         type="and">
         <condition
         attribute="statecode"
         operator="eq"
         value="0" />
         <condition
         attribute="msdyn_systemstatus"
         operator="in">
         <value>690970000</value>
         <value>690970001</value>
         </condition>
      </filter>
      <!-- Booking chain -->
      <link-entity
         name="bookableresourcebooking"
         from="msdyn_workorder"
         to="msdyn_workorderid"
         link-type="any">
         <filter
         type="and">
         <condition
            attribute="statecode"
            operator="eq"
            value="0" />
         <filter
            type="or">
            <condition
               attribute="starttime"
               operator="today" />
            <condition
               attribute="starttime"
               operator="next-seven-days" />
         </filter>
         </filter>
         <link-entity
            name="bookingstatus"
            from="bookingstatusid"
            to="bookingstatus"
            link-type="any">
            <filter
               type="and">
               <condition
                  attribute="statecode"
                  operator="eq"
                  value="0" />
            </filter>
         </link-entity>
         <link-entity
            name="bookableresource"
            from="bookableresourceid"
            to="resource"
            link-type="any">
            <filter
               type="and">
               <condition
                  attribute="userid"
                  operator="eq-userid" />
            </filter>
         </link-entity>
      </link-entity>
      <!-- Customer asset -->
      <link-entity
            name="msdyn_customerasset"
            from="msdyn_customerassetid"
            to="msdyn_customerasset"
            link-type="any">
         <filter
         type="and">
         <condition
            attribute="statecode"
            operator="eq"
            value="0" />
         </filter>
         <!-- Account -->
         <link-entity
            name="account"
            from="accountid"
            to="msdyn_account"
            link-type="any">
         <filter
            type="and">
            <condition
               attribute="statecode"
               operator="eq"
               value="0" />
       </filter>
      </link-entity>
     </link-entity>
    </entity>
    </fetch>
    
  • Das attribut options übergibt SQL Server Abfragehinweise. Weitere Informationen zur Verwendung dieser Optionen

Funktionsweise des FetchXML-Editors

Sie greifen über die Offlineprofilkonfiguration in Power Apps auf den FetchXML-Editor zu. Sie schreiben oder fügen eine FetchXML-Abfrage ein, und der Editor überprüft sie in Echtzeit, bevor Sie speichern.

  1. Wechseln Sie in Power Apps zu den Einstellungen Ihrer Umgebung, und öffnen Sie die Seite Offlineprofile. Wählen Sie ein vorhandenes Offlineprofil aus, oder erstellen Sie ein neues Profil, und wählen Sie dann "Profil bearbeiten" aus.

  2. Fügen Sie im Offlineprofil-Editor die Tabelle hinzu, deren Daten Sie für die Offlineverwendung filtern möchten, oder wählen Sie sie aus.

  3. Wählen Sie unter "Filter" die Option "Benutzerdefiniert" oder " Verwandte Zeilen" aus, und wählen Sie dann " Filter bearbeiten" aus.

  4. Scrollen Sie im Filter-Editor nach unten, und wählen Sie "FetchXML anzeigen/bearbeiten" aus, um den FetchXML-Code-Editor zu öffnen. Screenshot des FetchXML-Code-Editors im Offlineprofilfilter-Editor.

  5. Ändern Sie die vorhandene FetchXML-Abfrage, oder fügen Sie eine neue ein. Der Editor überprüft während der Bearbeitung automatisch die Syntax und Struktur und überprüft folgendes:

    • Ein erforderliches <fetch> Stammelement mit mindestens einem <entity> Element
    • Nur unterstützte FetchXML-Tags
    • Elemente, die in den richtigen übergeordneten Elementen platziert werden
    • Maximal 500 Filterklauseln

    Wenn der Editor ein Problem erkennt, z. B. ein fehlendes erforderliches Element oder eine nicht unterstützte <link-entity> Verwendung, wird eine eindeutige Fehlermeldung angezeigt, damit Sie es vor dem Speichern beheben können.

  6. Nachdem die FetchXML-Abfrage gültig ist, wählen Sie Übernehmen aus, um den Filter zu konvertieren, und Speichern Sie dann das Offline-Profil.

Wichtig

Wählen Sie nach der Bearbeitung von FetchXML immer "Übernehmen" und dann "Speichern" aus. Wenn Sie nicht speichern, werden Ihre Änderungen verworfen.

Nach dem Speichern verwendet das Offlineprofil Ihren benutzerdefinierten FetchXML-Filter für die Datensynchronisierung. Wenn Ihre Abfrage nur Features verwendet, die vom visuellen Generator unterstützt werden, werden diese Filter weiterhin in der Benutzeroberfläche des Ausdrucks-Generators angezeigt. Wenn Sie erweiterte FetchXML-only-Funktionen verwenden, werden sie möglicherweise nicht in der visuellen Filter-Benutzeroberfläche dargestellt. Verwenden Sie den FetchXML-Editor für zukünftige Bearbeitungen für diesen Filter.

Optimale Verfahren

  • Wenden Sie Leistungshinweise wie latematerialize="true" oder hint="union" für große Datasets an.
  • Überprüfen Sie Ihre FetchXML mithilfe der integrierten Editorüberprüfungen vor dem Speichern.
  • Speichern Sie Ihr Offlineprofil unmittelbar nach dem Anwenden von FetchXML-Änderungen.
  • Verwenden Sie nur unterstützte FetchXML-Konstrukte für Offlineprofile, wie link-type="any" oder link-type="not any".
  • Vermeiden Sie nicht unterstützte Verknüpfungstypen wie inner oder outer in Offlinefiltern.
  • Behalten Sie Filterklauseln unter dem Grenzwert von 500 Klauseln pro Abfrage bei.
  • Ignorieren Sie Überprüfungsfehler nicht. Abfragen müssen wohlgeformt und vollständig sein.

Einschränkungen

  • Abfragen müssen mit einem <fetch> Stammelement beginnen und mindestens ein <entity> Element enthalten.
  • Es sind nur unterstützte FetchXML-Elemente zulässig. Unbekannte oder nicht unterstützte Tags lösen Validierungsfehler aus.
  • Elemente müssen den richtigen Eltern-Kind-Schachtelungsregeln folgen.
  • <link-entity> innerhalb von <filter> muss link-type="any" oder link-type="not any" verwenden. Innere und äußere Verknüpfungen werden nicht unterstützt.
  • FetchXML-Tags <attribute> werden nicht für die Spaltenauswahl in der Offlinesynchronisierung verwendet. Verwenden Sie stattdessen die Option " Spalten filtern ".
  • Explizite Paginierungsattribute wie page und count werden in Offlineprofilen ignoriert.
  • Abfragen sind auf maximal 500 Filterklauseln beschränkt.