Inviare una mail con la stampa di un ordine di acquisto e i suoi allegati
Per inviare una stampa generalmente si utilizza un workflow di tipo ARP:
al momento della stampa basta scegliere una destinazione di tipo “Messaggio” e il pdf prodotto verrà inviato secondo le regole del workflow.
In Sage X3 è possibile allegare dei file ai vari oggetti, come abbiamo già visto qui, attraverso il pulsante presente nel menù a destra:
Se vogliamo allegare alla mail anche questi file allora il workflow di tipo ARP non è più adatto, è necessario utilizzare un allegato con Tipo Evento “Oggetto”.
Ma così facendo si presenta il problema di creare la stampa (un file pdf) ed allegarla alla mail.
Vediamo una soluzione così composta:
- creiamo un pulsante nella finestra degli ordini di acquisto (POH)
- lo colleghiamo ad un workflow di tipo oggetto che scatenerà un’azione
- l’azione andrà a creare la stampa pdf
- il file pdf verrà allegato alla mail in aggiunta agli allegati già presenti nell’ordine.
Inserimento pulsante nella finestra degli ordini di acquisto
Aggiungiamo quindi un pulsante nella finestra OPOH con codice “z” e descrizione “Invio Mail”;
l’azione può restare vuota (in figura si vede “SPE” ma in realtà poi non scriveremo nessuna istruzione nel sorgente SPEPOH);
non dimenticare di inserire il codice attività:
Validiamo quindi la finestra e anche le transazioni degli ordini di acquisto.
Duplicazione della stampa degli ordini di acquisto
La stampa che ci serve verrà lanciata da programma; per evitare che esca la finestra con i parametri di stampa è necessario:
- che la stampa sia indicata come diretta nella gestione “Codice stampa” (GESARX)
- che la destinazione sia preimpostata: serve una destinazione di tipo file, da cercare o configurare in Destinazioni (GESAIM)
Per questo duplichiamo la stampa degli ordini di acquisto attualmente in uso e la modifichiamo:
- la rinominiamo, per esempio con il nome “YPOHMAIL”
- inseriamo il codice attività
- impostiamo come destinazione di default una destinazione di tipo “File” e la mettiamo obbligatoria
- se vogliamo che il nome del file allegato contenga il numero d’ordine indichiamo come programma specifico YPOHMAIL (se è presente un verticale, per esempio XBONCDE, bisognerà porre attenzione poi a richiamarlo adeguatamente)
- il file .rpt di Crystal Report rimane lo stesso.
A questo punto la stampa è configurata.
Codice specifico della stampa
Premessa
In genere si vuole personalizzare il nome del file creato da una stampa, se non vi interessa per il momento modificare il nome del file potete saltare questa parte.
Il nome del file generato da una stampa viene inserito nella variabile globale GFILPATH.
Se l’evento scatenante il workflow è di tipo “Stampa” la variabile GFILPATH al momento dell’avvio del workflow stesso sarebbe già alimentata.
Ma nel nostro caso il workflow è di tipo “Oggetto” e la stampa dovremo lanciarla noi tramite un’azione; pertanto all’avvio del workflow la variabile GFILPATH è vuota.
Per recuperare il file pdf e modificarne il nome dobbiamo fare in modo di inserirci in un momento in cui la variabile GFILPATH sia già alimentata.
Il punto più semplice è dopo il lancio della stampa, ma in questo modo non abbiamo i dati di riferimento dell’ordine. Per avere a diposizione il POHNUM dobbiamo “entrare” nel flusso della stampa.
Procediamo
Creiamo il file sorgente YPOHMAIL che abbiamo già indicato come programma specifico della stampa YPOHMAIL.
Nel mio caso era già presente come specifico il verticale XBONCDE; analizzandolo ho visto che l’unica cosa da richiamare era il sottoprogramma IMPRIME:
Subprog IMPRIME(NBPAR,PARAMETRE)
Logicamente non riporteremo il codice di XBONCDE ma lo richiamiamo, in modo che in caso di modifiche allo stesso XBONCDE, in automatico si ripercuoteranno anche qui.
Per modificare il nome del file creato invece c’è l’azione “FICHIER” predisposta da Sage a questo scopo:
basta impostare qui la variabile globale GFILPATH per modificare direttamente il nome del file al momento della sua creazione.
Ecco il contenuto del sorgente YPOHMAIL :
#sostituisce il sorgente XBONCDE $ACTION Case ACTION When "FICHIER" : Gosub FICHIER When Default Endcase Return Subprog IMPRIME(NBPAR,PARAMETRE) Value Integer NBPAR Variable Char PARAMETRE()() Call IMPRIME(NBPAR,PARAMETRE) From XBONCDE End $FICHIER #imposto il nome del file con numero ordine e data ordine di acquisto FICHIER = "c:\temp\" + [F:POH]POHNUM + "_" + format$("D:YYYYMMDD",[F:POH]ORDDAT) + ".pdf" GFILPATH = FICHIER Return
Impostazione parametri stampa
Affinché vengano passati i parametri corretti alla stampa andiamo in “Destinazioni\Valori di default” (GESARV):
Cerchiamo la parametrizzazione della stampa degli ordini di acquisto associata ovviamente a GESPOH e la copiamo pari pari per la nuova stampa YPOHMAIL.
In questo modo il sistema sa quali valori inserire come parametri di stampa se la funzione corrente è GESPOH e la stampa in corso è YPOHMAIL.
Impostazione stampa diretta
Quando si lancia una stampa, se non è configurata come “diretta” esce la finestra di inserimento dei parametri che permette di modificare i dati eventualmente configurati in “valori di default” (GESARV), come appena visto. Per evitare questo passaggio interattivo è necessario utilizzare una chiamata che sfrutta un “codice interno” per il quale la stampa è configurata come diretta.
Andiamo quindi in “Codici di stampa” (funzione GESARX) e inseriamo la seguente riga:
- Codice interno: YPOHMAIL (può anche essere diverso dal nome della stampa)
- Tipo stampa = “Stampe”
- Codice stampa: YPOHMAIL
- Stampa diretta = “Si”
Implementiamo l’azione che crea il pdf
Ora creiamo l’azione che il workflow richiamerà per creare il pdf.
Entriamo nel “Dizionario azioni” (GESACT) e clicchiamo su Nuovo:
- Nome azione: YCREAPDF
- Inseriamo il codice attività
- Modello: Fuori modello
- programma YCREAPDF e sottoprogrammma YPOHPDF
- mettiamo la spunta su “Accessibilità Workflow”
- nessun parametro da impostare
Non ci resta che creare il file sorgente YCREAPDF con questo codice:
################################################## Subprog YPOHPDF() # utilizziamo questa chiamata che utilizza il codice interno, in modo da poter avere una stampa diretta Call IMPRIME("YWRKMAIL","GESPOH") From ETAT #NB in questo punto la variabile GFILPATH è alimentata, ma non abbiamo a disposizione i dati relativi all'ordine #volendo possiamo impostare un nome fisso, prima però bisogna rinominare il file con lo stesso nome, #poichè questo punto il file è già stato creato. #Per esempio si può fare così: #Local Integer YSTAT #Local Char NUOVONOME(255) : NUOVONOME="C:\test.pdf" #Call MOVE (GFILPATH, NUOVONOME, YSTAT) From ORDSYS #GFILPATH=NUOVONOME End ##################################################
Chicca: se vogliamo aggiungere qui un ulteriore allegato basta inserire il path completo in GFILPATH suddivisi da un punto e virgola;
per esempio per allegare 2 file:
<code>GFILPATH=GFILPATH+”;”+PATH2 </code>
Configuriamo il nuovo workflow
Ora abbiamo tutto pronto, finalmente possiamo creare il workflow attraverso la funzione “Regole Workflow” (GESAWA).
Indico velocemente qui di seguito i parametri da impostare nelle varie schede.
SCHEDA Generale
- Categoria TC
- Attivo: SI
- Tipo evento : Oggetto (è questo che permette l’invio degli allegati collegati all’oggetto)
- Codice evento: POH (codice dell’oggetto, in questo caso l’ordine di acquisto)
- Operazioni: z (corrisponde al codice bottone inserito prima in finestra OPOH)
- Condizioni: qui possiamo inserire delle condizioni necessarie affinchè il workflow si attivi
- Flag “Attivazione mail” SI
- Flag “Attivazione azione” SI
- “Messa a punto” si può impostare a SI se serve fare dei test
SCHEDA destinatari
- Condizione: vuota, Tipo: Terzo, destinatari: [F:POH]BPSNUM, Funzione: (vedi campo Funzione nel Tab Contatti della funzione Clienti – GESBPC -; è collegato al menù locale 233), Invio mail: SI, resto vuoto
- Condizione: vuota, Tipo: Utente, destinatari: [F:POH]BUY, Funzione: vuota, Invio mail: copia, avanz: no, Nature vuoto, Opzione del: no
- Per fare dei test iniziali possiamo inserire anche solo una riga di questo tipo:
Condizione: vuota, Tipo: Utente, destinatari: GUSER (chi esegue il workflow), Funzione: vuota, Invio mail: SI, avanz: no, Nature vuoto, Opzione del: no
Una condizione del tipo “1=0” non sarà mai verificata, è utile per esempio se vogliamo inibire una riga in fase di test.
Attenzione: gli utenti sage destinatari di mail DEVONO avere impostato l’indirizzo Worflow, altrimenti non si apre il box interattivo della mail
SCHEDA Messaggio
Qui è possibile definire titolo e messaggio della mail, utilizzando i campi dell’oggetto che sono disponibili, a titolo di esempio:
- Oggetto: <code>’Ordine di Acquisto n. ‘+[F:POH]POHNUM</code>
- testo:
<pre> Gentile Fornitore,
|’con la presente inviamo l”Ordine di Acquisto n. ‘||[F:POH]POHNUM||’ del ‘||[F:POH]ORDDAT||’ .’|
Cordiali saluti</pre> - Invio: Server
- SI messaggio modificabile (se vogliamo permettere all’utente di fare modifiche)
- Mittente mail: per esempio test@miosito.com
- Documento da allegare: GFILPATH
- Allegato SI (gli allegati all’ordine di acquisto nel modo già citato all’inizio, verranno quindi allegati a questa mail)
- Tutti i tipi SI
- Tutte le categorie SI
SCHEDA Azione
Inseriamo qui una riga con:
- Codice azione: YCREAPDF
- Attivazione: Inizio workflow
L’azione verrà quindi scatenata prima del workflow stesso, creerà il pdf che, essendo inserito nella variabile GFILPATH, verrà allegato alla mail.
Concludendo…
Il tutto è un po’ laborioso ma efficace. In questo modo ci ritroveremo tra gli allegati della mail i file allegati ai vari ordini di acquisto.
Volendo è possibile raffinare il comportamento filtrando i file da allegare in base al tipo di documento allegato, impostando opportunamente la sezione “Allegati” della scheda “Messaggio” del workflow.
Alla prossima!
Keep this going please, great job!
Ciao! mi sono imbattuto nella necessità di dover rinominare l’allegato prima dell’invio di una e-mail con workflow dalla stampa di tutti i documenti (ordini, bolle, fatture…). Per non dover modificare tutte le stampe e tutti gli script di stampa ho utilizzato l’entry point FILPAT dell’AIMP3 rinominando il file con la MOVE e modificando la GFILPATH con filpath(“tmp”,NUOVONOME,”pdf”) dove NUOVONOME è il numero del documento. La cosa problematica è stata solamente recuperare il numero documento (ad es. [F:SIH]NUM), perché purtroppo viene popolato solamente se prima seleziono il record nel browser e poi faccio stampa. Quindi per essere sicuro di averlo sempre disponibile ho prima agganciato il record della AREPORTM e poi utilizzato il campo CLEA1. Nel caso si volesse inserire nel nome qualche altro dato del documento sarà sufficiente leggere con chiave = CLEA1 la tabella inerente alla tipologia di documento.
Grazie del suggerimento!
Se non ricordo male, io inserivo un codice specifico della stampa con all’incirca queste istruzioni:
$ACTION
Case ACTION
When “FICHIER” : Gosub FICHIER
When Default
Endcase
Return
Subprog IMPRIME(NBPAR,PARAMETRE)
Value Integer NBPAR
Variable Char PARAMETRE()()
Call IMPRIME(NBPAR,PARAMETRE) From SORGENTE_ORIGINALE_della_STAMPA
End
$FICHIER
FICHIER = filpath(MIOPATH, [F:XXX]NUM + “_” + format$(“D:YYYYMMDD”,[F:XX]DAT) , “pdf”)
GFILPATH = FICHIER
Return