Das Notes Forum
Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: Alperen15 am 27.07.10 - 14:16:07
-
Hallo Ihr lieben,
ich bräuchte wieder mal einen Gedankenstoß. Der Agent von einem Mitarbeiter den ich kopiert und bearbeitet habe soll eine Datei mit den Feldern als dokument importieren usw.... Dieser Agent hat Funktionen wie z.B ReadFields, NächstesFeld usw....
in ReadFields und in den anderen Funktionen habe ich nichts geändert. Mein Agent läuft zwar aber befüllt drei vier Felder nicht. Hier der Quellcodeteil den ich bearbeitet habe. Bin der Meinung, dass das nichts damit zu tun hat. Wäre für jeden Tipp dankbar.
Do While cFilename$ <> ""
filename = pathName$ + cFilename$
i = 1
Open pathName$ & cFilename$ For Input As filenum
Seek fileNum,1
On Error Goto ErrorPrint
Do While Not Eof (filenum) '*
Line Input #filenum, i
If i <> "" Then
i = i + cTrenn
iZaehler = iZaehler + 1 ' *** Datensatzzähler
Else
'cError = "asImportCollect ERROR: ReadFields" + Cstr(iZaehler)
Call XQSchreiben("0", "1", cgTracerVorzugImport, "asNightImport ERROR: Keine Datensätze im CSV-File", 632637&)
Call SendMail(doc, cSendTo, cSubject, "asImportCollect ERROR: Keine Datensätze im CSV-File")
Goto EndeAlles
End If
' ********** Einlesen des csv - Datensatzes **************************
cError = "asImportCollect ERROR: ReadFields" + Cstr(iZaehler)
On Error Goto ErrorPrint
Call ReadFields(i) ' *** neuer Datensatz lesen
' ************* Document Selection - Alle Documente in der DB werden nach der Auftrag/Position durchsucht - Anführungszeichen der Selection beachten !
cSelection = "FORM = ""maNurVorzug"" & fdAuftrag = """+cImString(4)+""" & fdAuftragsposition = """+cImString(5)+""""
Set dc = db.Search ( cSelection , dtCutOff , 0 )
' **************
' neues Dok wird angelegt falls Status aktiv ***********
If cImString(1) = "A" Then
Set doc = db.CreateDocument
doc.Form="maNurVorzug"
cError = "asImportCollect ERROR: FillFields " + cImString(4) + "/" + cImString(5)
On Error Goto ErrorPrint
Call FillFields(doc,i,cDate) ' *** Schreiben komplettes Dokument
cError = "asImportCollect ERROR: DocSave " + cImString(4) + "/" + cImString(5)
On Error Goto ErrorPrint
Call doc.save(False,True)
'iZaehler = iZaehler + 1 ' *** Datensatzzähler
End If
iZaehler = iZaehler + 1
Loop ' Until Eof (filenum) **** Neuen csv - Datensatz einlesen
Close filenum
Call XQSchreiben("0", "1", cgTracerVorzugImport, "Vorzug_Export_TESTKUR" + cFilename$ + " - gelöscht ", 632637&)
cText = Cstr(iZaehler) + " Datensätze bearbeitet"
Call XQSchreiben("0", "1", cgTracerVorzugImport, cText, 632637&)
Filecopy FileName,"E:\TestKUR\VerzeichnisTest\Archiv\" + cFilename$ ' *** Sichern der aktuellen File ins Archiv
Print cText
Kill filename ' Das File nach der Archivierung im Verzeichnis löschen '*
cFilename$ = Dir$()
Loop '*************Neue Datei im Verzeichnis lesen
-
Schon mal den Debugger mitlaufen lassen ?
-
ja habe ich, mir ist da nichts aufgefallen
-
Im Debugger sollte aber die Stelle zu sehen sein, wo die Felder ermittelt bzw. gefüllt werden (vmtl. ReadFields bzw. FillFields).
Da würde ich mal genauer hinsehen.
-
Und ohne genau zu wissen, was in den Funktionen ReadFields(i) und FillFields(doc,i,cDate) ablaeuft, ist es auch sehr schwer eine einigermassen gesicherte Aussage zu treffen.
Ich entnehme den Namen der Prozeduren nur soviel, dass ReadFields den gelesenen String aus der Datei in einen Array splittet, der mit der Prozedur FillFields auf die entsprechenden Felder des Dokumentes verteilt wird.
Andreas
-
so ich habs mal mit dem Debugger angeschaut, die Felder werden befüllt aber drei vier felder werden nicht im Dokument gespeichert, obwohl sie auch befüllt worden sind wie die anderen
-
Sind die nicht befüllten Felder vom gleichen Typ wie die, die befüllt werden ?
-
ja sind sie
-
Gibt's Eingabeumsetzungs- und/oder -validierungsformeln?
Axel
-
ja die gibts, die haben aber mit den Feldern die mir fehlen nichts zu tun. Beim Agenten vom Kollegen funktionierte es ja habe mir auch die Dokumente angeschaut. Nach meiner Änderung fehlen Sie mir. In den Funktionen habe ich nichts geändert. Ich wüsste nich was ich noch machen soll
-
Sind die Felder in den Dokumenteneigenschaften zu sehen ?
-
was heisst Dokumenteigenschaft? Wenn die Maske gemeint ist sprich das Dokument sind die Felder zu sehen
-
Nein, ist sie nicht gemeint.
Sondern das erstellt Dokument. Dokument:Eigenschaften ( dann 2. Reiter von links). Dort sind alle Felder Items aufgelistet.
-
Items, Klaus, Items. Und eben nicht "Felder", die sind Elemente im Frontend (Maske).
Bernhard
-
ja die sind zu sehen
-
und im AgentenLog ist auch dies zu sehen ein dutzend mal
asImportCollect
asImportCollect ERROR: FillFields 102486033/370
da hat er beim füllen ein Problem
-
mit dem Quellcode, den ich oben bereits schon eingefügt habe, hat mein Problem ncihts zu tun oder?? Das hat ncihts damit zu tun
-
ja habe ich, mir ist da nichts aufgefallen
so ich habs mal mit dem Debugger angeschaut, die Felder werden befüllt aber drei vier felder werden nicht im Dokument gespeichert, obwohl sie auch befüllt worden sind wie die anderen
und im AgentenLog ist auch dies zu sehen ein dutzend mal
asImportCollect
asImportCollect ERROR: FillFields 102486033/370
da hat er beim füllen ein Problem
Das freundlichste, was mir hierzu noch einfällt, ist: Hier will uns jemand veralbern!
Erst heisst es, im Debugger ist "nichts aufgefallen". Hä? Entweder, man hat dort gesehen, dass die Items belegt werden (und weiss dann, dass man woanders suchen muss - Items werden später wieder geleert, Backend kollidiert mit Frontend o.ä.), oder man findet die Stelle, wo die Items doch nicht korrekt belegt werden.
Dann heisst es: Die Items werden korrekt belegt.
Die Krönung dann: Der Code hat Fehlermeldungen ins Log geschrieben. Hä? Und das ist im Debugger so gar nicht aufgefallen, dass die Codeausführung zum Auslösen des ErrorHandlers geführt hat??
Wenn hier nicht zu streng logischem Vorgehen übergegangen wird und - gerade für einen blutigen Anfänger ratsam - der Code in einzeln testbare Codemodule heruntergebrochen wird, dann prophezeie ich: Das wird nie was. Und Gefrickel hat noch niemals zu etwas wirklich brauchbarem geführt.
Bernhard
-
so Hallo,
1. Vor dir ist ein Anfänger, ich möchte nur normale Antworten und keine Bemerkungen.
2. Hast du alles verstanden als du dich neu mit notes beschäftigt hattest?
3. Falls ich dich nerve tut es mir Leid es ist nunmal keine Absicht.
4. Trotzdem Danke für deine Hilfe
Der Agent funktionierte vor meiner Änderung, ich sollte es nur ändern. Damit alle Dateien im Verzeichnis und jede Zeile gelesen werden soll. Die Funktionen ReadFields und FillFieds haben funktioniert aber nach meiner Änderung nicht. (nochmal in den Funktionen habe ich nichts verändert)
Laut Debugger sind die Felder gefüllt, die gefüllt sein müssen. Im Dokument sind drei Felder nciht gefüllt die restlichen aber schon. Habe in der Datei nachgeschaut ob diese Felder einen Wert drin haben, ja diese Felder beinhaltet einen Wert.
Meine Frage war nur. Schaut euch meinen Code bitte an und sagt mir ob es was mit meiner Änderung zu tun hat.
-
Wurden denn die Felder vorher befuellt oder sind es komplett neue Felder.
Wenn es neue Felder sind, dann muessen dei Werte fuer diese Felder natuerlich auch in der CSV-Datei enhalten sein.
Und damit der Code auch weis, in welcher Felder er die entsprechenden Daten auch eintragen muss, ist es aus meiner Sicht unabdingbar, sich auch einmal die hierfuer relevanten Funktionen anzusehen.
ReadFields() => werden die Daten auch sauber voneinander getrennt
FillFields() => werden die Daten, die durch ReadFields() getrennt wurden auch sauber weiterverarbeitet
Und diese Kontole erreichst Du nur, wenn Du im Debugger dir die Inhalte der Variablen ansiehst bzw. indem Du entsprechende Ausgaben in Deinen geaenderten Code einbaust.
Und da Du ja schon erwaehnt hast, dass es zu einem Fehler kommt, ist Dein erster Ansatzpunkt an dieser Stelle.
Andreas
-
Hi Andreas,
die Felder die mir Fehlen sind cImString(42) cImString(43) cImString(45). In der csv Datei gibt es die Felder mit Inhalt Sie sind nicht leer und laut debugger sind sie auch gefüllt....
die Funktionen muss funktionieren weil der Agent vor meiner Änderung auch die selben Dateien bearbeitet hat.
Also da bin cih mir ziemlich sicher, dass die Funktionen keine Fehler beinhalten....komisch
-
An den Feldnamen, in welche die Daten eingetragen werden sollen, hat sich also auch nichts geaendert?
Oder anders gefragt.
Die Funktion FillFields() weis wie die Felder heissen, in welches die betreffenden Werte eingetragen werden sollen?
cImString(42) => wird in Feld xxx eingetragen
cImString(43) => wird in Feld yyy eingetragen
cImString(45) => wird in Feld zzz eingetragen
Andreas
-
ja so siehts aus. Ein Kollege der auch mal Notes programmiert hat, hat sichs auch angschaut und hat auch keine Ahnung wieso die Felder nicht gefüllt werden...
man man man
-
und noch ne Frage (zur Logik)
pathName$ = "E:\ImportNotes\Q-Lager\*.xls"
Filename$ = Dir$(pathName$, 0)
Do While Filename$ <> ""
PathFilename$ = Left(Pathname$, Instr(Pathname$, "*")-1) + Filename$
usw....
dieses instr(pathname$..... bedeutet doch grob gesagt. lese mir die variable pathname$ bis zum"*"
und kürze das mir weg und setze die dateiname hinzu. Stimmt das oder lieg ich da falsche
-
dieses instr(pathname$..... bedeutet doch grob gesagt. lese mir die variable pathname$ bis zum"*"
und kürze das mir weg und setze die dateiname hinzu. Stimmt das oder lieg ich da falsche
Ganz grob gesagt liegst du da falsch.
Instr(...) liefert die Position des ersten Vorkommes des Zeichens oder der Zeichenkette (aus dem zweiten Parameter) im String der im 1.Parameter übergeben wurde.
Ein Blick in die Designer-Hilfe hätte dir hier weitergeholfen.
Die gesamte Zeile
Left(Pathname$, Instr(Pathname$, "*")-1) + Filename$
macht das was du beschrieben hast.
Axel
-
"Alperen", AtNotes ist ein Forum für Hilfe zur Selbsthilfe. Du kannst Dich daher beklagen, wie Du willst: Dazu gehören auch "Bemerkungen", und die kommen - ob Du sie nun lesen willst oder nicht!
Meine "Bemerkung": Liest Du überhaupt, was andere Dir schreiben, was in der Designer-Hilfe steht, was der Debugger ausschreibt oder was der von Dir zu ändernde Fremdcode freundlicherweise sogar in ein Log schreibt?? Oder - die schlimmere Befürchtung - kannst Du solche eigentlich einfachen Aussagen auch verstehen?
Deine Anmerkung, dass es an den bestehenden, nicht geänderten Routinen nicht liegen kann, ist schlicht Blödsinn. Die können nicht nur scheitern (zum Beispiel, wenn Du sie mit illegalen bzw. dort nicht erwarteten Werten fütterst), sondern sie tun es deswegen auch.
Ich hatte Dich bereits darauf hingewiesen, dass *DER* Hinweis im Log steht: FillFields fällt auf die Nase. Das hätte Dir auch im Debugger auffallen *MÜSSEN* - denn da wurde der Code gar nicht mehr in der gewünschten Reihenfolge abgearbeitet!
Was erwartest Du also, was wir noch tun sollen? Du merkst ja auch sicherlich, dass immer weniger Deine unlogischen Posts bereit sind zu beantworten. Genau deshalb mische ich mich jetzt hier ein und bin der Überbringer der schlechten Nachrichten. Diese kann nur sein:
"Denke logisch!". Wenn Du merkst, dass es da hapert, sieh der Wahrheit ins Auge: Programmieren ist dann einfach nicht Dein Ding. Und das hat absolut nichts mit Notes zu tun, das gilt für alle Programmiersprachen. Mit "Anfänger" hat das auch nichts zu tun.
HTH,
Bernhard