Επεκτείνετε το Universal Resource Scheduling με Καθολικό FetchXML
Η UFX είναι μια σύνθετη γλώσσα ερωτημάτων που σάς δίνει τη δυνατότητα να θέσετε ερωτήματα σε δεδομένα χρησιμοποιώντας δυναμικό σχήμα FetchXML και να προετοιμάσετε τα δεδομένα που προκύπτουν για κατανάλωση από τη λύση Universal Resource Scheduling (URS). Αυτή η γλώσσα ερωτημάτων σάς επιτρέπει να δημιουργείτε προσαρμοσμένα ερωτήματα για να προσαρμόσετε και να επεκτείνετε τον πίνακα χρονοδιαγράμαμτος και τα φίλτρα βοηθού χρονοδιαγράμματος ώστε να καλύπτονται οι μοναδικές ανάγκες του οργανισμού.
Το UFX αποτελείται από δύο στοιχεία, το Σύνολο UFX και το Ερώτημα UFX.
Απλό σύνολο UFX
Ένα σύνολο UFX περιέχει στατικά δεδομένα που πληκτρολογήσατε. Στη μνήμη, εμφανίζεται ως λεξικό με κλειδιά και τιμές. Μπορεί να σειριοποιηθεί σε JSON και XML. Με τα δεδομένα που πληκτρολογήσατε δίνεται η δυνατότητα σε ένα Ερώτημα UFX να θέσει ερωτήματα σε δεδομένα από αυτό και στο περιβάλλον εργασίας χρήστη να συνδεθεί με αυτό.
Για πρακτικούς λόγους και για λόγους απόδοσης, το σύνολο εντός της μνήμης του Dynamics 365 υλοποιείται στο στοιχείο SDK
Entity
εφαρμογών.
Το σύνολο δειγμάτων περιέχει δύο τιμές.
Στη μνήμη:
κλειδί | τιμή | τύπος |
---|---|---|
όνομα | 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
στο σύνολο με την οδηγία source
UFX. Αυτό έχει ως αποτέλεσμα το ενσωματωμένο 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>
Η οδηγία select
UFX λαμβάνει μια έκφραση 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 για αλλαγή των δεδομένων και επιλογή τιμών από αυτό.
Μια έκφραση UFX που ορίζεται σε οδηγία UFX βλέπει τα δεδομένα στο σύνολο παρόμοια με τη δομή του συνόλου σε μορφή σειριοποιημένη XML. Ωστόσο, τα δεδομένα αποθηκεύονται στη μνήμη .NET αντικειμένων (σε παρουσίες τύπων Entity
και EntityCollection
) και όχι σε έγγραφα XML.
Παράρτημα Α: UFX τύπος αναφοράς
Σημείωση: Όλοι οι τύποι UFX υποστηρίζουν τα μεταδεδομένα ufx-type
και ufx-formatvalue
. Τα επιπλέον μεταδεδομένα περιγράφονται δίπλα σε κάθε τύπο στον παρακάτω πίνακα.
Όνομα UFX | Κωδικός τύπου χαρακτηριστικού | Όνομα .NET | Μετα-δεδομένα UFX |
---|---|---|---|
δυαδ. | Δυαδική τιμή | Δυαδική τιμή | |
ακέραιος | Ακέραιος | Int32 | |
μεγάλου μήκους | BigInt | Int64 | |
διπλής ακρίβειας | Διπλό | Διπλό | |
δεκαδικό | Δεκαδικός | Δεκαδικός | |
ημερομηνία/ώρα | ΗμερομηνίαΏρα | ΗμερομηνίαΏρα | |
guid | Uniqueidentifier | Guid | |
συμβολοσειρά | Υπόμνημα | Συμβολοσειρά | |
χρήματα | Χρηματικός τύπος | Χρηματικός τύπος | |
επιλογή | Λίστα επιλογών | OptionSetValue | |
αναζήτηση | Αναζήτηση | EntityReference | ufx-logicalname |
σύνολο | Δ/Υ | Οντότητα | ufx-id ufx-logicalname |
list | Δ/Υ | EntityCollection | |
Δ/Υ | Δ/Υ | AliasedValue | ufx-aliasentity ufx-aliasattribute |
Παράρτημα Β: Οδηγίες ερωτήματος 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 | Διέρχεται από το nodeset που επιστρέφεται από την έκφραση XPath και εξάγει τα θυγατρικά στοιχεία XML μία φορά για κάθε κόμβο |
ufx:value |
select |
XPath | Εκτελεί την έκφραση XPath και εμφανίζει το αποτέλεσμα στο τρέχον στοιχείο XML |
ufx:value |
attribute |
όνομα χαρακτηριστικού | Αντιστοιχίζει το αποτέλεσμα της έκφρασης XPath για το συγκεκριμένο όνομα χαρακτηριστικού στο τρέχον στοιχείο XML |
Παράρτημα C: UFX XPath λειτουργίες
Το UFX προσθέτει έναν αριθμό νέων λειτουργιών, εκτός από αυτές που διατίθενται εγγενώς στο XPath.
datetime()
- datetime(): επιστρέφει την τρέχουσα ώρα σε UTC
list()
- λίστα(σύνολο | λίστα, ...[σύνολο | λίστα]): Λαμβάνει τον αριθμό των τιμών
bag
ήlist
ως καταχώριση και τα κάνει έναlist
lookup-to-list()
- lookup-to-list(αναζήτηση, ...[αναζήτηση]): Λαμβάνει έναν αριθμό τιμών
lookup
, τις μετατρέπει σεbag
με μεταδεδομέναufx-id
καιufx-logicalname
και τα κάνει έναlist
option-to-list()
- option-to-list(επιλογή, ...[επιλογή]): Λαμβάνει έναν αριθμό τιμών
option
, τις μετατρέπει σε σύνολοbag
με απλή ιδιότηταoption
και τις κάνει έναlist
order()
- παραγγελία(λίστα, συμβολοσειρά, δυαδ.): Παραγγέλνει μια λίστα κατά ιδιότητα σε κάθε σύνολο. Η ιδιότητα έχει καθοριστεί στο όρισμα 2, η φθίνουσα σειρά καθορίζεται στο όρισμα 3.
- παραγγελία (λίστα, λίστα): Γίνεται παραγγελία μιας λίστας σε πολλαπλές σειρές ταξινόμησης που καθορίζεται ως μια λίστα στο όρισμα 2. Κάθε
bag
από τη δεύτερη λίστα μπορεί να περιέχει έναname
καιdescending
ιδιότητα
iif()
- iif(οποιοδήποτε, οποιοδήποτε, οποιοδήποτε): Αν το όρισμα 1 είναι αληθές, επιστρέφει το όρισμα 2, ειδάλλως επιστρέφει το όρισμα 3
Παράρτημα Δ: UFX XPath μεταβλητές
Όνομα | Περιγραφή |
---|---|
$input | Ένα bag διαθέσιμο στο ερώτημα UFX με τιμές εισαγωγής |
$null | Μια σταθερά null. Αν επιλέξετε $null σε μια ιδιότητα καταργείται η ιδιότητα από το σύνολο |
$current | Η αναφορά στο τρέχον σύνολο υπόκειται σε επεξεργασία από το ερώτημα UFX |
Δείτε επίσης
Κατανόηση και προσαρμογή της αντιστοίχισης πόρων στο Universal Resource Scheduling
Σημειώσεις έκδοσης επεκτασιμότητας Universal Resource Scheduling