Automazione Import/Export di immagini e gestione files
Moderatore: Moderatori
-
- Messaggi: 27
- Iscritto il: martedì 7 settembre 2004, 2:00
Automazione Import/Export di immagini e gestione files
Salve!
Nel DB che sto sviluppando - che funzionerà in rete FM - i client potranno fare l'upload (per incorporazione) di immagini nel DB.
Per far sì che il file poi non sia pesante, da script prendo le immagini caricate (incorporate), le salvo in una cartella dedicata e le ri-linko per riferimento allo stesso record.
Funziona tutto, ma vorrei poter controllare che l'utente non mi stia inserendo una immagine con un nome già esistente. Durante l'esportazione FM sembra infatti sovrascrivere i files che trova senza fare una piega.
Inoltre, quando elimino l'immagine, vorrei poter chiedere all'utente se vuole solo "scollegarla" dal record o anche eliminare il file che il DB si è creato (qualcuno ricorda ITunes?).
Ho letto nel Forum dell'esistenza di Shell, ma non l'ho ancora provato e non ho trovato indicazioni sul funzionamento in rete.
Le domande, quindi, sono queste:
1. Come controllo da script se un file esiste già? (in win _E_ mac)
2. Come elimino un file? (in win _E_ mac)
3. Per automatizzare l'esecuzione come controllo se sto eseguendo su win o su mac?
Grazie dell'aiuto!
Nel DB che sto sviluppando - che funzionerà in rete FM - i client potranno fare l'upload (per incorporazione) di immagini nel DB.
Per far sì che il file poi non sia pesante, da script prendo le immagini caricate (incorporate), le salvo in una cartella dedicata e le ri-linko per riferimento allo stesso record.
Funziona tutto, ma vorrei poter controllare che l'utente non mi stia inserendo una immagine con un nome già esistente. Durante l'esportazione FM sembra infatti sovrascrivere i files che trova senza fare una piega.
Inoltre, quando elimino l'immagine, vorrei poter chiedere all'utente se vuole solo "scollegarla" dal record o anche eliminare il file che il DB si è creato (qualcuno ricorda ITunes?).
Ho letto nel Forum dell'esistenza di Shell, ma non l'ho ancora provato e non ho trovato indicazioni sul funzionamento in rete.
Le domande, quindi, sono queste:
1. Come controllo da script se un file esiste già? (in win _E_ mac)
2. Come elimino un file? (in win _E_ mac)
3. Per automatizzare l'esecuzione come controllo se sto eseguendo su win o su mac?
Grazie dell'aiuto!
Marco.
FM 10 Adv. su MacOS X 10
e FM 10 Server Advanced su MacOS X Server 10.5
FM 10 Adv. su MacOS X 10
e FM 10 Server Advanced su MacOS X Server 10.5
-
- Messaggi: 162
- Iscritto il: sabato 18 marzo 2006, 1:00
- Versione FileMaker: 16
- Sistema operativo: Mac OS X 12 Sierra
Caro MaT,
Eccoti qualche indicazione per MAC che forse potrà esserti utile (per WIN penso che sia analogo, ma non ho esperienza diretta):
Il funzionamento di AppleScript in rete non pone particolari condizioni: semplicemente devono essere accessibili localmente i volumi remoti (ad esempio quello con depositate le fotografie).
Restituisce un numero che indica la piattaforma corrente:
-1 se la piattaforma corrente è Mac OS X
-2 se la piattaforma è Windows 2000 o Windows XP
Ulteriori dettagli li puoi trovare nella guida online.
Buona domenica
Thomas
Eccoti qualche indicazione per MAC che forse potrà esserti utile (per WIN penso che sia analogo, ma non ho esperienza diretta):
Su MAC c'è la possibilità di eseguire delle istruzioni AppleScript che si possono lanciare con l'istruzione di script (per i dettagli rimando alla guida online):Ho letto nel Forum dell'esistenza di Shell, ma non l'ho ancora provato e non ho trovato indicazioni sul funzionamento in rete.
Codice: Seleziona tutto
Esegui AppleScript ["<testo applescript>"]
Su MAC lo scheletro di un AppleScript per verificare l'esistenza di un file e per cancellarlo potrebbe essere (è da modificare e completare a seconda dei bisogni):1. Come controllo da script se un file esiste già? (in win _E_ mac)
2. Come elimino un file? (in win _E_ mac)
Codice: Seleziona tutto
tell application "Finder"
if file "<Volume:path:>DSC_0001.JPG" exists then
delete file "<Volume:path:>DSC_0001.JPG"
else
display dialog "La fotografia DSC_0001.JPG non è disponibile."
end if
end tell
Utilizzando l'istruzione di script seguente:3. Per automatizzare l'esecuzione come controllo se sto eseguendo su win o su mac?
Codice: Seleziona tutto
Get ( PiattaformaSistema )
-1 se la piattaforma corrente è Mac OS X
-2 se la piattaforma è Windows 2000 o Windows XP
Ulteriori dettagli li puoi trovare nella guida online.
Buona domenica
Thomas
-
- Messaggi: 27
- Iscritto il: martedì 7 settembre 2004, 2:00
Hmmm.. Interessante!
Molte grazie!
In ambiente Win, nel frattempo, ho giocato un pò con Shell (ma, dico, non potevano evitare di dover mettere le virgolette dopo il comando DOS? Gli si passava una stringa con comando e parametri e via...) e son riuscito a creare comandi che controllano se un certo file esiste in un certo path e che eliminano un certo file in un certo path, dove path e file sono definiti dinamicamente impostando una variabile a seconda del campo, del path scelto dall'amministratore, della piattaforma mac/win e del fatto se si stia importando o esportando (image/file).
Il problema resta quello che questo sudato script (se a qualcuno interessa magari lo posto che ne parliamo insieme) va cambiato ogni volta che deve essere associato ad un campo o ad un altro, perché nel caro scripting di FM non si può "variabilizzare" il nome del campo sul quale lavorare...
Ma magari c'è un sistema che io non conosco?...
Ciao!
Molte grazie!
In ambiente Win, nel frattempo, ho giocato un pò con Shell (ma, dico, non potevano evitare di dover mettere le virgolette dopo il comando DOS? Gli si passava una stringa con comando e parametri e via...) e son riuscito a creare comandi che controllano se un certo file esiste in un certo path e che eliminano un certo file in un certo path, dove path e file sono definiti dinamicamente impostando una variabile a seconda del campo, del path scelto dall'amministratore, della piattaforma mac/win e del fatto se si stia importando o esportando (image/file).
Il problema resta quello che questo sudato script (se a qualcuno interessa magari lo posto che ne parliamo insieme) va cambiato ogni volta che deve essere associato ad un campo o ad un altro, perché nel caro scripting di FM non si può "variabilizzare" il nome del campo sul quale lavorare...
Ma magari c'è un sistema che io non conosco?...
Ciao!
Marco.
FM 10 Adv. su MacOS X 10
e FM 10 Server Advanced su MacOS X Server 10.5
FM 10 Adv. su MacOS X 10
e FM 10 Server Advanced su MacOS X Server 10.5
-
- Messaggi: 9700
- Iscritto il: lunedì 1 dicembre 2003, 1:00
- Località: Roma
- Contatta:
-
- Messaggi: 27
- Iscritto il: martedì 7 settembre 2004, 2:00
Riguardo Shell:
Devo ancora fare dei test per i comandi Mac, ma mi sono fermato perché stiamo incontrando problemi con l'installazione dinamica del plugin da un ambiente FM8Server su MacOS X 10.3.9.
Poiché si lavorerà in rete FM, si voleva che, se necessario, il server facesse l'installazione del plugin nei client all'avvio dell'applicazione.
Purtroppo, mentre con la quasi totalità di altri plugin testati il metodo funziona ed il plugin si attiva senza nemmeno dover riavviare il FM client, nel caso di Shell il plugin viene correttamente copiato nella directory dedicata ma non viene attivato, nemmeno al riavvio del client FM.
Sono già stati impostati privilegi regolari, la compressione .tar e la disposizione delle cartelle delle versioni.
Riguardo i campi da "variabilizzare":
quello che intendo è se è possibile lavorare su un campo o su un altro a seconda del valore di una variabile o di un parametro passato allo script.
Esempio: devo inserire un valore in un campo. I possibili comandi di script sono "Go to field", "Set field", "Insert [Text/Picture/etc.]", e tutti e tre mi chiedono di specificare - solo selezionandolo da una finestra che mi presenta tabelle e campi del DB - il campo sul quale agire.
Nel mio caso, l'inserimento di immagini è uno scritp che mi serve in 5 layouts diversi, e per 6 campi diversi. Il chè significa che mi servono 6 script diversi e non, come vorrei, uno solo che è in grado di agire sul campo che gli viene passato per parametro.
Quindi in fase di sviluppo ogni minima correzione va duplicata e applicata a tutti gli script.
Se c'è un metodo, Dio benedica chi me lo dice e chi l'ha inventato.
Grazie!
Devo ancora fare dei test per i comandi Mac, ma mi sono fermato perché stiamo incontrando problemi con l'installazione dinamica del plugin da un ambiente FM8Server su MacOS X 10.3.9.
Poiché si lavorerà in rete FM, si voleva che, se necessario, il server facesse l'installazione del plugin nei client all'avvio dell'applicazione.
Purtroppo, mentre con la quasi totalità di altri plugin testati il metodo funziona ed il plugin si attiva senza nemmeno dover riavviare il FM client, nel caso di Shell il plugin viene correttamente copiato nella directory dedicata ma non viene attivato, nemmeno al riavvio del client FM.
Sono già stati impostati privilegi regolari, la compressione .tar e la disposizione delle cartelle delle versioni.
Riguardo i campi da "variabilizzare":
quello che intendo è se è possibile lavorare su un campo o su un altro a seconda del valore di una variabile o di un parametro passato allo script.
Esempio: devo inserire un valore in un campo. I possibili comandi di script sono "Go to field", "Set field", "Insert [Text/Picture/etc.]", e tutti e tre mi chiedono di specificare - solo selezionandolo da una finestra che mi presenta tabelle e campi del DB - il campo sul quale agire.
Nel mio caso, l'inserimento di immagini è uno scritp che mi serve in 5 layouts diversi, e per 6 campi diversi. Il chè significa che mi servono 6 script diversi e non, come vorrei, uno solo che è in grado di agire sul campo che gli viene passato per parametro.
Quindi in fase di sviluppo ogni minima correzione va duplicata e applicata a tutti gli script.
Se c'è un metodo, Dio benedica chi me lo dice e chi l'ha inventato.
Grazie!
Marco.
FM 10 Adv. su MacOS X 10
e FM 10 Server Advanced su MacOS X Server 10.5
FM 10 Adv. su MacOS X 10
e FM 10 Server Advanced su MacOS X Server 10.5
-
- Messaggi: 27
- Iscritto il: martedì 7 settembre 2004, 2:00
Provo a stimolarvi postando lo script...
- PrefissoImmagini = Imagewin:/
- PrefissoFile = Filewin:/
- PathCartellaContenitoreImmagini = F:/GRAFICA/CONTENITOREIMMAGINI/
Ciao!
Nello script uso delle variabili d'ambiente nelle quali specifico alcuni valori:Allow User Abort [ Off ]
Set Error Capture [ On ]
# Salva il nome dell'immagine eventualmente contenuta per ripristinarla nel caso di errore
Set Variable [ $ImmaginePrecedente; Value:Edifici::PathPiantaLocalitàEdificio ]
# Va al campo e attiva l'inserimento Immagine
Go to Field [ Edifici::PiantaLocalitàEdificio ]
Insert Picture [ ]
# Copia il testo del path nel campo apposito
Go to Field [ Edifici::PathPiantaLocalitàEdificio ] [ Select/perform ]
Set Field [ Edifici::PathPiantaLocalitàEdificio; Edifici::PiantaLocalitàEdificio ]
# Imposta il path per l'esportazione
Set Variable [ $PathImmagine; Value:VariabiliApplicazione::PrefissoFile & VariabiliApplicazione::PathCartellaContenitoreImmagini & Edifici::PiantaLocalitàEdificio ]
# Controlla se già esiste un file con lo stesso nome nella cartella contenitore
Set Variable [ $EsisteImmagine; Value:RightWords ( External ( "shell-Execute"; "dir \"" & Substitute ( VariabiliApplicazione::PathCartellaContenitoreImmagini & Edifici::PiantaLocalitàEdificio & "\""; "/"; "\\" )); 3) ≠ "File non trovato" ]
If [ $EsisteImmagine ]
Show Custom Dialog [ Title: "Importazione immagini"; Message: "Attenzione!¶Impossibile importare l'immagine: un file con lo stesso nome è già presente nel Server Perseo.¶Scegliere un nome più specifico e ritentare."; Buttons: “OK” ]
Set Variable [ $PathImmagine; Value:VariabiliApplicazione::PrefissoImmagini & VariabiliApplicazione::PathCartellaContenitoreImmagini & $ImmaginePrecedente ]
Go to Field [ Edifici::PiantaLocalitàEdificio ]
Insert Picture [ “$PathImmagine” ] [ Reference ]
Set Field [ Edifici::PathPiantaLocalitàEdificio; Right ( Edifici::PiantaLocalitàEdificio; Length ( Edifici::PiantaLocalitàEdificio ) - Position ( Edifici::PiantaLocalitàEdificio; "/"; Length ( Edifici::PiantaLocalitàEdificio ); -1)) ]
Commit Records/Requests
Halt Script
End If
# Aggiorna il record
Commit Records/Requests
# Salva l'immagine esportandola nella cartella predefinita...
Export Field Contents [ Edifici::PiantaLocalitàEdificio; “$PathImmagine” ]
#... e la reimporta per Riferimento
Set Variable [ $PathImmagine; Value:VariabiliApplicazione::PrefissoImmagini & VariabiliApplicazione::PathCartellaContenitoreImmagini & Edifici::PiantaLocalitàEdificio ]
Go to Field [ Edifici::PiantaLocalitàEdificio ]
Insert Picture [ “$PathImmagine” ] [ Reference ]
Set Field [ Edifici::PathPiantaLocalitàEdificio; Right ( Edifici::PiantaLocalitàEdificio; Length ( Edifici::PiantaLocalitàEdificio ) - Position ( Edifici::PiantaLocalitàEdificio; "/"; Length ( Edifici::PiantaLocalitàEdificio ); -1)) ]
- PrefissoImmagini = Imagewin:/
- PrefissoFile = Filewin:/
- PathCartellaContenitoreImmagini = F:/GRAFICA/CONTENITOREIMMAGINI/
Ciao!
Marco.
FM 10 Adv. su MacOS X 10
e FM 10 Server Advanced su MacOS X Server 10.5
FM 10 Adv. su MacOS X 10
e FM 10 Server Advanced su MacOS X Server 10.5
-
- Messaggi: 3616
- Iscritto il: sabato 7 febbraio 2004, 1:00
- Località: Roma
- Contatta:
Corri ad aggiornare la versione di FileMaker che hai alla 8.5 !MaT ha scritto:Se c'è un metodo, Dio benedica chi me lo dice e chi l'ha inventato.
Potrai nominare qualsiasi oggetto di un layout (anche un campo) e poi usare il nuovo comando: vai all'oggetto (da calcolo)
Raybaudi FMP 12 Adv. Windows XP SP3
-
- Messaggi: 162
- Iscritto il: sabato 18 marzo 2006, 1:00
- Versione FileMaker: 16
- Sistema operativo: Mac OS X 12 Sierra
Riguardo Shell:
Dalla pagina web di shell http://www.abstrakt.com/shell.html si potrebbe intendere che senza shell non sia possibile interagire fra AppleScript e FileMaker, a meno di usare gli AppleEvents. Invece dall'interno di un AppleScript è possibile eseguire comandi FileMaker come scrivere nei campi del database (il risultato di una determinata operazione AppleScript potrà essere scritto in un campo globale di FileMaker) oppure eseguire ricerche oppure eseguire script di FileMaker! L'interazione è quindi (quasi) completa. Io, finora, non ho avuto alcuna necessità di utilizzare shell, anche se, lo ammetto il fatto di usare AppleScript limita l'applicazione al solo ambiente Mac.What's the difference between using shell or calling an AppleScript that, in turns, calls "do shell script"?
The way FileMaker implemented AppleScript you cannot get the result of an script. You can only launch the script (without parameters, another limitation). To get the result you need to use another mechanism, such as sending the data back using AppleEvents. FileMaker did a fine job scripting its application, so you can add, edit, modify, etc, content from the outside. Alternatively, if your script or tool generates a file, you can use a plugin (or a more convoluted way importing the file to a temp FileMaker file) to get the content of the file.
Per generalizzare gli script, vorrei ricordare che c'è la possibilità di passare un parametro all'esecuzione di uno script. All'interno dello script chiamato si può accedere al valore del parametro conRiguardo i campi da "variabilizzare":
Codice: Seleziona tutto
Get ( ParametroScript )
Codice: Seleziona tutto
parametro1 & "¶" parametro2 & "¶" & ...
All'interno dello script si potranno ottenere i singoli parametri ad esempio con:
Codice: Seleziona tutto
ValoriaSinistra ( get(ParametroScript) ; 1 )
ValoriinMezzo ( get(ParametroScript) ; 2 ; 1 )
ValoriaDestra ( get(ParametroScript) ; 1 )
Spero perlomeno di averti dato qualche speranza
Buon lavoro e buona serata
Thomas
-
- Messaggi: 162
- Iscritto il: sabato 18 marzo 2006, 1:00
- Versione FileMaker: 16
- Sistema operativo: Mac OS X 12 Sierra
Ops, dimenticavo. La funzione più comoda per ricavare singoli valori naturalmente è "RIcavaValore", con cui si potrebbe fare qualcosa del genere
Evidentemente ci si può sbizzarrire...
Di nuovo...
Thomas
Codice: Seleziona tutto
Imposta variabile [$i = 1]
Loop
RicavaValore (get(ParametroScript), $i)
Imposta variabile [$i = $i + 1]
Exit Loop if [$i > 3]
End Loop
Di nuovo...
Thomas