Hi Thierry,
wFileSaveAs
again ...
Viewing a recently created pdf file deletes it (move to \ Temp)
Description: I create a PDF file with a report form ... to file ... then I visualize this file with wFileSaveAs (MyFile.pdf), Myfile.pdf is systematically deleted from its original location.
Workaround: introduce a delay of at least 3 seconds.
In this case, viewing no longer deletes my PDF
Hi Vincent
IIRC, we added a parameter to cope with this case…
The extra parameter was to add a timestamp so as to bypass the cache memory ...
awserver.prg
PROCEDURE DownloadFile && {fr} Envoie un fichier à l'utilisateur pour qu'il décide quoi en faire : l'ouvrir ou l'enregistrer
LPARAMETERS ;
tcFile; && {fr} Fichier {en} File
, tcResult; && @ [''] {fr} Résultat en retour {en} Result back
, tlFileKeep; && [.F.] {fr} conserver le fichier original {en} keep original file after copy to site's temp folder
, tcWindow; && [''] {fr} Nom de la fenêtre de navigateur où ouvrir le fichier si le navigateur est capable de l'afficher {en} Name of the browser window where file can possibly be displayed
, tlTemp; && [.F.] {en} Temporary file: add time stamp to file stem {fr} Fichier temporaire : ajouter la date-heure à la racine du fichier && 2020-09-01 thn -- {FiC V 2.31.0-beta.5} {en} added
tlFileKeep = .T.
fixes the problem, but to my knowledge, this parameter is not accessible from wFileSaveAs()
Right, we probably overlooked this parameter
modify class awfrm of aw method wFileSaveAs
lparameters tcFileSrce, tcResult, tcWindow, tlTemp, tlFileKeep && see parameter doc in awFrm code
&& 1- tcFileSrce {en} File to Save As {fr} Fichier à envoyer à l'utilisateur
&& 2- tcResult @ [''] {en} File saved by user (LAN) or error (Web) {fr} Fichier choisi par l'utilisateur (LAN) ou erreur (Web)
&& 3- tcWindow [''] {en} Name of the browser window where file can possibly be displayed {fr} Nom de la fenêtre de navigateur où ouvrir le fichier si le navigateur est capable de l'afficher (added 2016-02-04)
&& 4- tlTemp [.F.] {en} Temporary file: add time stamp to file stem {fr} Fichier temporaire : ajouter la date-heure à la racine du fichier && 2020-09-01 thn -- {FiC V 2.31.0-beta.5} {en} added
&& 5- tlFileKeep && [.F.] (Web) {en} keep original file after copy to site's temp folder {fr} conserver le fichier original && 2021-06-27 thn -- {FiC V 2.31.1-beta.1} {en} added
tcResult = ''
LOCAL success;
, lcFileSrce;
, lcFileDest;
, oAJAX as awAJAX of awServer.prg;
success = Vartype(m.tcFileSrce) == 'C' AND File(m.tcFileSrce)
tcResult = Iif(m.success, m.tcResult, Textmerge(ICase(;
cLangUser() = 'fr', [Le Fichier <<cLitteral(m.tcFileSrce)>> est introuvable],; && copy-paste this line to add another language support
[File <<cLitteral(m.tcFileSrce)>> can't be found]; && default: English
)))
ASSERT m.success MESSAGE cAssertMsg(m.tcResult)
DO CASE
CASE !m.success
CASE wlAJAX(@m.oAJAX) && Web mode
success = m.oAJAX.DownloadFile(;
m.tcFileSrce; && {fr} Fichier {en} File
,@m.tcResult; && @ [''] {fr} {en} Result back Résultat en retour
, m.tlFileKeep; && [.F.] {en} keep original file after copy to site's temp folder {fr} conserver le fichier original
, m.tcWindow; && [''] {en} Name of the browser window where file can possibly be displayed {fr} Nom de la fenêtre de navigateur où ouvrir le fichier si le navigateur est capable de l'afficher
, m.tlTemp; && [.F.] {en} Temporary file: add time stamp to file stem {fr} Fichier temporaire : ajouter la date-heure à la racine du fichier && 2020-09-01 thn -- {FiC V 2.31.0-beta.5} {en} added
)
OTHERWISE
tcFileSrce = cFileCased(m.tcFileSrce, .T.)
lcFileDest = this.wPutFile(;
JustFname(m.tcFileSrce);
, ForcePath(m.tcFileSrce, cSpecialFolderPath(CSIDL_PERSONAL)); && 'my documents' - modify file abFile.h
, JustExt(m.tcFileSrce);
)
IF Empty(m.lcFileDest) or m.lcFileDest == FullPath(m.tcFileSrce)
tcResult = m.tcFileSrce
ELSE
* {fr} Si le fichier peut être copié vers l'emplacement demandé
success = FileCopy(m.tcFileSrce, m.lcFileDest, @m.tcResult)
tcResult = Iif(m.success, m.tcResult, Textmerge(ICase(;
cLangUser() = 'fr', [Erreur en copiant le fichier '<<DisplayPath(m.tcFileSrce, 50)>>' vers '<<DisplayPath(m.lcFileDest, 50)>>' : ],; && copy-paste this line to add another language support
[Error while copying file '<<DisplayPath(m.tcFileSrce, 50)>>' to '<<DisplayPath(m.lcFileDest, 50)>>': ]; && default: English
)) + m.tcResult)
ASSERT m.success MESSAGE cAssertMsg(m.tcResult)
IF m.success
* {fr} Si fichier temporaire, supprimer
IF lTrue(m.tlTemp) or Datetime() - Fdate(m.tcFileSrce, 1) < 2 && {fr} fichier créé depuis moins de 2 secondes, temporaire
success = FileDel(m.tcFileSrce,,, @m.tcResult) && {fr} FileDelete() abandonné à cause d'un conflit avec FileDelete.exe de web connect
ENDIF
IF m.success
tcResult = m.lcFileDest
ENDIF
ENDIF
ENDIF
ENDCASE
RETURN m.success
OK, thanks.
When do you plan to release the V 2.31.1-beta.1 ?
Tested. This works fine !
Just a(nother) question: in what context can we fill tcResult
?
tcResult
is the result provided back by the function, an error if any, reason why you pass this parameter by reference (@
in the description below)
&& 2- tcResult @ [''] {en} File saved by user (LAN) or error (Web) {fr} Fichier choisi par l'utilisateur (LAN) ou erreur (Web)