Hallo zusammen,
ein Scriptanfänger hat mal 'ne Frage:
Folgendes Problem:
In der Helpdesk habe ich eine neue Funktion hinzugefügt, die einen Start-Stop der Ticketberechnenden Zeit ermöglichen soll. Das erfassen der Minuten funktioniert im Querysave auch soweit.
Beim Abschließen eines Tickets sollen nun die Werte aus diesem Feld zusammengezählt werden und von der Zeit assigned-completed abgezogen werden.
Folgende Informationen habe ich:
Ich habe ein Feld. DT Pause (kann Mehrfachwerte), welches mit Informationen gefüllt ist. Ich hatte das Feld zuerst vom Typ Zahl, aber da hat er mir gemeckert -NotesItem cannot be set to an arry of mixed data types ???
Darauf hin habe ich das ganze als Typ Text (bearbeitbar, aber verborgen) genommen und das Feld wird mit "Zahlen" gefüttert.
Den Code hierfür seht ihr hier.
If source.Document.PauseStat(0) ="2" Then
Dim strdt1 As String
Dim strdt2 As String
Dim vpause As Variant
Dim elapsed As String
Set item = doc.GetFirstItem("DTPauseStart")
strdt1 = item.text
Set item = doc.GetFirstItem("DTPauseStop")
strdt2 = item.text
elapsed = DTCalcpause.GetElapsedTime( strdt1, strdt2 )
If source.Document.DTPause(0) = "" Then
Call doc.ReplaceItemValue ("DTPause", elapsed)
Else
vpause = doc.GetItemValue ("DTPause")
Redim Preserve vpause(Ubound(vPause) + 1)
vpause(Ubound(vpause)) = elapsed
Call doc.ReplaceItemValue ("DTPause", vpause)
End If
Set item = doc.ReplaceItemValue("PauseStat",0)
End If
Sprich ich müsste die Textinhalte in Zahlen umwandlen und dann zusammen rechnen...
Ich habe die letzten Tage soviel über Arrays gelesen, aber wirklich schlauer bin ich nicht.... brauche ich das überhaupt oder kann ich das schon in meiner Funktion im Querysave zusammen rechnen und das Feld nur mit einem Wert füllen?
Für Verbesserungsvorschläge bin ich offen, auch was meinen Code betrifft.
Bin mir nicht sicher ob das ganze in die Kategorie "Help" gehört, da es eigentlich eher eine allgemeine Frage zu Lotus Scrip ist.
P.S. Gibt es eigentlich zu Arrays irgendwie ein Best Practice hier im Forum??
Hoffe mein Anliegen ist klar genug geschieldert, sonst noch mal nachaken.
Was ich noch vergessen habe... diesen Start Stop kann man natürlich jederzeit und beliebig oft ausführen, daher kann ich das fest dimensionieren.
Es hat geklappt, danke für die Tipps.
Frage an die Experten wäre nur noch wie ich das noch optimieren, sprich zusammen fassen könnte. Kommt mir noch umständlich vor....
If source.Document.PauseStat(0) ="2" Then
Dim strdt1 As String
Dim strdt2 As String
Dim vpause As Variant
Dim sum_min As Integer
Dim elapsed As String
Set item = doc.GetFirstItem("DTPauseStart")
strdt1 = item.text
Set item = doc.GetFirstItem("DTPauseStop")
strdt2 = item.text
elapsed = DTCalcpause.GetElapsedTime( strdt1, strdt2 )
If source.Document.DTPause(0) = "" Then
Call doc.ReplaceItemValue ("DTPause", elapsed)
Else
vpause = doc.GetItemValue ("DTPause")
Redim Preserve vpause(Ubound(vPause) + 1)
vpause(Ubound(vpause)) = elapsed
Call doc.ReplaceItemValue ("DTPause", vpause)
sum_min = 0
Forall pause In doc.DTpause
If Isnumeric (pause) Then
sum_min = sum_min + Cint (pause)
End If
End Forall
Call doc.ReplaceItemValue ("DTPause", sum_min)
End If
Set item = doc.ReplaceItemValue("PauseStat",0)
End If
Kann das ganze noch irgendwie in das zusammenstellen des Arrays packen?
Das ist ja genau der Punkt... es kommt mir auch unlogisch vor....
Am Ende soll in DTPause ein Gesamtwert herauskommen. Mit dem eigentlichen ersten Teil meines Scripts werden Einzelwerte in mein Feld DTPause geschrieben.
vpause = doc.GetItemValue ("DTPause")
Redim Preserve vpause(Ubound(vPause) + 1)
vpause(Ubound(vpause)) = elapsed
Call doc.ReplaceItemValue ("DTPause", vpause)
Diese will ich als Summe haben.
Kann ich das einfach ersetzen durch den Teil?
sum_min = 0
Forall pause In doc.DTpause
If Isnumeric (pause) Then
sum_min = sum_min + Cint (pause)
End If
End Forall
Call doc.ReplaceItemValue ("DTPause", sum_min)
End If
Nun Klar?