Autor Thema: megasimples Problem/Zugriff auf mail-DB  (Gelesen 4160 mal)

Offline vbis

  • Frischling
  • *
  • Beiträge: 23
megasimples Problem/Zugriff auf mail-DB
« am: 14.09.12 - 12:11:46 »
Hallo zusammen,

vorab muss ich mich für die folgende megasimple Frage entschuldigen, aber ich habe in der Vergangenheit fast nur mit Formelsprache gearbeitet und den Zugang zu Lotus Script noch nicht so richtig gefunden....

Ich habe aus einer Vorlage vor Ewigkeiten mal eine grafische Anzeige der Mail-Datenbankbelegung auf Basis der Quota eingebunden. Da unser Rechenzentrum jetzt alle Maildatenbanken zentralisieren will und dann nur noch die Standard-Schablone mit dem Basic-Client zum Einsatz kommen können, wollte ich nun die grafische Anzeige in eine andere Know-How Datenbank einbinden, sodass die User wenigstens über diesen Umweg die Belegung einfach und grafisch erkennen können...

Der ursprüngliche Code, der auch (noch) in den User-Maildatenbanken in der Maske "SwitchewrForm_Mail" in Kombination mit berechneten "Display"-Feldern funktioniert, lautet:

Sub Postopen(Source As Notesuidocument)
   
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Set db=session.CurrentDatabase
   Dim doc As NotesDocument
   Set doc=Source.Document
   Size = Cdbl(db.Size) / 1024/1024
   If db.SizeQuota=0 Then
      doc.SizeImgBad=""
      doc.SizeImgWarn=""      
      doc.SizeImgGood=""      
      doc.RestSizeImg=""
      doc.SizeDescription=Cstr(Round(db.Size,0)/1024/1024)+"MB"      
      Exit Sub
   End If
   MaxSize = Cdbl(db.SizeQuota)/1024
   WarnSize =Cdbl(db.SizeWarning)/1024
   Score=Round(Round(Size,0)/Round(WarnSize,0)*100,1)
   Scoreall=Round(Round(Size,0)/Round(MaxSize,0)*100,1)
   'Below 75% the bar is green, above it, it becomes red
   If Score<75 Then
      doc.SizeImgGood=String(Round((Score)/10,0),"g")
      doc.SizeImgBad=""
      doc.RestSizeImg=String(10-Round((Score)/10,0),"g")
   Else
      If Score<95 Then
         doc.SizeImgWarn=String(Round((Score)/10,0),"g")   
         doc.RestSizeImg=String(10-Round((Score)/10,0),"g")
      Else
         If Score<=100 Then
            doc.SizeImgBad=String(Round((Score)/10,0),"g")
            doc.RestSizeImg=String(10-Round((Score)/10,0),"g")
         Else
            If Score>100 Then
               doc.SizeImgBad=String(Round((Scoreall)/10,0),"g")
               doc.RestSizeImg=String(10-Round((Scoreall)/10,0),"g")
            Else
               doc.SizeImgBad=String(10,"g")
               doc.SizeImgGood=""   
               doc.RestSizeImg=""
            End If
         End If
      End If
   End If      
   doc.SizeDescription= (Score)+"%"
   
End Sub


Jetzt ich meine simple Meinung, dass ich eigentlich nur unter set db die Mail-Datenbank aufrufen müsste... oder? Leider finde ich keinen Eintrag in den diversen Foren, da meine Fähigkeiten und Kenntnisse im Bereich Script doch leider sehr begrenzt sind.

Ich wäre sehr dankbar, wenn jemand Licht ins Dunkel bringen könnte und mir bei der Lösung helfen könnte... ist bestimmt ganz einfach :-)

Mitch

  • Gast
Re: megasimples Problem/Zugriff auf mail-DB
« Antwort #1 am: 14.09.12 - 12:20:21 »
Heyho,

schau die mal die Methode "OpenMail" der NotesDatabase Klasse an.

Gruß,

Mitch

Offline Klafu

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.944
  • Geschlecht: Männlich
  • Remember the Cookies!
Re: megasimples Problem/Zugriff auf mail-DB
« Antwort #2 am: 14.09.12 - 12:27:12 »
Hallo vbis,
Wenn ich über einen Agent in der MailDB die Quota möchte, reicht mir ein:

Dim session As NotesSession
Dim Maildb As NotesDatabase
Set session = New NotesSession
Set Maildb = session.Currentdatabase
...
doc.DatabaseSizeMax = (maildb.Sizequota/1024) & " MB"


Chris
„Der einzige Mensch, der sich vernünftig benimmt, ist mein Schneider. Er nimmt jedesmal neu Maß, wenn er mich trifft, während alle anderen immer die alten Maßstäbe anlegen in der Meinung, sie paßten auch heute noch...“

Offline vbis

  • Frischling
  • *
  • Beiträge: 23
Re: megasimples Problem/Zugriff auf mail-DB
« Antwort #3 am: 17.09.12 - 14:13:31 »
Hallo Chris,

wenn ich den Script in der anderen Datenbank eingebe/anpasse und den Agenten ausführe, bekomme ich den Fehler: "Database has not been openes yet"

Kann ich auf dem beschriebenen Weg auch datenbankübergreifend mir die Werte holen und anzeigen lassen? Wie gesagt... Script ist nicht so meins....

Danke im voraus und viele Grüße
vbis

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: megasimples Problem/Zugriff auf mail-DB
« Antwort #4 am: 17.09.12 - 14:22:21 »
Mitch hat Dir doch schon geschrieben, wie Du es machen sollst.

Also ganz zu Fuß eins zu eins aus der Hilfe kopiert. Wo ist das Problem?

   Dim session As New NotesSession
   Dim db As NotesDatabase
   Set db=session.CurrentDatabase

   Dim db As New NotesDatabase( "", "" )
   Call db.OpenMail
   Dim doc As NotesDocument
  ...

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: megasimples Problem/Zugriff auf mail-DB
« Antwort #5 am: 17.09.12 - 14:22:34 »
Hallo,

Welchen Code hast Du denn in dem Agenten?

Und natuerlich kannst Du auch Daten aus anderen Datenbanken auslesen.


Andreas

Offline vbis

  • Frischling
  • *
  • Beiträge: 23
Re: megasimples Problem/Zugriff auf mail-DB
« Antwort #6 am: 17.09.12 - 14:46:13 »
Hi,

ich habe es mit 2 verschiedenen Schaltflächen in einer Maske der zweiten Datenbank probiert.

Versuch 1 entsprechend Hinweis von Chris (mit dem Fehler Database has not been opened yet):
Sub Click(Source As Button)
   
   Dim server As String, mailfile As String
   Dim session As NotesSession
   Dim Maildb As NotesDatabase
   Set session = New NotesSession
   Set Maildb = session.Currentdatabase
   Dim db As NotesDatabase
   Set db=session.getdatabase(server, mailfile)
   Dim doc As NotesDocument
   
   Size = Cdbl(db.Size) / 1024/1024
   If db.SizeQuota=0 Then
      doc.SizeImgBad=""
      doc.SizeImgWarn=""      
      doc.SizeImgGood=""      
      doc.RestSizeImg=""
      doc.DatabaseSizeMax = (maildb.Sizequota/1024) & " MB"
      Exit Sub
   End If
   MaxSize = Cdbl(db.SizeQuota)/1024
   WarnSize =Cdbl(db.SizeWarning)/1024
   Score=Round(Round(Size,0)/Round(WarnSize,0)*100,1)
   Scoreall=Round(Round(Size,0)/Round(MaxSize,0)*100,1)
   'Below 75% the bar is green, above it, it becomes red
   If Score<75 Then
      doc.SizeImgGood=String(Round((Score)/10,0),"g")
      doc.SizeImgBad=""
      doc.RestSizeImg=String(10-Round((Score)/10,0),"g")
   Else
      If Score<95 Then
         doc.SizeImgWarn=String(Round((Score)/10,0),"g")   
         doc.RestSizeImg=String(10-Round((Score)/10,0),"g")
      Else
         If Score<=100 Then
            doc.SizeImgBad=String(Round((Score)/10,0),"g")
            doc.RestSizeImg=String(10-Round((Score)/10,0),"g")
         Else
            If Score>100 Then
               doc.SizeImgBad=String(Round((Scoreall)/10,0),"g")
               doc.RestSizeImg=String(10-Round((Scoreall)/10,0),"g")
            Else
               doc.SizeImgBad=String(10,"g")
               doc.SizeImgGood=""   
               doc.RestSizeImg=""
            End If
         End If
      End If
   End If      
   doc.SizeDescription= (Score)+"%"
   
End Sub

Versuch 2 entsprechend Hinweis von Mitch (Fehler bei set doc=source.Document):
Sub Click(Source As Button)
   
   Dim session As New NotesSession
   Dim db As New NotesDatabase( "", "" )
   Call db.OpenMail
   Dim doc As NotesDocument
   Set doc=source.Document
   Size = Cdbl(db.Size) / 1024/1024
   If db.SizeQuota=0 Then
      doc.SizeImgBad=""
      doc.SizeImgWarn=""      
      doc.SizeImgGood=""      
      doc.RestSizeImg=""
      doc.SizeDescription=Cstr(Round(db.Size,0)/1024/1024)+"MB"      
      Exit Sub
   End If
   MaxSize = Cdbl(db.SizeQuota)/1024
   WarnSize =Cdbl(db.SizeWarning)/1024
   Score=Round(Round(Size,0)/Round(WarnSize,0)*100,1)
   Scoreall=Round(Round(Size,0)/Round(MaxSize,0)*100,1)
   'Below 75% the bar is green, above it, it becomes red
   If Score<75 Then
      doc.SizeImgGood=String(Round((Score)/10,0),"g")
      doc.SizeImgBad=""
      doc.RestSizeImg=String(10-Round((Score)/10,0),"g")
   Else
      If Score<95 Then
         doc.SizeImgWarn=String(Round((Score)/10,0),"g")   
         doc.RestSizeImg=String(10-Round((Score)/10,0),"g")
      Else
         If Score<=100 Then
            doc.SizeImgBad=String(Round((Score)/10,0),"g")
            doc.RestSizeImg=String(10-Round((Score)/10,0),"g")
         Else
            If Score>100 Then
               doc.SizeImgBad=String(Round((Scoreall)/10,0),"g")
               doc.RestSizeImg=String(10-Round((Scoreall)/10,0),"g")
            Else
               doc.SizeImgBad=String(10,"g")
               doc.SizeImgGood=""   
               doc.RestSizeImg=""
            End If
         End If
      End If
   End If      
   doc.SizeDescription= (Score)+"%"
   
End Sub

Mir ist schon klar, dass das Problem für regelmäßig programmierende Leser albern klingt, aber ich kanns halt nicht und würde mich sehr freuen, wenn mir jemand "auf die Beine" helfen würde  :-:

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: megasimples Problem/Zugriff auf mail-DB
« Antwort #7 am: 17.09.12 - 14:52:41 »
Beispiel 1:
Wo werden die Variablen server und mailfile belegt, die Du bei session.GetDatabase verwendest?

Beispiel 2:
Du kannst hier Source nicht verwenden, da Source der Button ist.


Andreas

Mitch

  • Gast
Re: megasimples Problem/Zugriff auf mail-DB
« Antwort #8 am: 17.09.12 - 14:53:50 »
In Versuch 2:

Was du in "doc" haben möchtest, ist das Backend des aktuell offenen Dokumentes/bzw. der Maske.

Dafür gehst du über den NotesUIWorkspace und holst dir das NotesUiDocument. In diesem findest du dann das Backend-Dokument, das du in dein "doc" schieben kannst.

Die Designer-Hilfe und die dortigen Beispiele sind meistens echt gut. Fertigen Code möchte ich dir daher nicht geben. Ist aber auch ganz einfach. Mit einer neuen Zeile und einer geänderten Zeile wärst du schon fast am Ziel... :)

Danach müsstest du noch die Maske neu laden, damit die Änderungen auch sichtbar werden. Also noch eine Zeile.

Gruß,

Mitch

Offline vbis

  • Frischling
  • *
  • Beiträge: 23
Re: megasimples Problem/Zugriff auf mail-DB
« Antwort #9 am: 21.09.12 - 09:42:22 »
Hallo Mitch,

ich habe jetzt mal versucht, mich in das Thema Frontend/Backend einzulesen - aber irgendwie wirft das bei mir mehr Fragen auf. Den Gesamtzusammenhang verstehe ich einfach noch nicht.  ???

Die Designer-Hilfe ist zwar sehr umfangreich und bietet immer Beispiele, aber am ehesten verstehe ich das, wenn es mir jemand erklärt.

Daher meine Bitte: Könntest Du mir bitte die ersten vier, fünf Zeilen, die zum Laden des Dokumentes nötig sind, im Detail erklären? Das wäre echt super!  :)

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: megasimples Problem/Zugriff auf mail-DB
« Antwort #10 am: 21.09.12 - 10:38:19 »
Ok, wenn ich alles richtig verstanden habe, hast Du es jetzt mit einem Button in einer Maske versucht.

Die ersten Zeilen

Sub Click(Source As Button)
   Dim db As New NotesDatabase( "", "" )
   Call db.OpenMail '-> db ist jetzt die Maildb des angemeldeten Benutzers
   
   Dim workspace As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Set uidoc = workspace.CurrentDocument '-> Das aktuell geöffnete Dokument im Frontend (NotesUIDocument)
   Dim doc As NotesDocument
   Set doc = uidoc.Document '-> Das aktuell geöffnete Dokument im Backend (NotesDocument)

Abhängig von Frontend oder Backend kannst Du die Methoden der Klasse NotesUIDocument (Frontend) oder NotesDocument (Backend) nutzen. Dein Script nutzt das Backend. Das Objekt doc ist vom Typ NotesDocument -> Backend.

Die letzte Zeile entspricht dem Set doc=Source.Document Deines Ursprungscodes, das im Postopen läuft. Dort wird das NotesUIDocument (also das aktuell geöffnete Dokument im Frontend) dem Postopen Als Source übergeben. Ab hier kannst Du den Rest Deines Codes kopieren, wenn er vorher funktioniert hat, wird er auch hier laufen.

Allerdings verstehe ich nicht, wozu Du ein Script, das vorher im Postopen einer Maske gelaufen ist, beim Verschieben in eine andere Datenbank in einen Button packst. Warum machst Du es Dir so schwer und änderst so viel? Wo ist der Unterschied von der einen zur anderen Datenbank, dass Du auf eine Schaltfläche ausweichen musst? Eigentlich bräuchtest Du doch bloß die Maske in die andere Datenbank zu kopieren und das Script so anzupassen, dass db nicht die aktuelle Datenbank (= CurrentDatabase), sondern die Maildatenbank des Benutzers ist. Und das hatten wir schon mehrfach erklärt.

Offline vbis

  • Frischling
  • *
  • Beiträge: 23
Re: megasimples Problem/Zugriff auf mail-DB
« Antwort #11 am: 21.09.12 - 13:22:21 »
Jetzt ist der Groschen gefallen! Vielen Dank an alle, die mich hier unterstützt haben! Gerade der letzte Eintrag hat mir die Augen geöffnet und ich denke, dass ich langsam aber sicher einen Einstieg in Lotus Script schaffe.

Toll, dass es Foren wie dieses gibt!  :)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz