Autor Thema: ExtractFile - Fehlermeldung: Datei kann nicht gespeichert werden  (Gelesen 4729 mal)

Offline Katja_S

  • Junior Mitglied
  • **
  • Beiträge: 76
  • Geschlecht: Weiblich
Hallo zusammen,

per LS versuche ich, einen Dateianhang per ExtractFile zu lösen.

Code

Set ritem = doc.GetFirstItem( "Bild" )
	If ( ritem.Type = RICHTEXT ) Then
		Forall o In ritem.EmbeddedObjects
			If ( o.Type = EMBED_ATTACHMENT ) Then
				Call o.ExtractFile( "C:\tmp\" & o.Source )
                        End If
		End Forall
         End If

Sobald der Agent aber versucht, die Datei zu speichern kommt eine Fehlermeldung: "notes error: Datei kann nicht gespeichert werden (pfad + filename)"

Habt ihr eine Idee, woran das liegen könnte?

Danke und Gruß
Katja

Offline mrtachles

  • Frischling
  • *
  • Beiträge: 34
  • Geschlecht: Männlich
    • Die ECOBoys
Hallo Katja,

schau mal, ob c:\tmp überhaupt da ist. Notes legt das Dir nicht selbst an. Ausserdem würde ich Pfad und Dateiname nicht mit "&" sondern "+" zusammenbauen.

Prüf das bitte mal

Gruss
Thomas

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Ausserdem würde ich Pfad und Dateiname nicht mit "&" sondern "+" zusammenbauen.

 ??? ??? Warum nicht?

Das sind beides Strings und der Operator um Strings zusammenzusetzen ist &. Das + geht auch, kann aber in bestimmten Fällen zu unliebsamen Überraschungen führen.


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline mrtachles

  • Frischling
  • *
  • Beiträge: 34
  • Geschlecht: Männlich
    • Die ECOBoys
Hi Axel,

genau das gleiche Probl. habe ich auch schon mit "&" gehabt, deswegen bau ich Strings eigentlich immer nur noch mit "+" zusammen.
Gefährlich wird es eigentlich nur, wenn die Strings nicht deklariert sind...

Gruss Thomas

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Ein Problem, dass sich durch den Austausch von "&" und "+" im Code lösen liess, muss aber auf einer vollkommen anderen Ebene gelegen haben. Die Verwendung von "+" ist definitiv gefährlich und nicht für die Stringverkettung vorgesehen.

Bernhard

Offline Katja_S

  • Junior Mitglied
  • **
  • Beiträge: 76
  • Geschlecht: Weiblich
Also, hab das & durch ein + ersetzt. Habe auch den Ordner erstellt, wo die Datei hin soll. Nun hat er auch die Datei gelöst. Wie krieg ich es jetzt hin, dass die Datei nicht auf meiner lokalen Platte, sondern in einem Pfad auf dem Server (wo ja der Agent letztendlich läuft) abgelegt wird? Wie geb ich da den Pfad an?

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Also, hab das & durch ein + ersetzt. Habe auch den Ordner erstellt, wo die Datei hin soll. Nun hat er auch die Datei gelöst.
Und nun weisst Du nicht, warum es funktioniert  ;D Auf jeden Fall lag's nicht am "&"  ;)

Was den Server angeht: Die Pfadangabe erfolgt entsprechend der Konventionen des Server-Betriebssystems. Ganz einfach.

Bernhard

Offline mrtachles

  • Frischling
  • *
  • Beiträge: 34
  • Geschlecht: Männlich
    • Die ECOBoys
Hallo Katja,

auf den Server kannst Du die Datei auf zwei Arten ablegen :

- Verknüpftes Laufwerk :

Bspw. N: ist mit \\Server\Freigabe verbunden
Dann geht entspr. N:\Pfad\Dateiname.txt als Ablage

- Besser ist aber der UNC-Pfad, also gibst Du beim Extract den Pfad direkt an :

\\Server\Freigabe\pfad\Dateiname.txt.

Allerdings musst Du dann schon die Rechte haben, sprich, wenn Du den Pfad im Explorer eingibst, darf keine Abfrage nach Benutzer und Pwd erscheinen, damit Du auf den Server zugreifen kannst.

Gruss
Thomas

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Hallo Thomas,

Du beschreibst die File-Ablage von einem (Windows-)Client auf einen Server. Katjas Frage bezog sich aber auf die Ablage "auf sich selbst":
Zitat
sondern in einem Pfad auf dem Server (wo ja der Agent letztendlich läuft) abgelegt wird
Ich verstehe das als "Agent läuft auf Server, File soll auf selbem Server abgelegt werden".

Bernhard

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Also, hab das & durch ein + ersetzt. Habe auch den Ordner erstellt, wo die Datei hin soll. Nun hat er auch die Datei gelöst. Wie krieg ich es jetzt hin, dass die Datei nicht auf meiner lokalen Platte, sondern in einem Pfad auf dem Server (wo ja der Agent letztendlich läuft) abgelegt wird? Wie geb ich da den Pfad an?
Darf eigentlich nicht sein.
Hilfe Dokument -> String concatenation operators 
Danach ist & sogar "besser" als +.
Hinsichtlich des resultierenden Typs ist + links-assoziativ.
100 + "200" = "300" (was ich übrigens sehr merkwürdig finde)
100 & "200" = "100200"

IMHO kann & in dem geschilderten Kontext nur als Konkatenatierungs(sp?)-Operator interpretiert werden. Deshalb würde ich mich wundern, wenn & hier andere ergebnisse als + liefert.

Im übrigen könntest du Katja dir mal angewöhnen Errorhandling zu nutzen.
Dann hättest du auch eine Fehlermeldung und einen Error-Code, mit dem man die Ursache vielleicht aufspüren könnte.

z.B. so:
Code
 
 
on Error goto Fehler


exit sub
Fehler: 
print "Fehler " & Error$ & "(" & Cstr(Err) & ") in Zeile:" & Cstr(Erl)
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline enny

  • Junior Mitglied
  • **
  • Beiträge: 84
  • Geschlecht: Männlich
  • Don't drink and su!
Hallo Katja,

am günstigsten wäre es wohl wenn der Agent auf dem Server laufen würde.
Jetzt ist bloß meine Frage ob du denn Agenten für Benutzer nutzen willst, damit
diese die Anhänge von einem Dokument auf den Server lösen können oder ob du
es nur einmal auf dem Server anstoßen willst (z. B. alle Anhänge sichern).

Wenn es der Benutzer anstoßen soll würde ich dir vorschlagen, das du ein Flag in das
Dokument schreibst, was der Agent interpretieren kann und den Agenten so einstellst
das er Zeit gesteuert auf dem Server läuft.

Wenn du es nur einmal brauchst könntest du eine Konsole zum Server aufmachen
und dort einfach mal folgenden Befehl eingeben:

tell amgr run "<DB-Name>" '<Agent-Name>'

In beiden Fällen solltest du noch sicher stellen das deine Pfadangabe auf den Server
angepasst ist (Laufwerk/Pfad vorhanden)

MfG

Enrico
Server:
  Platformen: 1 x Windows 2000 Server, 4 x Windows 2003 Server, 1 x OS400
  Versionen: 4 x 6.5.4 FP2, 2 x 8.0.1
Clients:
  Anzahl: ca. 600
  Versionen: 6.5.3, 6.5.4, 8.0.1

Offline Katja_S

  • Junior Mitglied
  • **
  • Beiträge: 76
  • Geschlecht: Weiblich
Danke erstmal an die vielen Tipps, Vorschläge und Ratschläge. Ich werde sie mir zu Herzen nehmen.

Der Agent soll nicht vom Benutzer gestartet werden, sondern eher, wenn ein neues Dokument erstellt bzw. geändert wurde. Oder eben zeitgesteuert. Das weiß ich im Moment noch nicht genau. Ziel ist es am Ende, dass dieses Attachement auf dem Server (z.B. im selben Pfad, wo die DB liegt) zwischengespeichert wird. Aber wie geb ich nun genau diesen Pfad an? Ganz normal, wie als wenn ich Datei lokal speichern wöllte?

Danke und Gruß
Katja

Offline enny

  • Junior Mitglied
  • **
  • Beiträge: 84
  • Geschlecht: Männlich
  • Don't drink and su!
Das wichtige hierbei ist eigentlich nur wo der Agent läuft.

Läuft der Agent Lokal ist die Pfadangabe für den Client.
Läuft der Agent auf dem Server ist die Pfadangabe für den Server.

d.h. wenn der Agent auf dem Server läuft könntest du mit Hilfe von
db.FilePath, ohne Probleme alle Dateien in das Verzeichnis der
Datenbank lösen.
Server:
  Platformen: 1 x Windows 2000 Server, 4 x Windows 2003 Server, 1 x OS400
  Versionen: 4 x 6.5.4 FP2, 2 x 8.0.1
Clients:
  Anzahl: ca. 600
  Versionen: 6.5.3, 6.5.4, 8.0.1

Offline Katja_S

  • Junior Mitglied
  • **
  • Beiträge: 76
  • Geschlecht: Weiblich
Hm, das erscheint mir logisch. Sprich, wenn ich im Designer den Agenten starte (DB dazu liegt auf dem Server) wird die Datei lokal gespeichert. Und wenn ich diesen Agenten über die Serverkonsole starten lasse, dann würde die Datei auf dem Server abgelegt?

Offline enny

  • Junior Mitglied
  • **
  • Beiträge: 84
  • Geschlecht: Männlich
  • Don't drink and su!
Sorry Katja ich hab da was vergessen:

db.FilePath gibt auf dem Server nur den Pfad relativ zum Datenverzeichnis des
Domino-Servers zurück. Du musst also noch den Pfad zum Datenverzeichnis voranstellen.
Server:
  Platformen: 1 x Windows 2000 Server, 4 x Windows 2003 Server, 1 x OS400
  Versionen: 4 x 6.5.4 FP2, 2 x 8.0.1
Clients:
  Anzahl: ca. 600
  Versionen: 6.5.3, 6.5.4, 8.0.1

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
d.h. wenn der Agent auf dem Server läuft könntest du mit Hilfe von
db.FilePath, ohne Probleme alle Dateien in das Verzeichnis der
Datenbank lösen.

Das ist aber keine gute Idee, das Domino DataDir mit anderen Dateien zuzumüllen.

Katja, wir kennen immer noch nicht Dein Server-OS und können Dir daher auch nicht sagen, wir Du FilePath korrekt angeben musst. Auf jeden Fall funktioniert es so, als würdest Du an der Server-Kiste arbeiten und wolltest irgendwohin eine Datei speichern. Wenn es Windows ist, dann gibst Du FiePath genauso an wie an Deinem eigenen Rechner.
Sicherstellen musst Du auf jeden Fall, dass der Domino auf das Verzeichnis ausreichende Rechte hat.

Bernhard

Offline Katja_S

  • Junior Mitglied
  • **
  • Beiträge: 76
  • Geschlecht: Weiblich
Sorry, hab wohl überlesen, dass ihr das OS wissen wolltet. Windows ist im Einsatz.

Klar ist es bescheiden, das DataDir mit Daten zu zumüllen, aber am Ende wird ja die Datei gleich wieder gelöscht. Wird halt als Zwischenspeicherung benötigt, weil die Datei noch bearbeitet werden soll. Und die soll dann wieder zurück ins Dokument. Aber jetzt weiß ich erstmal weiter...

Vielen Dank!

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Egal, ob zwischenspeichern oder dauerhaft: Sowas hat im DataDir des Servers nix zu suchen.
Nimm einfach das TempDir von Windows, und kein Admin wird die Prügel androhen  ;)

Bernhard

Offline Katja_S

  • Junior Mitglied
  • **
  • Beiträge: 76
  • Geschlecht: Weiblich
Alles klar, werde ich tun...

Weil's grad so schön ist...;-)...ich habe jetzt die Datei verändert (ist ein Bild, in der Größe verkleinert) und möchte jetzt dieses Bild wieder in das Dokument einfügen. In das gleiche RTF-Feld, aber nicht als Attachement, sondern so, dass das Bild angezeigt wird, sobald das Dokument geöffnet wird. Habe das über

Code
Set object = ritem.EmbedObject(EMBED_OBJECT,"","C:\ttt\" & fileName)

gemacht, aber dabei muss ich erst auf das Objekt doppelklicken und erst dann wird das Bild in dem dafür vorgesehenen Programm geöffnet. Wie krieg ich es hin, dass das Bild aber sofort angezeigt wird?

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Kannst Du bitte bei einer Frage zu einem ganz anderen Gebiet einen neuen Thread aufmachen, Katja. Sonst sieht hier später niemand mehr durch.

Danke,
Bernhard

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz