Domino 9 und frühere Versionen > ND6: Entwicklung
markierte Dokumente einer Ansicht exportieren
koehlerbv:
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
scsi:
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
koehlerbv:
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 hier im Forum schon mal angeschaut? Vielleicht hilft Dir dieser Code weiter.
Bernhard
scsi:
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
--- Ende Code ---
(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
LN4ever:
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
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln