Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: AC am 18.02.04 - 17:24:30
-
Hi Leute,
hat jemand eine Ahnung was Datumsproblem mit 29.2.2004 auf AS/400 angeht in Verbindung mit Scriptfunction datevalue?
Folgendes Umfeld:
Selbstgeschriebener LS - Serveragent läuft in einer Anwendung.
Ging jetzt 3 Jahre problemlos und die Woche hats gescheppert.
Im log steht illegal function call.
Hab mir dann das Dokument angesehen bei dem es vermeintlich kracht und mir fiel das Datum dort drin auf.
Mit Printanweisungen habe ich mich dann durch den Quelltext gehangelt und mir im Log angesehen an welcher Stelle es scheppern muß.
Richtig. Beim Datum das ich seit 3 Jahren mit Datevalue mir zusammensetze.
Die Printanweisung davor steht noch im log, die Priintanweisung danach nicht mehr.
Sch***
Dominoversion ist 5.06a und läuft auf AS/400.
Weiß jemand etwas ? Bug ?
Helfen neuere Server-Versionen ?
Danke schonmal. Gruß. Alexander
-
Füttere uns doch mal mit etwas Quellcode - selbst Microsoft veröffentlich den ;D
Andreas
-
Das mit dem 29.02.2004 scheint für die AS/400 tatsächlich ein Problem zu sein, so das Ergebnis meines googelns.
Das kommt dann noch auf uns zu:
http://www.iee.org/Policy/Areas/it/practice/problemdates/index.cfm (http://www.iee.org/Policy/Areas/it/practice/problemdates/index.cfm)
Andreas
-
Hallo Andreas,
nett, daß Du (wie fast immer) antwortest.
Am Quellcode liegts nicht (wette ich ... einen sixpacvk Bier).
Weil:
Der Agent läuft täglich auf hunderte von Dokumenten seit fast drei Jahren !!!
Ohne Erklärung wirds auch nicht viel helfen, aber bitteschön.
Ich bastel mir aus 4 Feldern wie sie via LEI kommen einen Datumswert zusammen. (jj für Jahr, mm für monat, tt für tag und jh für jahrhundert).
Print "jetzt lidat berechnen bis"
'// Lieferterminbisdatum berechnen
If sdoc.lbtta1(0) <> 0 And sdoc.lbmma1(0) <> 0 Then
einstelligLb = "0" + Cstr(sdoc.LBJJA1(0))
zweistelliglB = Cstr(sdoc.LBJJA1(0))
If sdoc.LBJJA1(0) < 10 Then
mjlb = einstelliglv
Else
mjlb = zweistelliglv
End If
lieferterminbis = Datevalue(Cstr(sdoc.lbmma1(0))+"/"+ Cstr(sdoc.lbtta1(0))+"/"+ Cstr(sdoc.lbjha1(0)) + mjlb)
End If
Print "jettzt kundendaten schreiben"
Im log seh ich noch die erste printanweisung, die zweite nicht mehr.
Also MUSS es am Datevalue scheitern.
Ich nehme an, daß es ein Serverbug ist.
Wenn keiner hier was weiß:
Das einzige was ich dann noch sehe, daß ich die Stammdaten (Liefer bis Datum) ändere.
Mit SQL auf der AS/400 in Db2 mir die Einträge mir 29.2.2004 zusammensuchen
Das Datum auf 28.2.2004 ändere. LEI dann wieder anwerfe und dann meinen Agenten nochmal laufen lasse.
Muß mir dann aber noch das OK holenb, die Stammdaten im Auftragssystem aufd er AS/400 zu ändern. <grmpf>
Gruß, Holcomb
-
Andreas, danke für den Link . Werde ich gleich ansehen.
Mit welchen Begriffen hast Du da gesucht ?
Ich hab auf lotus.com und in der knowl4edgebase mal gesucht.
Gruß, holcomb
-
Also, ich habe mal gesucht nach: AS/400, february 29, leap year
Ergebnis:
http://www-912.ibm.com/a_dir/as4ptf.NSF/0/b81ad40fe5d2fdc8862567650062bcf0?OpenDocument (http://www-912.ibm.com/a_dir/as4ptf.NSF/0/b81ad40fe5d2fdc8862567650062bcf0?OpenDocument)
Kapier ich zwar nicht - die AS/400 Leute aber wahrscheinlich.
Vielleicht gibt es einen Patch für die AS/400, den ihr noch nicht eingespielt habt. Du solltest mal mit Eurem Rechenzentrum Kontakt aufnehmen - oder wo immer die AS/400 steht.
Andreas
-
Sieh mal hier
http://www-912.ibm.com/a_dir/as4ptf.nsf/as4ptfhome (http://www-912.ibm.com/a_dir/as4ptf.nsf/as4ptfhome)
und suche nach "leap year".
Andreas
-
Abend Glombi,
kurze Antwort noch (nein nicht aus Büro, zu Hause und Frau & Tochter sind bereits im Bett).
Es ist kein AS/400 Problem sondern ein Domino Prob.
Die Maschine selbst hat ja kein Problem mit 29.2.2004
Ich nehme mal an, daß es nur in einigen Versionen und vielleicht auch nur in Kombination mitd er AS/400 und der Scriptfunktion datevalue auftritt, sonst wäre es bestimmt schon leichter auffindbar mit ner web recherche.
Demnächst werde ich endlich mal die Dominobversion updaten.
Morgen sollte ich mehr wissen, da ich tatsächlich (vielleicht zuerst in einer Test DB Kopie) bei den betroffenen Dokumenten auf 28.2. umstellen werde.
Wenn es dann geht, isses klar, daß es ein Bug ist.
Grüße , Holcomb
Wie sagte mein Exkollege immer. Aber Hauptsache WAP geht ;-))
-
It´s a bug :-(
Mit 28.2.2004 als Datum gings, mit 29.2.2004 bringt mir datevalue wenn es in einem Agenten auf dem Server (AS/400 mit Domino 5.06) läuft einen illegal function call.
Und ich muß jetzt jeden Datumswert den ich mir für Notes zusammenbaue (Auftragdsdatum, Lieferscheindatum, Liefervondatum, Lieferbisdatum, Rechnungsdatum .... ) den 29.2. ausschliessen.
Werden demnächst mal den Server updaten und sehen obs mit höheren Versionen auch die Probleme gibt.
Wenn jemand noch was weiß, was ich sonst tun kann, raus damit.
Merci . Frustrierte Grüße, Holcomb
-
Wens interessiert.
Letztes posting zu dem Thema.
Das Prob hat mich doch nicht in Ruhe gelassen und ich habe weiter getestet mit nem Agenten der am Server läuft und probiert.
Ich konnte den Fehler nicht nochmal herbei zwingen.
An anderer Stelle hat es mit Datevalue udn dem 29.2. geklappt.
Also ist es doch kein genereller bug was 29.2 angeht,
Fest steht aber, daß der Agent gestern ausstieg und zwar genau an der Stelle.
Fehlerhafte Daten als Ursache scheiden eigentlich auch aus, da die Felder die ich mit dem Agenten auslese via LEI aus einer DB auslese und da nur "richtige" Daten herüber kommen können (weil die AS/400 Anwendung nur korrekte EIngaben zulässt).
An die Originaldaten komme ich nicht mehr heran, da ich ja mit SQL auf der Datenbank das Datum 29.2.2004 durch 28.2.2004 ersetzt habe.
Es wird also solange ein Geheimnis bleiben, bis der Fehler wieder auftritt (wenn überhaupt).
Strange das ganze.
Gruß Holcomb - und fertig
-
Was ich in Deiner Formel nicht verstehe, ist
Cstr(sdoc.lbjha1(0)) + mjlb
Wozu ist mjlb da?
Andreas
-
Was ich in Deiner Formel nicht verstehe, ist
Cstr(sdoc.lbjha1(0)) + mjlb
Wozu ist mjlb da?
Andreas
Hi Andreas ,
uhhh lange her daß ichs geschrieben habe.... über zwei jahre.
Also...
Im Dokument, daß ich über LEI aus der AS/400 Anwendung bekomme, habe ich 4 einzelne Felder in denen Zahlen stehen.
Diese 4 Felder bilden auf der AS/400 in der entsprechenden Anwendung zusammen ein einzelndes Datum.
Aus diesen 4 Zahlen bilde ich dann (mit dem Umweg über einen string und datevalue) das Datum für das neue zu erstellende Notesdokument .
die feldnamenkomponenten bedeuten folgendes.
Die ersten zwei Buchstaben lb heisst "liefer bis"
jj bedeutet Jahr z.B. 4 , JH bedeutet Jahrhundert (20), mm bedeutet Monat (zb 2 für Februar) und tt eben Tag.
a1 ist glaube ich ein tel des Tabellennamens in der UrsprungsDB.
mjlb ist ein Variablenname im Script den ich kreiert habe.
Könnte heisen "mein Jahr liefer bis"
Jetzt baue ich mir au den 4 Feldern einen STring zusammen.
Und da wir nun das jahr 04 haben , ich aber als Zahl nur die 4 erhalte muß ich dies abprüfen und ggf. eine Null (weil ja kleiner 10) davor setzen.
Damit stelle ich sicher daß mjlb zweistellig ist sonst erhalte ich als Jahresangabe ja 204 statt 2004.
Verstanden oder wars zu umständlich erklärt ?
Auf der AS/400 mit Domino ist anderes Datumsformat, deshalb setze
ich den string zusammen mit "mm/tt/jhjj" und nicht wie
im deutschen üblich mit "tt.mm.jhjj"
Gruß Holcomb
-
Alles klar, jetzt habe ich es verstanden - das Jahr ist in Jahrhundert und Jahreszahl zwischen 0 und 99 aufgeteilt.
Andreas
-
Alles klar, jetzt habe ich es verstanden - das Jahr ist in Jahrhundert und Jahreszahl zwischen 0 und 99 aufgeteilt.
Andreas
Jou :-)
Wird so in der AS/400 Anwendung bzw. Datenbank verwaltet.
Gruß, Holcomb