[Gelöst] - RTC SilentImport

5. Dezember 2011 12:50

Hallo Liebe Community,

hätte da ein Problem mit dem SilentUpload in der Codeunit 419 3-Tier Automation Mgt. .
Beim RTC sollte auf der Artikelkarte das Artikelbild importiert werden können. Und das über einen fix vorgegebenen Pfad. Also es sollte kein Dialog-Fenster kommen, auf welchem die Datei / Pfad ausgewählt werden soll. Dazu verwende ich die bereits erwähnte "SilentUpload"-Funktion.

Jedoch erscheint mir dann die folgende Fehlermeldung:

Microsoft Dynamics NAV
---------------------------
Meldung für C/AL-Programmierer: Fehler beim Aufruf von Member 'CopyFile': Ausnahme von HRESULT: 0x800A0035 (CTL_E_FILENOTFOUND)
---------------------------
OK
---------------------------


Wenn ich dann versuche, ohne eine Temporäre Datei zu kopieren
Code:
IF ISCLEAR(FileObject) THEN
  CREATE(FileObject, TRUE, TRUE);

Ext := FileObject.GetExtensionName(ClientFilePath);
ClientTempFilePath := ClientTempFileName('',Ext);
ClientTempFile := FileObject.GetFileName(ClientTempFilePath);
//message('clienttemp: %1 ;;;;; clientfile %2',Clienttempfilepath,clientfilepath);
//FileObject.CopyFile(ClientFilePath,ClientTempFilePath,TRUE);

ServerFilePath := ServerTempFileName('',Ext);
//message(serverfilepath);
Status := UPLOAD('',Magicpath,'',ClientTempFile,ServerFilePath);
Status := UPLOAD('',Magicpath,'',ClientFilepath,ServerFilePath);

EXIT(Status);

dann erscheint mir folgende Meldung:

Microsoft Dynamics NAV
---------------------------
Datei C:\ProgramData\Microsoft\Microsoft Dynamics NAV\60\Server\<nav version>\users\<domain>\<user>\TEMP\__TEMP__486463add5334eb29119ca671dc012de.tmp wurde nicht gefunden.
---------------------------
OK
---------------------------


Kann das vil. wirklich an der fehlenden Berechtigung liegen? Oder übergebe ich nur zu wenige Parameter, da ich diese Funktion ja von einer anderen aus aufrufe:

Code:
CLEAR(PathServerTemp);
SilentUpload(Name,PathServerTemp);
ImageFile.OPEN(PathServerTemp);
ImageFile.CREATEINSTREAM(NVInStream);
BLOBRef.Blob.CREATEOUTSTREAM(NVOutStream);
COPYSTREAM(NVOutStream,NVInStream);
EXIT(Name);


Noch zum Abschluss:
Verwende RTC 2009 R2

Hoffe, ihr habt da ein wenig Erfahrung bzw. könnt mir da helfen. Probiere nun schon seit Stunden rum..
Zuletzt geändert von kyrios am 5. Dezember 2011 16:41, insgesamt 2-mal geändert.

Re: RTC SilentImport

5. Dezember 2011 12:58

kyrios hat geschrieben:Kann das vil. wirklich an der fehlenden Berechtigung liegen?

Sehr wahrscheinlich sogar. Ohne mir den Quelltext jetzt näher anzusehen:
CTL_E_FILENOTFOUND sagt ja schon, dass die zu kopierende Datei nicht gefunden werden kann.
Entweder, die Datei liegt nicht genau an der Stelle und/oder unter dem Namen, den du spezifiziert hast, oder du hast keine Leseberechtigungen auf dieses Verzeichnis.

Re: RTC SilentImport

5. Dezember 2011 13:31

Natalie hat geschrieben:CTL_E_FILENOTFOUND sagt ja schon, dass die zu kopierende Datei nicht gefunden werden kann.
Entweder, die Datei liegt nicht genau an der Stelle und/oder unter dem Namen, den du spezifiziert hast, oder du hast keine Leseberechtigungen auf dieses Verzeichnis.


Ja, das habe ich mir auch schon gedacht. Jedoch werden die TMP-Pfade ja automatisch generiert - also ohne mein zutun. Also hätte ich gemeint, dass dies eigentlich so funktionieren sollte.

Jetzt stellt sich nur noch die Frage, ob die fehlende Berechtigung Client oder Serverseitig ist. Wenn die Meldung ja schon bei dem CopyFile-Befehl kommt, müsste es Clientseitig sein. Wenn wir aber weiter gehen und uns den zweiten Versuch anschauen, habe ich auf beiden zu wenig Berechtigungen. In dem Fall müsste ich die Pfade nicht automatisch generieren lassen sondern manuell mit "BuildPath" von FileSystemObject aufbauen.

Dann werde ich dies mal mit manuellen Pfadangaben probieren. Status folgt gleich :mrgreen:

Re: RTC SilentImport

5. Dezember 2011 15:17

Okay... Mit "BuildPath" gehts mal nicht. Mit CreateFolder kann ich zwar den Ordner erstellen, aber nur Clientseitig. Danach bringt er mir den Fehler, dass der Ordner nicht gefunden werden kann.
Wenn ich den Ordner manuell auf dem Server anlege, dann bringt er mir den Fehler, dass ich keine Berechtigung hab, da einen neuen Ordner anzulegen, ändern oder sonstiges. Wie finde ich raus, mit welchen Daten sich NAV mit der Server verbindet?

Hab den Pfad diesmal direkt zugewiesen:
Code:
FileObject.CreateFolder('C:\tmp');
ServerFilePath := 'C:\tmp';


Ich werd das Problem mit den Berechtigungen nicht iwi umgehen können oder?

Re: RTC SilentImport

5. Dezember 2011 16:40

Okay.

Hat sich erledigt. Hab nur den Pfad OHNE Datei übergeben. Und die Funktion (die Zweite von meinem ersten Beitrag) benötigt jedoch den Filenamen.

Vielen Dank trotzdem! ;-)