Du bist aber wirklich ein "hupfi" ;D Ausgagsdokument (also nur ein Gag?), dann Ausangsdokument (in der Au wird gesungen?) und dann Ausgasdokument. "Ausgas"? Sowas wie "Abgas"? Rein begrifflich wäre das ja auch okay.
Oh man ich sollte es lassen vor einem Feiertag im Forum Einträge zu schreiben oder war ich da schon betrunken .... ;D ;D.
Aber zum Glück gibt es ja neben mir auch Leute die sich mit deutscher Rechtschreibung auskennen. ;D ;D
Nun zurück zum Thema hier mein Code. (ich hoffe das es nicht auch so ein dämlicher Fehler ist...)
Sub Queryclose(Source As Notesuidocument, Continue As Variant)
'###############################################################################
'Status auf Kundendokument aktualisieren'
'######################################################################################
Dim session As New NotesSession
Dim uiWork As New NotesUIWorkspace
Dim docKreditberechnung As NotesDocument
Dim docKunde As NotesDocument
Dim strStBerechnung As String
Dim dbaKondition As NotesDatabase
Dim vieID As NotesView
Dim strIDKunde As String
Dim strIDBerechnung As String
Dim dclBerechnungen As NotesDocumentCollection
Dim docBerechnung As NotesDocument
Dim booGenehmigt As Boolean
Dim nagCurrent As NotesAgent
'Auslesen des Kreditberechnungsdokument
Set docKreditberechnung = uiWork.Currentdocument.document
If docKreditberechnung Is Nothing Then
Msgbox "Fehler Dokument Kreditberechnung ist nicht vorhanden. Bitte wenden Sie sich an Ihren Systemandministrotor"
Exit Sub
End If
'Prüfen ob Dokument gespeichert ist und sich Status veränder hat
If docKreditberechnung.IsNewNote Then
Exit Sub
End If
Stop
If docKreditberechnung.GetItemValue("StatusGeändert")(0) = "Nein" Then
Exit Sub
End If
'Setzen von Variablen
Set dbaKondition = session.Currentdatabase
Set vieID = dbaKondition.Getview("DokID")
If vieID Is Nothing Then
Msgbox "Fehler Ansicht ist nicht vorhanden. Bitte wenden Sie sich an Ihren Systemandministrotor"
End If
strIDKunde = docKreditberechnung.Getitemvalue("KundenDocID")(0)
If strIDKunde = "" Then
Msgbox "ID des Kundendokument ist leer. Bitte wenden Sie sich an Ihren Systemandministrotor"
End If
strStBerechnung = docKreditberechnung.Getitemvalue("Status")(0)
Set docKunde = vieID.Getdocumentbykey(strIDKunde, True)
If docKunde Is Nothing Then
Msgbox "Fehler Dokument Kunde ist nicht vorhanden, Bitte wenden Sie sich an Ihren Systemandministrotor"
End If
'wenn Kundendokument Status abgeleht -> abbrechen
If docKunde.GetItemValue("Status")(0) = "Abgelehnt" Then
Exit Sub
End If
'Setzen des Kundendokuemntstatus wenn Kreditberechnung = abgelehnt
If strStBerechnung = "Abgelehnt" Then
Call DocKunde.Replaceitemvalue("Status", "Abgelehnt")
Call docKunde.save(True, False)
End If
'Setzen des Kundendokuemntstatus wenn Kreditberechnung = berechnet
If strStBerechnung = "Berechnet" Then
If docKunde.GetItemValue("Status")(0) <> "Zur Genehmigung" Or docKunde.GetItemValue("Status")(0) <> "Abgelehnt" Then
Call DocKunde.Replaceitemvalue("Status", "Berechnet")
Call docKunde.save(True, False)
End If
End If
'Setzen des Kundendokuemntstatus wenn Kreditberechnung = zur Genehmigung
If strStBerechnung = "Zur Genehmigung" Or strStBerechnung = "Zur Genehmigung Sonderfall" Then
Call DocKunde.Replaceitemvalue("Status", "Zur Genehmigung")
Call docKunde.save(True, False)
End If
'setzen des Kundendokumentstatus wenn alle Kreditberechnungen genehmigt oder ungültig sind
If strStBerechnung = "Genehmigt Eigenkompetenz" Or strStBerechnung = "Ungültig" Or strStBerechnung = "Genehmigt Kompetenzträger" Then
strIDBerechnung = docKreditberechnung.Getitemvalue("DokumentID")(0)
strIDBerechnung = Strtoken(strIDBerechnung, "-", 1) + "-" + Strtoken(strIDBerechnung, "-", 2)
If strIDBerechnung = "" Then
Msgbox "Fehler Dokumenten ID ist nicht vorhanden, Bitte wenden Sie sich an Ihren Systemandministrotor"
End If
booGenehmigt = True
Set dclBerechnungen = vieID.Getalldocumentsbykey(strIDBerechnung, False)
If dclBerechnungen.Count = 0 Then
Msgbox "Fehler keine Kreditberechnungen vorhanden, Bitte wenden Sie sich an Ihren Systemandministrotor"
End If
Set docBerechnung = dclBerechnungen.Getfirstdocument()
While Not DocBerechnung Is Nothing
If docBerechnung.Getitemvalue("Status")(0) = "zur Genehmigung" Or _
docBerechnung.Getitemvalue("Status")(0) = "Berechnet" Then
booGenehmigt = False
End If
Set docBerechnung = dclBerechnungen.Getnextdocument(docBerechnung)
Wend
If booGenehmigt Then
Set docKunde = vieID.Getdocumentbykey(strIDKunde, True)
Call DocKunde.Replaceitemvalue("Status", "Genehmigt")
Call docKunde.save(True, False)
End If
End If
End Sub
Ich hoffe ihr könnt mir helfen. Vielleicht ist ja dieser Post ohne Rechtschreibfehler ;D
Gruß
Ich würde das Script mal debuggen und schauen, wann der Fehler genau auftritt. Wenn der Benutzer das Dokument im Frontend bearbeiten kann, kann er es auch mit Script, da gibt es keinen Unterschied.
In dem Script sind einige Ungereimtheiten, z.B. diese hier
Set docKunde = vieID.Getdocumentbykey(strIDKunde, True)
If docKunde Is Nothing Then
Msgbox "Fehler Dokument Kunde ist nicht vorhanden, Bitte wenden Sie sich an Ihren Systemandministrotor"
End If
'wenn Kundendokument Status abgeleht -> abbrechen
If docKunde.GetItemValue("Status")(0) = "Abgelehnt" Then
Exit Sub
End If
Es wird ein Fehler ausgeworfen, aber das Script nicht abgebrochen, der Abbruch kommt dann zwei Zeilen später mit object variable not set. Das hast Du an mehreren Stellen.
Weiterhin speicherst Du öfters das Kundendokument. Ohne allzu tief in den Code eingestiegen zu sein, würde ich entweder nur einmal das Kundendokument speichern, oder falls die einzelnen Bedingungen zur Speicherung sich gegenseitig ausschließen, das Script dann auch beenden.
Was ich überhaupt nicht verstehe, warum holst Du am Schluss das Kundendokument nochmal?
If booGenehmigt Then
Set docKunde = vieID.Getdocumentbykey(strIDKunde, True)
Call DocKunde.Replaceitemvalue("Status", "Genehmigt")
Call docKunde.save(True, False)
End If
Du hast das doch schon oben geholt, oder ist das jetzt ein anderes? Habe nicht gesehen, dass sich strIDKunde irgendwo ändert.
Tritt das Problem bei jeder Speicherung des Kundendokuments auf, oder nur bei der letzten, bei der das Dokument neu geholt wurde? Ist das vielleicht ein anderes Dokument? Evtl. ein Replizierkonflikt?