6. Dezember 2018 04:31
Hallo @ all,
ich habe ein kleines Problem mit dem modifizieren vorhandener Verkaufspreise.
Ich habe die Page 7002 freigegeben und möchte eigentlich eine ganz einfache Sache machen.
Der Preis wird extern kalkuliert und hier dann eingefügt (das funktioniert soweit ohne Probleme neue Preise einzufügen).
Vorhandene Preise die nicht mehr korrekt sind sollen dann modifiziert werden.
Das Start- und das Enddatum soll verändert werden, dass es vor dem neuen Preis abgelaufen ist und somit nicht mehr gültig man aber immer noch eine Historie hat welche Preise vorher aktiv waren.
Die Logik dafür habe ich schon geschrieben und alles ist super bis zu dem Moment, wenn ich das ganze senden möchte.
Zum Aufbau kurz.
Ich benutze die ODATA-Verbindung in einer WPF-Anwendung die ich mit Visual Studio programmiere.
Dafür benutze ich die ODataLib. Hier der Link zu der aktuellen Version:
https://www.nuget.org/packages/Microsoft.Data.OData/Die ODataLib erstellt mir automatisch alle Classen und Methoden zum Einfügen, Löschen und Updaten der Objekte.
Ich habe nun 2 Probleme.
Problem 1.
Der Filter auf "Sales_Code" wird komplett ignoriert. Es kommt kein Fehler somit stimmt die Syntax es wird aber nicht gefiltert und auch nur bei dem Feld.
Man kann da eintragen was auch immer man möchte man bekommt immer die Preise für alle Kunden zugesendet. Der Filter davor und danach wird berücksichtig.
Hier mal eine Beispiel-Uri:
http://Server:7053/NAV2016/OData/Company('DieFirma')/Verkaufspreise()?$filter=Item_No eq 'XXX' and Sales_Code eq '12345' and Minimum_Quantity ge 0
Problem 2.
Nachdem ich die vorhandene Preise modifiziert habe bekomme ich komische Meldungen beim Senden an den Server.
Ich habe es zuerst mit einer DataServiceCollection probiert.
Da ist dann folgende Meldung gekommen:
- Code:
<?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">The filter "=1/2/0001 12:00:00 AM" is not valid for the Starting Date field on the Sales Price table. The value "1/2/0001 12:00:00 AM" can't be evaluated into type Date.</m:message></m:error>
Ich dachte mir dann ok. Vielleicht gibt es Probleme mit der Collection.
Also bin ich hin und habe eine Schleife geschrieben die jedes Objekt einzeln speichert.
Hier ein kleines Beispiel zur Veranschaulichung:
- Code:
List<Verkaufspreise> salesPrices = new List<Verkaufspreise>();
Dann wir die Liste mit den vorhandenen Verkaufspreisen aus der NAV-Datenbank gefüllt.
Das Start- und Enddatum wird modifiziert und danach kommt die Schleife.
- Code:
foreach (var p in salesPrices)
{
navContext.UpdateObject(p);
navContext.SaveChanges(SaveChangesOptions.PatchOnUpdate);
}
Da bekomme ich aber einen ganz anderen Fehler:
- Code:
<?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">No Currency within the filter ''.</m:message>
</m:error>
Ich habe keine Ahnung wieso das System da „Currency“ verlangt. So ein Feld gibt es nicht. Es gibt nur Currency_Code und das ist leer und soll auch leer bleiben.
Ich habe mir auch den generierten Code von Visual Studio angeschaut es gibt nirgends eine Verwendung des Wortes „Currency“.
Um es noch zu vervollständigen hier noch der Code zum Einfügen eines neuen Preises.
Dieser Funktioniert ohne Probleme:
- Code:
Verkaufspreise verkaufspreis = new Verkaufspreise
{
Item_No = itemNumber,
Sales_Code = customerNumber,
Unit_Price = price,
Minimum_Quantity = quantity,
Unit_of_Measure_Code = itemBaseUnit,
Sales_Type = "Customer",
Starting_Date = DateTime.Now
};
navContext.AddToVerkaufspreise(verkaufspreis);
navContext.SaveChanges();
Meine Frage ist nun.
Kann evtl. jemand bei sich mal kurz die Page 7002 Freigeben und versuchen dort die Werte zu ändern?
Vielleicht kennt ja auch jemand das Problem mit Update und ODATA?
Evtl. ist auch etwas mit der Page nicht in Ordnung da das Filtern wie in Problem 1 beschrieben nicht richtig funktioniert. Das kann ja jeder kurz im Browser testen, wenn er möchte.
Ich hoffe ich konnte das Problem einigermaßen verständlich schildern.
Besten Dank im Voraus an alle.