Domino 9 und frühere Versionen > ND6: Entwicklung

markierte Dokumente einer Ansicht exportieren

(1/5) > >>

scsi:
Hallo,

vielleicht hat jemand eine Idee, woran es liegen könnte.

Ich habe einen kleinen Agenten (anbei ein Test-Script auf das wesentliche reduziert), welcher ganz einfach nur die selektierte Dokumente einer Ansicht exportieren soll.

Jetzt habe ich den Effekt, das ich in einer Ansicht genau die ersten 162 Dokumente so exportieren kann, sind die Dokumente weiter unten in der Ansicht - dann wird ViewEntry nicht gesetzt ?? Gibt es eine Begrenzung für den Array??

Die Ansicht ist über 2 Werte kategorisiert, Mehrfachwerte werden getrennt angezeigt und können vorkommen - werden aber nur einmal exportiert. (ist ok so)

Der Agent sollte möglichst universell sein, daher wollte ich über die ViewEntryCollection gehen.



Sub Initialize
   On Error Goto ErrorHandler
   
   Dim s As New NotesSession
   Dim ws As New NotesUIWorkspace
   Dim db As NotesDatabase
   Dim dc As NotesDocumentCollection
   Dim doc As NotesDocument   
   
   Dim uivw As NotesUIView
   Dim vw As NotesView
   Dim vc As NotesViewColumn
   Dim vec As NotesViewEntryCollection
   Dim entry As NotesViewEntry
   Dim strViewName As String
   Dim strFileName As String
   Dim i As Integer
   Dim sTemp As String
   
   ' zu exportierenden Ansicht
   Set uivw = ws.CurrentView
   strViewName =  uivw.ViewAlias
   
   ' Datei für den Export
   Dim fileNum As Integer
   fileNum% = Freefile()
   strFileName = "c:\Temp\Test_" + strViewName & "_" & Format(Now, "dd.mm.yyyy.hh.nn.ss") & ".txt"
   Open strFileName For Output As #fileNum%
   
   Set db = s.CurrentDatabase
   
   ' ViewEntryCollection aus allen Dokumenten der Ansicht aufbauen
   Set vw = db.GetView(strViewName)
   Set vec = vw.AllEntries
   
   ' Spaltentitel ausgeben
   sTemp = ""
   Forall vwTitel In vw.Columns
      If Not vwTitel.IsHidden Then
         sTemp = sTemp + vwTitel.Title + ";"   
      End If
   End Forall
   Print #fileNum%, sTemp
   
   ' 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
            sTemp = sTemp + entry.ColumnValues(i) + ";"
         End If
         i = i+1
      End Forall
      Print #fileNum%, sTemp
      Set doc = dc.GetNextDocument(doc)
   Wend
   
   Close #fileNum%
   Print "Fertig"
   Exit Sub
ErrorHandler:
   Print "Fehlernr.: " + Str$(Err) + ", Zeile: " + Str$(Erl) + ", Meldung: " + Error$
   Close #fileNum%
   Exit Sub
End Sub



Danke schon mal im voraus.

scsi:
Hallo nocheinmal,

ich habe jetzt einen Verdacht, und zwar habe ich meine kleine Funktion in eine andere DB mit mehreren 100 Dokumenten getestet - und alles klappt prima  :o

Also, in der Ansicht, in welcher der Export nicht klappt -- die Ansicht ist zuerst nach Jahr kategorisiert, und als zweites in einer Kategorie "Bereich".
Der Bereich setzt sich aus "Firma\Bereich\Abteilung\Gruppe" zusammen und kann entsprechend tief geschachtelt sein.

Hat jemand dazu eine Idee??

scsi:
Hallo,

jetzt bin ich wieder ein kleines Stückchen weiter gekommen.
Habe mir also eine kleine DB gebaut - nur mit diesem Agenten und ein paar Dokumente eingefügt.
Es ist solange alles gut, wie keine Mehrfachwerte in der Kategorie stehen.

- Selektiert man Dokumente über einem Eintrag mit Mehrfachwerten - alles prima.
- Selektiert man Dokumente mit Mehrfacheintrag --> Zeile 56: Fehler 13: Type Mismatch
- Aber: selektiert man Dokumente UNTER dem Dokument mit dem Mehrfachwert in der Kategorie --> Zeile 56: Fehler 91: Object Variable not set

Wie kann ich das denn umgehen? Ich hoffe, jemand hat dazu eine Idee.

koehlerbv:
Sollen wir jetzt nachvollziehen, wo in Deinem Code (sieht der überhaupt noch so aus wie oben??) die Zeile 56 ist?

Wenn jemand helfen soll: Bitte aktuellen Code posten und betreffende Zeile markieren. Und einen ansprechbaren Namen unter die Postings schreiben - das erhöht die Motivation drastisch (wenn ich mit SCSI reden will, schraube ich eine Festplatte auf  ;D)

Bernhard

scsi:
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.


--- Code: --- ' 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


--- Ende Code ---

Danke nochmal
Silke

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln