Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: HipSlu am 01.06.04 - 17:49:27
-
hallo,
hier ein kleines script welches ich eben mit meinen miesen kenntnissen erstellt habe - es soll einen view durchgehen und dort für jede vorkommende maske ein text file erstellen, und und in dieses alle vorkommenden felder exportieren
funktioniert auch, es ist nur extra langsam - daher meine frage: was kann man da besser machen? bin für jeden input sehr dankbar
'Config
Const ExpServer = "............."
Const ExpDB = "........."
Const ExpView = "Export"
Const ExpPath = "C:\TEMP\"
Sub Initialize
On Error Goto Lende
Dim db As New notesdatabase("","")
Dim OutputString As String
Dim Satz As String
Dim fileNum As Integer
Dim ExportFile As String
Dim ExportPfad As String
Dim count As Long
Dim lauf As Integer
Set db = New NotesDatabase(ExpServer, ExpDB)
If db.IsOpen Then
Print( "Succesfully opened " & db.Title )
Else
Print( "Unable to open database" )
End If
Set view = db.GetView(ExpView)
If (view Is Nothing) Then
Messagebox "Keine Ansicht" & ExpView & "gefunden", 16, "Error"
Exit Sub
End If
ExportPfad = ExpPath
outputString$ = "Line " & Str(Erl) & " / Error" & Str(Err) & ": " & Error$
On Error Goto Lende
Forall form In db.Forms
'Files erstellen und Header schreiben
Exportfile$ = ExportPfad + form.name + ".txt"
ExpFields = form.Fields
Satz = ""
For dummy = 0 To Ubound(ExpFields)
Satz = Satz & ExpFields(dummy) & ";"
Next
fileNum% = Freefile()
Open Exportfile$ For Output As fileNum%
Print #fileNum%, Satz
Close fileNum%
End Forall
count = 0
Set doc = view.GetFirstDocument
'Lesen alle Dokumente
While Not ( doc Is Nothing )
Print "bearbeite dokument mit form " & doc.form(0) & " (" & Str(count) & ")"
Set next_doc = view.GetNextDocument(doc )
Set notesForm = Db.GetForm( doc.form(0) )
Satz=""
Forall field In notesform.fields
Set item = doc.GetFirstItem( field )
If item Is Nothing Then
Satz=Satz & ";"
Else
Satz=Satz & Cstr(item.Values(0)) & ";"
End If
End Forall
Exportfile$ = ExportPfad + doc.form(0) + ".txt"
fileNum2% = Freefile()
Open Exportfile$ For Append As fileNum2%
Print #fileNum2%, Satz
Close fileNum2%
count = count + 1
Set doc = next_doc
Wend
Exit Sub
Lende:
outputString$ = "Line " & Str(Erl) & " / Error" & Str(Err) & ": " & Error$
Msgbox outputstring$
Close fileNum2%
Exit Sub
End Sub
-
Nach erstem kurzen Durchblick: Eine enorme Bremse ist das dauernde Öffnen und Schliessen Deines Export-Files. Mach das nur einmal auf, bevor Du durch die Ansicht loopst und schliesse es nach Abschluss der Schleife.
Schau' mal, was das schon bringt.
HTH,
Bernhard
-
da scheitert es an meinem wissen; da ich für jede maske ein file erstelle (und es universell sein soll, ich also verher nicht weis welche und wieviele masken es sind) kann ich es nur so lösen, immer zu schließen und neu zu öffnen; wie würds besser gehen?
-
Was verstehst Du in diesem Zusammenhang unter "universell" ? Soll das nur in einer oder in wenigen Deiner DBs laufen ?
-
also ich habe eine db namen "agents", in der ich diverse agents zum täglichen import/export (backend) laufen habe. dieser agent ist aus einer anforderung heraus entstanden, eine db komplett nach csv zu exportieren. und da man nie weiß, ob ich das nochmals brauche, versuche ich es immer soweit es geht (und ichs kann) universell zu halten.... also: momentan nur eine db, aber später vielleicht mal auch andere
-
Dann erstelle Dir doch eine Ansicht, 1. Spalte sortiert nach Form.
Im Export-Agent:
- Über Forms in DB loopen
- Zur jeder Form aus Ansicht mit view.GetAllDocumentsByKey (Form) eine collection bilden
-> und diese dann am Stück abarbeiten.
Wegen "universell": Was macht Dein Export-Agent eigentlich, wenn er auf ein rich text item trifft ? Und wie behandelt er Felder, die Mehrfachwerte enthalten ?
Und was macht Ihr vor allem mit den resultierenden CSV-Files ? Da ist doch keinerlei Struktur drin ...
HTH,
Bernhard
-
:o jaja, da hast du recht. mehrfachwerte werden nicht berücksichtigt, das stimmt. bei richtext wird nehme ich an die zeile "on error goto lende" aktiv ;D
aber richtext kann man (ich) ja sowieso nicht wirklich exportieren, wüsste nicht, wie ich das anstellen sollte.
zu deinen hinweisen: ja, das klingt gut - ich werds wieder versuchen; bin bis jetzt jedesmal bei collections irgendwie gescheitert.
was die dann mit den csv-files machen ist mir egentlich egal; so wollten sie es, so bekommen sie es (ich hab irgendwas von einem import nach access gehört)