Autor Thema: Aufruf der Class History beim Querysave funktioniert nicht mehr.  (Gelesen 7832 mal)

Offline Sommersprosse

  • Senior Mitglied
  • ****
  • Beiträge: 296
  • Geschlecht: Weiblich
Hallo zusammen,

ich habe eine Helpline für eine andere Abteilung bei uns erstellt.

Eigentlich haben die Masken Bugreport und BugTodo nicht mehr viel mit dem Original gemeinsam, da einige Felder dazu gekommen sind oder andere gelöscht worden sind.
Die Scripte im Querysave, postopen und queryclose sind aber vom Prinzip her geblieben. Teilweise musste ich die Scripte um die ein oder andere Abfrage ergänzen.

Da die Kollegen ganz andere Felder überwachen wollen, wollte ich das Feld dsphistory in eine andere Tabelle (System) im Bugreport kopieren, da hier die meisten Informationen händisch eingegeben werden und hier protokolliert werden soll, wann sich an den feldern etwas ändert. In der Config habe ich die Felder angepasst. In meinem Fall sind das die Felder edrc_number, motorid, link, und attachddinfo.
Aus dem Feld Attachmentdd werden die Anhänge per Script im Queryclose in das Feld Attachddhistory (Zugriffskontrollierter Abschnitt) kopiert und der Dateiname der Anhänge via Script auch im Queryclose ins Feld Attachddinfo kopiert. Meine ursprüngliche Idee war, ähnlich der Funktion der Inputhistory den Namen der Dateianhänge incl. Person und datum in ein neues Historyfeld zu schreiben.

Warum aber das Rad aber neu erfinden, wenn alles mit der Class History schon da ist...

Ich habe dann wieder umgestellt und versucht das in die Class History einzubinden. Beim test ist mir dann aufgefallen, daß beim Speichern der Querymodechange event nicht mehr aufgerufen wird. Der Aufruf im Postopen funktioniert.

Ich habe mal zum Test das History Feld wieder in die ursprüngliche tabelle zurückkopiert und die Scripte aus unsere Helpline kopiert ob meine Änderungen hier was zerschossen hat.... aber keine Änderung.

Über den Debugger komme ich nicht wirklich weiter, ´Fehlermeldung bekomme ich keine.....

Irgendeine Idee wo ich suchen könnte  :-:

Ich kann wenn nötig, auch noch meine Scripte posten... hoffe meine Erläuterungen waren ausreichend, sonst melden.



Gruß Ulli

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
Erste Frage, welche Version hast du als Basis benutzt?
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 Sommersprosse

  • Senior Mitglied
  • ****
  • Beiträge: 296
  • Geschlecht: Weiblich
Sorry hab ich vergessen:  1.6
Gruß Ulli

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
Frage 2: hast du die ClassHistory verändert? Weil du mit der eigentlich nur im Config Dokument für die Maske eintrage musst welche Felder du gerne überwachen würdest.
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 Sommersprosse

  • Senior Mitglied
  • ****
  • Beiträge: 296
  • Geschlecht: Weiblich
Nein. habe ich nicht, ich habe nur die schon erwähnten Scripte bearbeitet.... ???
Ich habe auch die Class History mit der der orginal help verglichen... keine Änderungen festgestellt.

Ich hatte mal an der lib.application.validation was geändert, aber wieder die original kopiert.
Gruß Ulli

Offline Sommersprosse

  • Senior Mitglied
  • ****
  • Beiträge: 296
  • Geschlecht: Weiblich
Ich habe dann wieder umgestellt und versucht das in die Class History einzubinden.

Hab mich hier vielleicht nich ganz korrekt ausgedrückt... Die Klasse selber habe ich nicht verändert, nur die Einstellungen in der Config.

Vielleicht holle ich mir die Klasse noch einmal von der Original, das habe ich nich nicht gemacht...
Gruß Ulli

Offline Sommersprosse

  • Senior Mitglied
  • ****
  • Beiträge: 296
  • Geschlecht: Weiblich
Vielleicht holle ich mir die Klasse noch einmal von der Original, das habe ich nich nicht gemacht...

Ein neuer Import hat auch nichts gebracht, Habt Ihr vielleicht nicht doch noch 'ne Idee?

Gruß Ulli

Offline Sommersprosse

  • Senior Mitglied
  • ****
  • Beiträge: 296
  • Geschlecht: Weiblich
Wann wird eigentlich der Postsave event aufgerufen?

Das ist doch eigentlich über die History Class geregelt. Dieser Aufruf funktioniert nicht.... warum auch immer. Im Postopen macht er noch alles korrekt,
In der Datenbank habe ich noch ein älteres Ticket probiert, damit hatte ich keine Probleme, alles okay.
Mittlerweile habe ich aber noch Felder hinzugefügt und noch um Abfragen ergänzt. Insbesondere alles was mit kopieren von Anhängen zu tun hat.

Ich habe das Script im Qureysave ziemlich aufgeblasen. Den Code poste ich jetzt mal noch. Wahrscheinlich ist da auch noch optimierungspotenzial und die zusätzlichen Abfragen können irgendwie zusammengefasst werden.
Ich hatte im Save Button selber auch noch ein Setfield mit dabei, den habe ich aber enfernt.  


Code
Sub Querysave(Source As Notesuidocument, Continue As Variant)
Dim session As New NotesSession
Dim wksp As New notesuiworkspace
Dim db As notesdatabase
Dim uidoc As notesuidocument
Dim doc As NotesDocument
Dim messagestext As String
Dim messagessplit As Variant
Dim messageslist List As String
Dim x As Variant
Dim i As Integer
Dim counter As Integer
Dim message As String
Dim messageintern As String
Dim messagestringsplit As Variant
Dim thisdate As New NotesDateTime("")
Dim ok As Boolean
Dim evalvar As Variant
Dim isnotesuser As Boolean
Dim user As String
Dim item As notesitem
Dim evalstring As String
Dim docunid As String
Dim docmailsend As String
Dim notesitem As NotesItem
Redim ErrorArray(0) As String
Set db = session.CurrentDatabase
If source.EditMode = True Then
Call source.RefreshHideFormulas
End If
ValidationArray = Source.Document.SetValidation
Print
If Not ValidateForm(Source.document, ValidationArray, ErrorArray, strGotoField) Then
Msgbox MessageslistitemNotExists(interactivemessages ,"msgValidationDialogheader", 0 ) & Chr$(10) & l_Join(ErrorArray, Chr$(10)),16,MessageslistitemNotExists(interactivemessages ,"msgValidationDialogTitle", 0 )
continue = False
Exit Sub
Else
Call source.refresh
End If
Call thisdate.setnow
user = session.commonUserName
messagestext = source.fieldgettext("MESSAGES")
messagessplit = Split(messagestext,";")
For I = 0 To Ubound(messagessplit) Step 1
x = Split(messagessplit(i),"=")
messageslist(x(0)) = x(1)  
Next
If source.Document.input(0) <> "" Then
Ok = logActions(Source,"Useraction","",source.Document.inputtimedate(0), source.Document.inputtimefrom(0),"",source.Document.inputtimeuntil(0),"",Left(source.Document.input(0),100))
If ok = False Then
Print "Error in Module"
continue = False
Exit Sub
End If
If  ItemTextExists(source.document, "inputhistory") = False Then
source.Document.inputhistory = source.Document.input(0) & Chr(10) & Chr(13) & Chr(10) & Chr(13) & _
user & "    " & thisdate.LocalTime & Chr(10) & Chr(13) &_
"________________________________________" & Chr(10) & Chr(13)
Else
source.Document.inputhistory = source.Document.inputhistory(0) & source.Document.input(0) &  Chr(10)  & _
user & "    " & thisdate.LocalTime & Chr(10) & Chr(13) &_
"________________________________________" & Chr(10) & Chr(13)
End If
source.Document.input = ""
End If
'Zusatz für Überprüfung in der Customer Data tab
If source.Document.inputcd(0) <> "" Then
Ok = logActions(Source,"Useraction","",source.Document.inputtimedate(0), source.Document.inputtimefrom(0),"",source.Document.inputtimeuntil(0),"",Left(source.Document.inputcd(0),100))
If ok = False Then
Print "Error in Module"
continue = False
Exit Sub
End If
If  ItemTextExists(source.document, "inputhistoryCD") = False Then
source.Document.inputhistoryCD = source.Document.inputcd(0) & Chr(10) & Chr(13) & Chr(10) & Chr(13) & _
user & "    " & thisdate.LocalTime & Chr(10) & Chr(13) &_
"________________________________________" & Chr(10) & Chr(13)
Else
source.Document.inputhistoryCD = source.Document.inputhistoryCD(0) & source.Document.inputcd(0) &  Chr(10)  & _
user & "    " & thisdate.LocalTime & Chr(10) & Chr(13) &_
"________________________________________" & Chr(10) & Chr(13)
End If
source.Document.inputcd = ""
End If
'Zusatz für Überprüfung in der Design Data tab
If source.Document.designdnotes(0) <> "" Then
Ok = logActions(Source,"Useraction","",source.Document.inputtimedate(0), source.Document.inputtimefrom(0),"",source.Document.inputtimeuntil(0),"",Left(source.Document.designnotes(0),100))
If ok = False Then
Print "Error in Module"
continue = False
Exit Sub
End If
If  ItemTextExists(source.document, "inputhistoryDD") = False Then
source.Document.inputhistoryDD = source.Document.designdnotes(0) & Chr(10) & Chr(13) & Chr(10) & Chr(13) & _
link & ":     " & source.Document.link & Chr(10)& Chr(13)&_
user & "    " & thisdate.LocalTime & Chr(10) & Chr(13) &_
"________________________________________" & Chr(10) & Chr(13)
Else
source.Document.inputhistoryDD = source.Document.inputhistoryDD(0) & source.Document.designdnotes(0) &  Chr(10)  & _
link & ":     " & source.Document.link & Chr(10) & Chr(13)&_
user & "    " & thisdate.LocalTime & Chr(10) & Chr(13) &_
"________________________________________" & Chr(10) & Chr(13)
End If
source.Document.designdnotes = ""
End If
' Überprüfen ob der Status work in progress gesetzt werden kann. Ist Abhängig vom Feld edrc_number.
'Wenn leer, dann nicht, wenn ja, dann Status setzen.
If source.Document.edrc_number(0) <> "" Then
Set doc = source.Document
Set item = doc.ReplaceItemValue ("in_service", 1)
Call doc.Save(True, True)
Else
Set doc = source.Document
Set item = doc.ReplaceItemValue ("in_service", "")
Call doc.Save(True, True)
End If
'Ist aber der status 99 (Ticket fertig) und Feld edrc_number ist nicht leer, dann Haken entfernen.
If source.Document.status(0) = "99" Then
Set doc = source.Document
Set item = doc.ReplaceItemValue ("in_service", "")
Call doc.Save(True, True)
End If
message = MessageslistitemNotExists(messageslist, "msgTicketAssigned",2)
Set doc = source.Document
If source.IsNewDoc = True Then
If itemTextExists(source.Document,"fldMailIfNew") = True Then
Set notesitem = source.Document.GetFirstItem("fldMailIfNew")
docmailsend = notesitem.text
Else
docmailsend = ""
End If
Evalstring = |@unique(@NameLookup ( [Exhaustive]; "| + Source.Document.user(0) + |" ;"FullName"))|
EvalVar = CheckAndEvaluate(Evalstring, Source.document)
If Isempty(EvalVar) Then
isnotesuser = False
Else
isnotesuser = True
End If
If Ucase(GetConfigDocByKey ("NoNotification")) = "YES" Or docmailsend = "NO"  Or (Ucase(GetConfigDocByKey ("MailIfNewDoc")) <> "YES" And docmailsend = "")Then
Else
If Ucase(GetConfigDocByKey ("MailIfNewDocLink")) = "YES" And isnotesuser= True Then
BoolLink = True
Else
BoolLink = False
End If
OK = Spoofmessage(_
GetConfigDocByKey("sendMailonBehalfof"),_
doc.user, _
doc.otherusers,_
message,_
MessageslistitemNotExists(messageslist, "msgTicketClick",2),_
doc,_
GetConfigDocByKey("MailIfNewDocSubjectFieldName"),_
GetConfigDocByKey("MailIfNewDocBodyFieldName"),_
BoolLink,_
True,_
"BugReport",_
"IsNewMail")        
End If
End If
If GetConfigDocByKey("RSSCreateFeed") = "YES" Then
ok = createRFCDate(doc,"RFC_822_Date")
End If
If source.IsNewDoc Then
' 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
Set dt1 = New NotesDateTime ( DTCalc.GetNextBusinessDay(Now) )
Set item = doc.ReplaceItemValue ("DTCreated", "")
Set item.DateTimeValue = dt1
End If
End Sub

Das Queryclose Script poste ich auch mal noch:
Code
Sub Queryclose(Source As Notesuidocument, Continue As Variant)
If source.EditMode = True Then
Const TABLE_NAME$ = "$HelpdeskTable"
Const TABLE_TAB$ = "1"
Dim uiws As New NotesUIWorkspace
Dim session As New NotesSession
Dim doc As NotesDocument
Dim uidoc As NotesUIDocument
Set uidoc = uiws.CurrentDocument
Set doc = uidoc.Document
Call doc.ReplaceItemValue(TABLE_NAME, TABLE_TAB)
Dim rtitem As Notesrichtextitem
Dim attachnamedd () As String
Dim attachnamecd () As String
Dim att As Integer
End If
Set g_History = Nothing
' kopieren der Anhänge von attachments aus der design data ins History Feld
Set doc = source.Document
Set rtitem = doc.GetFirstItem( "attachmentdd" )
If (rtitem Is Nothing) Then  
Else
att = 0
If ( rtitem.Type = RICHTEXT ) Then
If Isarray (rtitem.embeddedObjects) Then
Forall o In rtitem.EmbeddedObjects
Redim Preserve attachnamedd(att)
attachnamedd(att) = o.Name
att = att + 1
If ( o.Type = EMBED_ATTACHMENT ) Then
Call rtitem.copyItemToDocument (doc, "attachddhistory")
Call o.Remove
Call doc.Save( True, True )
End If
End Forall
Call doc.replaceItemValue("attachddinfo", attachnamedd)
Call doc.save (True,True)
Call uidoc.refresh
End If
Call rtitem.remove
Call doc.save (False, True)
End If  
End If
' kopieren der Anhänge von attachments aus der Customer data ins History Feld
Set doc = source.Document
Set rtitem = doc.GetFirstItem( "attachmentcd" )
If (rtitem Is Nothing) Then  
Else
att = 0
If ( rtitem.Type = RICHTEXT ) Then
If Isarray (rtitem.embeddedObjects) Then
Forall o In rtitem.EmbeddedObjects
Redim Preserve attachnamecd(att)
attachnamecd(att) = o.Name
att = att + 1
If ( o.Type = EMBED_ATTACHMENT ) Then
Call rtitem.copyItemToDocument (doc, "attachcdhistory")
Call o.Remove
Call doc.Save( True, True )
End If
End Forall
Call doc.replaceItemValue("attachcdinfo", attachnamecd)
Call doc.save (True,True)
Call uidoc.refresh
End If
Call rtitem.remove
Call doc.save (False, True)
End If  
End If
End Sub

Ich wäre echt dankbar, wenn jemand den Fehler finden würde.
« Letzte Änderung: 22.09.10 - 16:29:33 von sommersprosse »
Gruß Ulli

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
Tim ist wohl gerade mit dem aufräumen nach der Abschlusssession beim Admin Camp beschäftigt. Ulrich auch und ich sitze in Ehningen und mach bei dem XPages Workshop mit.

Von daher wird das mit einer schnellen Antwort erst mal nichts.

Was Service und Support angeht, hat Tim ja ein entsprechendes Angebot gemacht
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 Sommersprosse

  • Senior Mitglied
  • ****
  • Beiträge: 296
  • Geschlecht: Weiblich
Hallo Thomas,

Von daher wird das mit einer schnellen Antwort erst mal nichts.

kein Problem,

ich war die letzten Tage nur mal wieder am programmieren und vielleicht ist es einfacher für jemanden den Fehler zu finden, wenn soviel Informationen wir möglich vorhanden sind. Ich werde jetzt mal das Rad rückwärts drehen und Schritt für Schritt meine Änderungen zurücknehmen, mal sehen wo es hakt.
Trotzdem danke für deine Rückmeldung und das was Ihr hier an Arbeit reinsteckt. Wir haben von Help enorm profitiert, so daß auch andere (nicht -IT Abteilungen) dieses Werkzeug nutzem wollen .

Sollte Dir oder den anderen Help Korophäen etwas auffallen.....
Gruß Ulli

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz