Autor Thema: Abfrage einer Ansicht per Dialogbox und speichern der Abfrage in einem Feld  (Gelesen 3332 mal)

Offline MarkusL

  • Aktives Mitglied
  • ***
  • Beiträge: 124
  • Geschlecht: Männlich
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
« Letzte Änderung: 29.04.11 - 09:06:35 von MarkusL »
Version Lotus Notes / Domino: 8.5.3
Server: 1 Cluster, 1 weiterer Server
Anzahl Benutzer: ca. 230

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Was meinst Du denn, was diese Zeilen bewirken:

Code
Ansicht=Evaluate(|Views|,doc)
   
Call doc.ReplaceItemValue("Views",SortedArray)

Bernhard

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
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

Offline MarkusL

  • Aktives Mitglied
  • ***
  • Beiträge: 124
  • Geschlecht: Männlich
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
Version Lotus Notes / Domino: 8.5.3
Server: 1 Cluster, 1 weiterer Server
Anzahl Benutzer: ca. 230

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
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

Offline MarkusL

  • Aktives Mitglied
  • ***
  • Beiträge: 124
  • Geschlecht: Männlich
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
Version Lotus Notes / Domino: 8.5.3
Server: 1 Cluster, 1 weiterer Server
Anzahl Benutzer: ca. 230

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
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.

Offline MarkusL

  • Aktives Mitglied
  • ***
  • Beiträge: 124
  • Geschlecht: Männlich
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
Version Lotus Notes / Domino: 8.5.3
Server: 1 Cluster, 1 weiterer Server
Anzahl Benutzer: ca. 230

Offline MarkusL

  • Aktives Mitglied
  • ***
  • Beiträge: 124
  • Geschlecht: Männlich
Noch ein Nachsatz:

Mit auf erledigt setzten, meinte ich den Thread in diesem Forum.
Dafür habe ich noch keinen Button oder ähnliches gefunden.  :-:


 
Version Lotus Notes / Domino: 8.5.3
Server: 1 Cluster, 1 weiterer Server
Anzahl Benutzer: ca. 230

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
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  ;)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
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.

Offline MarkusL

  • Aktives Mitglied
  • ***
  • Beiträge: 124
  • Geschlecht: Männlich
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.

Danke nochmal für die Hilfe.
Version Lotus Notes / Domino: 8.5.3
Server: 1 Cluster, 1 weiterer Server
Anzahl Benutzer: ca. 230

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz