Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: scsi am 29.04.08 - 11:53:54

Titel: markierte Dokumente einer Ansicht exportieren
Beitrag von: scsi am 29.04.08 - 11:53:54
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.
Titel: Re: markierte Dokumente einer Ansicht exportieren
Beitrag von: scsi am 29.04.08 - 12:57:45
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??
Titel: Re: markierte Dokumente einer Ansicht exportieren
Beitrag von: scsi am 29.04.08 - 15:38:14
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.
Titel: Re: markierte Dokumente einer Ansicht exportieren
Beitrag von: koehlerbv am 29.04.08 - 15:44:01
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
Titel: Re: markierte Dokumente einer Ansicht exportieren
Beitrag von: scsi am 29.04.08 - 16:00:51
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


Danke nochmal
Silke
Titel: Re: markierte Dokumente einer Ansicht exportieren
Beitrag von: koehlerbv am 29.04.08 - 16:31:47
Aaah - jetzt! Jetzt wird das gleich sehr viel klarer, Silke.

An dieser Stelle muss es ja auch knallen, denn Du bekommst ein Array und willst es zu einem String hinzufügen (hierzu noch ein ACHTUNG: Verwende als String-Concenator nicht und niemals "+" - der offizielle ist "&". Das "+" kann unter bestimmten Umständen etwas ganz anderes erzeugen, als Du vielleicht vorher erwartest. Aber das haben wir hier schon oft thematisiert.).

Ich würde das gar nicht über eine NotesViewEntryCollection machen, sondern direkt über die Dokumente. Aber egal.

Vorschläge zur Lösung:
Hole Dir den Spalten wert zuerst in ein dynamisches Array (also Variant). Wenn dann IsArray und Ubound > 0, dann brauchst Du die Split-Function. Wenn nicht, ist es ein skalarer Wert und Du kannst das als String zusammenfügen.
Wenn Du direkt die Dokumente ausliest, dann musst Du eh immer mit Arrays dealen (jedes Item ausser einem RTI ist ein Array) und kannst das dann sauberer / nachvollziehbarer aufbauen.

Soweit meine ersten Überlegungen (und ich bin in Zeitmangel ...).

HTH,
Bernhard
Titel: Re: markierte Dokumente einer Ansicht exportieren
Beitrag von: scsi am 29.04.08 - 17:03:06
Hallo Bernhard,

ok, das mit dem Array ist klar - das habe ich im Eifer des Gefechtes ganz übersehen, das das so nicht geht. Werde ich einbauen und dann berichten.

Aber wie meinst Du das mit "direkt über die Dokumente"?
Mein Agent soll möglichst allgemeingültig für mehrere Ansichten der DB gelten und ich will jeweils genau die Spalten der Ansicht exportieren - möglichst auch in der Reihenfolge (das kann der User aber auch zur Not dann selbst in Excel erledigen) - und vorallem nur die markierten Dokumente.
Ich wüßte nicht, wie das über die DocumentCollection-Klasse funktionieren soll?

Silke
Titel: Re: markierte Dokumente einer Ansicht exportieren
Beitrag von: koehlerbv am 29.04.08 - 17:10:43
Okay, Silke, das ist ein schlagkräftiges Argument (und die "Allgemeingültigkeit" habe ich da nicht durchdacht, obwohl Du sie ja angesagt hattest). Das ginge zwar auch, aber das würde jetzt "overkill" und ist bestimmt kein Thema für ein Forum  ;)

Schauen wir mal, was Dein Umbau nun bringt. Hast Du Dir Export View nach Excel (http://atnotes.de/index.php?topic=15203.0) hier im Forum schon mal angeschaut? Vielleicht hilft Dir dieser Code weiter.

Bernhard
Titel: Re: markierte Dokumente einer Ansicht exportieren
Beitrag von: scsi am 30.04.08 - 09:17:29
Guten morgen, neuer Tag, neues Glück!

nun habe ich den Agenten wie von Bernhard vorgeschlagen umgebaut, das schaut also so aus:

Code
	' 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
Titel: Re: markierte Dokumente einer Ansicht exportieren
Beitrag von: LN4ever am 30.04.08 - 14:47:29
Wenn ich so ein langes Script lese, bin ich immer tief beeindruckt.

Wie wäre denn als Alternative der folgende Formelsprachenagent ?

dsn:="C:\\TEMP\\" + @ViewTitle + "_" + @Text(10000*@Year(@Now)+100*@Month(@Now)+@Day(@Now))+"_"
+@Right("0"+@Text(@Hour(@Now));2)
+@Right("0"+@Text(@Minute(@Now));2)
+@Right("0"+@Text(@Second(@Now));2);
@Command( [ViewShowOnlySelected] );
@Command([FileExport]; "Tabular Text"; dsn);
@Command( [ViewShowOnlySelected] );

Das liefert dir doch auch das gewünschte Ergebnis, und das in einem Bruchteil der Zeit.

Das Ganze ist ohne Gegentest einfach runtergeschrieben. Bitte vor Einsatz testen.

Gruß

Norbert
Titel: Re: markierte Dokumente einer Ansicht exportieren
Beitrag von: scsi am 30.04.08 - 15:29:18
Hallo Norbert,

das ist es nicht ganz was ich brauche. Bei dem Export über Formel werden die Kategorien nicht mit in die Zeilen übernommen, und das sollte schon sein. Im Prinzip ist das ja der Export, den man auch über das Menü "Datei\Exportieren..." erreichen kann. Der reicht mir leider nicht, zumal dann wieder formatiert werden mus, ... für den Anwender viel zu viel, der nur mal schnell "auf Knopfdruck" einen Excel-Report über einen bestimmten Teil von Dokumenten haben will.

Ich habe den Agenten extra in einer Testumgebung schon gekürzt und die ganzen Excel-Komponenten und -Formatierungen weggelassen.



Habe auch noch weitergetestet und komme langsam zu dem Schluss, dass die viewEntryCollection vermutlich das Problem ist.

In meinem Test habe ich eine Ansicht mit 4 Dokumenten. In einem Dokument gebe ich zwei Kategorien ein, somit taucht in der Ansicht ein Dokument 2x auf - die View hat also 5 Einträge.

notesViewEntryCollection.Count --> stellt fest es gibt 4 Dokumente

view.AllEntries --> geht nur 4 Einträge durch, das es doppelte gab interessiert nicht, nach 4 Einträgen ist einfach Schluss ;-(

Markiere ich also den 5. Eintrag in der Ansicht (also das 4. Dokument), ist die mein <entry> (siehe Script von heute 9:17 Uhr) einfach leer.

Ist das jetzt ein Bug?
Hat den Effekt schon mal jemand gehabt?

Vielen Dank an alle Helfer!
Titel: Re: markierte Dokumente einer Ansicht exportieren
Beitrag von: LN4ever am 30.04.08 - 17:04:09
Liebe Silke,

vielleicht steht bei dem Entry dann ISCATEGORY auf TRUE oder ist der entry wirklich NOTHING ?

Wenn du auf einer Kategorie landest, mußt du zum nächsten Dokument gehen. Aber selbst wenn du dieses Problem gefixt bekommst, zweifle ich daran, ob das überhaupt funktionieren kann, denn das Dokument, das mehrfach in einer View auftaucht, kann ja keinen eindeutigen Pointer in der View haben.

Funktionieren kann m.E. nur, daß du die EntryCollection aller entries entlangspazierst und bei jedem Entry, der ein Dokument ist, nachsiehst, ob dieses Dokument Teil deiner DocumentCollection ist.

Gruß

Norbert
Titel: Re: markierte Dokumente einer Ansicht exportieren
Beitrag von: scsi am 05.05.08 - 13:49:08
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:

Code
	
	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
Titel: Re: markierte Dokumente einer Ansicht exportieren
Beitrag von: scsi am 06.05.08 - 12:26:51
Hallo nocheinmal,

hat denn keiner eine Idee, warum die beiden Klassen bei kategorisierten Ansichten, welche Dokumenten beinhalten, die in mehreren Kategorien aufgeführt sind, nicht wollen?

Zitat
Funktionieren kann m.E. nur, daß du die EntryCollection aller entries entlangspazierst und bei jedem Entry, der ein Dokument ist, nachsiehst, ob dieses Dokument Teil deiner DocumentCollection ist.

Ich weiß nicht, wie das funktionieren kann, wenn in der EntryCollection schon garnicht alle Dokumente vorhanden sind.

In meiner beigefügten Test-DB habe ich extra einmal die Einträge der EntryCollection in ein Hilfsdokument ausgeben lassen. Dort kann man sehr deutlich sehen, das die Collection nicht alle Dokumente beinhaltet, sondern wie oben schon mal beschrieben:

Es sind 4 Dokumente, ein Dokument hat 2 Kategorien, daher sind in der Ansicht 5 Einträge. In meiner EntryCollection sind anschließend 4 Elemente, davon ist das Dokument mit 2 Kategorien 2 mal vorhanden.
Und das verstehe ich nicht.  :-:
In meiner Erwartung müsste die EntryCollection entweder 5 Einträge haben, einen doppelt, oder 4 - dann aber jedes Dokument ein mal.

Bitte, bitte laßt mich nicht hängen, ich will doch nur einen simplen Export, ... :'(
was stimmt denn an der Vorgehensweise nicht  ???

Vielen Dank nocheinmal
Silke
Titel: Re: markierte Dokumente einer Ansicht exportieren
Beitrag von: ata am 06.05.08 - 13:25:55
Zitat
was stimmt denn an der Vorgehensweise nicht 

... bei deiner Zeile:

Set entry = vec.GetEntry(doc)

... erhälst du kein Entry zurück, da das doc nicht eindeutig den Einrag repräsentiert. Damit erhälst du dann im späteren Verlauf Object Variable not set, da die Entry nicht gesetzt werden konnte...

Was genau hast du vor - möchtest du einfach eine Ansicht mit allen Spalten exportieren?

Toni
Titel: Re: markierte Dokumente einer Ansicht exportieren
Beitrag von: scsi am 06.05.08 - 13:42:26
Hallo Toni,

erst einmal Danke für Deine Mühe, der Eintrag ist entzwischen schon sehr lang geworden, aber die Überschrift stimmt noch:

Ich möchte einen universellen Agenten, den ich per Action-Button in verschiedenen Ansichten meiner DB einbinden kann. Der User markiert einen Teil der Dokumente in der Ansicht und erhält die Auswahl als Excel-Export.
(in meinem Test-Agenten habe ich bewußt die ganzen Excel-Formatierungen weggelassen und einfach in eine txt-Datei exportiert, da das bei der Fehlersuche  ja egal ist, wohin die Ausgabe erfolgt.)

Entscheidend ist, das Dokumente in mehreren Kategorien enthalten sein können. Wird nur eine Kategorie markiert, sollen alle Einträge der aus der Ansicht in dieser Kategorie exportiert werden.

Zum Agenten, setze ich mit <Set doc = dc.GetFirstDocument()> nicht das Dok. eindeutig?

Zitat
  ' alle markierten Dokumente durchlaufen
   Set dc = db.UnprocessedDocuments
   Set doc = dc.GetFirstDocument()

Danke.
Silke
Titel: Re: markierte Dokumente einer Ansicht exportieren
Beitrag von: klaussal am 06.05.08 - 14:13:03
Vielleicht solltest Du dir mal das Produkt "Integra" anschauen. Ich weiss, das Teil kostet Geld, spart aber mittel-/langfristig Zeit und Mühen.

http://www.integra4notes.com/ (http://www.integra4notes.com/)
Titel: Re: markierte Dokumente einer Ansicht exportieren
Beitrag von: ata am 06.05.08 - 14:16:43
Hallo Silke,

... das doc ist schon gezogen, das habe ich im Debugger gesehen, aber den Entry, den du damit eindeutig ziehen willst ist eben nicht eindeutig - schau dir mal die Designer-Hilfe zu GetEntry(...) an.

"Object variable not set" bezieht sich nicht auf das doc sondern auf Entry...

Toni
Titel: Re: markierte Dokumente einer Ansicht exportieren
Beitrag von: scsi am 06.05.08 - 14:43:04
Hallo Toni,

ich schaue und schaue, aber es will bei mir nicht "klick" machen.
Also im Debugger sehe ich, dass entry nicht gesetzt wird, siehe hier:

Zitat
notesViewEntryCollection.Count --> stellt fest es gibt 4 Dokumente

view.AllEntries --> geht nur 4 Einträge durch, das es doppelte gab interessiert nicht, nach 4 Einträgen ist einfach Schluss ;-(

Markiere ich also den 5. Eintrag in der Ansicht (also das 4. Dokument), ist die mein <entry> (siehe Script von heute 9:17 Uhr) einfach leer.

und

Zitat
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.

Laut Hilfe kann ich dem <GetEntry> ein Dokument als Parameter übergeben und ich bekomme den Entry in der Ansicht, ... aber ...

Hast Du ein Beispiel, wie ich weiterkomme?
Danke,
Silke
Titel: Re: markierte Dokumente einer Ansicht exportieren
Beitrag von: ata am 06.05.08 - 15:05:12
Hallo Silke,

hast du denn den ViewExcelExport (http://atnotes.de/index.php?topic=40963.msg261527#msg261527) schon angesehen, der zu Beginn von Bernhard vorgeschlagen wurde



Toni
Titel: Re: markierte Dokumente einer Ansicht exportieren
Beitrag von: LN4ever am 06.05.08 - 22:10:08
Der VIEWEXCELEXPORT löst dein Problem nicht, denn der arbeitet so weit ich mich erinnere mit ColumnValues der Dokumente - und die führen bei deinem Problem dazu, daß beim Export dein Mehrfachwert bei jedem Antreffen des Dokuments in der View mit allen Feldwerten aufgeführt wird.

Insofern ist deine Überlegung mit der ViewEntryCollection und dem ViewNavigator schon richtig, denn dort bekommst du die in der View an der Pointerposition stehenden Werte exportiert.

Aber du kannst auf einen Entry mit GetEntry(doc) nur dann aufsetzen, wenn dieses Dokument nur einmal in deiner View auftaucht. Ansonsten gibt es keinen eindeutigen Pointer.

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).

Es ist klar: das ist bei großen Views langsam. Aber alle Alternativen, die schnell sind, haben in Einzelfällen auch Macken (Verschieben in Ordner und dann über alle Entries laufen ist schnell, aber bei antworthierarchischen Views verschiebst du oft mehr als die eigentliche Benutzerauswahl in den Folder).

Gruß

Norbert
Titel: Re: markierte Dokumente einer Ansicht exportieren
Beitrag von: scsi am 08.05.08 - 10:13:36
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.

Code
	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? -->
Zitat
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