Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Rootine am 16.01.07 - 09:19:39
-
Wunderschönen guten Morgen!
Ich hab wieder mal ein Problem...
Folgende Situation:
Ich habe eine Datenbank mit "Aufträgen" die von einer Gruppe bearbeitet werden. Damit die MA nicht in einer anderen Datenbank ihre Tätigkeiten nochmal eingeben müssen, haben sie in dieser Auftragsdatenbank in der Maske "Aufträge" einen Abschnitt mit berechnetem Zugriff (da ist die Gruppe eingetragen) in dem die MA ihrer Tätigkeiten eintragen und das ganze mittels Button in die andere Datenbank hinüberschmeissen. Alle Personen dieser Gruppe haben dieses Recht und stehen in einem Autorenfeld, Zusätzlich sind alle Personen dieser Gruppe Editoren in der ACL. Nun tritt aber bei zwei von den 10 Personen folgender Fehler auf: "Notes error: Sie können keine Dokumente aktualisieren oder löschen, für die Sie nicht als berechtigter Autor aufgeführt sind".
Woran kann das liegen?
danke und lg
Rootine
-
Hallo
Es kann sein, dass die Autorenfelder nicht korrekt befüllt sind.
Ich denke mal, dass Du die Dokumente via LS erstellst.
Ich hatte das selbe Problem bei einigen Usern.
Vor dem doc.Save... habe ich folgende Zeilen eingefügt:
Set item = New NotesItem( docAntrag , "fldAuthorToDo" , sess.UserName , AUTHORS )
item.IsSummary = True
Danach gings :-: ;D
-
Hallo,
ich hatte gerade ein ähnliches Problem:
-User hat autoren Recht auf die ZielDB
-Kopiert ein Dokument in die ZieldDB und kann es dann nicht mehr Speichern (ist kein Autor für Doc)
Lösung:
Leeres Dokument in der ZieldDB anlegen.
Copy all items vom QuellDoc in das ZielDoc.
->> Autorenfeld setzten (wenn kein Autorenfeld vorhanden dann noch Feld anlegen und mit item.isauthors zum Autorenfeld machen.
Eventuell sind auch zu viele Elemente in der Gruppe/Autorenfeld. Das kann man testen indem man die Betreffenden an den Anfang der Liste setzt.
Hoffe es hilft.
Werner
-
so ich poste Euch mal den Code vom Button rein:
Sub Click(Source As Button)
Dim ws As New NotesUIWorkspace
Dim s As New NotesSession
Dim ccdb As NotesDatabase
Dim zab As Notesdatabase
Dim prodoc As notesdocument
Dim cd As NotesUIDocument
Dim zd As NotesDocument
Dim quelle As NotesRichTextItem
Dim ziel As NotesRichTextItem
Dim server As String
Dim filepath(0) As String
Dim searchstr(0) As String
Dim replacestr(0) As String
Dim repfilepath As Variant
Dim fehler As String
Dim zabcwf As Variant
Dim gessumme As Double
Set cd = ws.CurrentDocument
Set ccdb = s.CurrentDatabase
Set prodoc = ccdb.GetProfileDocument("DBProfil")
filepath(0) = prodoc.zab(0)
searchstr(0) = "\\"
replacestr(0) = "\"
repfilepath =Replace(filepath,searchstr,replacestr)
Set zab = s.GetDatabase(prodoc.napps(0),repfilepath(0),False)
'Eingabeüberprüfung
fehler=""
If cd.Fieldgettext("ZIDMA")="" Then
fehler=fehler+"Der MA Name fehlt" & Chr(10)
End If
If cd.Fieldgettext("ABDatum")="" Then
fehler=fehler+"Datum ist leer" & Chr(10)
End If
If cd.Fieldgettext("ABKST")="" Then
fehler=fehler+"Kostenstelle ist leer" & Chr(10)
End If
If cd.Fieldgettext("ABAufgabe")="" Then
fehler=fehler+"Aufgabe ist leer" & Chr(10)
End If
If cd.Fieldgettext("ABInstOrg")="" Then
fehler=fehler+"Kostentrräger fehlt" & Chr(10)
End If
If cd.Fieldgettext("ABStunden_1")="" And cd.Fieldgettext("ABStunden_2")=""Then
fehler=fehler+"NormalAZ und ExtraAZ sind leer ( mind. 1 Feld eintragen )" & Chr(10)
End If
If fehler<>"" Then
Msgbox "Folgende Fehler sind aufgetreten: " & Chr(10) & Chr(10) & fehler & Chr(10) & "Bitte geben Sie gültige Werte ein." ,16,"Fehler"
Exit Sub
End If
If cd.FieldGetText("ABStunden_1") = "" Then
Call cd.FieldSetText("ABStunden_1","0")
End If
If cd.FieldGetText("ABStunden_2") = "" Then
Call cd.FieldSetText("ABStunden_2","0")
End If
Call cd.Save
Call cd.Refresh
Set zd = zab.CreateDocument()
zd.Form="TimeBericht"
zd.ZIDMA=cd.fieldgettext("ZIDMA")
zd.wam = cd.fieldgettext("wam")
zd.ABDatum=Cdat(cd.fieldgettext("ABDatum"))
zd.ABKST= cd.fieldgettext("ABKST")
zd.ABInstOrg=cd.fieldgettext("ABInstOrg")
zd.ABAufgabe=cd.fieldgettext("ABAufgabe")
zd.ABAufgabeUmwandeln=cd.fieldgettext("ABAufgabeUmwandeln")
zd.ABStunden_1 = cd.fieldgettext("ABStunden_1")
zd.ABStunden_2 = cd.fieldgettext("ABStunden_2")
zd.Stundensatz=cd.fieldgettext("Stundensatz")
zd.Summe=cd.fieldgettext("Summe")
zd.ExtraAZ_von = cd.fieldgettext("ExtraAZ_von")
zd.ExtraAZ_bis = cd.fieldgettext("ExtraAZ_bis")
zd.ABStunden = cd.fieldgettext("ABStunden")
zd.ABBeschreibung = cd.fieldgettext("ABBeschreibung")
'TODO AUTOREN UND LESERFELDER AUS ZAB HOLEN!!!
zd.Autoren=cd.fieldgettext("AB_Autoren")
zd.Autoren_1=cd.fieldgettext("AB_Autoren_1")
zd.Leser=cd.fieldgettext("AB_Leser")
zd.Leser_1=cd.fieldgettext("AB_Leser_1")
zd.ABStatus="angelegt"
zd.Ursprung="CCDB:"+ " - " + cd.fieldgettext("Kunde2")+ " - " +cd.fieldgettext("ABInstOrg")+ " - " +cd.fieldgettext("Kategorie")+ " - " +cd.fieldgettext("erstelltam")
Set quelle = New NotesRichTextItem(zd,"Quelle")
Call quelle.AppendText("CCDB: Klicken Sie hier ->")
Call quelle.AppendDocLink(cd.Document, "CCDB Dokument öffnen!")
Call quelle.AppendText("<- um zum Dokument zu gelangen!")
Call zd.Save( False, False )
zabcwf = zd.ComputeWithForm(False,False)
Call zd.Save( False, False )
If zd.Save(True,True,True) Then
gessumme = Cdbl(cd.fieldgettext("ABStunden")) + Cdbl(cd.fieldgettext("ABGesSumme"))
Call cd.FieldSetText( "ABGesSumme" , Cstr(gessumme))
taet = cd.fieldgettext("ZIDMA") + " (" + cd.fieldgettext("ABDatum") + " - " + cd.fieldgettext("ABStunden") + " Stunden) " + cd.fieldgettext("ABAufgabe") + " - " + cd.fieldgettext ("ABBeschreibung") + Chr(13)
Call cd.FieldAppendText("taetigkeiten", taet)
Call cd.Save()
'log
'Set ziel = New NotesRichTextItem(cd.Document, "ABLog")
'Call ziel.AppendText("ZAB am " & Cstr(Date$) & " von " & cd.FieldGetText("ZIDMA") & " : Klicken Sie hier ->")
'Call ziel.AppendDocLink(zd, "ZAB Dokument öffnen!")
'Call ziel.AppendText("<- um zum Dokument zu gelangen!")
'Call ziel.AddNewline(1)
Call cd.Refresh
Call cd.FieldClear("wam")
Call cd.FieldClear("ABKST")
Call cd.FieldClear("ABInstOrg")
Call cd.FieldClear("ABAufgabe")
Call cd.FieldClear("ABAufgabeUmwandeln")
Call cd.FieldClear("ABStunden_1")
Call cd.FieldClear("ABStunden_2")
Call cd.FieldClear("Stundensatz")
Call cd.FieldClear("Summe")
Call cd.FieldClear("ExtraAZ_von")
Call cd.FieldClear("ExtraAZ_bis")
Call cd.FieldClear("ABStunden")
Call cd.FieldClear("ABBeschreibung")
Call cd.Save()
Msgbox "Die Daten wurden erfolgreich in ZAB übernommen!",64, "Hinweis"
Else
Call zd.ComputeWithForm(False,True)
Msgbox "Fehler im ZAB! Dokument konnte nicht gespeichert werden!" ,16, "Fehler im ZAB"
End If
'Else
' Fehler im ZAB!!! -> Keine Speicherung
' Call zd.ComputeWithForm(False,True)
' Msgbox "Fehler im ZAB! Dokument konnte nicht gespeichert werden!" ,16, "Fehler im ZAB"
'End If
End Sub
-
Du musst Autoren- und Leserfelder explizit als solche erstellen!
dim item as NotesItem
Anstelle von
zd.Autoren=cd.fieldgettext("AB_Autoren")
ein
set item = New NotesItem( zd, "Autoren", cd.fieldgettext("AB_Autoren"), AUTHORS )
analog
zd.Autoren_1=cd.fieldgettext("AB_Autoren_1")
und für die Leserfelder
Anstelle von
zd.Leser=cd.fieldgettext("AB_Leser")
ein
set item = New NotesItem( zd, "Leser", cd.fieldgettext("AB_Leser"), READERS )
ebenso für
zd.Leser_1=cd.fieldgettext("AB_Leser_1")
Andreas
-
hallo glombi!
aber das problem sind nicht die zd.dokumente sondern die cd.dokumente. in die andere datenbank (zd) schupft er das ja tadellos hinüber. nur das eintragen in die current dokumente (cd) funktioniert nicht. also im prinzip das:
taet = cd.fieldgettext("ZIDMA") + " (" + cd.fieldgettext("ABDatum") + " - " + cd.fieldgettext("ABStunden") + " Stunden) " + cd.fieldgettext("ABAufgabe") + " - " + cd.fieldgettext ("ABBeschreibung") + Chr(13)
Call cd.FieldAppendText("taetigkeiten", taet)
lg
rootine
edit: mir fällt gerade auf, dass ich das in der problemschilderung nicht so wirklich klar dargestellt habe - sorry ::)
-
Um hier Klarheit zu schaffen, sollte "rootine" (leider auch namenlos ...) bitte erstmal folgendes klären:
Sind in den Dokumenten, die mit besagter Fehlermeldung bemeckert werden, die fraglichen Personen überhaupt als Autoren verzeichnet? Das lässt sich ja leicht über die "rootine" bekannten Autorenfelder herausfinden bzw. im Frontend (beim User) testen.
Nicht, dass durch einen Codefehler dann da soetwas in einem Autorenfeld steht:
"CN=Harry Hirsch/O=ACME"
"CN=Wanda Fisch/O=ACME; "CN=Gustav Gans/O=ACME""
"CN=Kuno Killerkarpfen/O=ACME"
Wanda und Gustav können dann natürlich nicht ...
Bernhard
-
Also das Autorenfeld in der cd hat z.B. den Inhalt:
Mario Torf; David Huber; Michaela Fischer; Walter Koch; Harald Kuoni; Ingo Ramberg; Clemens Hofer; Tamara Tengelmann; Robert Gung; Horst Reuter; Christoph Thomas; Christof Reiter; Betreuer; Notes Administrator; Office
alle dürfen, nur "Christof Reiter" und "Walter Koch" dürfen nicht. :-:
lg
rootine
-
Hallo,
ich hoffe das sind keine realen Namen/echter Feldinhalt ;) ;D
Wie sind die Werte denn in dem Feld gespeichert?!
Die die Namen als Canonizial-Name gespeichert (was wichtig wäre ;) ) ?
alle Zusammen als EIN String oder als Mehrfachwerte?
-
Ich hoffe mal, daß das hier ein Fehler ist oder nur unglücklich beschrieben :
Alle Personen dieser Gruppe haben dieses Recht und stehen in einem Autorenfeld, Zusätzlich sind alle Personen dieser Gruppe Editoren in der ACL.
Wenn die User über die ACL Editorrechte haben, dann sind die Autorenfelder eh witzlos.
Vielleicht hab ich den Post auch nur falsch verstanden, dann ignoriert meinen Kommentar einfach ;)
-
"Christof Reiter" und "Walter Koch" haben einen vielleicht einen anderen O-Certifier als der Server und dann funktionieren Common Names in Autoren-/Leserfeldern eben nicht.
Auch wenn ich immer mal wieder was anderes höre - Common Names gehören nicht in Autoren-/Leserfelder!
Andreas
-
Problem gelöst!
Nach tagelangem herumtüfteln hab ich das Problem jetzt gelöst.
Das Problem bestand nie in der aktuellen Datenbank in der sich der Agent befindet, sondern in der Datenbank, in die die Dokumente hinübergeschrieben wurden. Diese machte die Probleme mit dem "unzulässigen Autor" und verhinderte dann das Eintragen in der aktuellen Datenbank. Nur, wer kommt schon auf sowas, wenn die Dokumente hinübergeschrieben werden und dort dann auch vorhanden sind und die Personen dort Autoren sind. :-: Jetzt sind sie dort drüben Editoren und schon gehts. Aber irgendwie wundert mich das gar nicht, dass es an sowas lag - es kann ja nix Gescheites dabei rauskommen, wenn man alle 2 Wochen Datenbanken erweitern muss und mit neuen Funktionalitäten ausstatten muss, für die die DB nicht mal ansatzweise konzipiert wurde. $chef sei Dank mach ich hier ja lauter QnD Lösungen und müh mich dann mit den Workarounds ab - aber wir haben ja keine Zeit (oder keinen Plan?) irgendetwas vorher zu definieren ;)
Danke an Alle für die Hilfe!!!
lg
Rootine