Webservice - create fügt nicht alles ein

23. April 2009 15:31

Hi,
ich bin da auf ein Problem im Umgang mit den NAV 2009 Webservices gestossen und weiß im Moment nicht mehr so recht weiter.

Situation:
Ich habe eine NAV 2009 Seite als Webservice freigegeben. Dabei handelt es sich um das "Istmeldungs Buchungsblatt" (oder auch Output Journal, ID 99000823) aus dem Bereich Produktion/Auftragssteuerung.

Mittels der Create-Methode des Webservices möchte ich nun in einem C#-Programm eine Zeile neu anlegen. Das funktioniert auch soweit, nur erhalten nicht alle Felder der Zeile die Werte, die ich im Programm zugewiesen habe. Speziell die Felder "Fertig gestellte Menge" (Output_Quantity) und "Ausschussmenge" (Scrap_Quantity) erhalten immer den Wert 0, egal was ich ihnen im Programm als Wert zuweise.

Hier mal ein Codefragment zur Veranschaulichung:
Code:
Output_Journal_Service ojs = new Output_Journal_Service();
ojs.UseDefaultCredentials = true;
Output_Journal oj = new Output_Journal();
...
oj.Posting_Date = DateTime.Today;  // Dieser Wert und die meisten anderen tauchen später korrekt im Buchungsblatt auf
...
oj.Output_Quantity = 42; // Egal was ich hier zuweise, im Buchungsblatt steht immer 0
oj.Scrap_Quantity = 2; // hier genauso
...
ojs.Create("STANDARD", ref oj);


Ich habe außerdem während des Programmlaufs mal den SQL Profiler mitlaufen lassen, um zu sehen was die NAV Webservices auf der Datenbank machen.
Im Wesentlichen führt der Webservice zunächst einen SQL Insert auf der Tabelle "Item Journal Line" durch, wobei alle Felder zunächst mit Standard-Werten belegt werden.

Dann folgt einSQL Update auf die selbe Zeile, erst hier werden dann die Werte gesetzt, die ich im Programm zugewiesen habe. Allerdings wiederum mit Ausnahme der oben aufgeführten Felder. Die tauchen nur im Insert auf (dort werden sie mit Standard-Werten belegt), im Update fehlen sie hingegen ganz. Dadurch ist klar, warum die fraglichen Felder immer den Wert 0 erhalten, nur stellt sich mir weiterhin die Frage, wie bekomme ich diese Werte doch noch eingetragen?

Ist das ein bekannter Bug? Oder gibt es beim Ausführen der Create-Methode noch irgendwas zu beachten, was mir bisher entgangen ist?
Zuletzt geändert von Stefan_M am 24. April 2009 08:41, insgesamt 1-mal geändert.

Re: Webservice - create fügt nicht alles ein

24. April 2009 07:53

Hallo,

hast du mal nach alter Navision Taktik versucht die Felder in NAV von Hand einzugeben und zwar genau in der gleichen Reihenfolge und mit den gleichen Werten, wie du Sie in deinem Programm zuweist?

NAV hat auch in der normalen Umgebung die Angewohnheit durch Nebeneffekte von Validates Felder wieder zu löschen, die man vorher schon mal zugewiesen hat :wink:

Gruß, Fiddi

Re: Webservice - create fügt nicht alles ein

24. April 2009 08:25

fiddi hat geschrieben:hast du mal nach alter Navision Taktik versucht die Felder in NAV von Hand einzugeben und zwar genau in der gleichen Reihenfolge und mit den gleichen Werten, wie du Sie in deinem Programm zuweist?

Zufälligerweise (also ohne das ich mir dieser alten Navision Taktik bewusst war ;)) werden die Werte im Program tatsächlich in genau der gleichen Reihenfolge zugewiesen, wie ich sie auch von Hand direkt in NAV eingeben würde.

Wenn die gleichen Werte direkt ins Istmeldungsbuchungsblatt eingegeben werden, dann werden sie auch korrekt in die DB übernommen. Nur bei Übergabe aus meinem Programm werden die fraglichen Werte auf 0 gesetzt.
fiddi hat geschrieben:NAV hat auch in der normalen Umgebung die Angewohnheit durch Nebeneffekte von Validates Felder wieder zu löschen, die man vorher schon mal zugewiesen hat :wink:

Was hat es mit diesem "Validates" auf sich? Kann ich dazu irgendwelche weitergehenden Informationen finden?

Re: Webservice - create fügt nicht alles ein

24. April 2009 14:05

Hi, ich bin mit ein bisschen Hilfe auf die Lösung gestoßen.
Mein Code musste in dieser Art abgeändert werden:
Code:
            Output_Journal_Service ojs = new Output_Journal_Service();
            ojs.UseDefaultCredentials = true;
            Output_Journal oj = new Output_Journal();
            ...
            oj.Posting_Date = DateTime.Today;
            ...
            ojs.Create("STANDARD", ref oj);
            ...
            oj.Output_Quantity = 42;
            oj.Scrap_Quantity = 2;
            ...
            ojs.Update("STANDARD", ref oj);

Einige Felder können offenbar schon mit dem Create-Befehl befüllt werden. Andere erst über ein Update-Statement.

Re: Webservice - create fügt nicht alles ein

24. April 2009 14:18

Könnte ein Auswuchs des NAV-Standards sein.
NAV legt bei Forms/Pages beim Einfügen eines neuen Datensatzes zunächst den Datensatz nur mit den gefüllten Primärschlüsseln in der Datenbank ab. Die eigentlichen Daten werden dann später mit einem Update in die DB geschrieben.

Gruß, Fiddi