Domino 9 und frühere Versionen > ND8: Entwicklung

Dokument mit Autorenfeld per Lotus Script ändern

(1/2) > >>

hupfi:
Hallo zusammen,

ich habe mal wieder ein Problem, bei dem ich nicht weiterkomme.

Ich habe ein Ausgagsdokument. In diesem setze ich den aktuellen User in ein Autorenfeld. Danach wird diese Maske gespeichert und
daraus einen neue aufgerufen. Dort werden einige Eingaben gemacht und ein Status gesetzt. Nun möchte ich den Status des aktuellen
Dokumentes in das Ausangsdokument schreiben. Dies geschieht im Queryclose per Lotus Script.

Sobald ich jedoch das Ausgagsdokument per doc.save speichere erhalte ich den Fehler: "Sie können keine Dokumente aktualisieren
oder löschen, für die Sich nicht als zulässiger Autor aufgefürt werden.

Es handelt sich aber ja immer noch um den gleichen Benuzter, welcher das Ausgasdokument geöffent hat. Somit muss dieser ja
Autor sein. Über das Frontend kann ich das Dokument auch verändern. Nur im LS scheint dies nicht zu funktionieren.

Kann mir jemand sagen warum?

Dank und Gruß
hupfi

Tode:
Ohne code: no chance...

koehlerbv:
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.

Nun aber Spaß beiseite (wenn eines schief geht, dann geht da manchmal auch alles schief - Murphy's Law oder shit happens, ich kenne das auch!):
Torsten hat vollkommen recht: Ohne Code geht da nix. Klar ist: Deine Rechte stimmen, das zeigt das Ändern via normalem Frontend (wenn da nichts schief geht - Du testest lokal ohne kACL und programmierst auf dem Domino, was wohl jedem irgendwann schon passiert ist).

Der Fehler muß also woanders liegen und ist wahrscheinlich trivial. Aber ohne Code können wir eben auch keinen Code-Fehler ausschliessen.

Bernhard




--- Zitat von: hupfi am 30.04.14 - 17:09:59 ---Hallo zusammen,

ich habe mal wieder ein Problem, bei dem ich nicht weiterkomme.

Ich habe ein Ausgagsdokument. In diesem setze ich den aktuellen User in ein Autorenfeld. Danach wird diese Maske gespeichert und
daraus einen neue aufgerufen. Dort werden einige Eingaben gemacht und ein Status gesetzt. Nun möchte ich den Status des aktuellen
Dokumentes in das Ausangsdokument schreiben. Dies geschieht im Queryclose per Lotus Script.

Sobald ich jedoch das Ausgagsdokument per doc.save speichere erhalte ich den Fehler: "Sie können keine Dokumente aktualisieren
oder löschen, für die Sich nicht als zulässiger Autor aufgefürt werden.

Es handelt sich aber ja immer noch um den gleichen Benuzter, welcher das Ausgasdokument geöffent hat. Somit muss dieser ja
Autor sein. Über das Frontend kann ich das Dokument auch verändern. Nur im LS scheint dies nicht zu funktionieren.

Kann mir jemand sagen warum?

Dank und Gruß
hupfi



--- Ende Zitat ---

hupfi:

--- Zitat von: koehlerbv am 30.04.14 - 20:42:39 ---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.

--- Ende Zitat ---

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...)


--- Code: ---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
--- Ende Code ---

Ich hoffe ihr könnt mir helfen. Vielleicht ist ja dieser Post ohne Rechtschreibfehler  ;D

Gruß

Peter Klett:
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


--- Code: --- 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

--- Ende Code ---
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?


--- Code: --- If booGenehmigt Then
Set docKunde = vieID.Getdocumentbykey(strIDKunde, True)
Call DocKunde.Replaceitemvalue("Status", "Genehmigt")
Call docKunde.save(True, False)

End If

--- Ende Code ---

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?

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln