Autor Thema: Agent darf Datei nicht speichern  (Gelesen 4068 mal)

Offline dasRalph

  • Aktives Mitglied
  • ***
  • Beiträge: 128
  • Geschlecht: Männlich
  • hmmm ...
Agent darf Datei nicht speichern
« am: 23.07.03 - 20:41:29 »
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

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Agent darf Datei nicht speichern
« Antwort #1 am: 23.07.03 - 20:54:14 »
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

Offline dasRalph

  • Aktives Mitglied
  • ***
  • Beiträge: 128
  • Geschlecht: Männlich
  • hmmm ...
Re:Agent darf Datei nicht speichern
« Antwort #2 am: 23.07.03 - 21:48:47 »
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


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

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Agent darf Datei nicht speichern
« Antwort #3 am: 23.07.03 - 21:57:19 »
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 ;-(

Offline dasRalph

  • Aktives Mitglied
  • ***
  • Beiträge: 128
  • Geschlecht: Männlich
  • hmmm ...
Re:Agent darf Datei nicht speichern
« Antwort #4 am: 24.07.03 - 06:28:35 »
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*

Offline harkpabst_meliantrop

  • Senior Mitglied
  • ****
  • Beiträge: 463
  • Geschlecht: Männlich
  • I love!
    • Heute schon gelebt?
Re:Agent darf Datei nicht speichern
« Antwort #5 am: 24.07.03 - 11:45:50 »
Ich fürchte, dass es das nicht ist.

Das Berechtigungskonzept für Dienste ist zwar unter Windows im Gegensatz zu UNIX etwas verwirrend, weil es diese vielen Spezialkonten gibt, aber der Serer läuft, wenn ich mich nicht irre, mit System-Berechtigung, nicht als lokaler Administrator.

Mein Tipp ist eher der, dass das Script ein Problem mit dem UNC-Namen hat.

Probier es mal mit einem Netzwerklaufwerk für das Verzeichnis, und ich wette, es geht.

Das ist zwar sehr unschön, passiert aber mit allen möglichen Programmen immer wieder. Von einer vollständigen UNC-Unterstützung ohne diese hässlichen Laufwerksbuchstaben sind wir noch weit entfernt.

Offline dasRalph

  • Aktives Mitglied
  • ***
  • Beiträge: 128
  • Geschlecht: Männlich
  • hmmm ...
Re:Agent darf Datei nicht speichern
« Antwort #6 am: 24.07.03 - 16:15:28 »
Also über Laufwerksbuchstaben gings auch net, hatte ich es nicht auch geschrieben???

Aber es lag am Nutzer des Dienstes. Als wir dem Dienst "Domino Server" einen Domänennutzer verpaßt haben der auf die Verzeichnisse zugreifen darf gings

Nun hab ich nur noch das Problem, dass er nicht in die AccessDB schreibt, leider bekomme ich hier überhaupt keine Fehlermeldung :(((

Offline harkpabst_meliantrop

  • Senior Mitglied
  • ****
  • Beiträge: 463
  • Geschlecht: Männlich
  • I love!
    • Heute schon gelebt?
Re:Agent darf Datei nicht speichern
« Antwort #7 am: 24.07.03 - 16:23:27 »
Also über Laufwerksbuchstaben gings auch net, hatte ich es nicht auch geschrieben???
Aber soooooo klein und gut versteckt ... da lag ich offenbar daneben.

Offline OCS

  • Aktives Mitglied
  • ***
  • Beiträge: 205
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Re: Agent darf Datei nicht speichern
« Antwort #8 am: 09.01.06 - 20:59:17 »
hätte dazu mal eine frage... hat jemmand schon so einen agenten komplett fertig gestellt? bräuchte sowas, bin mir aber nicht sicher ob ich das hinbringe... :-[

gruß björn

Offline dasRalph

  • Aktives Mitglied
  • ***
  • Beiträge: 128
  • Geschlecht: Männlich
  • hmmm ...
Re: Agent darf Datei nicht speichern
« Antwort #9 am: 09.01.06 - 22:18:26 »
hätte dazu mal eine frage... hat jemmand schon so einen agenten komplett fertig gestellt?


ja letztendlich lief er, ich hab's aber auch nicht mehr, aber der code im thread hilft dir sicherlich ein stück weiter

das problem war, dass der domino server nur mit einem lokalem konto arbeitete und deshalb in der domäne nichts machen durft, als dies geändert wurde, lief alles


ralph

Offline OCS

  • Aktives Mitglied
  • ***
  • Beiträge: 205
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Re: Agent darf Datei nicht speichern
« Antwort #10 am: 10.01.06 - 08:40:37 »
schade! trotzdem vielen dank! hat vieleicht ein anderer noch was?


gruß

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: Agent darf Datei nicht speichern
« Antwort #11 am: 10.01.06 - 14:02:09 »
Soweit ich das beurteilen kann liegt es an den Rechten der Dienste.
Domino wird standardmässig unter dem System Account gestartet. Dieser Account darf aber nur auf lokale Laufwerke zugreifen.

Da kannst Du im Script noch soviel probieren, Windows klemmt da ab.

Unter Win2k kannst Du den Dienst einfach auf ein entsprechendes Konto umstellen. Wie das unter NT funktioniert? keine Ahnung.

gruss
Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Offline OCS

  • Aktives Mitglied
  • ***
  • Beiträge: 205
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Re: Agent darf Datei nicht speichern
« Antwort #12 am: 11.01.06 - 18:20:10 »
So, ich schon wieder!!! Hab jetz mal von diversen Hilfequellen das hier zusammen... Leider krieg ich nen error an der Stelle mit dem  >:D  (Fehlerteufel) dahinter... Find aber leider den Grund nicht... Der Agent läuft immer nach neuem Maileingang auf dem Server und soll neu ankommende Mails von Ihrem Anhang befreien und diesen nach c:\reports\ ablegen:

   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim doc As NotesDocument
   Dim dbug As NotesLog
   Dim rtitem As Variant
   Dim fileCount As Integer
   Dim it As NotesItem
   
   
   fileCount = 0
   Set dbug = New NotesLog("Router log")
   dbug.LogActions = True
   dbug.OpenAgentLog
   dbug.LogAction("begin")
   
   
   Set doc = session.documentcontext
   
   Set it = doc.GetFirstItem("Subject")  >:D
   dbug.LogAction("doc subject from context" + "-> " + it.Text)
   Set rtitem = doc.GetFirstItem( "Body" )
   If ( rtitem.Type = RICHTEXT ) Then
      Forall o In rtitem.EmbeddedObjects
         
         fileCount = fileCount + 1
         dbug.LogAction("file count:"+Cstr(fileCount))
         If o.Type = EMBED_ATTACHMENT Then
            Call o.ExtractFile( "c:\reports\newfile" & Cstr( fileCount ) )
            Call o.Remove
            
            dbug.LogAction("attachment removed")
            
            doc.stripped = "yes"
            Call doc.Save( True, True )
         End If
      End Forall
   End If
REM Finish up agent log processing
   dbug.LogAction("Mail preprocessing agent is done")
   dbug.Close



An der markierten Stelle bekomme ich Object VAriable not set...! Hab den Zugriff "    Set doc = session.documentcontext " aber vorher auch noch nirgends gesehen....! Geh also mal davon aus, dass er Doc nicht in den Zugriff bekommt! Hab ich ne andere Möglichke das zuletzt eingegangene Dokument zu bekommen??

Gruß

Offline OCS

  • Aktives Mitglied
  • ***
  • Beiträge: 205
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Re: Agent darf Datei nicht speichern
« Antwort #13 am: 12.01.06 - 09:21:02 »
ok, bin jetz nen (kleinen) Schritt weiter... mir is jetz relativ klar (glaub ich zumindest) das der Aufruf "Set doc = session.documentcontext" nur funktioniert, wenn ich den Agent von Hand aufrufe wenn ich die Hilfe richtig verstehe! Also noch mal die Frage:

Hab ich ne andere Möglichke das zuletzt eingegangene Mail-Dokument zu bekommen??


Gruß

Offline OCS

  • Aktives Mitglied
  • ***
  • Beiträge: 205
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Re: Agent darf Datei nicht speichern
« Antwort #14 am: 13.01.06 - 09:27:28 »
Hat zwar niemand geantwortet, aber trotzdem, hier die funktionierende Lösung:

On Error Goto fehler   
   Dim session As New NotesSession
   Dim view As NotesView
   Dim doc As NotesDocument
   Dim stripped As notesitem
   Dim rtitem As Variant
   Dim sViewName As String
   Dim sDestDir As String
   Dim dbug As NotesLog
   Dim sFieldName As String
   Dim sFileAttr As String
   Dim iKleinerHelfer As notesitem
   Dim sKleinerHelfer As String
   Dim sBetreff
   
   Set dbug = New NotesLog("Router log")
   dbug.LogActions = True
   dbug.OpenAgentLog
   dbug.LogAction("Verarbeitung beginnt")
   
        ' In dieser Ansicht sind die Dokumente abgelegt
        ' Das kann auch ein Ordner sein
   sViewName = "($Inbox)"
   
        ' Zielverzeichnis
   sDestDir  = "C:\reports\"
   
        ' Feldname des Richtext Feldes - Bei Mails heißt es einfach "Body"
   sFieldName = "Body"
   sBetreff = "Subject"
        ' Ansicht öffnen
   Set view = session.CurrentDatabase.getView(sViewName)
   
        ' erstes Dokument auswählen
   Set doc = view.getFirstDocument
   
   
   
        ' Solange wie in der Ansicht Dokumente zu finden sind, wird die Schleife durchlaufen
   While Not(doc Is Nothing)
      Set iKleinerHelfer = doc.getFirstItem(sBetreff)
      sKleinerHelfer = iKleinerHelfer.text
      
      If sKleinerHelfer = "EDI" Then
                ' Der Anhang ist immer in einem Richtext Feld
         Set rtitem = doc.getFirstItem(sFieldName)
         
         
         If ( rtitem.Type = RICHTEXT ) Then
                        ' Wenn kein Anhang vorhanden ist, dann nicht weitermachen
            If Not Isempty(rtitem.EmbeddedObjects) Then
               Forall o In rtitem.EmbeddedObjects
                  If ( o.Type = EMBED_ATTACHMENT ) Then
                     
                                        ' Anhang lösen
                     Call o.extractFile( sDestDir + o.Source )
                     
                                        ' Prüfen ob Datei extrahiert wurde
                     sFileAttr = Str(Getfileattr(sDestDir + o.Source))
                     If sFileAttr <> "" Then
                        dbug.LogAction("Die Datei " + o.Source +" wurde in das Verzeichnis '" + sDestDir + "' kopiert.  ")       
                     Else
                        dbug.LogAction("Fehler ! Datei konnte nicht extrahiert werden")
                        
                     End If
                     
                                        ' Anhang entfernen - zum Testen diese Zeile ausdokumentieren
                  'Call o.remove
                     
                                        ' hinterher das Dokument wieder speichern, damit die Löschung übernommen wird
                     sKleinerHelfer= sKleinerHelfer + " --> bearbeitet"
                     Call doc.Replaceitemvalue("Subject", sKleinerHelfer)
                     Call doc.save( False, True )
                  End If
               End Forall
            End If
         End If
         
                ' nächstes Dokument in der Ansicht suchen
      End If
      Set doc = view.getNextDocument(doc)
      
   Wend
   dbug.LogAction("Verarbeitung beendet")
   dbug.Close
   
   Exit Sub         
   
fehler:
   
   Messagebox "Fehler : "+Error()+" Agent - in Zeile "+Str(Erl()),16,"Fehler"
   Exit Sub         
   
   

Gruß

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz