cRM: Aktuelle Meldungen anzeigen

Im Betrieb des Combit Relationship Managers ist es mittels asynchronem Skript möglich einzelnen Nutzern aktuelle Meldungen auszugeben. Das nachfolgende simple Beispiel zeigt wie dies möglich ist.

Für das Beispiel wird eine Datentabelle (Ansicht) „Meldungen” benötigt, die wie folgt aufgebaut ist:

FeldnameFeldtyp
MeldungIDuniqueidentifier
Textnvarchar(250)
Nutzernvarchar(250)
Ungelesennchar(1)

Zudem werden zwei Skripte benötigt. Über den Menüpunkt Konfigurieren > Projekt > Ereignisse müssen diese jeweils einem Ereignis zugeordnet werden:

  • script_start.vbs – wird beim Ereignis „Projekt wurde geöffnet” ausgeführt
  • script_ende.vbs – wird beim Ereignis „Projekt wird geschlossen” ausgeführt

Skript-Aufbau script_start.vbs

Im Skript script_start.vbs muss festgelegt werden, dass es sich um ein asynchrones Skript handelt. D.h. das Skript wird parallel vom System in einem gesonderten Thread ausgeführt und blockiert somit nicht das cRM.

VBScript:
  1. <!--#pragma asynchronous-->

Danach werden die benötigten Variablen definiert und die Startwerte gesetzt. Außerdem wird in der nutzerspezifischen Skript-Einstellung festgelegt, dass das CRM läuft. Dies kann nicht mittels „einfacher” Variablen geschehen. Grund hierfür ist dass der Wert beim Beenden des cRMs durch das andere Skript script_ende.vbs geändert werden muss. Dies ist nicht bei einer einfachen Variablen möglich.

VBScript:
  1. ' benötigte Variablen definieren
  2. Dim nCounter, sCrmIsRunning, sLoginName
  3. Dim oViewConfig, oRecordSet, bFilter, oRecord
  4.  
  5. ' Script-Einstellung setzen, die festlegt, dass das cRM läuft
  6. WScript.SetUserProperty "CrmIsRunning", "1"
  7.  
  8. ' Sekundenzähler gleich Null
  9. nCounter = 0
  10. ' Loginname des aktuellen Nutzers auslesen
  11. sLoginName = crm.CurrentProject.Users.CurrentUser.LoginName

Nächster Step ist eine Schleife, die jede Sekunde durchläuft und prüft, ob das cRM noch läuft oder gerade beendet wird. Wird das Skript beendet, so ist dies Skript über eine passende Funktion zu beenden. Außerdem wird der Sekundenzähler um eins erhöht.

VBScript:
  1. Do
  2.  ' Prüfen, ob das cRM läuft
  3.  sCrmIsRunning = WScript.GetUserProperty("CrmIsRunning", "1")
  4.  
  5.  If (sCrmIsRunning = "0") Then
  6.   ' cRM läuft nicht mehr
  7.   Call ScriptBeenden
  8.  End If
  9.  
  10.  ' Sekundenzähler um Eins erhöhen
  11.  nCounter = nCounter + 1
  12.  
  13.  ' eine Sekunde warten
  14.  WScript.Sleep 1000
  15. Loop

Ist eine gewisse Anzahl von Sekunden um – in diesem Beispiel 300 Sekunden (5 Minuten) – so ist die Datentabelle „Meldungen” zu öffnen und nach ungelesenen Meldungen für den aktuellen Nutzer zu suchen. Außerdem muss der Sekundencounter wieder auf Null gesetzt werden damit das 5 Minutenintervall erhalten bleibt.

Der Zeitraum des Intervalls ist hier beispielhaft auf 5 Minuten festgelegt. Der Zeitraum sollte nicht zu kurz gewählt werden, da dieser Skript-Part der ressourcenintensivste ist.

VBScript:
  1. If (nCounter = 300) Then
  2.  ' Sekundenzähler zurücksetzen
  3.  nCounter = 0
  4.  
  5.  ' Datenbank auf neue Meldung prüfen
  6.  Set oViewConfig = crm.CurrentProject.ViewConfigs.ItemByName(CStr("Meldungen")) ' Meldungen-Datentabelle aufrufen
  7.  Set oRecordSet = oViewConfig.CreateRecordSet ' RecordSet-Object erzeugen
  8.  bFilter = oRecordSet.SetFilter("""Ungelesen"" = '1' AND ""Nutzer"" = '" & sLoginName & "'")
  9.  If (bFilter = True) Then
  10.   ' Filter konnte gesetzt werden
  11.   If (oRecordSet.RecCount > 0) Then
  12.    ' mindestens eine ungelesene Meldung ist vorhanden
  13.  
  14.   End If
  15. End If

Ist eine oder mehrere Meldungen vorhanden, so werden diese nach und nach ausgegeben. Nach jeder Meldung wird nachgefragt, ob die aktuelle Meldung gelesen wurde. Wird dies mit Ja beantwortet, so wird die Meldung als gelesen markiert und ggf. die nächste Meldung ausgegeben. Wird die Frage verneint, so wird die Ausgabe der Meldungen abgebrochen und diese sowie die verbleibenden Meldung(en) erst in 5 Minuten wieder ausgegeben.

Dieser Part ist nur beispielhaft um einen Einstieg zu geben. In der Praxis muss insbesondere dieser Part den jeweiligen Anforderungen angepasst werden.

VBScript:
  1. ' Meldungen ausgeben
  2. Do ' Schleifen-Beginn
  3.  Set oRecord = oRecordSet.CurrentRecord
  4.  
  5.  If (MsgBox(CStr("Meldung:" & vbCrlf & oRecord.GetContentsByName(CStr("Text")) & vbCrlf & vbCrlf & "Meldung gelesen?"), vbYesNo + vbQuestion, CStr("Aktuelle Meldung")) = vbYes) Then
  6.   ' Meldung als gelesen markieren
  7.   oRecord.SetContentsByName CStr("Ungelesen"), Cstr("0")
  8.   If (oRecord.Save = False) Then
  9.  
  10.   End If
  11.  Else
  12.   ' Anzeige der Meldungen abbrechen (Schleife verlassen) und wieder 5 Minuten warten
  13.   Exit Do
  14.  End If
  15.  
  16. Loop Until oRecordSet.MoveNext = False ' Schleifen-Ende

Als letztes wird noch die Funktion für das Beenden des Skripts benötigt.

VBScript:
  1. Sub ScriptBeenden
  2.  ' Objekte auf Nothing setzen
  3.  Set oRecord = Nothing
  4.  Set oRecordSet = Nothing
  5.  Set oViewConfig = Nothing
  6.  
  7.  ' Script beenden
  8.  WScript.Quit
  9. End Sub

 

Skript-Aufbau script_ende.vbs

Das Skript muss in der nutzerspezifischen Skript-Einstellung vermerken, dass das CRM beendet wird, und einen Zeitraum warten, der größer als der Zeitraum des Schleifendurchlaufs im Skript script_start.vbs sein sollte.

VBScript der Datei script_ende.vbs:
  1. ' Script-Einstellung setzen, die festlegt, dass das cRM nicht mehr läuft
  2. WScript.SetUserProperty "CrmIsRunning", "0"
  3.  
  4. ' eineinhalb Sekunde warten
  5. WScript.Sleep 1500

 

Komplette Skripte

Nachfolgend sind die beiden Skripte komplett aufgeführt. Es fehlen lediglich die Codeabschnitte für die jeweilige Fehlerbehandlungen.

VBScript der Datei script_start.vbs:
  1. Option Explicit
  2. <!--#pragma asynchronous-->
  3.  
  4. On Error Resume Next ' Fehlerbehandlung
  5.  
  6. ' benötigte Variablen definieren
  7. Dim nCounter, sCrmIsRunning, sLoginName
  8. Dim oViewConfig, oRecordSet, bFilter, oRecord
  9.  
  10. ' Script-Einstellung setzen, die festlegt, dass das cRM läuft
  11. WScript.SetUserProperty "CrmIsRunning", "1"
  12.  
  13. ' Sekundenzähler gleich Null
  14. nCounter = 0
  15. ' Loginname des aktuellen Nutzers auslesen
  16. sLoginName = crm.CurrentProject.Users.CurrentUser.LoginName
  17.  
  18. Do ' Schleifen-Beginn
  19. ' Prüfen, ob das cRM läuft
  20. sCrmIsRunning = WScript.GetUserProperty("CrmIsRunning", "1")
  21.  
  22. If (sCrmIsRunning = "0") Then
  23. ' cRM läuft nicht mehr
  24. Call ScriptBeenden
  25. End If ' If - Zeile 22
  26.  
  27. ' Sekundenzähler um Eins erhöhen
  28. nCounter = nCounter + 1
  29.  
  30. ' Prüfen, ob 5 Minuten um sind
  31. If (nCounter = 300) Then
  32. ' Sekundenzähler zurücksetzen
  33. nCounter = 0
  34.  
  35. ' Datenbank auf neue Meldung prüfen
  36. Set oViewConfig = crm.CurrentProject.ViewConfigs.ItemByName(CStr("Meldungen")) ' Meldungen-Datentabelle aufrufen
  37. Set oRecordSet = oViewConfig.CreateRecordSet ' RecordSet-Object erzeugen
  38. bFilter = oRecordSet.SetFilter("""Ungelesen"" = '1' AND ""Nutzer"" = '" & sLoginName & "'")
  39. If (bFilter = True) Then
  40. ' Filter konnte gesetzt werden
  41. If (oRecordSet.RecCount > 0) Then
  42. ' mindestens eine ungelesene Meldung ist vorhanden
  43. oRecordSet.MoveFirst ' Datensatzzeiger auf den ersten Datensatz setzen
  44.  
  45. ' Meldungen ausgeben
  46. Do ' Schleifen-Beginn
  47. Set oRecord = oRecordSet.CurrentRecord
  48.  
  49. If (MsgBox(CStr("Meldung:" & vbCrlf & oRecord.GetContentsByName(CStr("Text")) & vbCrlf & vbCrlf & "Meldung gelesen?"), vbYesNo + vbQuestion, CStr("Aktuelle Meldung")) = vbYes) Then
  50. ' Meldung als gelesen markieren
  51. oRecord.SetContentsByName CStr("Ungelesen"), Cstr("0")
  52. If (oRecord.Save = False) Then
  53.  
  54. '...Code für die Fehlerbehandlung, wenn die Änderung des Datensatzes nicht gespeichert werden konnte...
  55.  
  56. End If ' If - Zeile 52
  57.  
  58. Else ' If - Zeile 49
  59. ' Anzeige der Meldungen abbrechen (Schleife verlassen) und wieder 5 Minuten warten
  60. Exit Do ' Schleife verlassen, weiter Zeile 64
  61. End If ' If - Zeile 49
  62.  
  63. Loop Until oRecordSet.MoveNext = False ' Schleifen-Ende - Zeile 46
  64.  
  65. ' Objekte auf Nothing setzen
  66. Set oRecord = Nothing
  67. Set oRecordSet = Nothing
  68. Set oViewConfig = Nothing
  69.  
  70. End If ' If - Zeile 41
  71. Else ' If - Zeile 39
  72. ' Filter konnte nicht gesetzt werden
  73.  
  74. '...Code für die Fehlerbehandlung, wenn der Filter nicht gesetzt werden konnte...
  75.  
  76. End If ' If - Zeile 39
  77. End If ' If - Zeile 31
  78.  
  79. ' eine Sekunde warten
  80. WScript.Sleep 1000
  81. Loop ' Schleifen-Ende - Zeile 18
  82.  
  83. Sub ScriptBeenden
  84. ' Objekte auf Nothing setzen
  85. Set oRecord = Nothing
  86. Set oRecordSet = Nothing
  87. Set oViewConfig = Nothing
  88.  
  89. ' Script beenden
  90. WScript.Quit
  91. End Sub ' Sub - Zeile 83
  92.  
  93. If (Err.Number <> 0) Then
  94.  
  95. '...Code für die allgemeine Fehlerbehandlung...
  96.  
  97. End If
  98. On Error Goto 0

VBScript der Datei script_ende.vbs:
  1. Option Explicit
  2.  
  3. ' Script-Einstellung setzen, die festlegt, dass das cRM nicht mehr läuft
  4. WScript.SetUserProperty "CrmIsRunning", "0"
  5.  
  6. ' eineinhalb Sekunde warten
  7. WScript.Sleep 1500

 

InformationKommentare anzeigenSeite kommentieren

InformationInformation

Die Kundenbeziehungsmanagement Software der Firma Combit, der Combit Relationship Manager (cRM), bietet die Möglichkeit die Kundenpflege strukturiert zu betreiben. Dazu ermöglicht die Customer-Relationship-Management Software die Kontakte und Beziehung mit den einzelnen Kunde zu dokumentieren und verwalten. Wohl durchdachte und definierte Kundenbeziehungs-Prozesse sind für einen sinnvollen Einsatz Voraussetzung.

Laden...Kommentare werden geladen.
Laden...Formular zum Schreiben eines Kommentars wird geladen.


 

Google+
Facebook
Pin it
Twitter
Blogger
Google Mail
E-Mail schreiben