Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: Scotty67 am 26.04.10 - 10:07:39

Titel: eine Wert beim Dokumentöffnen berechnen lassen und anzeigen !
Beitrag von: Scotty67 am 26.04.10 - 10:07:39
...vielleicht kann mir jemand helfen.

ich erechne beim öffen eines dokuments werte aus anderen dokumenten via QueryOpen Event...
jetzt würde ich gerne diesen Wert im Frontenddocument darstellen ohne das dokument zu ändern..

sprich diese Wert soll immer neu berechnet werden sobald das dokument geöffnet wird


warum und wieso?
ich hab ein formular namens "störungsmeldung" - basierend auf diesem Dokument werden "störungsmeldungstätigkeiten"-docs angelegt und dort werden aufwandszeiten hinterlegt - jetzt möchte ich beim öffnen dieser störungsmeldung immer den aktuell aufgelaufenen gesamtaufwand angezeigt bekommen
Titel: Re: eine Wert beim Dokumentöffnen berechnen lassen und anzeigen !
Beitrag von: klaussal am 26.04.10 - 10:16:08
Und wo ist jetzt das Problem ?
Titel: Re: eine Wert beim Dokumentöffnen berechnen lassen und anzeigen !
Beitrag von: Scotty67 am 26.04.10 - 10:30:38
 :) nun, ich hab keine ahnung wie ich diesen errechneten Wert im Frontend darstellen soll...wenn ich hier ein feld anlegen das "computed for display" ist - dann kann ich dort nur eine Formula legen...

ich steh wahrscheinlich völlig am schlauch - stimmts ?  ;D
Titel: Re: eine Wert beim Dokumentöffnen berechnen lassen und anzeigen !
Beitrag von: klaussal am 26.04.10 - 10:45:33
Im Postopen geht sowohl Formel als auch LS.
Titel: Re: eine Wert beim Dokumentöffnen berechnen lassen und anzeigen !
Beitrag von: Thomas Schulte am 26.04.10 - 10:46:03
Ja und? Wo ist jetzt dein Problem?

Kannst du deine Zeiten mit Formelsprache nicht ermitteln?
Oder weist du nicht was ein ComputedForDisplay Feld so macht?
Titel: Re: eine Wert beim Dokumentöffnen berechnen lassen und anzeigen !
Beitrag von: klaussal am 26.04.10 - 10:55:03
Queryopen scheint dafür die falsche Stelle zu sein.
Titel: Re: eine Wert beim Dokumentöffnen berechnen lassen und anzeigen !
Beitrag von: Scotty67 am 26.04.10 - 11:20:43
so hier mein script - wie gesagt berechnet einwandfrei - nur mein plan wäre diesen errechneten Wert im Frontend-Doc
errechnet darstellen....

leute, ich bin mit formeln eher schlecht bestückt - vielleicht fällt euch ein formular 3-4zeiler ein der genau das macht
was dieser script leistet, ich bin auch eher anfänger was scriptprogrammierung betrifft - aber ich muß da leider durch *würg*


Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
   
   Dim workspace As New NotesUIWorkspace
   Dim session As New NotesSession
   Dim doc As NotesDocument
   Dim SMdoc As NotesDocument
   Dim uidoc As NotesUIDocument
   Dim db As NotesDatabase
   Dim view As NotesView
   Dim dc As NotesDocumentCollection
   Set db = session.CurrentDatabase
   Dim Nummer As Variant
   Dim smdoingtime As Long
   Set view = db.GetView( "SMDoingTime" )
   Set doc=source.document
   Nummer = doc.GetItemValue( "SMnummer" )
   
   Set dc = view.GetAllDocumentsByKey("200000", False)     'testweise fixierte störungsmeldungsnummer
   Set SMdoc = dc.GetFirstDocument
   
   Do While Not(SMdoc Is Nothing)
      CalcUsedSMDoingTime=SMdoc.GetItemValue("UsedTime")
      
      If Cint(CalcUsedSMDoingTime(0)) = 0 Then
             Goto loopweiter
      Else
             smdoingtime=smdoingtime+Cint(CalcUsedSMDoingTime(0))      
      End If
loopweiter:
      Set SMdoc = dc.GetNextDocument(SMdoc)
   Loop
   
   'Msgbox smdoingtime

End Sub
Titel: Re: eine Wert beim Dokumentöffnen berechnen lassen und anzeigen !
Beitrag von: bikerboy am 26.04.10 - 11:51:59
Naja @Functions werden hier wohl nicht gehen, weil du mehrere Dokumente im Zugriff hast wofür @Functions nicht taugt.

Ich verstehe aber wie der Rest auch nicht dein Problem. Du kann doch im Queryopenevent dein Script zur Berechnung schreiben und dann ein beliebiges Feld setzen, das "Compute for Display" ist. Diese Felder sind ja nur existent wenn das Dokument geöffnet ist.
Titel: Re: eine Wert beim Dokumentöffnen berechnen lassen und anzeigen !
Beitrag von: Peter Klett am 26.04.10 - 11:59:55
Wieso keine @Functions? Mit @DBColumn aus der Ansicht über den Schlüssel der Störungsnummer alle benötigten Zeiten auslesen und mit @Sum addieren. Das ganze kommt dann in die Berechnungsformel des zur Anzeige berechneten Feldes.
Titel: Re: eine Wert beim Dokumentöffnen berechnen lassen und anzeigen !
Beitrag von: bikerboy am 26.04.10 - 12:26:51
Stimmt geht auch. Mein Fehler
Titel: Re: eine Wert beim Dokumentöffnen berechnen lassen und anzeigen !
Beitrag von: Scotty67 am 26.04.10 - 12:44:33
...ich habs !

danke - eure vielen aussagen "und wo bitte ist das problem..."  ;D haben mich beflügelt  ;D

ich lass den script im Queryopen - hab ein hidden field hinterlegt - welches wiederum für ein "computed for display" field
dient - am ende meines scripts wird genau diesen hidden field befüllt (temporär - also nicht gespeichert)

Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
   
   Dim workspace As New NotesUIWorkspace
   Dim session As New NotesSession
   Dim doc As NotesDocument
   Dim SMdoc As NotesDocument
   Dim uidoc As NotesUIDocument
   Dim db As NotesDatabase
   Dim view As NotesView
   Dim dc As NotesDocumentCollection
   Set db = session.CurrentDatabase
   Dim Nummer As Variant
   Dim smdoingtime As Long
   Set view = db.GetView( "SMDoingTime" )
   Set doc=source.document
   Nummer = doc.GetItemValue( "SMnummer" )
   
   'Set dc = view.GetAllDocumentsByKey(Nummer(0), False)
   Set dc = view.GetAllDocumentsByKey("200000", False)
   Set SMdoc = dc.GetFirstDocument
   
   Do While Not(SMdoc Is Nothing)
      CalcUsedSMDoingTime=SMdoc.GetItemValue("UsedTime")
      
      If Cint(CalcUsedSMDoingTime(0)) = 0 Then
         Goto loopweiter
      Else
         smdoingtime=smdoingtime+Cint(CalcUsedSMDoingTime(0))      
      End If
loopweiter:
      Set SMdoc = dc.GetNextDocument(SMdoc)
   Loop
   
   Dim item As NotesItem
   Set item = doc.ReplaceItemValue( "collectedTime", smdoingtime )
   
End Sub
Titel: Re: eine Wert beim Dokumentöffnen berechnen lassen und anzeigen !
Beitrag von: Thomas Schulte am 26.04.10 - 12:59:17
Und in der Formelsprache ist das ein Einzeiler.

@Sum(@ToNumber(@DbLookup( "" : "Nocache" ; "" : "" ; "SMDoingTime" ; Nummer ; "CalcUsedSMDoingTime" ; [FAILSILENT] )))
Titel: Re: eine Wert beim Dokumentöffnen berechnen lassen und anzeigen !
Beitrag von: Peter Klett am 26.04.10 - 13:11:47
Genau! (@DBColumn von mir war Quatsch, musste natürlich @DBLookup heißen.) Das ist mit Sicherheit auch deutlich performanter.