Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Catrex am 01.06.04 - 14:17:32
-
Hallo ich bin`s mal wieder und stelle mal wieder euer Fachwissen auf die Probe ;D
Also, die Sache ist folgende. Ich habe eine Maske mit einer eingebetteten Ansicht. Über ein Feld wird ein Wert eingegeben der dann nur eine bestimmt Kategorie der eing. Ansicht anzeigt. Nun ist es ja so das das Drucken unter Notes nicht so pralle ist.
Deshalb meine Überlegung: Man könnte ja evtl. die angezeigten Dokumente markieren und dann nach Excel exportieren um sie dann dort weiter zu bearbeiten.
Deshalb meine Frage ist es generell möglich nur eine bestimmt (ausgewählte) Kategorie einer eing. Ansicht zu exportieren ?
Wie immer wäre ich für eure Meinung dankbar !
mfg
Sebastian ! ! !
-
Hallo,
das ist nicht so schwer. Du hast ja in Deiner Maske wahrscheinlich ein Feld, dass bestimmt welche Kategorie angezeigt wird. Jetzt kannst Du ja über einen Button einen Export starten. Im Code holst Du Dir eine DocumentCollection, die nur die Dokumente enthält, die der Kategorie entsprechen. Dann kannst Du die exportieren.
Falls Du Probleme mit dem Export hast, guck mal im Sandkasten oder bei OpenNTF.org
Da findest Du einen Export, den Du dann anpassen kannst.
Markus
-
Ja danke. So in etwa hatte ich mir das auch vorgestellt. Sollte ich an meine Grenzen stoßen dann werde ich mich hier mal wieder melden. Mir ging es nur darum, dass mir einer sagt, ob das überhaupt geht oder nicht. Nicht das ich mir umsonst gedanken mache ! ;)
P.S.: Was ist denn bitte der "Sandkasten" ?
-
Wegen der "Fachbegriffe" guckst Du hier:
http://www.atnotes.de/index.php?board=12;action=display;threadid=12535;start=0 (http://www.atnotes.de/index.php?board=12;action=display;threadid=12535;start=0)
Viel Spass !
Bernhard
-
Ja lol. Alles klar. Das muss man ja auch erstmal wissen ;D
Dankeschön !
mfg
Sebastian ! ! !
-
Ja hallo, ich melde mich leider schnell als mir lieb ist.
Ich musste feststellen das ich doch nich einige Probleme mit dem LotusScript habe.
mir ist einfach nicht klar (auch mit der Hilfe) wie ist zum einen die eingebettete Ansicht als view festlege und ich bekomme es auch leider nicht hin, wie man einen Feldwert als selektion der Kategorie im Script angibt !
Für die beiden Hinweise wäre ich echt sehr dankbar.
mfg
Sebastian ! ! !
-
Keiner eine Idee ?
also ich mache doch sowas in der Richtung:
Dim dc As NotesDocumentCollection
Set dv = db.Search................
und genau da ist mein Problem ich weiss nicht wie ich das Searchkommando aufbauen soll und leider auch nicht ich einen Feldwert mit einbringen kann
"Help, I need somebody HELP !" :D
mfg
Sebastian ! ! !
-
Also, die eingebette Ansicht kannst Du ansprechen, wie jede andere Ansicht auch (Stichwort NotesDatabase.GetView)
Und die DocumentCollection holst Du Dir dann von der View und nicht über ein db.Search (Stichwort NotesView.GetAllDocumentsByKey)
Wenn Du noch Probs hast, frag einfach nochmal nach. Ich habs am Anfang auch nicht anders gemacht. ;-)
Markus
-
Die View kannst Du direkt ansprechen (heißt über den Viewnamen oder -alias), die ist ja nicht nur in der Maske als Embedded Object da, sondern auch normal ansprechbar.
Für die Suche brauchst Du die View aber nicht. Dafür baust Du dir mir db.search eine DocCollection.
In der Hilfe ist das eigentlich auch recht gut beschrieben.
-
Wenn er über db.Search geht, dann brauch er die view nicht. und wenn er über die view geht, dann bracuht er db.Search nicht. ;-)
-
Stimmt, ist also mehr oder weniger Geschmackssache, wobei der Weg über die View in dem Fall einfacher sein sollte ;)
-
Leute macht mich nicht feritg ;)
also ich habe das nun so gemacht:
Set view = db.GetView("Ansichtenname")
Set dc = view.GetAllDocumentsByKey(Feldname, True)
geht das denn so mit dem "feldname" oder muss da nen Text stehen ? weil ich will ja nur die exportieren die dann auch in einem bestimmten Feld gewähl werden.
Ja einen normales Export habe ich ja schon hinbekommen aber ich bin mir nicht so im klaren darüber wie man denn nun mit der DC weiterarbeitet ?
-
Feldname muss heissen: NotesDocument.Feldname (0), wobei NotesDocument das Dokument ist, in dem der User seine zu selektierende Kategorie ausgewählt hat. Sicherlich wirst Du das über
NotesUIWorkspace.CurrentDocument.Document instantiiert haben.
Aber mal eine Frage, bevor Du jetzt weiter machst: Wenn Du jetzt mit der Selektion der Dokumente auf Probleme stösst - hast Du Dir schon Gedanken gemacht, wie Du dann den eigentlichen Excel-Import in LS bewerkstelligst ? Das ist nämlich auch nicht gerade trivial.
Bernhard
-
Ja das meinte ich ja mit weitermachen. Ich wiess nicht ob ich eine Dokumentenselktion so beim Export nach Excel behaneln kann wie eine komplette view oder ob ich da was beachten muss.
Einen Export einer gazen view nach Excel habe ich ja schon gemacht !
-
Es ist fast das gleiche, wie aus einer View zu exportieren.
Du musst Dir halt in einer Schleife alle Docs schnappen und die Werte (Felder) exportieren, die in Excel landen sollen.
Wenn Du einen View Export gebacken bekommen hast, dann schaffst Du das auch. ;-)
-
ja ok das bekomme ich ihn. Mit schleife und so weiter.
Eine Sache habe ich nocht:
Ich bestimmt die Kategorie der eing. Ansciht über eine Feld in einer Maske. Aber wie komme ich an diesen Fledwert ran, so dass ich ihn hier [Set dc = view.GetAllDocumentsByKey(Feldname, True)] als Selektionskriterium verwenden kann ?
Das bekomme ich einfach nicht hin der Rest scheint wohl zu laufen
-
Das hat Bernhard doch oben beschrieben. Du schnappst Dir das CurrentDocument und kannst dann über das Document auf die Felder zugreifen.
-
ja das weiss ich aber ich denke ich stelle mich ein wenig zu dumm. Denn das klappt nicht so wie ich es gerne möchte
ich will doch einfach nur an einen Feldwerte aus einer Maske kommen :(
-
Du machst das doch aus einem geöffneten Dokument heraus, wenn ich das richtig verstanden habe ? Dann schau Dir in der DesignerHelp die Klasse NotesUIDocument an. Dir hier einen fertigen Code zu posten (auch wenn es nur wenig Zeilen sind), hilft Dir nicht wirklich weiter.
Bernhard
-
Das habe ich nun schon 20mal gemacht ich komme nicht drauf ich bekomme immer wieder Fehlermeldungen. Kann mir nicht bitte einer sagen wie ich das machen muss. Danke !
-
Poste mal den Code, den Du schon fertig hast.
-
Ok, aber nicht lachen :D
Sub Click(Source As Button)
Dim workspace As New NotesUIWorkspace
Dim session As New NotesSession
Dim db As NotesDatabase
Dim ansicht As NotesView
Dim auswahl As NotesDocumentCollection
Dim uidoc As NotesUIDocument
Dim maske As NotesForm
Set db = session.CurrentDatabase
Set maske = db.GetForm("Auswertung - Kunde + Jahr")
Set ansicht = db.GetView("Auswertung Kunde und Jahr")
Set auswahl = ansicht.GetAllDocumentsByKey("TextXY", True)
Messagebox(auswahl.count)
Messagebox(maske.Name)
Messagebox(ansicht.Name)
End Sub
Naja und da wo nun TextXY steht muss ich ja irgendwie den Wert des Selektionsfeldes reinbekommen.
Ich habe das schon mit Getfieldtext versucht aber das lief immer auf eine Fehlermeldung raus :(
-
Schick mir mal eine PM mit Deiner Mailadresse. Lotus hat vor Jahren sowohl zu R4 als auch zu R5 ein "LotusScript Technical Learning Center" veröffentlicht (Freeware), die sich heute aber leider nicht mehr als Download findet.
Die Datenbank beschreibt Schritt für Schritt und mit Beispielen den Umgang mit den LotusScript NotesClasses. Sowas hilft Dir bestimmt weiter. Ich schick' Dir das Ding gerne.
Bernhard
-
Hi,
so sollte es gehen:
Sub Click(Source As Button)
Dim workspace As New NotesUIWorkspace
Dim session As New NotesSession
Dim db As NotesDatabase
Dim ansicht As NotesView
Dim auswahl As NotesDocumentCollection
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
'Dim maske As NotesForm
Set db = session.CurrentDatabase
'Zugriff auf das aktuell geöffnete Dokument
Set uidoc = workspace.CurrentDocument
'Die Zeile brauchst du nicht
'Set maske = db.GetForm("Auswertung - Kunde + Jahr")
Set ansicht = db.GetView("Auswertung Kunde und Jahr")
'Mit uidoc.FieldGetText("Name des Auswahlfeldes") bekommst du den Wert aus
'dem Feld mit dem entsprechenden Namen.
'Den Feldnamen "Name des Auswahlfeldes" mußt du natürlich durch deinen Feldnamen ersetzen.
Set auswahl = ansicht.GetAllDocumentsByKey(uidoc.FieldGetText("Name des Auswahlfeldes"), True)
Messagebox(auswahl.count)
Messagebox(ansicht.Name)
'Zugriff auf die gefundenen Dokumente
Set doc = auswahl.GetFirstDocument
While Not (doc Is Nothing)
'Tu was du willst mit den Dokumenten
...
Set doc = auswahl.GetNextDocument(doc)
Wend
End Sub
Die Änderungen habe ich fett geschrieben
Axel
-
Jo, so sollte es laufen. Jetzt musst Du nur noch den Export da rein basteln.
@Bernhard und alle anderen :-) : Bei Codestore gibts das "LotusScript Technical Learning Center" online http://www.codestore.net/docs/ls50ltlc.nsf/0/c2f0b87ac131def3852564f0000817e1?OpenDocument (http://www.codestore.net/docs/ls50ltlc.nsf/0/c2f0b87ac131def3852564f0000817e1?OpenDocument)
-
... und auch den Verweis, wo man es herunterladen kann:
http://web.archive.org/web/20001022055345/www.lotus.com/wwbpp/action.nsf/101b68a264bc2592852564c000556c79/aadd59b3e427f00c852564e3004929df?OpenDocument (http://web.archive.org/web/20001022055345/www.lotus.com/wwbpp/action.nsf/101b68a264bc2592852564c000556c79/aadd59b3e427f00c852564e3004929df?OpenDocument)
Danke für den Hinweis, Markus !
-
Hallo ich hoffe ihr hattet alle ein schönes Wochenende denn nun nerve ich wieder ein wenig ;)
So nach langem hin und her habe ich nun auch einen fertigen Export - dachte ist. Das doofe ist nur er klappt nicht
Ich habe folgendes geschrieben:
Set doc = auswahl.Getfirstdocument
cols = 1
rows = 2
maxcols = auswahl.count
While Not (doc Is Nothing)
For cols = 0 To maxcols-1
getfield = Cstr(doc.ColumnValues(cols))
xlsheet.Cells(rows,cols+1).Value = getfield
Next
rows = rows + 1
cols = 0
Set doc = auswahl.Getnextdocument(doc)
Wend
xlApp.Statusbar = "Import der Daten beendet..."
Der Fehler liegt so wie ich das sehe in der Zeile mit getfield = Cstr(...)
Ich bekomme dann folgende Fehlermeldung: "Variant does not contain to countainer" und das verstehe ich nicht wirklich. muss ich vielleicht doch was anderes machen weil sich sich ja um eine DocumentColletion handelt und nicht um eine komplette View !
Wäre nett wenn einer was weiss !
mfg
Sebastian ! ! !
-
Klar musst Du da was anderes machen. ;)
Ich geh mal davon aus, dass Du ein paar Felder aus dem Dok exportieren möchtest. Folgender Code sollte laufen (Du musst nur Deine Feldnamen eintragen) :)
Set doc = auswahl.Getfirstdocument
rows = 2
While Not (doc Is Nothing)
xlsheet.Cells(rows,1).Value = doc.Feld1(0)
xlsheet.Cells(rows,2).Value = doc.Feld2(0)
xlsheet.Cells(rows,3).Value = doc.Feld3(0)
xlsheet.Cells(rows,4).Value = doc.Feld4(0)
rows = rows + 1
Set doc = auswahl.Getnextdocument(doc)
Loop
xlApp.Statusbar = "Import der Daten beendet..."
Markus
-
Mmmh, das wäre sicherlich ein Alternative aber ist es denn nicht auch möglich die Werte aus er Ansicht, also aus den jeweiligen Spalten zu exportieren ?
Das geht ja bei einer normalen Ansicht auch, oder ist das dann der Nachteil einer DocumentCollection ?
-
Hi,
das ist kein Nachteil der DocumentCollection, sondern das hängt mit der Eigenschaft ColumnValues zusammen.
...
If you do not access the document through a view, this property has no value.
...
Dieser Satz aus der Online-Hilfe sagt eigentlich alles. Du greifst nicht über eine Ansicht zu, sondern über eine Kollektion. Damit kannst du mit dieser Eigenschaft nichts anfangen, sondern musst über die Felder gehen. So wie es Markus beschrieben hat.
Axel
-
Obicht, Sebastian - übernimm' nichts an Code, was Du nicht wirklich und grundsätzlich verstanden hast. NotesView, NotesDocumentCollection und NotesViewEntryCollection sind erstmal grundverschiedene Klassen, mit denen Du Dich vorab vertraut machen musst.
Was mir immer sehr hilft: Mach' Dir eine simple Test-Datenbank (z.B. eine Adress-DB, über deren Sinn udn Zweck und Funktionieren man sich keine Gedanken mehr machen muss) und probiere dort prinzipiell aus, was Du später in Deiner eigentlichen Entwicklungsarbeit verwenden möchtest. So entfällt schon erstmal das Nachdenken über und die Nebenwirkungen von komplexeren Situatonen.
Und nie-nie-niemals Code verwenden, den man nicht komplett verstanden hat.
HTH,
Bernhard
-
Nein das mache ich auch nicht. Das ist ja am Ziel vorbeigeschossen.
Also ich mach da Thema nun zu, ich denke es ist alles gesagt.
Zumindest hoffe ich das !;)