[Gelöst] ODATA NAV 2013 R2 DELETE

4. Januar 2014 15:24

Hallo,
ich versuche gerade, aus einer anderen Anwendung via ODATA Webservice mit NAV 2013 R2 zu kommunizieren. Das Lesen über ODATA funktioniert schon sehr gut genauso wie das Anlegen neuer Datensätze. Ich habe jedoch Probleme damit, vorhandene Datensätze zu ändern oder zu löschen. Laut Microsoft wird eine Delete folgendermaßen aufgebaut:
$no = '11000';
$Result = Invoke-RestMethod -Method Get -UseDefaultCredential -Uri "https://localhost:7048/NAV/OData/CustomerCard('$no')"
$etag = $Result.entry.content.properties.ETag
$ifmatchheader = @{"If-Match"="W/""'$etag'"""}
Invoke-RestMethod -Method Delete -UseDefaultCredential -Uri "https://localhost:7048/NAV/OData/CustomerCard('$no')" -Headers $ifmatchheader


Wenn ich diesen absende, bekomme ich immer den Status 412 zurück. Dies lässt vermuten, dass die „If-Match" Anweisung nicht richtig ist. Mit Hilfe von fiddler2 habe das ganze mal mitgeschnitten:
<!doctype html>
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Fiddler Echo Service</title></head><body style="font-family: arial,sans-serif;"><h1>Fiddler Echo Service</h1><br /><pre>DELETE /DynamicsNAV71/OData/Company(&#39;CRONUS%20AG&#39;)/CustomerCard(&#39;D00018&#39;) HTTP/1.1
Host: xxx.xxx.xxx.xx:7048
Content-Type: application/json;odata=verbose
User-Agent: Easy_Nav_Connector/1.0 CFNetwork/672.0.8 Darwin/13.0.0
Content-Length: 0
Connection: keep-alive
ifmatchheader: If-Match:&quot;W/&quot;&#39;32%3BEgAAAAJ7%2F0QAMAAwADAAMQA4AAAAAAA%3D6%3B4949920%3B&#39;&quot;&quot;
Accept: application/json;odata=verbose
Accept-Language: en-us
no: D00018
Accept-Encoding: gzip, deflate
Etag: W/&quot;&#39;32%3BEgAAAAJ7%2F0QAMAAwADAAMQA4AAAAAAA%3D6%3B4949920%3B&#39;&quot;

</pre>This page returned a <b>HTTP/200</b> response <br /><hr /><ul><li>To configure Fiddler as a reverse proxy instead of seeing this page, see <a href='http://fiddler2.com/r/?REVERSEPROXY'>Reverse Proxy Setup</a><li>You can download the <a href="FiddlerRoot.cer">FiddlerRoot certificate</a></ul></body></html>


Nachdem ich nun schon stundenlang versucht habe, den Fehler zu finden, hoffe ich, dass ihr helfen könnt......
Zuletzt geändert von NilsE am 5. Januar 2014 16:38, insgesamt 1-mal geändert.

Re: ODATA NAV 2013 R2 DELETE

4. Januar 2014 16:54

Hallo Nils,

leider ist die Rückmeldung von Fiddler nicht aussagekräftig.

Ich habe deinen PowerShell-Aufruf mit der Demo-Installation von Dynamics NAV 2013 R2 probiert. Dabei habe ich vorher auf der Page Web Services folgenden Eintrag hinterlegt:
Code:
Objektart  Objekt-ID  Objektname       Servicename     Veröffentlicht
Page       21         Debitorenkarte   CustomerCard    Ja


Bei mir hat folgender Aufruf für den neuangelegten Debitor D00020 auf Anhieb geklappt. Anschließend kam wieder der PowerShell-Prompt.
Code:
PS C:\Users\dago> $no = 'D00020';
$Result = Invoke-RestMethod -Method Get -UseDefaultCredential -Uri "http://localhost:7048/DynamicsNAV71/OData/CustomerCard('$no')"
$etag = $Result.entry.content.properties.ETag
$ifmatchheader = @{"If-Match"="W/""'$etag'"""}
Invoke-RestMethod -Method Delete -UseDefaultCredential -Uri "http://localhost:7048/DynamicsNAV71/OData/CustomerCard('$no')" -Headers $ifmatchheader

PS C:\Users\dago>

Jedoch habe ich einen anderen Instanzname (DynamicsNAV71 statt NAV) verwendet und http statt https. Ich bin mir jedoch bewusst, dass man die Instanz auch mit HTTPS konfigurieren kann und dann verwenden sollte.

Ich habe zusätzlich probiert einen Kunden zu löschen, der bereits Aufträge und Posten hat. Dann erhält man folgende Rückmeldung, dass dies nicht möglich ist:
Code:
Invoke-RestMethod : <?xml version="1.0" encoding="utf-8"?><m:error xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"><m:code
/><m:message xml:lang="en-US">Microsoft Dynamics NAV Data Services attempted to issue a client callback to show a confirmation dialog box: Deleting the
Customer 10000 will cause the Customer No. to be deleted for the associated Service Items. Do you want to continue? (Table 18 Customer). Client callbacks
are not supported on Microsoft Dynamics NAV Data Services.</m:message></m:error>
[..]


Weiterhin bekommt man folgende Meldung, wenn man versucht einen nicht existierenden Kunden zu löschen:
Code:
Invoke-RestMethod : <?xml version="1.0" encoding="utf-8"?><m:error xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"><m:code
/><m:message xml:lang="en-US">Resource not found for the segment 'CustomerCard'.</m:message></m:error>
[..]

Re: ODATA NAV 2013 R2 DELETE

5. Januar 2014 16:37

Hi Daniel,
erst mal vielen vielen Dank.....
ich habe meinen Fehler nun auch gefunden
Code:
ifmatchheader: If-Match:&quot;W/&quot;&#39;32%3BEgAAAAJ7%2F0QAMAAwADAAMQA4AAAAAAA%3D6%3B4949920%3B&#39;&quot;&quot;

das ist falsch es muss so sein:
Code:
If-Match: W/&quot;&#39;32%3BEgAAAAJ7%2F0QAMAAwADAAMQA4AAAAAAA%3D6%3B4949920%3B&#39;&quot


es war also nur die Feldbezeichnung für If-Match falsch :-D
Danke noch mal.....