Compartir a través de


Editor FetchXML para perfiles sin conexión (versión preliminar)

[Este artículo es documentación preliminar y está sujeto a modificaciones].

FetchXML es el lenguaje de consulta nativo de Dataverse que permite a los creadores escribir filtros de datos como código XML, de forma similar a escribir una fórmula, pero más eficaz. Use el editor FetchXML para optimizar perfiles complejos para mejorar el rendimiento y evitar tiempos de espera de sincronización en tablas grandes (100 000 registros).

Esta característica es más adecuada para desarrolladores y creadores avanzados que se sienten cómodos trabajando con XML y necesitan más control que lo que proporciona el generador de filtros visuales.

Importante

  • Esta es una función de vista previa.
  • Las características en vista previa no se han diseñado para un uso de producción y pueden tener una funcionalidad restringida. Estas características están sujetas a términos de uso adicionales y están disponibles antes del lanzamiento oficial para que los clientes puedan obtener acceso temprano y brindar comentarios.
  • Esta característica se está implementando gradualmente en todas las regiones y es posible que aún no esté disponible en su región.

Ventajas del editor FetchXML

El editor FetchXML ofrece varias ventajas sobre el generador de expresiones visuales para definir filtros de datos sin conexión.

  • Compatibilidad con condiciones jerárquicas: el editor FetchXML admite la creación de condiciones jerárquicas complejas, como under, eq-or-under, abovey eq-or-above en búsquedas habilitadas para jerarquía.

    <fetch latematerialize="true"> 
       <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>
    
  • Compatibilidad con comprobaciones en tablas no relacionadas: el editor FetchXML le permite vincular a otras tablas incluso si no tienen una relación directa con la entidad principal, siempre que especifique los atributos válidos de y a . Esta funcionalidad es especialmente útil en escenarios complejos sin conexión en los que varias entidades comparten una clave externa común, pero no están directamente relacionadas.

<fetch version="1.0" output-format="xml-platform" mapping="logical" 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> 
  • Compatibilidad con la optimización de consultas mediante la materialización tardía y sugerencias de consulta: el editor expone controles de optimización avanzados directamente en el <fetch> elemento, entre los que se incluyen:

  • latematerialize="true": mediante latematerialize="true", se optimiza el rendimiento de las consultas limitando los registros coincidentes antes de recuperar todos sus datos de columna. Este atributo reduce la carga al sincronizar tablas grandes durante la sincronización sin conexión.

    <fetch version="1.0" mapping="logical"
           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>
    
  • El options atributo pasa sugerencias de consulta de SQL Server, como OptimizeForUnknown, ENABLE_HIST_AMENDMENT_FOR_ASC_KEYSo NO_PERFORMANCE_SPOOL. Estas opciones mejoran los planes de ejecución para las consultas que se ejecutan con frecuencia o están anidadas con profundidad.

    <fetch version="1.0"
           mapping="logical"
    
           distinct="false"
    
           options="OptimizeForUnknown">
    
      <entity name="bookableresourcebooking">
    
        <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="bookableresource"
    
                     from="bookableresourceid"
    
                     to="resource"
    
                     link-type="any">
    
          <filter type="and">
    
            <condition attribute="userid" operator="eq-userid" />
    
          </filter>
    
        </link-entity>
    
      </entity>
    
    </fetch>
    

Funcionamiento del editor FetchXML

Puede acceder al editor FetchXML a través de la experiencia de configuración de perfil sin conexión en Power Apps. Escribe o pega una consulta FetchXML y el editor lo valida en tiempo real antes de guardarlo.

  1. En Power Apps, vaya a la configuración del entorno y abra la página Perfiles sin conexión . Seleccione un perfil sin conexión existente o cree uno nuevo y, a continuación, seleccione Editar perfil.

  2. En el editor de perfiles sin conexión, agregue o seleccione la tabla cuyos datos desea filtrar para su uso sin conexión.

  3. En Filtro, elija Filas personalizadas o relacionadas y, a continuación, seleccione Editar filtro.

  4. En el editor de filtros, desplácese hacia abajo y seleccione Ver/Editar FetchXML para abrir el editor de código FetchXML. Captura de pantalla del editor de código FetchXML en el editor de filtros de perfil sin conexión.

  5. Modifique la consulta FetchXML existente o pegue una nueva. El editor valida automáticamente la sintaxis y la estructura a medida que edita, comprobando:

    • Elemento raíz necesario <fetch> con al menos un <entity> elemento
    • Solo se admiten etiquetas FetchXML
    • Elementos colocados dentro de los elementos primarios correctos
    • Un máximo de 500 cláusulas de filtro

    Si el editor detecta un problema, como un elemento necesario que falta o un uso no admitido <link-entity> , muestra un mensaje de error claro para que pueda corregirlo antes de guardarlo.

  6. Después de que la consulta FetchXML sea válida, seleccione Aplicar para convertir el filtro y, a continuación, Guarde el perfil sin conexión.

Importante

Seleccione Aplicar siempre y, después, Guardar después de editar FetchXML. Si no guarda, sus cambios serán descartados.

Después de guardar, el perfil sin conexión usa el filtro FetchXML personalizado para la sincronización de datos. Si la consulta solo usa características compatibles con el generador de objetos visuales, esos filtros seguirán mostrándose en la interfaz de usuario del Generador de expresiones. Si usa características avanzadas exclusivas de FetchXML, la interfaz de usuario del filtro visual podría no representarlas. Use el Editor FetchXML para cualquier edición futura en ese filtro.

procedimientos recomendados

  • Aplique sugerencias de rendimiento como latematerialize="true" o hint="union" para grandes conjuntos de datos.
  • ** Valide su FetchXML mediante las comprobaciones integradas del editor antes de guardarlo.
  • Guarde el perfil sin conexión inmediatamente después de aplicar los cambios de FetchXML.
  • Use solo construcciones FetchXML admitidas para perfiles sin conexión, como link-type="any" o link-type="not any".
  • Evite tipos de combinación no admitidos como inner o outer en filtros sin conexión.
  • Mantenga las cláusulas de filtro bajo el límite de 500 cláusulas por consulta.
  • No omita los errores de validación. Las consultas deben tener el formato correcto y completarse.

Limitaciones

  • Las consultas deben comenzar con un <fetch> elemento raíz e incluir al menos un <entity> elemento.
  • Solo se permiten los elementos FetchXML admitidos. Las etiquetas desconocidas o no admitidas desencadenan errores de validación.
  • Los elementos deben respetar las normas adecuadas de anidamiento entre elementos principales y secundarios.
  • <link-entity> dentro de <filter> debe usar link-type="any" o link-type="not any". No están soportadas las uniones internas y externas.
  • Las etiquetas FetchXML <attribute> no se usan para la selección de columnas sin conexión. Use la opción Filtrar columnas en su lugar.
  • Los atributos de paginación explícitos como page y count se omiten en perfiles sin conexión.
  • Las consultas se limitan a un máximo de 500 cláusulas de filtro.