Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: MarkusL am 27.04.11 - 14:20:26
Titel: Abfrage einer Ansicht per Dialogbox und speichern der Abfrage in einem Feld
Beitrag von: MarkusL am 27.04.11 - 14:20:26
Hallo zusammen,
nachdem mir hier bei meinem letzten Problem so gut geholfen wurde, versuche ich es jetzt nochmal. Leider habe ich bisher keine Lösung für mein Problem gefunden. (Ich habe wirklich lange gesucht)
Problemstellung: Ich benötige in einer Maske eine Schaltfläche, die mir eine Dialogbox aufmacht, in welcher ich eine Ansicht aus der aktuellen Datenbank auswählen kann. Anschließend soll diese ausgewählte Ansicht in einem bestimmten Feld als Vorgabe abgespeichert werden.
Hierfür habe ich das foldende Script zusammengebastelt. Leider wird mir in der Dialogbox nur eine leere Auswahlmaske angezeigt. Ich habe keine Ahnung, warum????? Bin für jede Hilfe dankbar.
Sub Click(Source As Button) Dim session As New NotesSession Dim wks As New NotesUIWorkspace Dim uidoc As NotesUIDocument Dim Doc As notesdocument Dim db2 As NotesDatabase
Set uidoc = wks.CurrentDocument Set doc = Uidoc.Document Set db2 = session.currentdatabase
Views = db2.Views
I = -1 Forall V In Views I = I + 1 Redim Preserve Ansichten ( 0 To I ) If Left(V.Name,1) = "(" Then I = I - 1 : Goto Skip Ansichten( I ) = V.Name Skip: End Forall
doc.Views = Ansichten()
Ansicht=Evaluate(|Views|,doc)
Call doc.ReplaceItemValue("Views",SortedArray)
Ansicht=Evaluate(|Views|,doc)
Ansicht = wks.Prompt(4, "Ansichten....", "Bitte wählen Sie die zu exportierende Ansicht", Ansicht(0), Ansicht) If Ansicht <> "" Then uidoc.FieldSetText("Ansicht"), Ansicht uidoc.Refresh
Dim View As NotesView Set View = db2.GetView(Ansicht) Dim Formula As String Formula = view.SelectionFormula uidoc.FieldSetText("ViewFormula"),Formula End If End Sub
Titel: Re: Abfrage einer Ansicht per Dialogbox und speichern der Abfrage in einem Feld
Beitrag von: koehlerbv am 27.04.11 - 14:28:35
Titel: Re: Abfrage einer Ansicht per Dialogbox und speichern der Abfrage in einem Feld
Beitrag von: Peter Klett am 27.04.11 - 14:36:39
Bernhard war schneller ...
Falls Du noch etwas anderes optimieren willst, finde ich dieses Konstrukt nicht gerade geglückt
Forall V In Views I = I + 1 Redim Preserve Ansichten ( 0 To I ) If Left(V.Name,1) = "(" Then I = I - 1 : Goto Skip Ansichten( I ) = V.Name Skip: End Forall
Wie wäre es denn damit:
Forall V In Views If Left(V.Name,1) <> "(" Then I = I + 1 Redim Preserve Ansichten ( 0 To I ) Ansichten( I ) = V.Name End If End Forall
Titel: Re: Abfrage einer Ansicht per Dialogbox und speichern der Abfrage in einem Feld
Beitrag von: MarkusL am 27.04.11 - 15:59:24
Hallo,
vielen Dank für die Hilfe. Mit euren Hinweisen und Verbesserungsvorschlägen läuft das Script jetzt.
Noch eine Frage: Wie kann ich hier einen Eintrag als erledigt kennzeichnen? Ich habe bisher keinen Button oder ähnliches gefunden.
Hier nochmal das komplette Script:
Sub Click(Source As Button) Dim session As New NotesSession Dim wks As New NotesUIWorkspace Dim uidoc As NotesUIDocument Dim Doc As notesdocument Dim db2 As NotesDatabase
Set uidoc = wks.CurrentDocument Set doc = Uidoc.Document Set db2 = session.currentdatabase
Views = db2.Views
Forall V In Views If Left(V.Name,1) <> "(" Then I = I + 1 Redim Preserve Ansichten ( 0 To I ) Ansichten( I ) = V.Name End If End Forall
doc.Views = Ansichten()
Ansicht=Evaluate(|Views|,doc)
Ansicht = wks.Prompt(4, "Ansichten....", "Bitte wählen Sie die zu exportierende Ansicht", Ansicht(0), Ansicht) If Ansicht <> "" Then uidoc.FieldSetText("Ansicht_Export"), Ansicht uidoc.Refresh
End If End Sub
Titel: Re: Abfrage einer Ansicht per Dialogbox und speichern der Abfrage in einem Feld
Beitrag von: koehlerbv am 27.04.11 - 16:13:28
Ich verstehe immer noch nicht, wozu Du dieses krude Konstrukt verwendest:
Ansicht=Evaluate(|Views|,doc)
Und wozu brauchst Du das Item "Ansichten" in doc?
Bernhard
Titel: Re: Abfrage einer Ansicht per Dialogbox und speichern der Abfrage in einem Feld
Beitrag von: MarkusL am 27.04.11 - 16:31:45
Hallo Bernhard,
ehrlich gesagt, habe ich mir dieses Konstrukt aus einer DB von einem Kollegen kopiert, der nicht mehr bei uns arbeitet. Mit ein wenig eigenem Gewürz kam dann dieses Script raus, welches zumindest das macht, was ich brauche. Mit Sicherheit gibt es schönere Lösungen. Weitergehende Kenntnisse fehlen mir aber zur Zeit.
Wenn ich die beiden von dir angesprochenen Zeilen auskommentiere, funktioniert das Script nicht mehr. Daher lasse ich sie drin.
Ich weiß, man sollte nicht einfach blind etwas nehmen, ohne zu wissen, was es bewirkt. Aber erstens fehlt mir ein wenig die Zeit und zweitens solange es klappt ..............
Bin natürlich offen für neue Anregungen, Ideen oder Erklärungen.
Gruß Markus
Titel: Re: Abfrage einer Ansicht per Dialogbox und speichern der Abfrage in einem Feld
Beitrag von: Peter Klett am 27.04.11 - 16:55:29
Um die exportierten Ansichten als erledigt zu markieren, musst Du das alles etwas umbauen.
Zum Beispiel so:
In ein Feld im Dokument schreibst Du alle Ansichten Nur wenn dieses Feld leer ist, holst Du mit Deinem Script die Ansichten aus der Datenbank Zur Auswahl verwendest Du den Inhalt dieses Feldes Nach Auswahl ergänzt Du die gewählte Ansicht in dem Ansichtenfeld mit einem Kennzeichen
(in Formel z.B. so FIELD Ansichten := @Replace (Ansichten; Ansicht; "[EXPORTIERT] " + Ansicht)
Bei der nächsten Auswahl prüfst Du vor dem Export, ob eine gekennzeichnete Ansicht ausgewählt wurde. Entweder verweigerst Du dann den Export oder Du korrigierst den Ansichtsnahmen, damit der Export funktioniert.
Titel: Re: Abfrage einer Ansicht per Dialogbox und speichern der Abfrage in einem Feld
Beitrag von: MarkusL am 27.04.11 - 17:18:38
Hallo Peter,
ich glaube, du hast meinen Bedarf nicht ganz verstanden. Ich will im Prinzip einfach über einen Button eine vorhandene Ansicht auswählen und diese Auswahl in einem Feld abspeichern. In diesem Feld steht somit nur ein Wert. Bei der nächsten Auswahl wird das Feld dann einfach überschrieben. Das funktioniert mit dem oben angegebenen Script - so wie ich es will und brauche.
Den Feldwert nehme ich dann, um mit einem anderen Script die Daten aus der voreingestellten Ansicht nach Excel zu exportieren. Das zweite Script funktioniert auch.
Somit läuft alles wie es soll und ich und demnächst auch meine Kollegen sind glücklich und zufrieden.
Ich danke nochmal für die Hilfe. Ich habe mir schon einige Dinge in diesem Forum angesehen und es hat mir geholfen. Aber als Notes-Anfänger muss man sich halt das eine oder andere erstmal zurechtbiegen. Über das, was ich heute schon kann, wäre ich vor einem Jahr froh gewesen. Aber es geht voran.
Schöne Grüße Markus
Titel: Re: Abfrage einer Ansicht per Dialogbox und speichern der Abfrage in einem Feld
Beitrag von: MarkusL am 27.04.11 - 17:20:59
Noch ein Nachsatz:
Mit auf erledigt setzten, meinte ich den Thread in diesem Forum. Dafür habe ich noch keinen Button oder ähnliches gefunden. :-:
Titel: Re: Abfrage einer Ansicht per Dialogbox und speichern der Abfrage in einem Feld
Beitrag von: Peter Klett am 27.04.11 - 18:03:31
Du editierst Deinen ersten Beitrag und setzt das Symbol auf "Daumen hoch", dann gilt der Thread als erledigt.
Nettes Mißverständnis, aber das mit den Ansichten hätte auch funktioniert ;)
Titel: Re: Abfrage einer Ansicht per Dialogbox und speichern der Abfrage in einem Feld
Beitrag von: koehlerbv am 27.04.11 - 22:47:46
Hallo Markus,
noch ein paar Tipps meinerseits:
1. Unverstandenen Code sollte man niemals benutzen - das ist unverantwortlich ("es funktioniert" ist dann immer eine Null-Aussage, wenn man nicht weiss, warum) und kann durchaus ein Schuss ins eigene Knie werden.
2. Verwendende sprechende und sinnvolle Variablennamen. "wks" und "session" ist schon okay - die kann es eh immer nur einmal geben (sollten aber dann auch immer stringent benamst werden). "I" oder "Ansicht" ist sinnfrei.
3. Verwende IMMER Option Declare. Dir wäre da einiger Murks im Code bereits aufgefallen!
4. Dein gefundenes Evaluate-Konstrukt funktioniert (von hinten durch die Brust ins Auge), ist ammer wirklich dumm. Ein Ansicht = Ansichten oder Ansicht = doc.Views tut das selbe. Ist aber immer noch dumm. Siehe 5.
5. Du verwendest "Ansicht" als Parameter (hier als Array!) wie auch als Ziel (jetzt aber als skalarer Wert!) einer Operation. Kann man unter Umständen machen, ist aber immer *BÖSE*. Verwende hierfür eigene Variable - und vergebe dafür wieder sprechende Namen. Du siehst sonst später selber nicht mehr durch.
6. Du solltest jetzt auch sehen, dass Du locker Variable und Items einsparen kannst.
WICHTIG: Ordnung und Sauberkeit im Schlachthaus!Und immer ganz genau wissen, was man tut. Niemals sagen: Komisch, funktioniert ja doch!
HTH, Bernhard
PS: Bitte missverstehe meinen Beitrag nicht - der war nicht "böse", sondern erfahrungsvoll warnend gemeint. Ich weiss da wirklich, wovon ich rede / schreibe.
Titel: Re: Abfrage einer Ansicht per Dialogbox und speichern der Abfrage in einem Feld
Beitrag von: MarkusL am 29.04.11 - 09:05:10
Hallo Bernhard,
danke für die Tipps. Ich weiß das auch aus eigener Erfahrung. Leider ist Lotus Script nicht so ganz einfach und man muss dann im Alltag schonmal 5 gerade sein lassen. Aber generell gebe ich dir recht.