Domino 9 und frühere Versionen > Entwicklung

Agent darf Datei nicht speichern

(1/3) > >>

dasRalph:
Hallo!!!

Ich habe einen Lotus Script Agenten programmiert der Dateianhänge auf einem Win-Fileserver ablegen soll und diese dann im Dokument löschen soll.

Hierzu nutze ich einmal "Mkdir" um das Zielverzeichnis anzulegen für den Fall, dass es nicht da ist und um die Datei zu speichern nutze ich "ExtractFile".

Die Datenbank ist mit der ID des Servers signiert und die Server-ID ist im Server-Dokument unter Sicherheit bei "Unbeschränkte LotusScript/Java-Agenten ausführen:" mit eingetragen.

Auf dem Ziel-Laufwerk hat "Jeder" Vollzugriff.

Das Aufrufen des Agenten, er soll auf dem Server ablaufen, läuft problemlos. Hier gibt es keine Fehlermeldung.

Wenn nun der Agent die Dateien auf besagtem Fileserver ablegen soll, dann bekomme ich folgende Fehlermeldung "Path/File access error", steht so im Log.

Sitze ich am Domino Server und will per Hand (Explorer) eine Datei im Ziel-Laufwerk speichern, so funktioniert dies.


Stell ich den Agenten um, dass er die Dateien bei sich lokal (z.B. Laufwerk C:\) ablegen soll, dann funktioniert es.

Nun bin ich der Meinung, dass dies kein Lotus Notes Problem ist, doch mir fällt nichts mehr ein :(

Bin für jede Idee dankbar
Ralph

koehlerbv:
Das scheint mir aber kein Problem zu sein mit Zugriffsrechten auf das Laufwerk oder Verzeichnis, sondern der Agent scheint schlicht das Laufwerk oder das Verzeichnis nicht zu kennen.
Probier doch mal ChDir, ChDrive und Dir, an welcher Stelle da eine Fehlermeldung kommt- und das mit einem serverbasierenden Agent (wer den unterzeichnet hat, sollte wurscht sein, denn der User ist ja der Server, nicht der Agent-Unterzeichner).
Was sagt der Agent, wenn Du als Zielverzeichnis ein wirklich bestehendes auf dem Server angibst? (Darf vielleicht nicht jeder ein Directory erzeugen auf dem Server - ist das ggf. der casus knacktus ?)

HTH,
Bernhard

dasRalph:
folgender Code soll's machen


--- Code: ---   'Anlagen speichern - ANFANG
   path = profildoc.OrdnerAnlagen(0)
   KatAntragID = cdoc.KatAntragID(0)
   Dim rtitem As Variant
   Set rtitem = cdoc.GetFirstItem( "DokAnlage" )
   If ( rtitem.Type = RICHTEXT ) Then
      If cdoc.HasEmbedded Then
         'Verzeichnis erstellen für DStK   
         path2 = Dir$(path & "\", 16)
         status = 0
         Do While path2 <> ""
            path2 = Dir$()
            If ( path2 = Trim$(Strleft(KatAntragID, "/"))) Then
               status = 1
            End If
         Loop
         path = path & "\" & Trim$(Strleft(KatAntragID, "/"))
         If ( status = 0 ) Then
            Mkdir path
         Elseif (status = 1) Then
            status = 0
         End If
         'Verzeichnis erstellen für DStK - ENDE
         
         'Verzeichnis erstellen für Datum
         path2 = Dir$(path & "\", 16)
         status = 0
         Do While path2 <> ""
            path2 = Dir$()
            If ( path2 = Trim$(Strleft(Strright(KatAntragID, "/"), "/"))) Then
               status = 1
            End If
         Loop
         path = path & "\" & Trim$(Strleft(Strright(KatAntragID, "/"), "/"))
         If ( status = 0 ) Then
            Mkdir path
         Elseif (status = 1) Then
            status = 0
         End If
         'Verzeichnis erstellen für Datum - ENDE
         
         'Verzeichnis erstellen für lfdNr
         path2 = Dir$(path & "\", 16)
         status = 0
         Do While path2 <> ""
            path2 = Dir$()
            If ( path2 = Trim$(Strrightback(KatAntragID, "/"))) Then
               status = 1
            End If
         Loop
         path = path & "\" & Trim$(Strrightback(KatAntragID, "/"))
         If ( status = 0 ) Then
            Mkdir path
         Elseif (status = 1) Then
            status = 0
         End If
         'Verzeichnis erstellen für lfdNr - ENDE
         
         'Wechseln der Tabelle in der Access-DB
         qry.SQL = "SELECT * FROM tbl_Kat_Dok"
         If qry.GetError <> DBstsSUCCESS Then
            Exit Sub
         End If
         result.Execute
         
         Forall o In rtitem.EmbeddedObjects
            If ( o.Type = EMBED_ATTACHMENT ) Then
               text$ = o.source
               Call o.ExtractFile ( path & "\" & o.source )
               Call o.Remove ''aktivieren wenn Anlagen im Dokument gelöscht werden sollen
               result.AddRow
               Call result.SetValue("RegNr", Cstr(cdoc.KatAntragID(0)))
               Call result.SetValue("AnhangDatei", Cstr(Strleftback(text$, ".")))
               Call result.SetValue("AnhangDateiTyp", Cstr(Strrightback(text$, ".")))
               text$ = path
               Call result.SetValue("AnhangPfad", text$)
               Call result.UpdateRow
            End If
         End Forall
         result.Close(DB_CLOSE)
         con.Disconnect
      End If
   End If
   'Anlagen speichern - ENDE

--- Ende Code ---


"path" ist ein Feld im Profildokument wo ich einstellen kann, wo die Dateien gespeichert werden sollen

"KatAntragID" ist eine Registriernummer im Format xx/xx/xxxx -> zwei Buchstaben / Jahr / lfd. Nr.

Das Verzeichnis welches in "path" angegeben ist, das existiert, die restlichen werden erstellt.

Stelle ich nun in "path" 'c:\temp' ein, dann funktioniert es, stelle ich aber '\\server\ablage\dokumentation' ein, dann gehts nicht. Verbinde ich die Freigabe, so das auf dem Domino Server zum Beispiel 'H:\dokumentation" herrauskommt, dann gehts auch nicht.

Ich kann mir nicht vorstellen, dass es am Agenten liegen soll oder am Domino Server da er es ja lokal speichern kann, nur am File Server sind die Berechtigungen für das Zielverzeichnis auf "Vollzugriff" gestellt, sollte also auch dann gehn :(

Wenn das Verzeichnis nicht da ist oder nicht gefunden wird, sollte die Fehlermeldung nicht eine andere sein???

Ja zum Teil hast Du recht, für das Speichern der Anlagen ist der Unterzeichner egal, nur muss dieser auf dem Server das Recht besitzen agenten auszuführen, die Dateioperationen ausführen, da der Server dies in der Regel darf, wurde die Datenbank mit der Server ID signiert.

koehlerbv:
Hier muß ich jetzt die Hände heben: Ich bin in der glücklichen Situation, daß ich mich voll auf's Entwickeln konzentrieren kann und mich bei Administration (Notes und OS) auf hervorragende Kollegen verlassen kann - vor allem auf Torsten M., der sollte endlich auch dem Forum beitreten ;-)

Ciao,
Bernhard mit Admin-Defiziten ;-(

dasRalph:
Ich bin mir noch nicht ganz sicher aber ich glaube über Nacht hatte ich eine gute Idee

Der Domino Server ist bei mir auf Arbeit so eingestellt, dass er automatisch beim Systemstart mit startet. Er läuft hier auf einem NT Server. Wenn er nun läuft, dann arbeitet er sicherlich als lokaler Administrator?!?

Wie komm ich darauf??? Ich hatte ja geschrieben, dass das speichern auf einem lokalem Laufwerk geht. Ich hatte mir die Datei angeschaut und festgestellt, dass diese dem Administrator gehört, obwohl dieser selbst nicht am System angemeldet war.

Wenn es nun tatsächlich so ist das er als lokaler Administrator läuft, dann gehört diese "Person" ja auch nicht zur Domäne und darf ja eigentlich auch nicht auf Domänenlaufwerke zugreifen... wenn ich mich da richtig erinnere.

Nun habe ich hier bei mir gerade geschaut und gesehn, dass man dem Dienst auch ein Benutzerkonto zuweisen kann, jedoch habe ich win2k, ob dies bei NT auch geht werd ich gleich auf Arbeit sehn.

Aber es könnte die Lösung sein *hoffnunghab*

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln