Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: lotus blue am 21.08.08 - 17:47:01
-
Hallöchen.
Wohl zum x-ten Mal, komme aber nicht weiter. (auch nicht durch die Suche bzw.Hilfe)
-> Import und Doppelte Doks vermeiden.
Führe täglich einen Import einer txt-Datei durch und erstelle daraus Dokumente.
Das funzt auch bis dato. Nun soll das Script aber vorher noch prüfen, ob ein bestimmtes Dok (durch einen Wert indentifizierbar) schon existiert.
Hier das Import Script:
Sub Initialize
Dim session As New notessession
Dim db As notesdatabase
Dim doc As notesdocument, profdoc As Notesdocument
Dim Dateipfad As String, aktfile As String
Dim fileNum As Integer, cells As Integer, k As Long
Dim fileName As String
Dim InputStr As String, delimiter As String
Dim FieldArray As Variant
Set db = session.currentdatabase
Set profdoc = db.getprofiledocument("(Config)")
Dateipfad = profdoc.Dateipfad(0)
fileNum = Freefile()
' Trennzeichen
delimiter = "#"
aktfile = Dateipfad
If aktfile <> "" Then
Open aktfile For Input As fileNum%
Line Input #1, InputStr$
Do While Not Eof(fileNum%)
' Zeile für Zeile einlesen
Line Input #1, InputStr$
FieldArray = Split(InputStr$,delimiter)
Call CreateDocument(db, FieldArray)
Loop
Else
Messagebox "Datei nicht vorhanden", 16, "Fehler"
End If
Close fileNum%
Exit Sub
End Sub
Sub CreateDocument(db As notesdatabase, FieldArray As Variant)
Dim doc As New notesdocument(db)
doc.Form = "New"
doc.Feldname1 = FieldArray(0)
doc.Feldname2 = FieldArray(1)
doc.Feldname3 = FieldArray(2)
Call doc.save(1,0)
End Sub
Natürlich hilt mir da die GetDocumentByKey Methode weiter, kann sie aber nicht richtig einbauen bzw. vergesse wohl was. Sie muss wohl vor das Call CreateDocument(db, FieldArray), aber nur wie????? :-:
Bitte um Eure Hilfe.
Schöne Grüße Jason
-
Ansicht mit Key erstellen, versuchen das Dokumet zu holen via
view.getDocumentByKey(....
wenn das klappt Wert schon vorhanden, wenn nicht Dokument neu anlegen.
-
Ansicht mit Key erstellen, versuchen das Dokumet zu holen via
view.getDocumentByKey(....
wenn das klappt Wert schon vorhanden, wenn nicht Dokument neu anlegen.
Gracie für die schnelle Antwort. Aber so weit war ich schon. Ich weiß ja nur nicht wo ich es einbauen soll und was noch fehlt.
Reicht "set view", "Set doc" und "If Not (doc Is Nothing) Then" aus?
Set view = db.GetView ("Alle Dokumente")
If aktfile <> "" Then
Open aktfile For Input As fileNum%
Line Input #1, InputStr$
Do While Not Eof(fileNum%)
Line Input #1, InputStr$
FieldArray = Split(InputStr$,delimiter, -1, 0)
If Not Isempty(FieldArray) Then
Set doc = view.GetDocumentByKey(Name)
If Not (doc Is Nothing) Then
Call CreateDocument(db, FieldArray)
End If
End If
Loop
Else
-
Not doc Is Nothing
bedeutet doc (Wert) ist vorhanden
doc is nothing
bedeutet doc (Wert) ist nicht vorhanden
-
Ok 8) stimmt.
Hab ich geändert und erhalte "Invalid key value typ".
:-: :-:
-
Wie ist "Name" gefüllt, was ist das für ein Feldtyp, stimmt der mit dem Key in der Ansicht überein, was sagt der Debugger ?
-
Wie ist "Name" gefüllt, was ist das für ein Feldtyp, stimmt der mit dem Key in der Ansicht überein, was sagt der Debugger ?
Das Feld Name ist ein Textfeld, bearbeitbar, und ist in der Ansicht in der ersten Spalte, die sortiert ist angegeben.
Der Debugger:
alles i.o. bis aus Set doc = view.GetDocumentByKey(Name)
da bricht er ab
-
da bricht er ab
Mit welcher FM ?
Meine Glaskugel schläft leider noch......
-
Ist wahrscheinlich zu banal, finde aber in Deinem Code nirgends die Var. Name??
Boris
-
.... und wie die gesetzt wird.....
-
da bricht er ab
Mit welcher FM ?
Meine Glaskugel schläft leider noch......
Hab ich geändert und erhalte "Invalid key value typ". !!!! s.o.
Ist wahrscheinlich zu banal, finde aber in Deinem Code nirgends die Var. Name??
8) >:D ::) hab grad Dim Name As String ergänzt :love:
Er importiert jetzt die Sätze, aber leider immer noch doppelt und dreifach
Sub Initialize
Dim session As New notessession
Dim db As notesdatabase
Dim doc As notesdocument, profdoc As Notesdocument
Dim Dateipfad As String, aktfile As String
Dim fileNum As Integer, cells As Integer, k As Long
Dim fileName As String
Dim Name As String
Dim InputStr As String, delimiter As String
Dim FieldArray As Variant
Dim view As NotesView
Set db = session.currentdatabase
Set profdoc = db.getprofiledocument("(Konfiguration)")
Dateipfad = profdoc.Dateipfad(0)
fileNum = Freefile()
Set view = db.GetView ("Alle Dokumente")
'Trennzeichen
delimiter = "#"
aktfile = Dateipfad
If aktfile <> "" Then
Open aktfile For Input As fileNum%
Line Input #1, InputStr$
Do While Not Eof(fileNum%)
Line Input #1, InputStr$
FieldArray = Split(InputStr$,delimiter, -1, 0)
If Not Isempty(FieldArray) Then
Set doc = view.GetDocumentByKey( Name )
If doc Is Nothing Then
Call CreateDocument(db, FieldArray)
End If
End If
Loop
Else
Messagebox "Datei nicht vorhanden", 16, "Fehler"
End If
Close fileNum%
Exit Sub
Sub CreateDocument(db As notesdatabase, FieldArray As Variant)
Dim doc As New notesdocument(db)
doc.Form = "Neuer Eintrag"
doc.Name = FieldArray(0)
doc.Name2 = FieldArray(1)
doc.Vorname3 = FieldArray(2)
Call doc.save(1,0)
End Sub
End Sub
-
Set doc = view.GetDocumentByKey( Name )
Das wird dir solange Nothing liefern, bis Du der Variable "Name" auch einen Inhalt schenkst.
-
Schön und gut das Du nun Dim Name... eingebaut hast bleibt weiterhin die Frage wie Du Name setzt???
Den Name musst Du doch vorher aus irgendeinem doc z.b auslesen??
Boris
-
Wo wird Name gefüllt ?
-
Um es deutlicher zu machen:
Name = FieldArray(Stelle wo an der der Key steht)
Dann sollte es gehen
-
Um es deutlicher zu machen:
Name = FieldArray(Stelle an der der Key steht)
Dann sollte es gehen
EDIT: kleine redaktionelle Änderung. Deutsche Sprach, schwere Sprach
Oh Mann! Und dann noch "zitieren" statt "editieren" gedrückt. Hoffentlich ist bald WE.
-
Klingt logisch. Danke Euch allen. :love: :love: :love:
Es funzt, dann muss es wohl so jetzt passen ;D
Hier das fertige Script:
Sub Initialize
Dim session As New notessession
Dim db As notesdatabase
Dim doc As notesdocument, profdoc As Notesdocument
Dim Dateipfad As String, aktfile As String
Dim fileNum As Integer, cells As Integer, k As Long
Dim fileName As String
Dim VsNr As String
Dim InputStr As String, delimiter As String
Dim FieldArray As Variant
Dim view As NotesView
Set db = session.currentdatabase
Set profdoc = db.getprofiledocument("(Konfiguration)")
Dateipfad = profdoc.Dateipfad(0)
fileNum = Freefile()
Set view = db.GetView ("Alle Dokumente")
'Trennzeichen
delimiter = "#"
aktfile = Dateipfad
If aktfile <> "" Then
Open aktfile For Input As fileNum%
Line Input #1, InputStr$
Do While Not Eof(fileNum%)
Line Input #1, InputStr$
FieldArray = Split(InputStr$,delimiter, -1, 0)
If Not Isempty(FieldArray) Then
Set doc = view.GetDocumentByKey(fieldarray(0))
If doc Is Nothing Then
Call CreateDocument(db, FieldArray)
End If
End If
Loop
Else
Messagebox "olalallalal Datei nicht vorhanden", 16, "Fehler"
End If
Close fileNum%
Exit Sub
End Sub
Sub CreateDocument(db As notesdatabase, FieldArray As Variant)
Dim doc As New notesdocument(db)
doc.Form = "Neu"
doc.Name = FieldArray(0)
doc.Name2 = FieldArray(1)
doc.Vorname = FieldArray(2)
Call doc.save(1,0)
End Sub