Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Katja_S am 10.11.05 - 11:16:07

Titel: ExtractFile - Fehlermeldung: Datei kann nicht gespeichert werden
Beitrag von: Katja_S am 10.11.05 - 11:16:07
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
Titel: Re: ExtractFile - Fehlermeldung: Datei kann nicht gespeichert werden
Beitrag von: mrtachles am 10.11.05 - 11:20:53
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
Titel: Re: ExtractFile - Fehlermeldung: Datei kann nicht gespeichert werden
Beitrag von: Axel am 10.11.05 - 11:28:58
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
Titel: Re: ExtractFile - Fehlermeldung: Datei kann nicht gespeichert werden
Beitrag von: mrtachles am 10.11.05 - 11:36:47
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
Titel: Re: ExtractFile - Fehlermeldung: Datei kann nicht gespeichert werden
Beitrag von: koehlerbv am 10.11.05 - 11:41:41
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
Titel: Re: ExtractFile - Fehlermeldung: Datei kann nicht gespeichert werden
Beitrag von: Katja_S am 10.11.05 - 11:42:45
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?
Titel: Re: ExtractFile - Fehlermeldung: Datei kann nicht gespeichert werden
Beitrag von: koehlerbv am 10.11.05 - 11:48:14
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
Titel: Re: ExtractFile - Fehlermeldung: Datei kann nicht gespeichert werden
Beitrag von: mrtachles am 10.11.05 - 11:50:08
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
Titel: Re: ExtractFile - Fehlermeldung: Datei kann nicht gespeichert werden
Beitrag von: koehlerbv am 10.11.05 - 12:01:57
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
Titel: Re: ExtractFile - Fehlermeldung: Datei kann nicht gespeichert werden
Beitrag von: flaite am 10.11.05 - 12:32:47
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)
Titel: Re: ExtractFile - Fehlermeldung: Datei kann nicht gespeichert werden
Beitrag von: enny am 10.11.05 - 14:48:46
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
Titel: Re: ExtractFile - Fehlermeldung: Datei kann nicht gespeichert werden
Beitrag von: Katja_S am 10.11.05 - 15:53:33
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
Titel: Re: ExtractFile - Fehlermeldung: Datei kann nicht gespeichert werden
Beitrag von: enny am 10.11.05 - 16:04:00
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.
Titel: Re: ExtractFile - Fehlermeldung: Datei kann nicht gespeichert werden
Beitrag von: Katja_S am 10.11.05 - 16:06:44
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?
Titel: Re: ExtractFile - Fehlermeldung: Datei kann nicht gespeichert werden
Beitrag von: enny am 10.11.05 - 16:09:17
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.
Titel: Re: ExtractFile - Fehlermeldung: Datei kann nicht gespeichert werden
Beitrag von: koehlerbv am 10.11.05 - 16:10:11
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
Titel: Re: ExtractFile - Fehlermeldung: Datei kann nicht gespeichert werden
Beitrag von: Katja_S am 10.11.05 - 16:20:18
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!
Titel: Re: ExtractFile - Fehlermeldung: Datei kann nicht gespeichert werden
Beitrag von: koehlerbv am 10.11.05 - 16:23:19
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
Titel: Re: ExtractFile - Fehlermeldung: Datei kann nicht gespeichert werden
Beitrag von: Katja_S am 10.11.05 - 16:39:53
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?
Titel: Re: ExtractFile - Fehlermeldung: Datei kann nicht gespeichert werden
Beitrag von: koehlerbv am 10.11.05 - 17:18:10
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