Dopo tanta e tormentata attesa finalmente le richieste della community filemakeristica sono state accolte: FileMaker 16 ha portato in dono la funzionalità che permette di creare PDF da FileMaker Server e - soprattutto - da Web Direct.

La lista completa delle funzionalità è disponibile a questo link (FileMaker 16: un Grande Balzo in Avanti).

In questo articolo andiamo invece dritti al sodo e vediamo come si genera un PDF da FileMaker Server e da Webdirect.

Stampa su PDF da FileMaker Server

La procedura si attiva attraverso il comando Salva come PDF, come al solito, ma ha alcune peculiarità di cui dobbiamo tenere conto, dato che stiamo lavorando su FileMaker Server:

  1. il comando funziona solo senza finestra di dialogo, non supporta cioè l’opzione con la quale si fa comparire una finestra di dialogo per immettere le specifiche del PDF.
  2. lo script eseguito sul server segue le regole di comportamento dei percorsi su FileMaker Server: ogni file che viene generato DEVE essere posizionato o nella cartella Documenti (presente all'interno della directory di FileMaker Server) o nella cartella Temporanea, o in sottocartelle di queste cartelle.
  3. l’utente che esegue lo script deve possedere i privilegi di stampa oppure (meglio) lo script deve essere eseguito con l’opzione esegui con privilegi d’accesso completi.
  4. le opzioni Apri automaticamente e Crea email col file allegato non sono supportate.
  5. l’opzione Accoda a PDF esistente è supportata solamente all’interno dello stesso script, se cioè il PDF è stato creato nel corso dello script. Non funzionerà quindi se il PDF esiste nella giusta posizione, ma è stato creato in precedenza.

Vediamo uno script di esempio.

Lo script - lanciato dal client con l’istruzione Esegui script su server - è divisibile in due fasi.

La prima ci consente di individuare i records che dovremo stampare ed il formato di stampa da utilizzare.

Questi dati vengono passati al server  tramite il parametro script:

Vai al Formato [ “Globali” (GlobaliDATI) ]

//la tabella globali contiene solo campo globali, e ci serve per creare una procedura modulare qualora dovessimo eseguire la stampa da server in più tabelle. EstraiDaGSP è una funzione personalizzata che serve a estrarre i dati dal èarametroScript
Imposta Campo [ GlobaliDATI::gIDs; EstraiDaGSP ( "id" ) ]

//scriviamo il/gli ID della tabella nel campo globale, così da usrae la relazione per isolarli
Salva Record/Richieste 

If (mettere qua un parametro)
Vai a Record Correlato [ Da tabella: “Anagrafica”; Con il Formato: EstraiDaGSP ( "layout" ) ] [ Mostra solo i record correlati; Nuova finestra ]

Else If (parametro per altra tabella)

[...]

End If

Nella seconda fase definiamo la variabile per produrre il PDF e finalmente lo creiamo:

Imposta Variabile [ $nome; Valore:EstraiDaGSP ( "nome" ) ]

Imposta Variabile [ $file; Valore:If (Assoluto ( Get ( PiattaformaSistema ) ) = 1 ; //Mac "file:" & Get ( PercorsoDocumenti ) & $nome & ".pdf" ;

"filewin:" & Get ( PercorsoDocumenti ) & $nome & ".pdf" )]

Impostazioni di Stampa [ specificare le opzioni di stampa ]

Salva Record comePDF [ Ripristina; Con finestra di dialogo:Disattivata; “$file”; Record Esaminati ]

In questo modo la procedura crea un PDF col nome specificato nella variabile $nome nella cartella Documenti del nostro server.

Se volessimo utilizzare sottocartelle possiamo farlo tranquillamente, sempre a partire dalla cartella Documenti.

 

Se invece volessimo salvare il nostro PDF appena creato in un campo contenitore potremmo avere delle difficoltà perchè le opzioni di inserimento file o immagini sono disabilitate sul server.

Vediamo quindi un trucchetto per riuscirci: prendiamo il path con cui abbiamo salvato il file ($file), lo manipoliamo come segue:

Imposta Variabile [ $path; Valore:Cercaesost ( $file ; "file:/" ; "file://" ) ]

Utilizziamo quindi l'istruzione Inserisci da URL  per infilare il file PDF nel campo contenitore:

Inserisci da URL [ Seleziona; Con finestra di dialogo: Disattivata; Campo contenitore ; $path ]

 

Semplice no?

 

Stampa su PDF da FileMaker Web Direct

Questa è la vera novità che finalmente permette a Webdirect di stampare in modo nativo.

Al contrario di quanto abbiamo appena visto con FileMaker Server, possiamo utilizzare il banale comando Stampa.

L'istruzione Stampa infatti, quando eseguito da FileMaker Web Direct, genera un PDF, aprendolo in un tab separato.

Possiamo in questo caso utilizzare 2 opzioni:

  1. eseguire l'istruzione di stampa SENZA finestra di dialogo => il pdf viene aperto direttamente nel tab, le varie opzioni devono essere pre-determinate nello script;
  2. eseguire l'istruzione di stampa CON finestra di dialogo => l’utente può/deve specificare se stampare record corrente vs record selezionati, orientamento della stampa ecc…; l’opzione è rivolta agli utenti finali più che agli sviluppatori.

In alternativa possiamo salvare il file PDF e proporre all’utente di scaricarlo.

In questo caso la procedura utilizza l'istruzione Salva come PDF,  ma il contesto è esplicito, cioè non è necessario trovare quale record stampare, FileMaker lo sa già (come invece non capitava su FileMaker Server).

Vai al Formato [ specificare qua il layout di stampa ]

Imposta Variabile [ $nome; Valore: specificare qua il nome del file]

Imposta Variabile [ $file; Valore:If (Assoluto ( Get ( PiattaformaSistema ) ) = 1 ; //Mac "file:" & Get ( PercorsoDocumenti )& $nome & ".pdf" ;

"filewin:" & Get ( PercorsoDocumenti ) & $nome & ".pdf" )]

Impostazioni di Stampa [ specificare le opzioni di stampa ]

Salva Record comePDF [ Ripristina; Con finestra di dialogo:Disattivata; “$file”; Record Esaminati ]

In questo caso il file viene scaricato nella cartella Download di default dell’utente (non c’è l’opzione che permette di scegliere un’altra cartella).

 

Stampa su PDF da FileMaker Server eseguito da FileMaker Web Direct

Abbiamo infine una terza ipotesi, che è quella di eseguire lo script su server partendo da FileMaker Web Direct.

Tutto funziona esattamente come quando si esegue uno script su server partendo dal client, ma anche nel caso dell’utilizzo da Web Direct dobbiamo tenere conto di alcune limitazioni e/o particolarità:

  1. le opzioni Apri automaticamente e Crea email col file allegato non sono supportate.
  2. l’opzione Accoda a PDF esistente è supportata solamente all’interno dello stesso script, se cioè il PDF è stato creato nel corso dello script. Non funzionerà quindi se il PDF esiste nella giusta posizione, ma è stato creato in precedenza.

È importante ricordare che l'istruzione di creazione di un PDF non funziona quando l’accesso tramite WebDirect viene eseguito su un dispositivo mobile.

Scarica il file di esempio

A questo punto non resta che provare! Ho creato un file di esempio che permette di mettere subito all'opera gli script che ho descritto. Compila il form qui sotto e riceverai il link per il download direttamente nella tua e-mail e buon divertimento!

 

3 Commenti

    • No, l'ho creata io a partire da quella originale che si chiamava ExtractXML

      ExtractXML (Name; Content)=

      Let ( [

      XML_Length = Length ( Name ) ;

      Attribute_Length = Length ( Content ) ;

      Get_Instance = 1 ];

      Case( IsEmpty ( Name ) or IsEmpty ( Content ) or PatternCount ( Name ; “” ) = 0 ; “” ;

      Middle ( Name ; Position ( Name ; “” ; 1 ; Get_Instance ) + attribute_length + 2 ;

      xml_length – ( xml_length – Position ( Name ; “” ; 1 ; Get_Instance ) ) – ( Position ( Name ; “” ; 1 ; Get_Instance ) + Attribute_Length + 2 ) )

      ) )

      In sostanza la funzione EstraidaGSP incorpora il parametro script al suo interno come origine XML, così che devi dichiarare solo il nome dell'elemento che vuoi estrarre dal "blocco" di XML

  1. Buongiorno,
    ho installato il file di esempio su un server 16. funziona tutto tranne il pulsante "crea pdf sul server e salva pdf" che mi da l'errore : protocollo non supportato.

    Questo su webdirect anche se c'è scritto che dovrebbe funzionare.

    grazie

LASCIA UN COMMENTO

Please enter your comment!
Please enter your name here