Autor Thema: Feldnamen aus eingehender Mail übernehmen  (Gelesen 4482 mal)

Offline H0M3R

  • Frischling
  • *
  • Beiträge: 6
Feldnamen aus eingehender Mail übernehmen
« am: 17.02.09 - 05:41:52 »
Hallo und guten Morgen zusammen,

habe da ein kleines Problem bei dem ich einfach nicht mehr weiter komme.

In unseren eingehenden Mails haben wir bestimmte Feldnamen die ich gerne weiter verwenden würde wie z. B.

Feldname: EDSDOCUN
Datentyp: Textliste
Datenlänge: 36 Byte
Seq.-Num.: 1
Doppeleintrags-ID: 0
Feld-Flags: SUMMARY

Bei einer eingehenden Mail "soeben eingetroffen" ist dieses Feld zu sehen. Wird die Mail dann in ein Ticket umgewandelt ist es weg.

Eingesetzte Version ist 1.6

Gibt es eine Möglichkeit dieses Feld zu übertragen?

Vorab vielen Dank ..

Gruß

H0M3R

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re: Feldnamen aus eingehender Mail übernehmen
« Antwort #1 am: 17.02.09 - 07:28:51 »
Der Dispatcher übernimmt per Programmierung nicht alle Felder aus einer eingehenden Mail. Das müsste im Coding ergänzt werden. Das kann man leicht in der lib.appl.functions ( ScriptLibrary) in der Funktion CreateNewTicket ab Zeile 130 anpassen.

Du siehst da Blöcke, die mit If me_doc.HasItem(" .. anfangen.

Sollte leicht zu erkennen sein, was man da machen muss.

Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline H0M3R

  • Frischling
  • *
  • Beiträge: 6
Re: Feldnamen aus eingehender Mail übernehmen
« Antwort #2 am: 17.02.09 - 07:31:40 »
Super.. 1000Dank für die schnelle Hilfe!!
Werde mich direkt mal damit auseinandersetzen..  ;D

Offline H0M3R

  • Frischling
  • *
  • Beiträge: 6
Re: Feldnamen aus eingehender Mail übernehmen
« Antwort #3 am: 17.02.09 - 18:59:32 »
Muss mich doch nochmal melden. Habe soweit alles untergebracht und eingebunden. Dank Deiner Hilfe ging es schnell.

Leider ist es auf unseren Servern nicht möglich in DB's direkt als Entwickler zu editieren sondern nur per Testumgebung und dann Mail -> Support.

Gibt es auch eine Möglichkeit über die LS-Code Variante bzw. Workaround?

Würde mich über eine Antwort sehr freuen.

Vielen Dank vorab und Gruß aus Essen

Björn

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: Feldnamen aus eingehender Mail übernehmen
« Antwort #4 am: 17.02.09 - 19:42:49 »
Da müsste man ein Konfigurationsdokument DispatchItemConversion auf bauen und das die Funktionen dafür dann in den Dispatcher integrieren. Technisch ziemlich einfach zu machen.
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 H0M3R

  • Frischling
  • *
  • Beiträge: 6
Re: Feldnamen aus eingehender Mail übernehmen
« Antwort #5 am: 17.02.09 - 19:52:48 »
 :o :o Hmmm.. OK! Danke erneut für die schnelle Antwort. Auch wenn ich so langsam aber sicher merke das es mir an Wissen fehlt ;)

Könntest Du mir evtl. etwas mehr dazu sagen? Wäre echt nett, verspreche auch im Anschluss nicht mehr zu Fragen  ;D

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: Feldnamen aus eingehender Mail übernehmen
« Antwort #6 am: 17.02.09 - 21:56:22 »
Wenn du es testest und es dann sicher funktioniert. bauen wir das in die Version 2.0 noch mit ein....

Ersetze mal in der Lib.appl.function den Code für "CreateNewTicket" durch das hier ....

Code
Function CreateNewTicket(db As NotesDatabase, me_doc As notesdocument) As String
%REM
###################################################################################
Goal: This function creates a new Ticket from a mailed document
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Arguments: Description:
db Notesdatabase The Calling Notes DB
me_doc Notesdocument the document that is worked on
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Return:
string UNID of the created document
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Example:
UNID = CreatenewTicket(db,doc)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
VERSION / WHEN / WHO / CHANGES
1.0/24.03.2005/Thomas Schulte/none
1.1/4.04.2005/eknori/ErrorHandling for fields
1.2/06.06.2005/Thomas Schulte/Handling of two different document types (memo/Reply and newbugreport)
1.3/02.08.2005/Thomas Schulte/Creating info mail the same way the save event within the bugReoprt form does
1.4/28.09.2005/Thomas Schulte/added parsing for MessageClick
2.0/17.02.2009/Thomas Schulte/added new config document for copying defineable items from memo documents to the ticket
'###################################################################################
%END REM
On Error Goto ERRHANDLE
Dim newticket As NotesDocument
Dim item As NotesItem
Dim sendtoitem As notesitem
Dim copytoitem As NotesItem
Dim rtitem As NotesRichTextItem
Dim rtBodyNewTicket As NotesRichTextItem
Dim problem As String
Dim plainText As String
Dim asubject As Variant
Dim namesfield As Variant
Dim uniquenumber As Variant
Dim maxProblemLength As Integer
Dim me_notesitem As NotesItem
Dim docmailsend As String
Dim evalstring As String
Dim evalvar As Variant
Dim isnotesuser As Boolean
Dim message As String
Dim messageClick As String
Dim messageintern As String
Dim messagestringsplit As Variant
Dim ok As Boolean
Dim me_String As String
Dim otherusers As Variant
Dim sendtoArray() As String
Dim copytoarray() As String
Dim thisvalues  As Variant
Dim sendtoflag As Boolean
Dim copytoflag As Boolean
Dim dispstatus As String
'added for the purpose of copying user defined items from the mail source to the ticket target
Dim MailNewDocCopyItems As String
Dim MailCopyItemsVariant As Variant
'End new part
Dim v1 As Variant
Dim i As Integer
Const NEW_LINE = Uchr$(13)
' fetch the new config document
MailnewDocCopyItems = GetConfigDocByKeyMultiValue("DispatcherItemsToCopyFromMail",";")
If MailnewDocCopyItems <> "" Then
MailCopyItemsVariant = Split(MailnewDocCopyItems,";")
End If
'End new part
createnewticket = ""
Set NewTicket = New NotesDocument( db )
If Ucase(me_doc.form(0)) = "NEWBUGREPORT" Then
Call me_doc.CopyAllItems(newTicket,True)
Else
If me_doc.HasItem("From") Then
Set item = me_doc.GetFirstItem( "From" )
Call item.CopyItemToDocument ( NewTicket, "User")
End If
sendtoflag = False
copytoflag = False
If me_doc.HasItem("SendTo") Then
Set sendtoitem = me_doc.GetFirstItem( "SendTo" )
Redim sendtoarray(Ubound(sendtoitem.Values))
i= 0
Forall me_val In sendtoitem.Values
sendtoarray(i) = Lcase(me_val)
I=i+1
End Forall
Sendtoflag = True
End If
If me_doc.HasItem("CopyTo") Then
Set copytoitem = me_doc.GetFirstItem( "CopyTo" )
Redim CopyToarray(Ubound(copytoitem.Values))
i= 0
Forall me_val In copytoitem.Values
copytoarray(i) = Lcase(me_val)
I=i+1
End Forall
copytoflag  =True
End If
If sendtoflag = True And copytoflag = True Then
otherusers = Arrayappend(sendtoarray,copytoarray)
Elseif sendtoflag = True And Copytoflag = False Then
otherusers = sendtoarray
Elseif sendtoflag = False And Copytoflag = True Then
otherusers = copytoarray
Else
Error 9999, "Neither sendto nor copyto field was found in the document. ID" + me_doc.UniversalID
End If
' remove all duplicate entrys and the Databases MailIn Name from the OtherUsers Field
'first the duplicate entrys
otherusers = Arrayunique(otherusers)
' then empty everything that is in a configuration document
thisvalues = Split(Lcase(getConfigdocbyKeyMultivalue("DispatcherRemoveNamesFromOtherUsers","~")),"~")
otherusers = Arrayreplace(otherusers,thisvalues,"")
' at last do a fulltrim to extinct all empty entrys
otherusers = Fulltrim(otherusers)
If otherusers(0)<> "" Then
Set item = New NotesItem( NewTicket, "OtherUsers", Otherusers  , NAMES )
End If
If me_doc.HasItem("Body") Then
Set rtitem = me_doc.GetFirstItem( "Body" )
If ( rtitem.Type = RICHTEXT ) Then
plainText = rtitem.GetFormattedText( False, 0 )
End If
maxProblemLength = Cint(GetConfigDocByKey("MaxLengthProblemDescription"))
Problem = Left$(plainText,maxProblemLength)
Set  rtBodyNewTicket = New NotesRichTextItem ( NewTicket, "Body" )
Call rtBodyNewTicket.AppendRTItem( rtitem)
End If
If me_doc.HasItem("Subject") Then
Set item = me_doc.GetFirstItem ("Subject")
Set item = NewTicket.ReplaceItemValue("problem", item.Text & NEW_LINE & NEW_LINE & Problem)
End If
If me_doc.HasItem("DeliveredDate") Then
Set item = me_doc.GetFirstItem( "DeliveredDate" )
Call item.CopyItemToDocument ( NewTicket, "DateCreated")
End If
If me_doc.HasItem("$Mailer") Then
Set item = me_doc.GetFirstItem( "$Mailer" )
Call item.CopyItemToDocument ( NewTicket, "fromMailSystem")
End If
' go through all the other defined items and copy them
If MailnewDocCopyItems <> "" Then
Forall v In MailCopyItemsVariant
v1 = Split(v,"~")
If me_doc.HasItem(v1(0)) Then
Set item = me_doc.GetFirstItem( v1(0) )
Call item.CopyItemToDocument ( NewTicket, V1(1))
End If
End Forall
End If
' end new part
End If
Uniquenumber = Evaluate(|@unique|)
Set item = NewTicket.ReplaceItemValue("ReqNumber",Uniquenumber)
asubject = CreateASubject(newticket,"ASubjectTicket")
If Isarray( asubject) = True Then
Set item = NewTicket.ReplaceItemValue("ASubject",asubject)
End If
asubject = CreateASubject ( newticket, "AInfoTicket" )
If Isarray( asubject) = True Then
Set item = NewTicket.ReplaceItemValue("AInfo",asubject)
End If
Set item = NewTicket.ReplaceItemValue ("Form", "BugReport")
Set item = NewTicket.ReplaceItemValue ("FormID", "1")
Set Item = NewTicket.ReplaceItemValue("FormType","Ticket")
dispstatus = GetConfigDocByKey("DispatcherNewTicketStartStatus")
If Dispstatus = "" Then Dispstatus = "0"
Set item = NewTicket.ReplaceItemValue ("Status", DispStatus)
Set item = NewTicket.ReplaceItemValue("enteredBy","0")
Set item = NewTicket.ReplaceItemValue ("Escalated", "0")
Set item = NewTicket.ReplaceItemValue ("Rerouted", "0")
Set item = NewTicket.ReplaceItemValue ("transformed", "1")
' build the reader and the authors field if necessary
If Ucase(GetConfigDocByKey("LockDocumentsgeneral"))="YES" Then
' create the readers field
namesfield = CreateNamesField(newticket,"LockDocumentsTicketReaders")
If Isarray( namesfield) = True Then
Set item = NewTicket.ReplaceItemValue("AReaders",namesfield)
item.IsReaders = True
End If
' create the authors field
namesfield = CreateNamesField(newticket,"LockDocumentsTicketAuthors")
If Isarray( namesfield) = True Then
Set item = NewTicket.ReplaceItemValue("AAuthors",namesfield)
item.IsAuthors = True
End If
End If
' The following code will calculate the next business day according to @now
Dim EXCLUDE_DAYS As String
Dim EXCLUDE_DATES As String
Dim SERVICEHOURS As String
Dim conf As New Config
EXCLUDE_DAYS = conf.GetSingleValue ("DTC_EXCLUDE_DAYS")
EXCLUDE_DATES = conf.GetSingleValue ("DTC_EXCLUDE_DATES")
SERVICEHOURS = conf.GetSingleValue ("DTC_SERVICEHOURS")
Dim DTCalc As New DateTimeCalculator (EXCLUDE_DAYS,EXCLUDE_DATES,SERVICEHOURS)
Dim dt1 As NotesDateTime
If me_doc.HasItem ("DateCreated") Then
Set item = me_doc.GetFirstItem( "DateCreated" )
Elseif me_doc.HasItem ("ComposedDate") Then
Set item = me_doc.GetFirstItem( "ComposedDate" )
Else
Set item = me_doc.GetFirstItem( "DeliveredDate" )
End If
Set dt1 = New NotesDateTime ( DTCalc.GetNextBusinessDay(item.Text) )
Set item = NewTicket.ReplaceItemValue ("DTCreated", "")
Set item.DateTimeValue = dt1
Call NewTicket.Save (True,True)
message = GetLanguageStringByKey(GetConfigDocByKey("Language"),"TICKET ACTIONS & STRINGS","msgTicketAssigned")
' Get the messages for this document
messageclick = GetLanguageStringByKey(GetConfigDocByKey("Language"),"TICKET ACTIONS & STRINGS","msgTicketClick")
'is a field that steers mail information sending
If itemTextExists(NewTicket,"fldMailIfNew") = True Then
Set me_notesitem = NewTicket.GetFirstItem("fldMailIfNew")
docmailsend = me_notesitem.text
Else
docmailsend = ""
End If
' check if the user is a notes user because only this ones get documents with links
Evalstring = |@unique(@NameLookup ( [Exhaustive]; "| + newticket.user(0) + |" ;"FullName"))|
EvalVar = CheckAndEvaluate(Evalstring, newticket)
If Isempty(EvalVar) Then
isnotesuser = False
Else
isnotesuser = True
End If
' send the mail either as mail with link or as mail
If Ucase(GetConfigDocByKey ("NoNotification")) = "YES"_
Or docmailsend = "NO"_
Or (Ucase(GetConfigDocByKey ("MailIfNewDocDispatcher")) <> "YES"_
And docmailsend = "" ) Then
Else
If Ucase(GetConfigDocByKey ("MailIfNewDocDispatcherLink")) = "YES" And isnotesuser= True Then
BoolLink = True
Else
BoolLink = False
End If
OK = Spoofmessage(_
GetConfigDocByKey("sendMailonBehalfof"),_
newticket.user, _
newticket.otherusers,_
message,_
messageclick,_
doc,_
GetConfigDocByKey("MailIfNewDocDispatcherSubjectFieldName"),_
GetConfigDocByKey("MailIfNewDocDispatcherBodyFieldName"),_
BoolLink,_
True,_
"BugReport",_
"IsNewMail")
End If
Createnewticket = newticket.UniversalID
EXITPOINT:
Exit Function
ERRHANDLE:
Call LogError
Resume EXITPOINT
End Function

Anschließend baust du in neues Konfigurationsdokument in die Konfiguration ein.

Name:
DispatcherItemsToCopyFromMail

Werte
vonFeldname~zuFeldname
ESDOCUN~ESDOCUN
NochEinFeld~EinandererName

Dann testest du den Dispatcher auf deinem Testsystem. Einmal Ohne Werte im Configurationsdokument.
Einmal mit irgendwelchen PseudoFeldnamen.
und einmal mit korrekten Feldnamen

Und wenn das alles funktioniert dann sagst du eurem Helpdesk Bescheid.

Uns natürlich auch, dann können wir das einbauen.
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 H0M3R

  • Frischling
  • *
  • Beiträge: 6
Re: Feldnamen aus eingehender Mail übernehmen
« Antwort #7 am: 17.02.09 - 22:40:00 »
Wow.. das ging fix.. Echt Klasse.. vielen Dank!
Werde es sofort testen und die Ergebnisse posten.

Danke und Gruß
Björn

Offline H0M3R

  • Frischling
  • *
  • Beiträge: 6
Re: Feldnamen aus eingehender Mail übernehmen
« Antwort #8 am: 18.02.09 - 00:00:01 »
TEST ERFOLGREICH BEENDET

Aufgabe:

Feldnamen aus eingehender Mail übernehmen

Durchführung:

Es wurden folgende Feld-Typen getestet: Zeit/Datum, Zeit, Datum, dspUser, ESBDOC

1. Feldnamen in Config eingetragen
Tatsächliche Feldnamen in eingehenden Mails wurden korrekt dargestellt.

2. Pseudo Werte in Config eingetragen
Es wurden nur zufällig gleichlautende Werte erkannt und dargestellt

3. Absolut fremde Werte in Config eingetragen
Keiner der Werte erscheint in den Eigenschaften der eingehenden Mails.


Ergebnis:

Funktioniert bestens und ist sehr leicht zu configurieren. Klasse Arbeit.

Vielen Dank von meiner Seite.

Schönen Abend und Gruß

Björn

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz