Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[Данная статья является предварительной версией документации и может быть изменена.]
FetchXML — это собственный язык запросов Dataverse, который позволяет разработчикам записывать фильтры данных в виде XML-кода, аналогично написанию формулы, но более мощной. Используйте редактор FetchXML для оптимизации сложных профилей для повышения производительности и предотвращения времени ожидания синхронизации в больших таблицах (100K+ записей).
Эта функция лучше всего подходит для передовых разработчиков и разработчиков, которые комфортно работают с XML и нуждаются в большем контроле, чем в построителе визуальных фильтров.
Это важно
- Это предварительная версия функции.
- Предварительные версии функций не предназначены для использования в рабочей среде и могут иметь ограниченные функциональные возможности. Эти функции подчиняются дополнительным условиям использования и доступны до официального выпуска, чтобы клиенты могли получать ранний доступ и предоставлять отзывы.
- Эта функция постепенно развертывается во всех регионах и, возможно, еще недоступна в вашем регионе.
Преимущества редактора FetchXML
Редактор FetchXML предлагает несколько преимуществ по сравнению с построителем визуальных выражений для определения автономных фильтров данных.
Поддержка иерархических условий: редактор FetchXML поддерживает создание сложных, иерархических условий, таких как
under,eq-or-underaboveиeq-or-aboveпри поиске с поддержкой иерархии.<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>Поддержка проверок для несвязанных таблиц: редактор FetchXML позволяет связаться с другими таблицами, даже если они не имеют прямой связи с основной сущностью, при условии, что указано допустимое значение от и к атрибутам. Эта возможность особенно полезна в сложных автономных сценариях, когда несколько сущностей совместно используют общий внешний ключ, но не связаны напрямую.
<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>
Поддержка оптимизации запросов с использованием поздней материализации и подсказок для запросов: редактор предоставляет расширенные средства оптимизации непосредственно в элементе
<fetch>, включая:latematerialize="true": при использованииlatematerialize="true", вы оптимизируете производительность запросов, сузив количество совпадающих записей перед получением всех данных столбцов. Этот атрибут уменьшает нагрузку при синхронизации больших таблиц во время автономной синхронизации.<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>Атрибут
optionsпередает указания запросов SQL Server, напримерOptimizeForUnknown,ENABLE_HIST_AMENDMENT_FOR_ASC_KEYSилиNO_PERFORMANCE_SPOOL. Эти опции улучшают планы выполнения для часто выполняемых или сильно вложенных запросов.<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>
Как работает редактор FetchXML
Вы обращаетесь к редактору FetchXML с помощью интерфейса настройки автономного профиля в Power Apps. Вы записываете или вставляете запрос FetchXML, а редактор проверяет его в режиме реального времени перед сохранением.
В Power Apps перейдите в настройки среды и откройте страницу «Автономные профили». Выберите существующий автономный профиль или создайте новый, а затем выберите "Изменить профиль".
В редакторе автономных профилей добавьте или выберите таблицу, данные которой требуется отфильтровать для автономного использования.
В разделе "Фильтр" выберите "Настраиваемые " или "Связанные строки", а затем выберите "Изменить фильтр".
В редакторе фильтров прокрутите вниз и выберите команду View/Edit FetchXML, чтобы открыть редактор кода FetchXML.
Измените существующий запрос FetchXML или вставьте новый. Редактор автоматически проверяет синтаксис и структуру при редактировании, проверяя:
- Обязательный
<fetch>корневой элемент с по крайней мере одним<entity>элементом - Только поддерживаемые теги для FetchXML
- Элементы, помещенные внутри правильных родительских элементов
- Не более 500 условий фильтра
Если редактор обнаруживает проблему, например отсутствующий обязательный элемент или неподдерживаемое
<link-entity>использование, отображается четкое сообщение об ошибке, чтобы устранить его перед сохранением.- Обязательный
После проверки корректности вашего запроса FetchXML выберите Применить, чтобы преобразовать фильтр, а затем сохраните автономный профиль.
Это важно
Всегда нажимайте кнопку "Применить ", а затем сохраните после редактирования FetchXML. Если вы не сохраняете, изменения удаляются.
После сохранения автономный профиль использует пользовательский фильтр FetchXML для синхронизации данных. Если запрос использует только функции, поддерживаемые визуальным построителем, эти фильтры продолжают отображаться в пользовательском интерфейсе построителя выражений. Если вы используете расширенные функции FetchXML, пользовательский интерфейс визуального фильтра может не отображать их. Используйте редактор FetchXML для любых будущих изменений в этом фильтре.
Лучшие практики
- Применение подсказок производительности, таких как
latematerialize="true"илиhint="union"для больших наборов данных. - Проверьте FetchXML с помощью встроенных проверок редактора перед сохранением.
- Сохраните ваш офлайн-профиль сразу после применения изменений в FetchXML.
- Используйте только поддерживаемые конструкции FetchXML для автономных профилей, например
link-type="any"илиlink-type="not any". - Избегайте неподдерживаемых типов соединений, таких как
innerилиouterв автономных фильтрах. - Сохраняйте условия фильтра в пределах ограничения в 500 на один запрос.
- Не игнорируйте ошибки проверки. Запросы должны быть хорошо сформированы и завершены.
Ограничения
- Запросы должны начинаться с корневого элемента и включать по крайней
<fetch>мере один<entity>элемент. - Разрешены только поддерживаемые элементы FetchXML. Неизвестные или неподдерживаемые теги вызывают ошибки проверки.
- Элементы должны соответствовать должным правилам вложения дочерних элементов в родительские.
-
<link-entity>внутри<filter>должен использоватьсяlink-type="any"илиlink-type="not any". Внутренние и внешние соединения не поддерживаются. - Теги FetchXML
<attribute>не используются для выбора столбцов в автономной синхронизации. Используйте вместо этого параметр "Фильтр столбцов ". - Явные атрибуты разбиения на страницы, как
pageиcount, игнорируются в автономных профилях. - Запросы ограничены не более чем 500 предложениями фильтров.