Autor Thema: eine Wert beim Dokumentöffnen berechnen lassen und anzeigen !  (Gelesen 2889 mal)

Offline Scotty67

  • Aktives Mitglied
  • ***
  • Beiträge: 146
...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

klaussal

  • Gast
Und wo ist jetzt das Problem ?

Offline Scotty67

  • Aktives Mitglied
  • ***
  • Beiträge: 146
 :) 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

klaussal

  • Gast
Im Postopen geht sowohl Formel als auch LS.

Offline Thomas Schulte

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
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?
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

klaussal

  • Gast
Queryopen scheint dafür die falsche Stelle zu sein.

Offline Scotty67

  • Aktives Mitglied
  • ***
  • Beiträge: 146
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

Offline bikerboy

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

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline Peter Klett

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

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Stimmt geht auch. Mein Fehler
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline Scotty67

  • Aktives Mitglied
  • ***
  • Beiträge: 146
Re: eine Wert beim Dokumentöffnen berechnen lassen und anzeigen !
« Antwort #10 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

Offline Thomas Schulte

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: eine Wert beim Dokumentöffnen berechnen lassen und anzeigen !
« Antwort #11 am: 26.04.10 - 12:59:17 »
Und in der Formelsprache ist das ein Einzeiler.

@Sum(@ToNumber(@DbLookup( "" : "Nocache" ; "" : "" ; "SMDoingTime" ; Nummer ; "CalcUsedSMDoingTime" ; [FAILSILENT] )))
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: eine Wert beim Dokumentöffnen berechnen lassen und anzeigen !
« Antwort #12 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.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz