Разширяване на Universal Resource Scheduling с Универсален FetchXML
UFX е разширен език за заявки, който ви позволява да търсите данни с помощта на динамичен FetchXML, да оформяте и подготвяте получените данни за консумация от решението Universal Resource Scheduling (URS). Този език за заявки ви позволява да създавате персонализирани заявки, за да персонализирате и разширите филтрите на асистента на графика, за да отговорите на уникалните бизнес нужди на организацията.
UFX се състои от два компонента UFX набор и UFX заявка.
Обикновен UFX набор
UFX наборът съдържа статично въведени данни. В паметта той се представя като речник с ключове и стойности. Той може да бъде поредица на JSON и XML. Въвеждането на да данните позволява на UFX заявка да търси данни от тях и ПИ на клиент за обвързване.
От съображения за практичност и производителност в набора в паметта се прилага върху обекта SDK
Entity
на приложения на Dynamics 365.
Примерен набор, съдържащ две стойности.
В паметта:
ключ | стойност | тип |
---|---|---|
име | John | низ |
възраст | 36 | целочислен |
в JSON:
{
"name": "John",
"age": 36
}
В XML:
<bag>
<name ufx-type="string">John</name>
<age ufx-type="int">36</age>
</bag>
Поддържани от UFX типове
UFX набор може да съдържа стойности от много типове. Те са категоризирани в три типа класове:
Категория | Стойност |
---|---|
Обикновени типове | bool (Boolean) , int (Int32) , long (Int64) , double (Double) , decimal (Decimal) , datetime (DateTime) , guid (Guid) , string (String) Специфични прости типове на Dynamics 365: money (Money) , option (OptionSet) , lookup (EntityReference) |
Други набори | bag (Entity) |
Списък с набори | list (EntityCollection) |
Ето примерен JSON набор, съдържащ повече типове:
{
"citizen": true, // implicit bool
"age": 36, // explicit int
"age@ufx-type": "int",
"name": { // nested bag
"first": "John",
"last": "Doe"
},
"children": [ // list of bags
{ "name": "Sam" },
{ "name": "Judy" }
]
}
Същият набор в XML:
<bag>
<citizen ufx-type="bool">true</citizen>
<age ufx-type="int">36</age>
<name ufx-type="bag">
<first ufx-type="string">John</first>
<last ufx-type="string">Doe</last>
</name>
<children ufx-type="list">
<bag>
<name ufx-type="string">Sam</name>
</bag>
<bag>
<name ufx-type="string">Judy</name>
</bag>
</children>
</bag>
Въведение в UFX заявките
UFX заявките са написани като XML-базирани UFX набори. Свойствата в набора могат да съдържат UFX директиви за динамично търсене на данни. UFX заявка се изпълнява за обекти в паметта, а не XML. Само директивите са написани на XML. Нейният изход може да бъде поредица на JSON и XML.
Следната UFX заявка определя свойството accounts
в набора с UFX директива source
. Това води до изпълнението на вграден FetchXML от Dynamics 365 и това свойството accounts
да се превърне в списък с набори или EntityCollection
, като всеки набор е екземпляр на запис на клиент от Dynamics 365.
<bag xmlns:ufx="https://schemas.microsoft.com/dynamics/2017/universalfetchxml">
<accounts ufx:source="fetch">
<fetch top="10">
<entity name="account" />
</fetch>
</accounts>
</bag>
UFX заявка се обработва последователно и може да съдържа много FetchXML заявки.
Ето един фрагмент от резултата от предишната UFX заявката с поредица на XML. Обърнете внимание, че някои стойности имат метаданни, които ги описват допълнително.
<bag>
<accounts ufx-type="list">
<bag ufx-id="166e39dd-34a1-e611-8111-00155d652f01" ufx-logicalname="account">
<accountid ufx-type="guid">166e39dd-34a1-e611-8111-00155d652f01</accountid>
<accountnumber ufx-type="string">ABSS4G45</accountnumber>
<name ufx-type="string">Fourth Coffee (sample)</name>
<statecode ufx-type="option" ufx-formatvalue="Active">0</statecode>
<websiteurl ufx-type="string">https://www.fourthcoffee.com/</websiteurl>
<primarycontactid ufx-type="lookup" ufx-formatvalue="Yvonne McKay (sample)" ufx-logicalname="contact">7c6e39dd-34a1-e611-8111-00155d652f01</primarycontactid>
...
</bag>
<bag ufx-type="bag" ufx-id="186e39dd-34a1-e611-8111-00155d652f01" ufx-logicalname="account">
<accountid ufx-type="guid">186e39dd-34a1-e611-8111-00155d652f01</accountid>
<accountnumber ufx-type="string">ACTBBDC3</accountnumber>
<name ufx-type="string">Litware, Inc. (sample)</name>
<statecode ufx-type="option" ufx-formatvalue="Active">0</statecode>
<websiteurl ufx-type="string">https://www.litwareinc.com/</websiteurl>
<primarycontactid ufx-type="lookup" ufx-formatvalue="Susanna Stubberod (sample)" ufx-logicalname="contact">7e6e39dd-34a1-e611-8111-00155d652f01</primarycontactid>
...
</bag>
...
</accounts>
</bag>
UFX директивата select
взема XPath израз, който избира стойности от текущия набор.
<bag xmlns:ufx="https://schemas.microsoft.com/dynamics/2017/universalfetchxml">
<accounts ufx:source="fetch">
<fetch top="10">
<entity name="account" />
</fetch>
</accounts>
<first_account_name ufx:select="accounts/bag[1]/name" />
<!-- null values remove properties from the bag -->
<accounts ufx:select="$null" />
</bag>
Резултатният набор в XML:
<bag>
<first_account_name ufx-type="string">Fourth Coffee (sample)</first_acount_name>
</bag>
Със сигурност най-мощният аспект на UFX заявката е нейната способност динамично да генерира FetchXML въз основа на входните данни.
В извадката по-долу ние търсим клиенти по стойност, предоставена от потребителя и достъпна като UFX набор чрез променлива на XPath $input
. Обърнете внимание на директивите UFX ако и стойност на елемента condition
.
<bag xmlns:ufx="https://schemas.microsoft.com/dynamics/2017/universalfetchxml">
<accounts ufx:source="fetch">
<fetch top="10">
<entity name="account">
<filter>
<condition attribute="name" operator="like" ufx:if="$input/NameFilter">
<ufx:value select="$input/NameFilter" attribute="value" />
</condition>
</filter>
</entity>
</fetch>
</accounts>
</bag>
Ако свойството на NameFilter
във входящия набор съдържа %city%
, състоянието на създадения FetchXML, изпълнен от Dynamics 365, ще изглежда така.
<condition attribute="name" operator="like" value="%city%" />
Ключове, стойности и метаданни
UFX наборът съдържа ключове и стойности, като някои стойности имат допълнителни метаданни, които допълнително ги описват.
Един пример може да бъде стойност от тип lookup (EntityReference)
. При заявка от Dynamics 365 чрез FetchXML, тя ще върне логическо име на обекта, както и форматираното показвано име на записа. UFX наборът запазва тази допълнителна информация като метаданни, прикрепени към основната стойност.
С поредица на JSON lookup
с метаданни изглежда така:
{
"primarycontactid": "7e6e39dd-34a1-e611-8111-00155d652f01",
"primarycontactid@ufx-type": "lookup",
"primarycontactid@ufx-logicalname": "contact",
"primarycontactid@ufx-formatvalue": "Susanna Stubberod (sample)"
}
В XML:
<primarycontactid ufx-type="lookup" ufx-formatvalue="Susanna Stubberod (sample)" ufx-logicalname="contact">7e6e39dd-34a1-e611-8111-00155d652f01</primarycontactid>
XPath над данни на Dynamics 365
Въвеждането на данните в UFX набор позволява на UFX заявка да види техния структуриран формат и да използва XPath, за да прегледа данните и да избере стойности от тях.
Израз на XPath, указан в UFX директива, вижда данните в набора подобно на структурата на набора в подреден по XML формуляр. Въпреки това данните се съхраняват в .NET обекти в паметта (в случаи на типове Entity
и EntityCollection
), а не в XML документи.
Приложение А: Препратка от тип UFX
Забележка: Всички UFX типове поддържат метаданни ufx-type
и ufx-formatvalue
. Допълнителни метаданни са описани до всеки тип в таблицата по-долу.
UFX име | Код на тип атрибут | .NET име | UFX метаданни |
---|---|---|---|
булево | Булев | Булев | |
целочислен | Цяло число | Int32 | |
дълго | BigInt | Int64 | |
двойно | Двоен | Двоен | |
десетично | По десетичен знак | По десетичен знак | |
дата час | ДатаЧас | ДатаЧас | |
guid | Еднозначен идентификатор | Guid | |
низ | Паметна бележка | Низ | |
пари | Пари | Пари | |
опция | Падащ списък | OptionSetValue | |
справочно поле | Справка | EntityReference | ufx-logicalname |
набор | Няма | Обект | ufx-id ufx-logicalname |
списък | Няма | EntityCollection | |
Няма | Няма | AliasedValue | ufx-aliasentity ufx-aliasattribute |
Приложение B: Директиви на UFX заявка
UFX директивите могат да бъдат използвани върху набор от свойства и XML елементи на FetchXML заявка.
Директиви на UFX набор
Атрибут | Value | Описание |
---|---|---|
ufx:if |
XPath | Тества XPath израза и обработва свойството само ако тестът върне „true” |
ufx:source |
fetch |
Изпълнява вградения <fetch> XML елемент и присвоява резултата на свойството |
ufx:select |
XPath | Изпълнява израза на XPath и присвоява резултата на свойството При търсене на за bag или list допълнителен дъщерен bag в XML формат може да бъде указан за преобразуване на резултата от израз на XPath |
UFX FetchXML директиви
Елемент | Атрибут | Value | Описание |
---|---|---|---|
Всички елементи | ufx:if |
XPath | Тества израза на XPath и излъчва XML елемент само ако тестовете са успешни |
ufx:apply |
select |
XPath | Изпълнява цикъл над набора от възли, върнат от израза на XPath и извежда дъщерните XML елементи веднъж за всеки възел |
ufx:value |
select |
XPath | Изпълнява израза на XPath и извежда резултата в текущия XML елемент |
ufx:value |
attribute |
име на атрибута | Присвоява резултата от израза на XPath към указаното име на атрибута на текущия XML елемент |
Приложение C: UFX XPath функции
UFX добавя определен брой нови функции освен тези, които са основни за XPath.
datetime()
- datetime(): Връща текущото време в UTC
list()
- list(bag | list, ...[bag | list]): Взема определен брой стойност и на
bag
илиlist
като входящи и ги изравнява до единиченlist
lookup-to-list()
- lookup-to-list(lookup, ...[lookup]): Взема определен брой стойности за
lookup
, преобразува всяка от тях вbag
сufx-id
и набор от метаданни наufx-logicalname
и ги изравнява до единиченlist
option-to-list()
- option-to-list(option, ...[option]): Взема определен брой стойности на
option
, преобразува всяка от тях вbag
с едно свойствоoption
и ги изравнява до единиченlist
order()
- order(list, string, bool): Подрежда списък по свойство във всеки набор. Свойството се указва в аргумент 2, низходящо е указано в аргумент 3.
- order(list, list): Подрежда списък по множество подреждания на сортиране като списък в аргумент 2 Всеки
bag
във втория списък може да имаname
и свойствоdescending
iif()
- iif(any, any, any): Ако аргумент 1 е верен, връща аргумент 2, в противен случай връща аргумент 3
Приложение D: UFX XPath променливи
Име | Описание |
---|---|
$input | bag , наличен за UFX заявката с входящи стойности |
$null | Нулева константа. Избирането на $null на свойство премахва свойството от набора |
$current | Препратка към текущия набор, обработван от UFX заявката |
Вижте също
Разбиране и персонализиране на съпоставяне на ресурси в Universal Resource Scheduling
Бележки по изданието за разширяване на Universal Resource Scheduling
Hinweis
Можете ли да ни споделите повече за езиковите си предпочитания за документацията? Попълнете кратко проучване. (имайте предвид, че това проучване е на английски език)
Проучването ще отнеме около седем минути. Не се събират лични данни (декларация за поверителност).
Обратна връзка
https://aka.ms/ContentUserFeedback.
Очаквайте скоро: През цялата 2024 г. постепенно ще отстраняваме проблемите в GitHub като механизъм за обратна връзка за съдържание и ще го заменим с нова система за обратна връзка. За повече информация вижте:Подаване и преглед на обратна връзка за