Editor FetchXML per i profili offline (anteprima)

[Questo articolo è una documentazione preliminare soggetta a modifiche].

FetchXML è il linguaggio di query nativo di Dataverse che consente agli autori di scrivere filtri dati come codice XML, in modo analogo alla scrittura di una formula, ma più potente. Usare l'editor FetchXML per ottimizzare i profili complessi per prestazioni migliori ed evitare timeout di sincronizzazione in tabelle di grandi dimensioni (100K+ record).

Questa funzionalità è più adatta a produttori avanzati e sviluppatori che hanno familiarità con XML e necessitano di un maggiore controllo rispetto a ciò che offre il generatore di filtri visivi.

Important

  • Questa è una funzionalità di anteprima.
  • Le funzionalità di anteprima non sono destinate ad essere utilizzate per la produzione e sono soggette a restrizioni. Queste funzionalità sono soggette a condizioni per l'utilizzo supplementari e sono disponibili prima di una versione ufficiale in modo che i clienti possano ottenere l'accesso in anteprima e fornire feedback.
  • Questa funzionalità viene gradualmente implementata in tutte le aree geografiche e potrebbe non essere ancora disponibile nella tua.

Vantaggi dell'editor FetchXML

L'editor FetchXML offre diversi vantaggi rispetto al generatore di espressioni visive per la definizione di filtri dati offline.

  • Supporto per condizioni gerarchica:

    L'editor FetchXML supporta la creazione di condizioni complesse e gerarchiche, come ad esempio under, eq-or-under, above e eq-or-above nelle ricerche abilitate per la gerarchia. Altre informazioni sull'esecuzione di query sui dati gerarchici

    <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>
    
  • Supporto per i controlli sulle tabelle non correlate:

    L'editor FetchXML consente di collegarsi ad altre tabelle anche se non hanno una relazione diretta con la tabella primaria, purché siano specificati attributi da e a validi. Questa funzionalità è particolarmente utile in scenari offline complessi in cui più entità condividono una chiave esterna comune, ma non sono direttamente correlate.

    <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>
    
  • Supporto per l'ottimizzazione delle query tramite materializzazione ritardata e hint di query:

    L'editor espone controlli di ottimizzazione avanzati direttamente sull'elemento <fetch> , tra cui:

  • latematerialize="true": usando latematerialize="true", è possibile ottimizzare le prestazioni delle query restringendo i record corrispondenti prima di recuperare tutti i dati della colonna. Questo attributo riduce il carico durante la sincronizzazione di tabelle di grandi dimensioni durante la sincronizzazione offline. Altre informazioni sull'uso della materializzazione tardiva

    <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>
    
  • L'attributo options passa gli hint di query per SQL Server. Altre informazioni sull'uso di queste opzioni

Funzionamento dell'editor FetchXML

È possibile accedere all'editor FetchXML tramite l'esperienza di configurazione del profilo offline in Power Apps. È possibile scrivere o incollare una query FetchXML e l'editor la convalida in tempo reale prima del salvataggio.

  1. In Power Apps passare alle impostazioni dell'ambiente e aprire la pagina Profili offline. Selezionare un profilo offline esistente o crearne uno nuovo e quindi selezionare Modifica profilo.

  2. Nell'editor del profilo offline aggiungere o selezionare la tabella i cui dati si desidera filtrare per l'uso offline.

  3. In Filtro scegliere Righe personalizzate o Correlate e quindi selezionare Modifica filtro.

  4. Nell'editor di filtri scorrere verso il basso e selezionare Visualizza/Modifica FetchXML per aprire l'editor di codice FetchXML. Screenshot dell'editor di codice FetchXML nell'editor di filtri del profilo offline.

  5. Modificare la query FetchXML esistente o incollarne una nuova. L'editor convalida automaticamente la sintassi e la struttura durante la modifica, verificando quanto segue:

    • Elemento radice obbligatorio <fetch> con almeno un <entity> elemento
    • Solo i tag FetchXML supportati
    • Elementi inseriti all'interno degli elementi padre corretti
    • Massimo 500 clausole di filtro

    Se l'editor rileva un problema, ad esempio un elemento obbligatorio mancante o un utilizzo non supportato <link-entity> , viene visualizzato un messaggio di errore chiaro in modo da poterlo correggere prima del salvataggio.

  6. Dopo che la query FetchXML è valida, selezionare Applica per convertire il filtro e quindi Salvare il profilo offline.

Important

Selezionare sempre Applica e quindi Salva dopo aver modificato FetchXML. Se non si salva, le modifiche vengono rimosse.

Dopo il salvataggio, il profilo offline usa il filtro FetchXML personalizzato per la sincronizzazione dei dati. Se la query usa solo le funzionalità supportate dal generatore di oggetti visivi, tali filtri continuano a essere visualizzati nell'interfaccia utente di Generatore di espressioni. Se si usano funzionalità avanzate di solo FetchXML, l'interfaccia utente del filtro visivo potrebbe non visualizzarle. Utilizzare l'editor FetchXML per eventuali modifiche future apportate a tale filtro.

Procedure consigliate

  • Applicare hint per le prestazioni come latematerialize="true" o hint="union" per set di dati di grandi dimensioni.
  • Convalida il tuo FetchXML utilizzando il controllo integrato dell'editor prima di salvare.
  • Salvare il profilo offline immediatamente dopo l'applicazione delle modifiche FetchXML.
  • Usare solo costrutti FetchXML supportati per i profili offline, ad esempio link-type="any" o link-type="not any".
  • Evitare tipi di join non supportati, ad esempio inner o outer in filtri offline.
  • Mantenere le clausole di filtro al di sotto del limite di 500 clausole per ogni query.
  • Non ignorare gli errori di convalida. Le query devono essere ben formate e complete.

Limitazioni

  • Le query devono iniziare con un <fetch> elemento radice e includere almeno un <entity> elemento.
  • Sono consentiti solo gli elementi FetchXML supportati. Tag sconosciuti o non supportati attivano errori di convalida.
  • Gli elementi devono seguire le regole di annidamento padre-figlio appropriate.
  • <link-entity> all'interno <filter> deve usare link-type="any" o link-type="not any". Inner join e outer join non sono supportati.
  • I tag FetchXML <attribute> non vengono usati per la selezione di colonne nella sincronizzazione offline. Usare invece l'opzione Filtra colonne .
  • Gli attributi di paginazione espliciti come page e count vengono ignorati nei profili offline.
  • Le query sono limitate a un massimo di 500 clausole di filtro.