Das Notes Forum

Lotus Notes / Domino Sonstiges => Projekt Bereich => Help-Desk Applikation !!Help!! => Thema gestartet von: Matthias1974 am 08.02.06 - 10:47:16

Titel: Varbiale im Subject der Mailvorlage
Beitrag von: Matthias1974 am 08.02.06 - 10:47:16
Hallo,

ich weiss das Thema ist bestimmt schon 1000mal durchgekaut worden und ich habe das Forum hier auch schon durchsucht, aber leider noch nichts passendes gefunden

wir setzten Help 1.5 seit ca. 5 Tagen ein (Also absoluter Neuling   :-:) , läuft soweit wirklich super...
Ich habe mir einen Mailvorlage erstellt, wie bekomme ich im Subject die Problembeschreibung rein, da gibts doch was mit <<ProblemFirstLine>>.. oder so ähnlich... !!

Hat da Jemand eine Idee !!

Danke Matthias
(Jeder hat mal klein angefangen....  ;D)
Titel: Re: Varbiale im Subject der Mailvorlage
Beitrag von: Thomas Schulte am 08.02.06 - 11:35:12
Ähh jein. Das hängt davon ab was du machst.
Bei den Systemmails wird das Subject der Mailsignatur überhaupt nicht verwendet. Um da was einzutragen musst du aktuell in die Sprachdokumente xxx Actions & Strings reingehen.
Da gibt es dann msgTicketAssigned, msgTicketClosed, etc. Die werden in diesen Fällen benutzt. Bei manuellen Mails wird da aktuell zwar das eingetragene Subject übertragen aber keine Parameter ausgewertet.
Ich werde das Ganze in der nächsten Version so umstellen das man steuern kann ob das Subject aus den Sprachdokumenten oder den Mail Signaturen kommt.
Titel: Re: Varbiale im Subject der Mailvorlage
Beitrag von: Matthias1974 am 08.02.06 - 11:39:10
Hallo Thomas,

Danke für die flinke Antwort, werde das ausprobieren.
Wenn ein Call geschlossen wird, bekommt der User eine Mail, wo das Problme im Subject angegebn ist. Werde mal nach dem Sprachdokument suchen !!

Gruß

Matthias
Titel: Re: Varbiale im Subject der Mailvorlage
Beitrag von: Thomas Schulte am 08.02.06 - 11:42:00
msgTicketClosed in Ticket Actions & Strings. Da findest du das.
Titel: Re: Varbiale im Subject der Mailvorlage
Beitrag von: Matthias1974 am 08.02.06 - 21:32:03
Hallo Thomas,

kurze Rückfrage, damit ich dich nicht mißverstehe:  Wenn ich aus einem Ticket heraus eine Mail an einen User senden möchte, kann ich auf eine Mailvorlage zurückgreifen, so weit so gut !

Im Body der Mailvorlage kann ich die Problembeschreibung <<p:Problem>> bzw. <<ProblemFirstLine>> mit angeben, funkioniert das auch im Subject der Mailvorlage...?

oder bin da jetzt totoal auf dem Holzweg  ???

Gruß

Matthias
Titel: Re: Varbiale im Subject der Mailvorlage
Beitrag von: Thomas Schulte am 09.02.06 - 07:49:37
Ja da bist du auf dem Holzweg.

Das funktioniert aktuell noch nicht. In einer zukünftigen Version will ich das einbauen.
Titel: Re: Varbiale im Subject der Mailvorlage
Beitrag von: dudeis am 21.02.06 - 11:24:40
Hallo,

ich habe bei uns die Bibliothek 'lib.notification.escalation' angepasst.

Dazu habe ich eine neue Funktion "ReplaceFields" erstellt, welche die mit '<<' und '>>' markierten Feldnamen ersetzt.

Der Aufruf erfolgt in der Prozedur "ProcessNotificationProfiles" direkt vor dem Befehl 'SpoofMessagewithitem' (coole Funktion  ;) ).

vorher :

dummy = SpoofMessagewithitem(...... TemplateDoc.Subject(0)......)

nachher:

dummy = SpoofMessagewithitem(...... ReplaceFields(TemplateDoc.Subject(0), TicketDoc) ......)

Damit funktioniert die ganze Sache auch im Subject (natürlich ohne Gewährleistung).

Viel Spaß damit,

Gruß Andreas


Hier noch die Funktion selbst - einfach der Bibliothek "lib.notification.escalation" anhängen :

Function ReplaceFields(sSubject As String, doc As NotesDocument) As String
   ' Ersetze Feldnamen (eingebettet zwischen TAG_PREFIX und TAG_SUFFIX)
   ' mit den Feldwerten aus dem Dokument
   ' erstellt 2006-02-20 von Andreas Schulteiß
   
   Dim sFieldName As String, sFieldValue As String
   Dim iPos1 As Integer, iPos2 As Integer   
   Dim iLen1 As Integer, iLen2 As Integer
   
   iLen1      = Len(TAG_PREFIX)
   iLen2      = Len(TAG_SUFFIX)   
   ReplaceFields    = ""
   
   Do      
      ' suche das Start Tag
      iPos1   = Instr(sSubject, TAG_PREFIX)      
      If iPos1 > 0 Then
         ' suche das Ende Tag
         iPos2   = Instr(iPos1 + iLen1, sSubject, TAG_SUFFIX)   
         If iPos2 > 0 Then
            ' schneide den Feldnamen zwischen den Tags aus
            sFieldName   = Mid(sSubject, iPos1 + iLen1, iPos2 - iPos1 - iLen1)
            If doc.HasItem(sFieldName) Then
               ' setze den Wert des Feldes ein
               Set item       = doc.GetFirstItem(sFieldName)
               sFieldValue   = item.Text
               ReplaceFields   = ReplaceFields + Left(sSubject, iPos1 - 1) + sFieldValue
            Else
               ' wenn das Feld nicht existiert, dann übergebe den ursprünglichen Text
               ReplaceFields   = ReplaceFields + Left(sSubject, iPos2 + iLen2)
            End If
            ' Mach mit dem Rest nach dem Ende Tag weiter
            sSubject       = Mid(sSubject, iPos2 + iLen2)      
         Else
            ReplaceFields   = ReplaceFields + sSubject
         End If
      Else
         ReplaceFields = ReplaceFields + sSubject
      End If
      
   Loop Until (iPos1 = 0) Or (iPos2 = 0)
   
End Function
Titel: Re: Varbiale im Subject der Mailvorlage
Beitrag von: eknori am 22.02.06 - 06:20:50
Herzlichen Dank, Andreas ... :D
Titel: Re: Varbiale im Subject der Mailvorlage
Beitrag von: Thomas Schulte am 22.02.06 - 10:07:23
Ja auch von mir ein Danke. Ich hab das in die neue Version eingebaut. Allerdings ein wenig verändert, so das es aus der Spoofmessage heraus funktioniert und nicht nur im eigenen Dokument sucht, sondern auch in Parent bzw. Basedocs, und das die Klammern (<< und >>) erhalten bleiben können. Die braucht der Dispatcher nämlich manchmal bei Antworten.
Code
Function ReplaceSubjectFields(Me_Subject As String, Me_Linkdoc As NotesDocument, Me_Parentdoc As NotesDocument, Me_Basedoc As notesdocument) As String
%REM 
################################################################################### 
Goal: replace variables that are represented by fieldnames written in << >>.
Check against P and B to get fieldnames also from Parent and Basedocs 
Check against X because the << and the >> have to stay sometimes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
Arguments: Description: 
me_Subject  	  	  				String 								String where field values have to be inserted
me_Linkdoc						NotesDocument					Notes Document
me_Parentdoc					NotesDocument					Parentdocument, if available
me_Basedoc						NotesDocument					Basedocument if available
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
Return: 
the text Value of that field or an empty string if there is no value
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
Example: 
mystring = RpelaceSubjectFields(Subject,Thisdocument, Parentdocument, Basedocument) 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
VERSION / WHEN / WHO / CHANGES 
1.0/??.02.2006/Andreas Schultheis
1.1/21.02.2006/Thomas Schulte/integrated checking against (p)arent and (b)asedocs. 
Integrated Checking against x to keep the << and >> where they should be keeped
'################################################################################### 
%END REM
	
	Dim me_FieldName As String, me_FieldValue As String
	Dim iPos1 As Integer, iPos2 As Integer   
	Dim iLen1 As Integer, iLen2 As Integer
	Dim me_doc As NotesDocument
	Dim Me_Item As notesitem
	Dim Me_ArrRetGetFieldFrom As Variant
	
	On Error Goto ERRHANDLE
	
	iLen1      = Len(TAG_PREFIX)
	iLen2      = Len(TAG_SUFFIX)   
	ReplaceSubjectFields    = ""
	
	Do      
     	' get the start tag
		iPos1   = Instr(Me_Subject, TAG_PREFIX)      
		If iPos1 > 0 Then
			' search the end tag
			iPos2   = Instr(iPos1 + iLen1, Me_Subject, TAG_SUFFIX)   
			If iPos2 > 0 Then
		          ' Cut the string between the tags. This could contain a fieldname or a array
				Me_FieldName   = Mid(me_Subject, iPos1 + iLen1, iPos2 - iPos1 - iLen1)
				' Split the Fields name to check where the field should come from and get the right document
				Me_arrRetGetFieldFrom = Arrayunique ( Split ( Me_FieldName, TAG_FIELDDELIMITER ), 5 )
				If Me_arrRetGetFieldFrom(0) = "b"Then
					If Not Me_basedoc Is Nothing Then
						Set Me_doc = Me_Basedoc
						Me_FieldName = Cstr ( Me_ArrRetGetFieldFrom(1) )
					Else
						Set Me_Doc = Me_LinkDoc
					End If
				Elseif Me_arrRetGetFieldFrom(0) = "p" Then
					If Not Me_parentdoc Is Nothing Then
						Set Me_Doc = Me_Parentdoc
						Me_Fieldname = Cstr ( Me_ArrRetGetFieldFrom(1) )
					Else
						Set Me_Doc = Me_LinkDoc
					End If
				Elseif Me_arrRetGetFieldFrom(0) = "x" Then
					Me_Fieldname = Cstr ( Me_ArrRetGetFieldFrom(1) )
					Set Me_Doc = Me_LinkDoc
				Else
					Set Me_Doc = Me_LinkDoc
				End If
				' split and check
				If Me_doc.HasItem(Me_FieldName) Then
					' get the fields value
					Set me_item       = Me_doc.GetFirstItem(Me_FieldName)
					Me_FieldValue   = Me_item.Text
					If Me_arrRetGetFieldFrom(0) <> "x" Then
						ReplaceSubjectFields   = ReplaceSubjectFields + Left(Me_Subject, iPos1 - 1) + Me_FieldValue
					Else
						' keep the prefix and the suffix
						ReplaceSubjectFields   = ReplaceSubjectFields + Left(Me_Subject, iPos1 - 1) + TAG_PREFIX + Me_FieldValue + TAG_SUFFIX
					End If
				Else
					' if the field does not exist write the original context
					ReplaceSubjectFields   = ReplaceSubjectFields + Left(Me_Subject, iPos2 + iLen2)
				End If
				' do the next step after the end tag
				Me_Subject       = Mid(Me_Subject, iPos2 + iLen2)      
			Else
				' Nothing else found
				ReplaceSubjectFields   = ReplaceSubjectFields + Me_Subject
			End If
		Else
			' nothing found
			ReplaceSubjectFields = ReplaceSubjectFields + Me_Subject
		End If
		
	Loop Until (iPos1 = 0) Or (iPos2 = 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
Titel: Re: Varbiale im Subject der Mailvorlage
Beitrag von: dudeis am 22.02.06 - 16:41:31
Hallo Thomas.

das freut mich aber, dass ich damit meinen eigenen (wenn auch kleinen) Anteil beigetragen habe.

In Zukunft, werde ich auch das Exception Handling, die Kommentare in englisch und Variablennamen nach Euren Nomoklaturen verwenden. => Das spart Dir etwas Arbeit.

Bis Bald,
Andreas
Titel: Re: Varbiale im Subject der Mailvorlage
Beitrag von: eknori am 22.02.06 - 16:51:19
Andreas,

Zitat
dass ich damit meinen eigenen (wenn auch kleinen) Anteil beigetragen habe.

JEDER Beitrag ist willkommen ...  :D