Κοινοποίηση μέσω


Ενημέρωση και διαγραφή γραμμών πίνακα με χρήση του Web API

Οι λειτουργίες που τροποποιούν δεδομένα αποτελούν βασικό τμήμα του Web API. Εκτός από απλές λειτουργίες ενημέρωσης και διαγραφής, μπορείτε να εκτελέσετε λειτουργίες σε μεμονωμένες στήλες πίνακα (χαρακτηριστικά οντότητας) και να συντάξετε αιτήσεις upsert που ενημερώνουν ή εισάγουν δεδομένα ανάλογα με το αν υπάρχουν.

Βασική ενημέρωση

Οι λειτουργίες ενημέρωσης χρησιμοποιούν το ρήμα HTTP PATCH . Διαβιβάστε ένα αντικείμενο JSON που περιέχει τις ιδιότητες που θέλετε να ενημερώσετε στο URI που αντιπροσωπεύει την εγγραφή. Εάν η ενημέρωση είναι επιτυχής, η απόκριση επιστρέφει μια κατάσταση 204 No Content.

Η If-Match: * κεφαλίδα εξασφαλίζει ότι δεν θα δημιουργήσετε μια νέα εγγραφή εκτελώντας κατά λάθος μια λειτουργία upsert. Για περισσότερες πληροφορίες, ανατρέξτε στο θέμα Αποτροπή δημιουργίας σε upsert.

Σημαντικό

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

Όταν ενημερώνετε την statecode ιδιότητα, ορίστε πάντα την επιθυμητή statuscode. Οι statecode τιμές και statuscode εξαρτώνται η μία από την άλλη. Για μια δεδομένη statecode τιμή, μπορεί να υπάρχουν πολλές έγκυρες statuscode τιμές. Ωστόσο, κάθε statecode στήλη έχει ρυθμίσει μία μόνο τιμή DefaultStatus . Όταν κάνετε ενημέρωση statecode χωρίς να καθορίζετε , statuscodeτο σύστημα ορίζει την προεπιλεγμένη τιμή κατάστασης. Επίσης, εάν ενεργοποιήσετε τον έλεγχο στον πίνακα και τη statuscode στήλη, η τιμή που άλλαξε για τη statuscode στήλη δεν καταγράφεται στα δεδομένα ελέγχου, εκτός εάν την καθορίσετε στη λειτουργία ενημέρωσης.

Σημείωμα

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

Αυτό το παράδειγμα ενημερώνει μια υπάρχουσα εγγραφή λογαριασμού με την accountid τιμή 00000000-0000-0000-0000-00000000000001.

Αίτηση:

PATCH [Organization URI]/api/data/v9.2/accounts(00000000-0000-0000-0000-000000000001) HTTP/1.1  
Content-Type: application/json  
OData-MaxVersion: 4.0  
OData-Version: 4.0
If-Match: *  
  
{  
    "name": "Updated Sample Account ",  
    "creditonhold": true,  
    "address1_latitude": 47.639583,  
    "description": "This is the updated description of the sample account",  
    "revenue": 6000000,  
    "accountcategorycode": 2  
}  

Απάντηση:

HTTP/1.1 204 No Content  
OData-Version: 4.0  
  

Σημείωμα

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

Ενημέρωση με τα δεδομένα που επιστρέφονται

Για να ανακτήσετε δεδομένα από μια οντότητα που ενημερώνετε, συντάξτε την αίτησή σας PATCH , έτσι ώστε να επιστρέφει δεδομένα από την ενημερωμένη εγγραφή με κατάσταση 200 (OK). Για να λάβετε αυτό το αποτέλεσμα, χρησιμοποιήστε την κεφαλίδα αίτησης Prefer: return=representation .

Για να ελέγξετε ποιες ιδιότητες επιστρέφονται, προσαρτήστε την $select επιλογή ερωτήματος στη διεύθυνση URL για το σύνολο οντοτήτων. Η $expand επιλογή ερωτήματος παραβλέπεται εάν χρησιμοποιηθεί.

Αυτό το παράδειγμα ενημερώνει μια οντότητα λογαριασμού και επιστρέφει τα δεδομένα που ζητήθηκαν στην απόκριση.

Αίτηση:

PATCH [Organization URI]/api/data/v9.2/accounts(00000000-0000-0000-0000-000000000001)?$select=name,creditonhold,address1_latitude,description,revenue,accountcategorycode,createdon HTTP/1.1  
OData-MaxVersion: 4.0  
OData-Version: 4.0  
Accept: application/json  
Content-Type: application/json; charset=utf-8  
Prefer: return=representation
If-Match: * 
  
{"name":"Updated Sample Account"}  

Απάντηση:

HTTP/1.1 200 OK  
Content-Type: application/json; odata.metadata=minimal  
Preference-Applied: return=representation  
OData-Version: 4.0  
  
{  
    "@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts/$entity",  
    "@odata.etag": "W/\"536537\"",  
    "accountid": "00000000-0000-0000-0000-000000000001",  
    "accountcategorycode": 1,  
    "description": "This is the description of the sample account",  
    "address1_latitude": 47.63958,  
    "creditonhold": false,  
    "name": "Updated Sample Account",  
    "createdon": "2016-09-28T23:14:00Z",  
    "revenue": 5000000.0000,  
    "_transactioncurrencyid_value": "048dddaa-6f7f-e611-80d3-00155db5e0b6"  
}  
  

Ενημέρωση πολλών εγγραφών σε μία μόνο αίτηση

Ο ταχύτερος τρόπος για να ενημερώσετε πολλές εγγραφές του ίδιου τύπου σε μία αίτηση είναι να χρησιμοποιήσετε την ενέργεια UpdateMultiple. Δεν υποστηρίζουν όλοι οι τυπικοί πίνακες αυτή την ενέργεια, αλλά όλοι οι ελαστικοί πίνακες το υποστηρίζουν.

Περισσότερες πληροφορίες:

Ενημέρωση μεμονωμένης τιμής ιδιότητας

Για να ενημερώσετε μια μοναδική τιμή ιδιότητας, χρησιμοποιήστε μια PUT αίτηση και προσθέστε το όνομα ιδιότητας στο Uri της οντότητας.

Το παρακάτω παράδειγμα ενημερώνει την name ιδιότητα μιας υπάρχουσας account γραμμής με την accountid τιμή 00000000-0000-0000-0000-000000000001.

Αίτηση:

PUT [Organization URI]/api/data/v9.2/accounts(00000000-0000-0000-0000-000000000001)/name HTTP/1.1  
Content-Type: application/json  
OData-MaxVersion: 4.0  
OData-Version: 4.0  
  
{"value": "Updated Sample Account Name"}  

Απάντηση:

HTTP/1.1 204 No Content  
OData-Version: 4.0  
  

Διαγραφή μεμονωμένης τιμής ιδιότητας

Για να διαγράψετε την τιμή μιας μεμονωμένης ιδιότητας, χρησιμοποιήστε μια DELETE αίτηση με το όνομα ιδιότητας προσαρτημένο στο URI της οντότητας.

Το παρακάτω παράδειγμα διαγράφει την τιμή της description ιδιότητας μιας οντότητας λογαριασμού με την accountid τιμή 00000000-0000-0000-0000-000000000001.

Αίτηση:

DELETE [Organization URI]/api/data/v9.2/accounts(00000000-0000-0000-0000-000000000001)/description HTTP/1.1  
Content-Type: application/json  
OData-MaxVersion: 4.0  
OData-Version: 4.0  

Απάντηση:

HTTP/1.1 204 No Content  
OData-Version: 4.0  
  

Σημείωμα

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

Εισαγωγή ή ενημέρωση γραμμής πίνακα

Μια λειτουργία upsert είναι παρόμοια με μια ενημέρωση. Χρησιμοποιεί μια PATCH αίτηση και χρησιμοποιεί ένα URI για αναφορά σε μια συγκεκριμένη εγγραφή. Η διαφορά είναι ότι εάν η εγγραφή δεν υπάρχει, δημιουργείται. Εάν υπάρχει ήδη, ενημερώνεται.

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

Μπορείτε να δείτε οποιαδήποτε εναλλακτικά κλειδιά που έχουν οριστεί για έναν πίνακα στα σχόλια για τον τύπο οντότητας στο έγγραφο $metadata υπηρεσίας. Περισσότερες πληροφορίες: Εναλλακτικά κλειδιά.

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

Αίτηση:

PATCH [Organization URI]/api/data/v9.2/sample_things(sample_key1=1,sample_key2=1) HTTP/1.1
Accept: application/json 
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Content-Type: application/json

{
    "sample_name": "1:1"
}

Για αμφότερες τις λειτουργίες δημιουργίας ή ενημέρωσης, λαμβάνετε την ίδια απόκριση. Παρατηρήστε πώς η OData-EntityId κεφαλίδα απόκρισης χρησιμοποιεί τις τιμές κλειδιού αντί για το αναγνωριστικό πρωτεύοντος κλειδιού GUID για την εγγραφή.

Απάντηση:

HTTP/1.1 204 No Content
OData-Version: 4.0
OData-EntityId: [Organization URI]/api/data/v9.2/sample_things(sample_key1=1,sample_key2=1)

Επειδή η απόκριση είναι ίδια, δεν μπορείτε να γνωρίζετε εάν η λειτουργία αναπαριστούν μια Create λειτουργία ή Update .

Εάν θέλετε να γνωρίζετε, μπορείτε να χρησιμοποιήσετε την Prefer: return=representation κεφαλίδα αίτησης. Με τη χρήση αυτής της κεφαλίδας, λαμβάνετε μια 201 Created απάντηση όταν δημιουργείται μια εγγραφή και μια 200 OK απόκριση όταν ενημερώνεται η εγγραφή. Αυτή η επιλογή προσθέτει μια Retrieve λειτουργία, η οποία έχει επιπτώσεις στις επιδόσεις. Εάν χρησιμοποιείτε την Prefer: return=representation κεφαλίδα αίτησης, βεβαιωθείτε ότι $select περιλαμβάνει τον ελάχιστο όγκο δεδομένων, κατά προτίμηση μόνο τη στήλη πρωτεύοντος κλειδιού. Περισσότερες πληροφορίες: Ενημέρωση με τα δεδομένα που επιστρέφονται και Δημιουργία με τα δεδομένα που επιστρέφονται.

Όταν χρησιμοποιείτε εναλλακτικά κλειδιά, μην συμπεριλάβετε τις εναλλακτικές τιμές κλειδιών στο σώμα της αίτησης.

  • Όταν μια upsert αντιπροσωπεύει ένα Update, αυτές οι εναλλακτικές τιμές κλειδιών παραβλέπονται. Δεν μπορείτε να ενημερώσετε τις εναλλακτικές τιμές κλειδιών ενώ τις χρησιμοποιείτε για τον προσδιορισμό της εγγραφής.
  • Όταν μια upsert αντιπροσωπεύει ένα Create, οι τιμές κλειδιού στη διεύθυνση URL ορίζονται για την εγγραφή, εάν δεν είναι παρούσες στο σώμα. Επομένως, δεν χρειάζεται να τις συμπεριλάβετε στο σώμα της αίτησης.

Περισσότερες πληροφορίες: Χρήση Upsert για δημιουργία ή ενημέρωση μιας εγγραφής

Σημείωμα

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

Αποτροπή δημιουργίας ή ενημέρωσης με upsert

Ορισμένες φορές, θέλετε να εκτελέσετε μια upsert αλλά αποτρέψετε μία από τις πιθανές λειτουργίες: είτε δημιουργία, είτε ενημέρωση. Μπορείτε να αποτρέψετε αυτές τις λειτουργίες χρησιμοποιώντας τις If-Match κεφαλίδες ή If-None-Match . Για περισσότερες πληροφορίες, ανατρέξτε στο θέμα Περιορισμός λειτουργιών upsert.

Βασική διαγραφή

Μια λειτουργία διαγραφής είναι απλή. Χρησιμοποιήστε το DELETE ρήμα με το URI της οντότητας που θέλετε να διαγράψετε. Αυτό το παράδειγμα μηνύματος διαγράφει μια οντότητα λογαριασμού με την τιμή πρωτεύοντος κλειδιού accountid ίση 00000000-0000-0000-0000-000000000001με .

Αίτηση:

DELETE [Organization URI]/api/data/v9.2/accounts(00000000-0000-0000-0000-000000000001) HTTP/1.1  
Content-Type: application/json  
OData-MaxVersion: 4.0  
OData-Version: 4.0  

Απάντηση:

Εάν η οντότητα υπάρχει, λαμβάνετε μια κανονική απόκριση με κατάσταση 204 για να υποδείξετε ότι η διαγραφή ολοκληρώθηκε με επιτυχία. Εάν η οντότητα δεν βρεθεί, λαμβάνετε μια απάντηση με κατάσταση 404.

HTTP/1.1 204 No Content  
OData-Version: 4.0  

Έλεγχος για διπλότυπες εγγραφές

Για περισσότερες πληροφορίες σχετικά με τον τρόπο ελέγχου για διπλότυπες εγγραφές κατά τη διάρκεια μιας λειτουργίας ενημέρωσης, ανατρέξτε στο θέμα Εντοπισμός διπλότυπων κατά τη λειτουργία ενημέρωσης χρησιμοποιώντας το Web API.

Διαγραφή πολλών εγγραφών σε μία μόνο αίτηση

Για να διαγράψετε πολλές εγγραφές του ίδιου τύπου σε μία μόνο αίτηση, χρησιμοποιήστε την DeleteMultiple ενέργεια. Οι τυπικοί πίνακες δεν το υποστηρίζουν αυτό, DeleteMultiple αλλά όλοι οι ελαστικοί πίνακες το υποστηρίζουν.

Σημείωμα

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

Περισσότερες πληροφορίες:

Ενημέρωση και διαγραφή εγγράφων σε διαμερίσματα χώρου αποθήκευσης

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

Περισσότερες πληροφορίες: Επιλογή τιμής PartitionId

Δείτε επίσης

Δείγμα βασικών λειτουργιών web API (C#)
Δείγμα βασικών λειτουργιών web API (JavaScript από την πλευρά του προγράμματος-πελάτη)
Εκτέλεση λειτουργιών με χρήση του Web API
Σύνταξη αιτήσεων Http και χειρισμός σφαλμάτων
Υποβολή ερωτημάτων για δεδομένα με χρήση του Web API
Δημιουργία γραμμής πίνακα με χρήση του API Web
Ανάκτηση γραμμής πίνακα με χρήση του API Web
Συσχέτιση και κατάργηση συσχέτισης γραμμών πίνακα με χρήση του API Web
Χρήση συναρτήσεων Web API
Χρήση ενεργειών Web API
Εκτέλεση λειτουργιών δέσμης με χρήση του Web API
Μίμηση άλλου χρήστη χρησιμοποιώντας το Web API
Εκτέλεση λειτουργιών υπό όρους με χρήση του Web API