Συνάρτηση Patch

Ισχύει για: Εφαρμογές καμβά Συναρτήσεις του Copilot Studio Desktop

Τροποποιεί ή δημιουργεί μία ή περισσότερες καρτέλες σε μια προέλευση δεδομένων ή συγχωνεύει καρτέλες εκτός μιας προέλευσης δεδομένων.

Χρησιμοποιήστε τη Patch συνάρτηση για να τροποποιήσετε εγγραφές σε σύνθετες καταστάσεις, όπως όταν κάνετε ενημερώσεις που δεν απαιτούν αλληλεπίδραση του χρήστη ή χρησιμοποιήστε φόρμες που εκτείνονται σε πολλές οθόνες.

Για να ενημερώσετε τις καρτέλες σε μια προέλευση δεδομένων ευκολότερα για απλές αλλαγές, χρησιμοποιήστε το στοιχείο ελέγχου Edit form αντί για αυτό. Όταν προσθέτετε ένα στοιχείο ελέγχου Edit form, παρέχετε στους χρήστες μια φόρμα για συμπλήρωση και, στη συνέχεια, αποθηκεύετε τις αλλαγές σε μια προέλευση δεδομένων. Για περισσότερες πληροφορίες, ανατρέξτε στο θέμα Κατανόηση φορμών δεδομένων.

Παρακολουθήστε αυτό το βίντεο για να μάθετε πώς μπορείτε να χρησιμοποιήσετε τη Patch συνάρτηση:

Overview

Χρησιμοποιήστε τη Patch συνάρτηση για να τροποποιήσετε μία ή περισσότερες εγγραφές μιας προέλευσης δεδομένων. Ενημερώνει τις τιμές συγκεκριμένων πεδίων χωρίς να επηρεάζει άλλες ιδιότητες. Για παράδειγμα, αυτός ο τύπος αλλάζει τον αριθμό τηλεφώνου για έναν πελάτη που ονομάζεται Contoso:

Patch( Customers, LookUp( Customers, Name = "Contoso" ), { Phone: "1-212-555-1234" } )

Χρησιμοποιήστε Patch την με τη συνάρτηση Defaults για να δημιουργήσετε εγγραφές. Χρησιμοποιήστε αυτή τη συμπεριφορά για να δημιουργήσετε μία μόνο οθόνη τόσο για τη δημιουργία όσο και για την επεξεργασία καρτελών. Για παράδειγμα, αυτός ο τύπος δημιουργεί μια καρτέλα για έναν πελάτη που ονομάζεται Contoso:

Patch( Customers, Defaults( Customers ), { Name: "Contoso" } )

Note

Όταν επιδιορθώνετε μια συλλογή χρησιμοποιώντας μια εγγραφή από μια προέλευση δεδομένων με προεπιλεγμένες τιμές, η λειτουργία ενημερωμένης έκδοσης κώδικα ενημερώνει τη συλλογή τόσο με τις καθορισμένες τιμές ενημερωμένης έκδοσης κώδικα όσο και με τις προεπιλεγμένες τιμές από την προέλευση δεδομένων. Το DataSource της πρότασης patch και το DataSource της συνάρτησης Defaults πρέπει να ταιριάζουν για να δημιουργήσετε μια νέα εγγραφή.

Ακόμα και αν δεν εργάζεστε με μια προέλευση δεδομένων, μπορείτε να χρησιμοποιήσετε Patch για να συγχωνεύσετε δύο ή περισσότερες εγγραφές. Για παράδειγμα, αυτός ο τύπος συγχωνεύει δύο καρτέλες σε μία που προσδιορίζει τόσο τον αριθμό τηλεφώνου όσο και την τοποθεσία για την Contoso:

Patch( { Name: "Contoso", Phone: "1-212-555-1234" }, { Name: "Contoso", Location: "Midtown" } )

Description

Τροποποίηση ή δημιουργία καρτέλας σε μια προέλευση δεδομένων

Για να χρησιμοποιήσετε αυτή τη συνάρτηση με μια προέλευση δεδομένων, καθορίστε την προέλευση δεδομένων και, στη συνέχεια, καθορίστε μια καρτέλα βάσης:

  • Για να τροποποιήσετε μια καρτέλα, η βασική καρτέλα πρέπει να προέρχεται από μια προέλευση δεδομένων. Μπορείτε να λάβετε τη βασική εγγραφή μέσω της ιδιότητας Items μιας συλλογής, να την τοποθετήσετε σε μια μεταβλητή περιβάλλοντος ή να την αποκτήσετε μέσω κάποιας άλλης διαδρομής. Ωστόσο, πρέπει να μπορείτε να εντοπίσετε τη βασική καρτέλα στην προέλευση δεδομένων. Αυτή η απαίτηση είναι σημαντική επειδή η καρτέλα περιλαμβάνει επιπλέον πληροφορίες που σας βοηθούν να βρείτε ξανά την καρτέλα για τροποποίηση.
  • Για να δημιουργήσετε μια καρτέλα, χρησιμοποιήστε τη συνάρτηση Defaults για να δημιουργήσετε μια καρτέλα βάσης με τις προεπιλεγμένες τιμές.

Στη συνέχεια, καθορίστε μία ή περισσότερες καρτέλες αλλαγής, κάθε μία από τις οποίες περιέχει νέες τιμές ιδιοτήτων που αντικαθιστούν τις τιμές ιδιοτήτων της καρτέλας βάσης. Η επεξεργασία των καρτελών αλλαγής γίνεται με τη σειρά από την αρχή μέχρι το τέλος της λίστας ορισμάτων και οι πιο πρόσφατες τιμές ιδιοτήτων αντικαθιστούν τις παλαιότερες.

Η τιμή επιστροφής είναι Patch η εγγραφή που τροποποιείτε ή δημιουργείτε. Εάν δημιουργήσατε μια εγγραφή, η τιμή επιστροφής μπορεί να περιλαμβάνει ιδιότητες που δημιούργησε αυτόματα η προέλευση δεδομένων. Ωστόσο, η τιμή επιστροφής δεν παρέχει μια τιμή για πεδία ενός σχετικού πίνακα.

Για παράδειγμα, χρησιμοποιείτε το Set(MyAccount, Patch(Accounts, First(Account), 'Account Name': "Example name")); και, στη συνέχεια, το MyAccount.'Primary Contact'.'Full Name'. Σε αυτήν την περίπτωση, δεν μπορείτε να αποδώσετε ένα πλήρες όνομα. Αντ' αυτού, για να αποκτήσετε πρόσβαση στα πεδία ενός σχετιζόμενου πίνακα, χρησιμοποιήστε μια ξεχωριστή αναζήτηση, όπως:

LookUp(Accounts, Account = MyAccount.Account).'Primary Contact'.'Full Name'

Όταν ενημερώνετε μια προέλευση δεδομένων, ενδέχεται να προκύψουν ένα ή περισσότερα προβλήματα. Χρησιμοποιήστε τα IfError και IsError με την τιμή επιστροφής από Patch το για τον εντοπισμό και την απόκριση σε σφάλματα, όπως περιγράφει ο Χειρισμός σφαλμάτων . Μπορείτε επίσης να χρησιμοποιήσετε τη συνάρτηση Errors για να εντοπίσετε και να εξετάσετε προβλήματα, όπως περιγράφεται στο θέμα Εργασία με προελεύσεις δεδομένων.

Οι σχετικές συναρτήσεις περιλαμβάνουν τη συνάρτηση Update, για να αντικαταστήσετε μια ολόκληρη καρτέλα, και τη συνάρτηση Collect, για να δημιουργήσετε μια καρτέλα. Χρησιμοποιήσετε τη συνάρτηση UpdateIf για να τροποποιήσετε συγκεκριμένες ιδιότητες πολλών καρτελών με βάση μια συνθήκη.

Τροποποίηση ή δημιουργία ενός συνόλου καρτελών σε μια προέλευση δεδομένων

Μπορείτε επίσης να χρησιμοποιήσετε Patch το για να δημιουργήσετε ή να τροποποιήσετε πολλές καρτέλες με μία μόνο κλήση.

Αντί να μεταβιβάσετε μία καρτέλα βάσης, δώστε έναν πίνακα καρτελών βάσης στο δεύτερο όρισμα. Δώστε επίσης εγγραφές αλλαγών σε έναν πίνακα, αντιστοιχώντας ένα προς ένα με τις βασικές εγγραφές. Ο αριθμός των καρτελών σε κάθε πίνακα αλλαγών πρέπει να είναι ίδιος με τον αριθμό των καρτελών στον πίνακα βάσης.

Όταν χρησιμοποιείτε Patch με αυτόν τον τρόπο, η τιμή επιστροφής είναι επίσης ένας πίνακας με κάθε εγγραφή να αντιστοιχεί μία προς μία με τις εγγραφές βάσης και αλλαγής.

Συγχώνευση καρτελών εκτός μιας προέλευσης δεδομένων

Καθορίστε δύο ή περισσότερες καρτέλες που θέλετε να συγχωνεύσετε. Η συνάρτηση επεξεργάζεται τις εγγραφές με τη σειρά από την αρχή της λίστας ορισμάτων μέχρι το τέλος, με τις μεταγενέστερες τιμές ιδιοτήτων να υπερισχύουν των προηγούμενων.

Patch Η επιστρέφει τη συγχωνευμένη εγγραφή και δεν τροποποιεί τα ορίσματά της ή εγγραφές σε οποιεσδήποτε προελεύσεις δεδομένων.

Syntax

Τροποποίηση ή δημιουργία καρτέλας σε μια προέλευση δεδομένων

Patch( DataSource, BaseRecord, ChangeRecord1 [, ChangeRecord2, ... ])

  • DataSource – Υποχρεωτικό. Η προέλευση δεδομένων που περιέχει την καρτέλα που θέλετε να τροποποιήσετε ή που θα περιέχει την καρτέλα που θέλετε να δημιουργήσετε.
  • BaseRecord – Απαιτείται. Η καρτέλα για τροποποίηση ή δημιουργία. Εάν η καρτέλα προήλθε από μια προέλευση δεδομένων, η συνάρτηση εντοπίζει και τροποποιεί την εγγραφή. Εάν χρησιμοποιείται το αποτέλεσμα των Προεπιλογών , η συνάρτηση δημιουργεί μια καρτέλα. Η Προέλευση δεδομένων της πρότασης ενημέρωσης κώδικα και η Προέλευση δεδομένων της συνάρτησης Defaults πρέπει να συμφωνούν για να δημιουργηθεί μια νέα εγγραφή.
  • ChangeRecords – Απαιτείται. Μία ή περισσότερες καρτέλες που περιέχουν ιδιότητες για τροποποίηση στο BaseRecord. Οι διεργασίες της συνάρτησης αλλάζουν τις εγγραφές με τη σειρά από την αρχή της λίστας ορισμάτων μέχρι το τέλος, με τις μεταγενέστερες τιμές ιδιοτήτων να υπερισχύουν των προηγούμενων.

Τροποποίηση ή δημιουργία ενός συνόλου καρτελών σε μια προέλευση δεδομένων

Patch( DataSource, BaseRecordsTable, ChangeRecordTable1 [, ChangeRecordTable2, ... ] )

  • DataSource – Υποχρεωτικό. Η προέλευση δεδομένων που περιέχει τις καρτέλες που θέλετε να τροποποιήσετε ή που θα περιέχει τις καρτέλες που θέλετε να δημιουργήσετε.
  • BaseRecordTable – Απαιτείται. Ένας πίνακας καρτελών για τροποποίηση ή δημιουργία. Εάν η καρτέλα προήλθε από μια προέλευση δεδομένων, η συνάρτηση εντοπίζει και τροποποιεί την εγγραφή. Εάν χρησιμοποιείται το αποτέλεσμα των Προεπιλογών , η συνάρτηση δημιουργεί μια καρτέλα. Η Προέλευση δεδομένων της πρότασης ενημέρωσης κώδικα και η Προέλευση δεδομένων της συνάρτησης Defaults πρέπει να συμφωνούν για να δημιουργηθεί μια νέα εγγραφή.
  • ChangeRecordTables – Απαιτείται. Ένας ή περισσότεροι πίνακες καρτελών που περιέχουν ιδιότητες για τροποποίηση για κάθε καρτέλα από το BaseRecordTable. Οι διεργασίες της συνάρτησης αλλάζουν τις εγγραφές με τη σειρά από την αρχή της λίστας ορισμάτων μέχρι το τέλος, με τις μεταγενέστερες τιμές ιδιοτήτων να υπερισχύουν των προηγούμενων.

Merge records

Patch( Record1, Record2 [, ...] )

  • Εγγραφές - Απαιτείται. Τουλάχιστον δύο καρτέλες που θέλετε να συγχωνεύσετε. Η συνάρτηση επεξεργάζεται τις εγγραφές με τη σειρά από την αρχή της λίστας ορισμάτων μέχρι το τέλος, με τις μεταγενέστερες τιμές ιδιοτήτων να υπερισχύουν των προηγούμενων.

Examples

Τροποποίηση ή δημιουργία καρτέλας (σε μια προέλευση δεδομένων)

Σε αυτά τα παραδείγματα, τροποποιείτε ή δημιουργείτε μια εγγραφή σε μια προέλευση δεδομένων με το όνομα IceCream. Η προέλευση δεδομένων περιέχει τα δεδομένα σε αυτόν τον πίνακα και δημιουργεί αυτόματα τις τιμές στη στήληΑναγνωριστικό:

Στιγμιότυπο οθόνης του πίνακα παραδειγμάτων προέλευσης δεδομένων IceCream που εμφανίζει γεύσεις και ποσότητες.

Για να δημιουργήσετε μια έκδοση στη μνήμη αυτού του αρχείου προέλευσης δεδομένων, ώστε να μπορείτε να δοκιμάσετε αυτά τα παραδείγματα, αξιολογήστε αυτόν τον τύπο:

ClearCollect( IceCream,
    { ID: 1, Flavor: "Chocolate", Quantity: 100 },
    { ID: 2, Flavor: "Vanilla", Quantity: 200 }
)
Formula Description Result
Patch( Παγωτό,
LookUp( Παγωτό, Γεύση = "Σοκολάτα" ), { Ποσότητα: 400 } )
Τροποποιεί μια καρτέλα στην προέλευση δεδομένων IceCream:
  • Η στήλη ID της καρτέλας για τροποποίηση περιέχει την τιμή 1. (Η καρτέλα Chocolate έχει αυτό το αναγνωριστικό.)
  • Η τιμή στη στήλη Quantity αλλάζει σε 400.
{ ID: 1, Γεύση: "Σοκολάτα", Ποσότητα: 400 }

Η καταχώρηση Σοκολάτα στην προέλευση δεδομένων IceCream τροποποιείται.
Patch( Παγωτό, Προεπιλογές ( Παγωτό ), { Γεύση: "Φράουλα" } ) Δημιουργεί μια καρτέλα στην προέλευση δεδομένων IceCream:
  • Η στήλη ID περιέχει την τιμή 3, την οποία δημιουργεί αυτόματα η προέλευση δεδομένων.
  • Η στήλη Quantity περιέχει την τιμή 0, που είναι η προεπιλεγμένη τιμή για αυτή τη στήλη στην προέλευση δεδομένων IceCream, όπως καθορίζεται από τη συνάρτηση Defaults.
  • Η στήλη Flavor περιέχει την τιμή Strawberry.
{ ID: 3, Γεύση: "Φράουλα", Ποσότητα: 0 }

Δημιουργείται η καταχώρηση Strawberry στην προέλευση δεδομένων IceCream .

Μετά την αξιολόγηση των προηγούμενων τύπων, η προέλευση δεδομένων τελειώνει με αυτές τις τιμές:

Στιγμιότυπο οθόνης της προέλευσης δεδομένων IceCream μετά την αξιολόγηση των Patch τύπων.

Συγχώνευση καρτελών (εκτός μιας προέλευσης δεδομένων)

Formula Description Result
Patch( { Όνομα: "James", Σκορ: 90 }, { Όνομα: "Jim", Πέρασε: true } ) Συγχωνεύει δύο καρτέλες εκτός μιας προέλευσης δεδομένων:
  • Οι τιμές στη στήλη Name κάθε καρτέλας δεν συμφωνούν. Το αποτέλεσμα περιέχει την τιμή (Jim) της καρτέλας που βρίσκεται πιο κοντά στο τέλος της λίστας ορισμάτων αντί για την τιμή (James) της καρτέλας που βρίσκεται πιο κοντά στην αρχή.
  • Η πρώτη καρτέλα περιέχει μια στήλη (Score) που δεν υπάρχει στη δεύτερη καρτέλα. Το αποτέλεσμα περιέχει αυτή τη στήλη με την τιμή (90).
  • Η δεύτερη καρτέλα περιέχει μια στήλη (Passed) που δεν υπάρχει στην πρώτη καρτέλα. Το αποτέλεσμα περιέχει αυτή τη στήλη με την τιμή (true).
{ Όνομα: "Jim", Βαθμολογία: 90, Πέρασε: true }

Τροποποίηση ή δημιουργία ενός συνόλου καρτελών (σε μια προέλευση δεδομένων)

Όταν χρησιμοποιείτε Patch με πίνακες αντί για μεμονωμένες εγγραφές, μπορείτε να δημιουργήσετε ή να τροποποιήσετε πολλές καρτέλες σε μία κλήση. Η τιμή επιστροφής είναι ένας πίνακας εγγραφών που αντιστοιχεί ένα προς ένα με τους πίνακες εισόδου.

Αυτό το παράδειγμα ενημερώνει την Ποσότητα για πολλές γεύσεις στην προέλευση δεδομένων IceCream ταυτόχρονα:

Patch(
    IceCream,
    Table(
        { ID: 1, Flavor: "Chocolate", Quantity: 150 },
        { ID: 2, Flavor: "Vanilla", Quantity: 200 }
    ),
    Table(
        { Quantity: 300 },
        { Quantity: 400 }
    )
)

Το αποτέλεσμα είναι ένας πίνακας με τις ενημερωμένες εγγραφές: { ID: 1, Flavor: "Chocolate", Quantity: 300 } και { ID: 2, Flavor: "Vanilla", Quantity: 400 }.

Αυτό το παράδειγμα δημιουργεί πολλές νέες εγγραφές χρησιμοποιώντας τις Προεπιλογές:

Patch(
    IceCream,
    Table( Defaults( IceCream ), Defaults( IceCream ) ),
    Table(
        { Flavor: "Mint", Quantity: 60 },
        { Flavor: "Peach", Quantity: 80 }
    )
)

Note

Όταν χρησιμοποιείτε Patch με πίνακες, ο αριθμός των καρτελών σε κάθε πίνακα αλλαγών πρέπει να ταιριάζει με τον αριθμό των καρτελών στον βασικό πίνακα. Διαφορετικά, παρουσιάζεται σφάλμα.

Για να εντοπίσετε σφάλματα κατά την τροποποίηση πολλών εγγραφών, χρησιμοποιήστε το IfError. IfError είναι ο προτιμώμενος μηχανισμός και λειτουργεί σε κεντρικούς υπολογιστές Power Fx:

IfError(
    Patch(
        IceCream,
        baseRecords,
        changeRecords
    ),
    Notify( "Some records failed to update: " & FirstError.Message, NotificationType.Error )
)

Patch με τύπους στηλών Dataverse

Τα ακόλουθα παραδείγματα ισχύουν ειδικά για τις προελεύσεις δεδομένων Microsoft Dataverse. Τα σχήματα εγγραφών διαφέρουν ανάλογα με την προέλευση δεδομένων (για παράδειγμα, το SharePoint και ο SQL Server έχουν διαφορετικές μορφές).

Στήλη επιλογής: Για να ορίσετε μια στήλη Επιλογή, χρησιμοποιήστε απευθείας την τιμή απαρίθμησης. Αυτό το παράδειγμα ορίζει μια στήλη επιλογής κατάστασης σε έναν πίνακα Λογαριασμοί :

Patch(
    Accounts,
    LookUp( Accounts, 'Account Name' = "Contoso" ),
    { 'Status': 'Status (Accounts)'.Active }
)

Στήλη αναζήτησης: Για να ορίσετε μια στήλη αναζήτησης, δώστε μια καρτέλα με το πρωτεύον κλειδί του σχετικού πίνακα. Αυτό το παράδειγμα ορίζει την αναζήτηση κύριας επαφής σε μια καρτέλα λογαριασμών :

Patch(
    Accounts,
    LookUp( Accounts, 'Account Name' = "Contoso" ),
    { 'Primary Contact': LookUp( Contacts, 'Full Name' = "John Smith" ) }
)

Note

Αυτά τα παραδείγματα τύπου στήλης αφορούν συγκεκριμένα το Dataverse. Άλλες προελεύσεις δεδομένων, όπως το SharePoint ή ο SQL Server, ενδέχεται να απαιτούν διαφορετικά σχήματα καρτελών για παρόμοιους τύπους στηλών. Ανατρέξτε στην τεκμηρίωση για τη συγκεκριμένη πηγή δεδομένων για τη σωστή μορφή.

Ανάθεση σε τύπους που χρησιμοποιούν Patch

Η ίδια η Patch συνάρτηση δεν υπόκειται σε ανάθεση , επειδή εγγράφει στην προέλευση δεδομένων αντί να την ερωτάται. Ωστόσο, ενδέχεται να εμφανιστούν προειδοποιήσεις ανάθεσης σε τύπους που χρησιμοποιούν Patch εάν το τμήμα επιλογής εγγραφών του τύπου (όπως Filter, LookUp ή ForAll) περιλαμβάνει ένα ερώτημα που υπερβαίνει τα όρια ανάθεσης προέλευσης δεδομένων.

Όταν βλέπετε μια προειδοποίηση ανάθεσης σε έναν τύπο που περιλαμβάνει Patch, ελέγξτε εάν η προειδοποίηση ισχύει για τις συναρτήσεις ανάκτησης δεδομένων και όχι για Patch τον εαυτό της. Για περισσότερες πληροφορίες σχετικά με την ανάθεση, ανατρέξτε στο θέμα Κατανόηση της ανάθεσης σε μια εφαρμογή καμβά.

Συνήθη σφάλματα με τη Patch συνάρτηση

Όταν χρησιμοποιείτε τη Patch συνάρτηση, ενδέχεται να προκύψουν σφάλματα λόγω συνδεσιμότητας προέλευσης δεδομένων, δικαιωμάτων ή διενέξεων δεδομένων. Χρησιμοποιήστε τα IfError και IsError για να εντοπίσετε σφάλματα και να ανταποκριθείτε κατάλληλα.

  • "Σφάλμα δικτύου κατά τη χρήση Patch της λειτουργίας": Αυτό το σφάλμα συνήθως υποδεικνύει ότι η εφαρμογή δεν μπορεί να φτάσει στην πηγή δεδομένων. Οι συνήθεις αιτίες περιλαμβάνουν απώλεια σύνδεσης στο Διαδίκτυο, προσωρινή μη διαθεσιμότητα της προέλευσης δεδομένων ή ανεπαρκή δικαιώματα για τον τρέχοντα χρήστη. Τυλίξτε την Patch κλήση στο IfError για να δώσετε ένα ουσιαστικό μήνυμα στους χρήστες.

  • "Υπάρχουν διενέξεις με αλλαγές στον διακομιστή": Αυτό το σφάλμα παρουσιάζεται όταν ένας άλλος χρήστης ή διεργασία τροποποιεί την ίδια καρτέλα μεταξύ της στιγμής που η εφαρμογή σας διαβάζει την καρτέλα και γράφει την αλλαγή. Ανανεώστε το αρχείο προέλευσης δεδομένων καλώντας τη συνάρτηση Refresh και δοκιμάστε ξανά τη λειτουργία.

  • Σφάλματα δικαιωμάτων: Εάν ο χρήστης δεν έχει δικαίωμα δημιουργίας ή τροποποίησης καρτελών στην προέλευση δεδομένων, η Patch κλήση αποτυγχάνει. Χρησιμοποιήστε το IfError για να εντοπίσετε σφάλματα που σχετίζονται με τα δικαιώματα και να καθοδηγήσετε τον χρήστη.

Για γενικά μοτίβα χειρισμού σφαλμάτων, ανατρέξτε στην ενότητα Χειρισμός σφαλμάτων.

Χρήση του As ή του ThisRecord

Χρησιμοποιήστε τη λέξη-κλειδί As ή ThisRecord στον τύπο σας για να αποφύγετε το διφορούμενο περιβάλλον αξιολόγησης.

Στο παρακάτω παράδειγμα, εξετάστε το πρώτο Lookup στη If δήλωση. (OrderID = A[@OrderID]) αναμένεται να συγκρίνει το OrderId στο Lookup πεδίο εφαρμογής με το OrderId της συλλογής A στο ForAll πεδίο εφαρμογής. Σε αυτήν την περίπτωση, πιθανότατα θέλετε A[@OrderId] να επιλύσετε ως τοπική παράμετρο. Αλλά είναι διφορούμενο.

Power Apps ερμηνεύει επί του παρόντος τόσο την αριστερή πλευρά OrderId όσο και τη δεξιά πλευρά A[@OrderId] ως πεδίο στο πεδίο εφαρμογής Lookup. Επομένως, Lookup βρίσκει πάντα την πρώτη σειρά στο [dbo].[Orders1] επειδή η συνθήκη είναι πάντα αληθής OrderId (δηλαδή, οποιαδήποτε σειρά είναι ίση με τον εαυτό της).

ClearCollect(
    A,
    Filter(
        '[dbo].[Orders1]',
        OrderId = 8888888
    )
);
ForAll(
    A,
    If(
        LookUp(
            '[dbo].[Orders1]',
            OrderId = A[@OrderId],
            "OK"
        ) = "OK",
        Patch(
            '[dbo].[Orders1]',
            LookUp(
                '[dbo].[Orders1]',
                OrderId = A[@OrderId]
            ),
            {
      OrderName: "val1"
       }
   ),
   Patch(
            '[dbo].[Orders1]',
            Defaults('[dbo].[Orders1]'),
            {
      OrderName: "val2"
       }
   )
    )
)

Χρήση του As ή του ThisRecord

Όποτε είναι δυνατό, χρησιμοποιήστε τον τελεστή As ή τη λέξη-κλειδί ThisRecord για να αποσαφηνίσετε την αριστερή πλευρά. Όπως συνιστάται για το προηγούμενο σενάριο.

Όταν ο τύπος σας χρησιμοποιεί πολλά εύρη με ForAll, Filterκαι Lookup στην ίδια προέλευση δεδομένων ή πίνακα, οι παράμετροι εύρους ενδέχεται να συγκρούονται με ένα ίδιο πεδίο αλλού. Επομένως, χρησιμοποιήστε τον τελεστή As ή ThisRecord για να επιλύσετε το όνομα του πεδίου και να αποφύγετε την ασάφεια.

Για παράδειγμα, μπορείτε να χρησιμοποιήσετε τον τελεστή As για να αποσαφηνίσετε στο παρακάτω παράδειγμα.

ClearCollect(
    A,
    Filter(
        '[dbo].[Orders1]',
        OrderId = 8888888
    )
);
ForAll(
    A,
    If(
        LookUp(
            '[dbo].[Orders1]' As B,
            B.OrderId = A[@OrderId],
            "OK"
        ) = "OK",
        Patch(
            '[dbo].[Orders1]',
            LookUp(
                '[dbo].[Orders1]' As C,
                C.OrderId = A[@OrderId]
            ),
            {
      OrderName: "val1"
       }
   ),
   Patch(
            '[dbo].[Orders1]',
            Defaults('[dbo].[Orders1]'),
            {
      OrderName: "val2"
       }
   )
    )
)

Εναλλακτικά, μπορείτε να χρησιμοποιήσετε το ThisRecord για τον ίδιο σκοπό.

ClearCollect(
    A,
    Filter(
        '[dbo].[Orders1]',
        OrderId = 8888888
    )
);
ForAll(
    A,
    If(
        LookUp(
            '[dbo].[Orders1]',
            ThisRecord.OrderId = A[@OrderId],
            "OK"
        ) = "OK",
        Patch(
            '[dbo].[Orders1]',
            LookUp(
                '[dbo].[Orders1]',
                ThisRecord.OrderId = A[@OrderId]
            ),
            {
      OrderName: "val1"
       }
   ),
   Patch(
            '[dbo].[Orders1]',
            Defaults('[dbo].[Orders1]'),
            {
      OrderName: "val2"
       }
   )
    )
)

Για να μάθετε περισσότερα σχετικά με τη χρήση του τελεστή As και του τελεστή ThisRecord, ανατρέξτε στο άρθρο Τελεστές .