Lotus Notes / Domino Sonstiges > Help-Desk Applikation !!Help!!

Änderungen und Fixes im nächsten point Release 1.5.1 von !!Help!!

<< < (4/8) > >>

regedit:

--- Zitat von: eknori am 22.03.06 - 18:18:52 ---Ich hatte ja angekündigt, dass ich mich mit der Implementierung von erweiterten Systeminformationen in das neue Release beschäftige.

--- Ende Zitat ---
Ist es dann auch möglich bei Terminal-Server-Betrieb die Systeminformationen des lokalen Clients auszulesen?
Momentan werden die Daten des Terminal-Servers angezeigt, an den man angemeldet ist

eknori (retired):
wenn die IP Adresse oder der Hostname des PC bekannt ist, dann geht das schon. Das Tool ist auch nicht dafür gedacht, den bisherigen Code zu ersetzen, sondern es soll vielmehr im Supportfall einen remote Zugriff auf den PC des Users emöglichen.

eknori (retired):
- Escalation Management

ich baue gerade den Code nach OO um.

hier mal ein erster Eindruck


--- Code: ---'///////////////////////////////////////////////////////////////////
Private Class Stamp
'-------------------------------------------------------------------
%REM
represents a single stamp in the multi-value field "nStampAll"
%END REM
Public strStampField As String
Public strStampValue As String
End Class
'-------------------------------------------------------------------

'///////////////////////////////////////////////////////////////////
Private Class Recipient
'-------------------------------------------------------------------
%REM
represents a single receipient in the multi-value field "nFirstEscalationSendTo"
%END REM
Public strRecipientName As String
Public strRecipientLanguage As String
End Class
'-------------------------------------------------------------------

'///////////////////////////////////////////////////////////////////
Private Class Profile
'-------------------------------------------------------------------
%REM
represents a single document from a collection of all active escalation-profiles
%END REM
Public boolProfileStatus As Boolean
Public strProfileDescription As String
Public strProfileTemplate As String
Public strProfileFormula As String
Public colProfileSingleFieldStamp () As Stamp
Public colProfileSingleRecipient () As Recipient
End Class
'-------------------------------------------------------------------

'///////////////////////////////////////////////////////////////////
Private Class ProfileCollection
'-------------------------------------------------------------------
%REM
represents a collection of all active escalation-profiles
%END REM
Public intpColCount As Integer
'Public colProfileCollectionSingleProfile () As Profile
End Class
'-------------------------------------------------------------------

'///////////////////////////////////////////////////////////////////
'///////////////////////////////////////////////////////////////////
Public Class HelpEscalationProfileCollection
'///////////////////////////////////////////////////////////////////
'///////////////////////////////////////////////////////////////////

Private pCol As ProfileCollection

Public Sub New ()
'------------- ON ERROR STUFF -------------------
On Error Goto ERRHANDLE

'------------- DIM STUFF-----------------------------
Dim s As New NotesSession
Dim col As NotesDocumentCollection
Dim dt As New NotesDateTime(Cstr(Datenumber(2004, 5, 1)))
Dim T_Col As New ProfileCollection

'------------- SET  STUFF-----------------------------
Set col = s.CurrentDatabase.Search ({@UpperCase(Form) = "NOTIFICATION PROFILE" & nStatus = "1"} , dt, 0 )

T_Col.intpColCount = col.Count

Set pCol = T_Col

EXITPOINT:
Exit Sub
ERRHANDLE:
xProc = Getthreadinfo(LSI_THREAD_PROC)
xError = xProc  & ": " &Trim$(Str$(Err)) & " on line " & Cstr(Erl) & ": " & Error$
If UseOpenLog Then
Call LogError
Elseif LogScriptErrors Then
Call ThrowException ( xProc, xError  )
End If
Print xError   'In all cases
If ResumeMethodNext Then
Resume Next
Else
Resume EXITPOINT
End If
End Sub

Public Property Get Count () As Integer
count = Me.pCol.intpColCount
End Property

End Class
--- Ende Code ---

Die Klasse "HelpEscalationProfileCollection" wird dann haben


Properties

Count as integer

Methoden

GetNthEscalationProfile ( i as integer ) as eProfile
GetNthRecipient ( profile as eProfile, i as Integer )

irgendwie so etwas in dieser Art.



eknori (retired):
Ich habe heute noch ein wenig gebastelt und den Code weiter eingedampft. Den meisten Platz nimmt das Error Handling ein.

Im Agenten wird sich letztendlich nur noch ein 2-Zeiler finden


--- Code: --- Dim engine As New EscalationEngine
Call engine.Run

--- Ende Code ---

Neben den Constructor gibt es nur noch eine Methode "Run"; der Rest wird in der Klasse "EscalationEngine" abgefackelt.

Ich weiss, ist noch nicht vollständig, soll auch nur einen ersten Eindruck vermitteln.  ;)


--- Code: ---'///////////////////////////////////////////////////////////////////
'///////////////////////////////////////////////////////////////////
Public Class EscalationEngine
'///////////////////////////////////////////////////////////////////
'///////////////////////////////////////////////////////////////////

Private pCol As NotesDocumentCollection

%REM
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/* CONSTRUCTOR
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
%END REM
Public Sub New ()

On Error Goto ERRHANDLE

Dim s As New NotesSession
Dim dt As New NotesDateTime(Cstr(Datenumber(2004, 5, 1)))

Set pCol  = s.CurrentDatabase.Search ({@UpperCase(Form) = "NOTIFICATION PROFILE" & nStatus = "1"} , dt, 0 )

EXITPOINT:
Exit Sub
ERRHANDLE:
xProc = Getthreadinfo(LSI_THREAD_PROC)
xError = xProc  & ": " &Trim$(Str$(Err)) & " on line " & Cstr(Erl) & ": " & Error$
If UseOpenLog Then
Call LogError
Elseif LogScriptErrors Then
Call ThrowException ( xProc, xError  )
End If
Print xError   'In all cases
If ResumeMethodNext Then
Resume Next
Else
Resume EXITPOINT
End If
End Sub

%REM
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
%END REM
Private Function TicketCollection ( idx As Integer ) As NotesDocumentCollection

On Error Goto ERRHANDLE

Dim s As New NotesSession
Dim dt As New NotesDateTime(Cstr(Datenumber(2004, 5, 1)))

Set TicketCollection = s.CurrentDatabase.Search (Me.pCol.GetNthDocument ( idx ).nFormula(0) , dt, 0 )

EXITPOINT:
Exit Function
ERRHANDLE:
xProc = Getthreadinfo(LSI_THREAD_PROC)
xError = xProc  & ": " &Trim$(Str$(Err)) & " on line " & Cstr(Erl) & ": " & Error$
If UseOpenLog Then
Call LogError
Elseif LogScriptErrors Then
Call ThrowException ( xProc, xError  )
End If
Print xError   'In all cases
If ResumeMethodNext Then
Resume Next
Else
Resume EXITPOINT
End If
End Function

%REM
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
%END REM
Private Function Recipients ( idx As Integer ) As Variant

On Error Goto ERRHANDLE
Recipients = Me.pCol.GetNthDocument ( idx ).nFirstEscalationSendTo

EXITPOINT:
Exit Function
ERRHANDLE:
xProc = Getthreadinfo(LSI_THREAD_PROC)
xError = xProc  & ": " &Trim$(Str$(Err)) & " on line " & Cstr(Erl) & ": " & Error$
If UseOpenLog Then
Call LogError
Elseif LogScriptErrors Then
Call ThrowException ( xProc, xError  )
End If
Print xError   'In all cases
If ResumeMethodNext Then
Resume Next
Else
Resume EXITPOINT
End If
End Function

%REM
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
%END REM
Private Function SetField ( idx As Integer ) As Variant

On Error Goto ERRHANDLE
SetField = Me.pCol.GetNthDocument ( idx ) .nStampAll

EXITPOINT:
Exit Function
ERRHANDLE:
xProc = Getthreadinfo(LSI_THREAD_PROC)
xError = xProc  & ": " &Trim$(Str$(Err)) & " on line " & Cstr(Erl) & ": " & Error$
If UseOpenLog Then
Call LogError
Elseif LogScriptErrors Then
Call ThrowException ( xProc, xError  )
End If
Print xError   'In all cases
If ResumeMethodNext Then
Resume Next
Else
Resume EXITPOINT
End If
End Function

%REM
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
%END REM
Private Sub StampAll ( idx As Integer )

On Error Goto ERRHANDLE

Dim s As New NotesSession
Dim dt As New NotesDateTime(Cstr(Datenumber(2004, 5, 1)))
Dim varStampValues As Variant
Dim strFieldToStamp As String
Dim strStampFieldWith As String
Dim strAtAdjust As Variant
Dim strColDocFieldFound As String
Dim atNow As New NotesDateTime( Now )
Dim thisdate As New NotesDateTime("")
Call thisdate.setnow
Dim col As NotesDocumentCollection

Set col = Me.TicketCollection ( idx )
varStampValues = Me.SetField ( idx )

If Trim ( varStampValues (0) ) ="" Then
Exit Sub ' nothing to do; let's get outa here
Else
strColDocFieldFound =  Left$ ( strStampFieldWith , 2 ) ' <<TAG>>
Forall v In varStampValues
strFieldToStamp = Trim(Strtoken ( Cstr ( v ) , "|" , 1 ))
strStampFieldWith = Trim(Strtoken ( Cstr ( v ) , "|" , 2 ))

If Left$ ( strStampFieldWith , 1 ) = "@" Or strColDocFieldFound = "<<" Then

If Instr ( Ucase ( strStampFieldWith ) , "@ADJUST") Then
strAtAdjust = Split ( strStampFieldWith , ";")
strStampFieldWith = Left ( Ucase ( strStampFieldWith ) , 7 )
End If

Select Case Ucase ( strStampFieldWith )

Case "@NOW"
strStampFieldWith = Cstr(Now)
Case "@DATE(@NOW)"
strStampFieldWith = Cstr(atNow.DateOnly)
Case "@TIME(@NOW)"
strStampFieldWith = Cstr(atNow.TimeOnly)
Case "@ADJUST"
Call thisdate.AdjustYear( Cint(strAtAdjust(1)) )
Call thisdate.AdjustMonth( Cint(strAtAdjust(2)) )
Call thisdate.AdjustDay( Cint(strAtAdjust(3)) )
Call thisdate.AdjustHour( Cint(strAtAdjust(4)) )
Call thisdate.AdjustMinute( Cint(strAtAdjust(5)) )
Call thisdate.AdjustSecond( Cint(Left(strAtAdjust(6),1)) )
strStampFieldWith = Cstr(thisdate.LocalTime)

End Select
End If
End Forall
End If

EXITPOINT:
Exit Sub
ERRHANDLE:
xProc = Getthreadinfo(LSI_THREAD_PROC)
xError = xProc  & ": " &Trim$(Str$(Err)) & " on line " & Cstr(Erl) & ": " & Error$
If UseOpenLog Then
Call LogError
Elseif LogScriptErrors Then
Call ThrowException ( xProc, xError  )
End If
Print xError   'In all cases
If ResumeMethodNext Then
Resume Next
Else
Resume EXITPOINT
End If
End Sub

%REM
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
%END REM
Public Sub Run
' put stuff here
Me.StampAll ( 1 )
End Sub

End Class

--- Ende Code ---

und wer eine Idee hat, wie man das immer wiederkehrende


--- Code: ---EXITPOINT:
Exit Sub
ERRHANDLE:
xProc = Getthreadinfo(LSI_THREAD_PROC)
xError = xProc  & ": " &Trim$(Str$(Err)) & " on line " & Cstr(Erl) & ": " & Error$
If UseOpenLog Then
Call LogError
Elseif LogScriptErrors Then
Call ThrowException ( xProc, xError  )
End If
Print xError   'In all cases
If ResumeMethodNext Then
Resume Next
Else
Resume EXITPOINT
End If

--- Ende Code ---

ersetzen kann, ohne den Fokus auf die Routine zu verlieren, der möge das bitte hier posten ...

Ich finde es übrigens klasse, daß der ScriptParser ein Konstrukt wie


--- Zitat ---Set TicketCollection = s.CurrentDatabase.Search (Me.pCol.GetNthDocument ( idx ).nFormula(0) , dt, 0 )

--- Ende Zitat ---

umsetzen kann.   O0

ein


--- Code: ---If IsEmpty ( varStampValues)  Then
Exit Sub ' nothing to do; let's get outa here

--- Ende Code ---

funktioniert nicht. Oder bin ich da auf dem falschen Dampfer ? Ich dachte, IsEmptry prüft, ob ein Variant leer ist ...

Thomas Schulte:
Und noch was für das nächste Release.

Datenübernahme aus einer frei definierbaren System Datenbank (NotesDB) in ein Ticket wird möglich sein. So das man ein bei einem Ticket betroffenes System auch nachträglich mit den vorhandenen Daten in den Systembereich des Helpdesk einbinden kann.

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln