Hallo Bernhard,
danke erst einmal, das Du Dir die Mühe machst. Also der Code sieht noch genauso aus, daran habe ich nichts geändert. habe alles mögliche an Ansichtseigenschaften an- bzw. ausgeschaltet, also z.B. aktualisierungs-Eigenschaften und koprimieren ja/nein - alles bringt keine Änderung
Ich denke das Problem liegt in der Zeile
<Set entry = vec.GetEntry(doc)>
aus irgendeinem Grund bekomme ich das Objekt bei Mehrfachwerten in der Ansicht nicht.
anbei nochmal den entsprechenden Teil des Agenten, Zeile 56 habe ich rot markiert.
' alle markierten Dokumente durchlaufen
Set dc = db.UnprocessedDocuments
Set doc = dc.GetFirstDocument()
While Not(doc Is Nothing)
Set entry = vec.GetEntry(doc)
sTemp = ""
' alle Spalten der Ansicht ausgeben
i = 0
Forall vwCol In vw.Columns
If Not vwCol.IsHidden Then
[color=red]sTemp = sTemp + entry.ColumnValues(i) + ";"[/color]
End If
i = i+1
End Forall
Print #fileNum%, sTemp
Set doc = dc.GetNextDocument(doc)
Wend
Danke nochmal
Silke
Guten morgen, neuer Tag, neues Glück!
nun habe ich den Agenten wie von Bernhard vorgeschlagen umgebaut, das schaut also so aus:
' alle markierten Dokumente durchlaufen
Set dc = db.UnprocessedDocuments
Set doc = dc.GetFirstDocument()
While Not(doc Is Nothing)
Set entry = vec.GetEntry(doc) '--> diese Zuweisung klappt nicht
sTemp = ""
' alle Spalten der Ansicht ausgeben
i = 0
Forall entryVal In entry.ColumnValues ' --> hier fliegt er raus
If Not vw.Columns(i).isHidden Then
If Isarray(entryVal) Then
sMultiValue = ""
' wenn Array, dann in String umsetzen
Forall mv In entryVal
sMultiValue = sMultiValue & Cstr(mv) & ","
End Forall
sTemp = sTemp & sMultiValue & ";"
Else
sTemp = sTemp & Cstr(entryVal) & ";"
End If
End If
i = i+1
End Forall
Print #fileNum%, sTemp
Set doc = dc.GetNextDocument(doc)
Wend
(der Rest ist nicht verändert)
Der "Type mismatch" - Fehler ist somit ausgemerzt, aber ich habe immernoch den Effekt, das ich alle Dokumente exportieren kann, die in der Ansicht über einem Dokument mit Mehrfacheintrag aufgelistet sind. Das Dokument mit dem Mehrfacheintrag selbst geht auch, alle Dokumente in der Ansicht darunter --> Fehler "Object Variable not set", und zwar wenn ich auf "entry" zugreifen will. (siehe oben)
Ich bin ratlos ... ???
(gerne poste ich auch nochmal den ganzen Agenten, ich hatte ihn anfangs extra komplett eingestellt, ich dachte, dann kann man ihn ganz einfach in eine Aktion einfügen und in einer beliebigen DB ausprobieren ...)
Silke
Hallo Norbert,
ich habe mir das heute erst wieder vorgenommen, hatte mal ein verlängertes Wochenende.
Also entry ist Nothing, über die ViewEntryCollection-Klasse bekomme ich auch nur Dokumente, keine Kategorien. Das Problem ist meiner Meinung nach wirklich, dass ich mit AllEntries anscheinend nicht "allEntries" bekomme, jedenfalls nicht, wenn die Ansicht kategorisiert ist und Dokumente duch die Kategorisierung mehrfach in der Ansicht angezeigt werden.
Jetzt bin ich mal einen anderen Weg gegangen - über NotesNavigator, habe dazu diesen Eintrag im Forum gefunden -->
http://atnotes.de/index.php?topic=26596.msg169198#msg169198 (http://atnotes.de/index.php?topic=26596.msg169198#msg169198)
Jetzt habe ich ein anderes Problem - wenn ich ein Dokument markiere, welches mehrfach in der Ansicht auftaucht - ist entry wieder Nothing, ansonsten gehen jetzt alle Einträge.
Hier die Version mit ViewNavigator:
Set vwnav = vw.CreateViewNav()
Set doc = dc.GetFirstDocument
Do Until doc Is Nothing
Set entry = vwnav.GetEntry(doc)
sTemp = ""
' alle Spalten der Ansicht ausgeben
i = 0
Forall entryVal In entry.ColumnValues
If Not vw.Columns(i).isHidden Then
If Isarray(entryVal) Then
sMultiValue = ""
' wenn Array, dann in String umsetzen
Forall mv In entryVal
sMultiValue = sMultiValue & Cstr(mv) & ", "
End Forall
sTemp = sTemp & sMultiValue & ";"
Else
sTemp = sTemp & Cstr(entryVal) & ";"
End If
End If
i = i+1
End Forall
Print #fileNum%, sTemp
Set doc = dc.GetNextDocument(doc)
Loop
Was ich nicht verstehe ist, das ich mit <ViewEntryCollection.AllEntries> einfach mal nicht alle Einträge der Ansicht bekomme, sondern nur einen Teil - nochmal, ich habe im Objekt dann wirklich nur Dokumente, aber halt nicht alle, sondern teilweise auch welche doppelt.
Mit NotesViewNavigator.GetEntry(doc) bekomme ich wiederum alle Dokumente, die einmalig sind, mehrfach angezeigte Dokumente nicht.
Irgentwie komme ich auch mit den vielen Beispielen aus anderen Einträgen nicht weiter, in meiner DB komme ich nicht zum gewünschten Ergebnis.
Um das zu verdeutlichen habe ich meine kleine Test-DB mal beigefügt.
Das Dokument Text1 hat 2 Kategorien, es läßt sich mit "Test Export ViewEntryCollection" exportieren, dafür geht Text2 (das Dokument dahinter) nicht.
Mit "Test Export ViewNavigator" können alle Dokumente exportiert werden, dafür jedoch nicht Text1
Ich hoffe, das ich damit meine Frage besser formuliert habe und jemand eine Erklärung hat.
Vielen Dank.
Silke
Hallo,
jetzt habe ich mir den <ViewExcelExport> näher angeschaut und in meine Test-DB integriert --> aber auch dieser Agent scheitert bei Dokumenten mit mehreren Kategorien, wenn ich nur markierte Dokumente exportieren will :-\
Solange ich diese Dokumente nicht exportiere klappt der Agent super.
Bei besagten Dokumenten --> Notes Error: <Eintrag im Index nicht gefunden (Test)>
Ich habe die Stelle im Script gekennzeichnet.
If resp = 6 Then 'Selektierte Documente
Dim seldoc As notesdocument
Set seldoc = othercol.GetFirstDocument
While Not seldoc Is Nothing
Set otherdoc = otherview.getnextdocument(seldoc) ' --> bei Dokumenten in mehreren Kategorien:
' Notes Error: <Eintrag im Index nicht gefunden (Test)>
If otherdoc Is Nothing Then
Set otherdoc = otherview.getprevdocument(seldoc)
If otherdoc Is Nothing Then
Print " >1 doc should be selected"
End
Else
Set otherdoc = otherview.getnextdocument(otherdoc)
End If
Else 'die nächsten Dokumente
Set otherdoc = otherview.getprevdocument(otherdoc)
End If
For colmn = 0 To Ubound(otherview.Columns)
sTemp = ""
If Isarray(otherdoc.columnvalues(colmn)) Then
vmv = otherdoc.columnvalues(colmn)
Forall colval In vmv
sTemp = sTemp & Cstr(colval) & ", "
End Forall
Else
sTemp = Cstr(otherdoc.columnvalues(colmn))
End If
xlApp.cells(row,colmn+1) = sTemp
Next
row = row+1
Set seldoc = othercol.GetNextDocument(seldoc)
Wend
Else ' alle Dokumente
Set otherdoc = otherview.GetFirstDocument
While Not otherdoc Is Nothing
For colmn = 0 To Ubound(otherview.Columns)
'xlApp.cells(row,colmn+1) = otherdoc.columnvalues(colmn)
sTemp = ""
If Isarray(otherdoc.columnvalues(colmn)) Then
vmv = otherdoc.columnvalues(colmn)
Forall colval In vmv
sTemp = sTemp & Cstr(colval) & ", "
End Forall
Else
sTemp = Cstr(otherdoc.columnvalues(colmn))
End If
xlApp.cells(row,colmn+1) = sTemp
Next
row = row+1
Set otherdoc = otherview.GetNextDocument(otherdoc)
Wend
End If
Alle Dokumente exportieren klappt prima, nur mit dem Haken, dass die Dokumente dann mehrfach exportiert werden, aber damit könnte ich noch leben.
Naja. Vielleicht hat ja doch noch jemand eine Idee, ich lege das jetzt sonst erst mal auf Eis.
Wie bekomme ich das hier hin? -->
Du kannst also nur mit GetNextEntry(entry) an deiner View entlanglaufen und jedes Dokument daraufhin prüfen, ob es Teil deiner DocumentCollection ist - und dann exportieren (als entry.ColumnValues).
Danke an alle tatkräftigen Helfer!
Grüße
Silke