Autor Thema: Dokument mit Autorenfeld per Lotus Script ändern  (Gelesen 3414 mal)

Offline hupfi

  • Junior Mitglied
  • **
  • Beiträge: 73
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

« Letzte Änderung: 06.05.14 - 12:01:51 von hupfi »

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.885
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Dokument mit Autorenfeld per Lotus Script ändern
« Antwort #1 am: 30.04.14 - 19:21:19 »
Ohne code: no chance...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Dokument mit Autorenfeld per Lotus Script ändern
« Antwort #2 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.

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



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



Offline hupfi

  • Junior Mitglied
  • **
  • Beiträge: 73
Re: Dokument mit Autorenfeld per Lotus Script ändern
« Antwort #3 am: 02.05.14 - 07:48:10 »
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...)

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

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

Gruß

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Dokument mit Autorenfeld per Lotus Script ändern
« Antwort #4 am: 02.05.14 - 08:16:49 »
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
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

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?

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: Dokument mit Autorenfeld per Lotus Script ändern
« Antwort #5 am: 02.05.14 - 08:21:42 »
Peter war schneller ;-)
Prüfe mal (mit debug print oder debugger) das Autorenfeld  und session.username und schau ob diese genau gleich sind. Evtl hast du einfach ein falsches Dokument erwischt.

Wenn das Dokument in einem anderen Tab noch geöffnet ist, kann dir das auch rein pfuschen.

Prüfe auch mal ob das Autorenfeld den kanonischen Namen enthält (CN=...)
Gruß Roland
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline hupfi

  • Junior Mitglied
  • **
  • Beiträge: 73
Re: Dokument mit Autorenfeld per Lotus Script ändern
« Antwort #6 am: 06.05.14 - 12:01:13 »
Danke an Peter und Roland.

Ihr hattet mal wieder recht. Ich habe meiner DokumentCollection das falsche Statment mitgegeben und somit falsche
Dokumente erhalten.

Mir ist nur der Debugger davor schon immer abgestürzt. Deshalb dachte ich der Fehler liegt irgendwo anders.


 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz