Autor Thema: Spalten aus Ansicht auslesen  (Gelesen 2129 mal)

Offline MKnost

  • Junior Mitglied
  • **
  • Beiträge: 58
Spalten aus Ansicht auslesen
« am: 06.03.06 - 12:20:01 »
MoinMoin

Ich habe eine Ansicht erstellt (wie im Bild) mit einer Aktion, die mir aus dieser Ansicht heraus eine bestimmte Spalte berechnen soll (in diesem Beispiel die letzte).

Die Berechnung soll aber nur für die kategorisierten einträge gemacht werden,  auf der gerade die Markierung steht.

Ich muss also zuerst basierend auf der aktuellen Markierung den Namen auslesen. Das mach ich mit folgendem Script:

Code
Dim session As New NotesSession
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument
Dim tmpName As String
Set db = session.CurrentDatabase
Set collection = db.UnprocessedDocuments
Set doc = collection.GetFirstDocument()
While Not(doc Is Nothing)
  Set item = doc.GetFirstItem( "ProgName" )
  tmpName=item.values(0) 
  Set doc = collection.GetNextDocument(doc)
Wend

Wie krieg ich aber jetzt alle Dokumente der Ansicht mit dem Namen aus tmpName, dem entsprechend ausgewählten Monat (im Bild März) und dort alle Werte aus der Spalte Stunden?
Der Monat wird über eine Spaltenformel aus dem Datum gebildet:
Code
@Select( @Month( ProgDatum ); "Januar";"Februar";"März";...)

Wer schön, wenn mir jemand helfen könnte...

Grüsse Micha
« Letzte Änderung: 06.03.06 - 13:42:05 von MKnost »

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Spalten aus Ansicht auslesen
« Antwort #1 am: 06.03.06 - 13:08:22 »
MoinMoin

Ich habe eine Ansicht erstellt (wie im Bild) mit einer Aktion, ...

Welches Bild?


Schau dir in der Designer-Hilfe mal die Methode GetAllDocumentByKeys aus der Klasse NotesView an. Dieser Methode übergibst du in einem Array die Suchbegriffe, allerdings muss die Ansicht, die du zum Suchen nimmst, entsprechend sortiert sein.

Dim keys( 1 To 2 ) As String

keys( 1 ) = "Suchbegriff1"
keys( 2 ) = "Suchbegriff2"

Der erste Suchbegriff wird in der ersten Spalte und der zweite Begriff in der zweiten Spalte gesucht. Beide Spalten müssen sortiert/kategorisiert sein.


Axel



Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline MKnost

  • Junior Mitglied
  • **
  • Beiträge: 58
Re: Spalten aus Ansicht auslesen
« Antwort #2 am: 06.03.06 - 13:41:23 »
Öhm, dieses bild, sorry, hatte ich vergessen....

Danke für den Tipp, ich versuchs mal....

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re: Spalten aus Ansicht auslesen
« Antwort #3 am: 06.03.06 - 15:06:28 »
... habe ich das richtig verstanden, du brauchst bei "Dagobert Duck"-Dokumenten die 3. Spalte?

Toni
Grüßle Toni :)

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Spalten aus Ansicht auslesen
« Antwort #4 am: 06.03.06 - 15:17:25 »
... habe ich das richtig verstanden, du brauchst bei "Dagobert Duck"-Dokumenten die 3. Spalte?

Toni

Ja, aber nur für einen bestimmten Monat, z.B. März


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re: Spalten aus Ansicht auslesen
« Antwort #5 am: 06.03.06 - 15:20:59 »
... dann würde ich das aktuelle Dokument initialisieren und über ViewEntryCollection was versuchen. Da gibt es eine Eigenschaft, die mir die zugehörigen Kategorie des Dokumentes zurückgibt - müsste ich aber auch tiefer eintauchen...

Toni
Grüßle Toni :)

Offline MKnost

  • Junior Mitglied
  • **
  • Beiträge: 58
Re: Spalten aus Ansicht auslesen
« Antwort #6 am: 07.03.06 - 08:00:19 »
Ich hab den Tipp von Axel umgesetzt, hier mal der vollständigkeit halber mein Code (ein bisschen verworren, verbesserungen immer gern gesehen  ;) )

Code
Sub Click(Source As Button)
	Dim session As New NotesSession
	Dim db As NotesDatabase
	Dim collection As NotesDocumentCollection
	Dim doc As NotesDocument
	Dim tmpName As String
	Dim tmpMonat As String
	Dim tmpStunden As String
	Dim tmpGesamt As Integer
	Dim tAStd As Variant
	Dim tAMin As Variant
	Set db = session.CurrentDatabase
	Set collection = db.UnprocessedDocuments
	If collection.count = 0 Then
		Messagebox "Sie müssen EINEN Eintrag auswählen, um den Nutzer sowie den Monat zu bestimmen!", MBOK, "Fehler: keine Auswahl!"
		Exit Sub
	End If

	Set doc = collection.GetFirstDocument()
	While Not(doc Is Nothing)
		Set item = doc.GetFirstItem( "ProgName" )
		tmpName=item.values(0)
		Set item = doc.GetFirstItem( "ProgDatum" )
		tmpMonat=Month(item.values(0))
		Set doc = collection.GetNextDocument(doc)
	Wend

	Dim view As NotesView
	Dim dc As NotesDocumentCollection
	Dim keys (1 To 2) As String
	keys(1)=tmpName
	Select Case tmpMonat
	Case 1: keys(2)="Januar"
	Case 2: keys(2)="Februar"
	Case 3: keys(2)="März"
	Case 4: keys(2)="April"
	Case 5: keys(2)="Mai"
	Case 6: keys(2)="Juni"
	Case 7: keys(2)="Juli"
	Case 8: keys(2)="August"
	Case 9: keys(2)="September"
	Case 10: keys(2)="Oktober"
	Case 11: keys(2)="November"
	Case 12: keys(2)="Dezember"
	End Select
	Set view = db.GetView( "vProgname" )
	Set collection = view.GetAllDocumentsByKey(keys, False)

	Set doc = collection.GetFirstDocument()
	While Not(doc Is Nothing)
		Set item = doc.GetFirstItem( "Stunden" )
		tmpStunden=item.values(0)
		tmpGesamt=tmpGesamt + Cint(tmpStunden)
		Set doc = collection.GetNextDocument(doc)
	Wend
	tAMin = tmpGesamt Mod 60
	tAStd = tmpgesamt \ 60
	Messagebox tAStd & " Stunden und " & tAMin & " Minuten", MBOK, "Ausgleich für " & tmpName & " im Monat: " & keys(2)
End Sub

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Spalten aus Ansicht auslesen
« Antwort #7 am: 07.03.06 - 08:26:53 »
Soweit sieht's ganz vernüftig aus. Zwei Anmerkungen habe ich allerdings.

1. Die Ecke ist nicht ganz konsequent zu Ende programmiert und kann in bestimmen Fällen zu unerwünschten Seiteneffekten führen. Es wird zwar abgefangen wenn kein Eintrag gewählt ist, aber nicht bei mehr als einem Eintrag.

Code
...
Set db = session.CurrentDatabase
	Set collection = db.UnprocessedDocuments
	If collection.count = 0 Then
		Messagebox "Sie müssen EINEN Eintrag auswählen, um den Nutzer sowie den Monat zu bestimmen!", MBOK, "Fehler: keine Auswahl!"
		Exit Sub
	End If

	Set doc = collection.GetFirstDocument()
	While Not(doc Is Nothing)
		Set item = doc.GetFirstItem( "ProgName" )
		tmpName=item.values(0)
		Set item = doc.GetFirstItem( "ProgDatum" )
		tmpMonat=Month(item.values(0))
		Set doc = collection.GetNextDocument(doc)
	Wend
...

Besser ist es so:
Code
Set db = session.CurrentDatabase
	Set collection = db.UnprocessedDocuments
	If collection.count <> 1 Then
		Messagebox "Sie müssen EINEN Eintrag auswählen, um den Nutzer sowie den Monat zu bestimmen!", MBOK, "Fehler: keine Auswahl!"
		Exit Sub
	End If

	Set doc = collection.GetFirstDocument()
	If Not(doc Is Nothing) Then
		Set item = doc.GetFirstItem( "ProgName" )
		tmpName=item.values(0)
		Set item = doc.GetFirstItem( "ProgDatum" )
		tmpMonat=Month(item.values(0))
		Set doc = collection.GetNextDocument(doc)
	End If
...


2. Diese Zeile kann entfallen

Code
...
	Dim dc As NotesDocumentCollection
...


Außerdem fehlt mir noch eine Fehlerbehandlung. Grundlagen hierzu findest du hier:
Best Practices: Error Handling in Lotus Script

Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline MKnost

  • Junior Mitglied
  • **
  • Beiträge: 58
Re: Spalten aus Ansicht auslesen
« Antwort #8 am: 07.03.06 - 08:28:42 »
 :) Danke für die Hinweise!!!

Werd  mich mal gleich daransetzen, vielleicht wird ja doch noch ein anständiger Programmierer aus mir  ;)

Grüsse Micha

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Spalten aus Ansicht auslesen
« Antwort #9 am: 07.03.06 - 08:33:53 »
Werd  mich mal gleich daransetzen, vielleicht wird ja doch noch ein anständiger Programmierer aus mir  ;)

Mit Sicherheit. Es ist noch kein Meister vom Himmel gefallen.  ;)


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz