Definizione Procedure | |||
|
Nome programma: BSIEPROC.DLL
Moduli richiesti: Qualsiasi
Le procedure sono delle porzioni di codice Visual Basic Script che l'utente può impostare, allo scopo di eseguire delle operazioni sui dati non previste o particolari. Possono avere 2 funzionalità:
Esistono 4 differenti tipi di procedure, le quali hanno diverse modalità di definizione e impiego:
Funzioni e espressioni possono essere utilizzate nella corrispondenza campi per attribuire un valore ad un campo in fase di impostazione di un profilo di import/export.
Le variabili utilizzabili all'interno delle procedure
Esistono delle variabili, oggetto e non, che possono essere utilizzate all'interno delle procedure. Queste variabili sono valide in qualsiasi momento:
Un'altra categoria di variabili, utilizzabili all'interno delle procedure, sono quelle che contengono i valori dei campi del record di origine e quelle che contengono i valori dei campi di destinazione, mano a mano che vengono calcolati. Particolare attenzione è da prestare alla validità dei dati contenuti in questi variabili, soprattutto quelle che contengono i valori di destinazione. Queste variabili sono utili per eseguire operazioni particolare mediante le procedure, effettuare dei calcoli fra campi, ecc.
Le variabili che contengono i valori dei campi di origine, sono definite con il nome IeIn(Livello relazione)(Nome campo) dove (Livello relazione) è un numero che identifica il livello di relazione fra le corrispondenze tabelle (da 1 a 6 possibili livelli di relazione) e (Nome campo) è il nome del campo del record di origine. Le variabili che contengono i valori dei campi di destinazione, sono definite con il nome IeOu(Livello relazione)(Nome campo) dove (Livello relazione) è un numero che identifica il livello di relazione fra le corrispondenze tabelle e (Nome campo) è il nome del campo di destinazione; ad esempio la variabile contenente il codice del cliente di Business, durante l'esportazione di un documento di magazzino, sarà IeIn1tm_conto, la variabile che contiene il codice dell'articolo di Business sarà IeIn2mm_codart mentre la variabile che contiene lo stesso codice articolo, ma sulla destinazione, sarà IeOu2articolo.
Le variabili oggetto contenenti il nome del database esterno (Solo per tabelle esterne di tipo MSAccess) sono definite come Ie(Livello relazione)DbExt dove (Livello relazione) è un numero che identifica il livello di relazione fra le corrispondenze tabelle (da 1 a 6 possibili livelli di relazione); ad esempio il primo database esterno aperto per un export sarà Ei1DbExt.
La variabile Ie(n)SqlWhere (dove -n- è il numero del livello di releazione) contiene la clausola where quando il tipo filtro impostato per il processo è di tipo "esteso", fornito cioè dell'utente. La variabile di tipo stringa è modificabile unicamente all'interno dello script associato all'evento "Initialize" per sovrascrivere l'ventuale filtro fonito dal cliente. la variabile vale "" (stringa vuota) quando la tipologia di filtro della corrispondenza tabella è diversa da "filtro esteso".
Validità delle variabili IeIn... e IeOu...
Le variabili di nome IeInnNomeCampo vengono impostate prima di trattare ogni record di origine e sono valide fino a quando non si passa al record successivo. Le variabili IeOunNomecampo vengono impostate dopo le precedenti, nell'ordine indicato nella 'Corrispondenza campi'. Esempio di esportazione documenti di magazzino:
NomeCampo (ValoreCampo) VariabileIe...NomeCampo (ValoreCampo) VariabileIe...
ORIGINEDESTINAZIONE
(1° record – livello di relazione 1)
1. Tipo docum. ("B") IeIn1tm_tiporkTipo docum. ("B") IeOu1tipo
2. Anno docum. (1998) IeIn1tm_annoAnno docum. (1998) IeOu1anno
3. Numero docum. (156) IeIn1tm_numdocNumero docum. (156) IeOu1numero
......
(1° record livello di relazione 2)
1. Riga (1) IeIn2mm_rigaRiga (1) IeOu2riga
2. Codice articolo ("A152") IeIn2mm_codartCodice articolo ("PRN34") IeOu2codice
3. Descr. articolo ("Stamp. HP") IeIn2mm_descrDescr. articolo ("Stamp. HP") IeOu2descr
4. Quantià (10) IeIn2mm_quantQuantità (10) IeOu2quant (*)
5. Sconto 1 (8,50) IeIn2mm_scont1Sconto (8,50) IeOu2sconto
......
(2° record livello di relazione 2)
1. Riga (2) IeIn2mm_rigaRiga (2) IeOu2riga
2. Codice articolo ("B153") IeIn2mm_codartCodice articolo ("MOU20") IeOu2codice
3. Descr. articolo ("Mouse GH") IeIn2mm_descrDescr. articolo ("Mouse GH") IeOu2descr
4. Quantià (19) IeIn2mm_quantQuantità (19) IeOu2quant (**)
5. Sconto 1 (5) IeIn2mm_scont1Sconto (5) IeOu2sconto
......
...
Il flusso del programma, va dall'alto al basso, da destra verso sinistra; nel momento in cui il programma determina il valore di destinazione del campo quantità del primo record (*), tutte le variabili IeOu1.. (i campi testata) sono impostate come del resto le variabili IeOu2riga, IeOu2codice e IeOu2descr, la variabile IeOu2sconto NON è ancora impostata perché successiva; in questo momento la variabile ha valore Empty. Nel momento (**), invece, le variabile IeOu2sconto contiene un dato inattendibile perché si riferisce allo sconto attribuito nella riga precedente.
A seguire sono indicate alcune restrizioni note imposte al linguaggio VBA per l'uso nello Script Engine:
Elenco procedure
è un campo numerico univoco che identifica una procedura. I codici compresi tra 1 e 1000 sono riservati NTS per l'introduzione di profili standard di importazione/esportazione futuri; codici superiori a 1000 sono disponibili all'utente.
Rappresenta la descrizione della procedura (di max 50 caratteri) Come il codice, anche la descrizione della procedura deve essere univoca.
è il tipo della procedura. Può assumere 4 valori:
Solo procedure di tipo Sub o Function sono precaricabili all'avvio.
è un flag che indica se precaricare la procedura all'avvio del processo di Import/Export oppure caricare la procedura nello Script Engine immediatamente prima dell'uso. Procedure che hanno un uso frequente è consigliabile precericarle.
Indicare con tale spunta se la procedura è definita in linguaggio VBScript o
VB.NET. Tale spunta è molto importante in quanto i profili che utilizzano il
motore NET possono usare solo procedure VB.NET, mentre i profili in Classic
Start solo procedure in VBScript. Inoltre con questa spunta ora le procedure da
eseguire per gli alert scritti in .NET possono essere anche all'interno
dell'archivio procedura (anzichè su script), come erano le procedure in VBScript
di Classic Start, l'importante è che abbiano la spunta su Proc. in
Vb.Net. La sintassi da utilizzare è la stessa di quella delle procedure per
import/export in VB.NET mentre la funzione che deve essere eseguita deve avere i
parametri come le funzioni che erano presenti nel file esterno, per esempio:
Function ProvaAlert(byref oApp as CLE__APP, byval strCodditt as string,
byref dttMsgOutParam as DataTable) as boolean
Il flag Proc. in Vb.Net è corretto impostarlo solo per procedure di tipo Sub o Function in quanto il profilo se fa uso del motore NET tratta solo queste.
Negli script, per aggiungere degli 'Imports' e/o dei 'Reference' occore utilizzare la seguente sintassi (devono essere scritti fuori dalle function/sub):
<reference assembly="BN__STD.dll" />
Imports NTSInformatica.CLN__STD
Gli imports passati per default dal framework di busnet sono:
Imports Microsoft.visualbasic
Imports System
Imports System.Collections
Imports System.Data
Imports NTSInformatica
Imports NTSInformatica.CLN__STD
L'oggetto script di net (oScrIe) ha come variabile globale:
Gli oggetti/variabili pubblici sempre disponibili in tutti gli script in .NET sono:
oApp
oMenu
oCleComm
DATAIN
DATAOU
VARS
oCleImex
Tabella di mappatura fra le variabili BSIEIMEX (Classic Start) e BEIEIMEX (NET) | |
MsScript | Script.NET: VARS! (esempio VARS!glProfilo) |
glProfilo | glProfilo |
"Ie" & nLivRel & "NomeTabIN" | "Ie" & nLivRel & "NomeTabIN" |
"Ie" & nLivRel & "NomeTabOU" | "Ie" & nLivRel & "NomeTabOU" |
"Ie" & nLivRel & "SqlWhere" | "Ie" & nLivRel & "SqlWhere" |
| "Ie" & nLivRel & "SqlAccessWhere" |
"gnLivRel" | "gnLivRel" |
"IECancelRel" | "IECancelRel" |
"IECancelAll" | "IECancelAll" |
"IECancelRow" | "IECancelRow" |
"IEExitFalse" | "IEExitFalse" |
"Ie" & nLivRel & "NomeFileExt" | "Ie" & nLivRel & "NomeFileExt" |
In export: "Ie" & nLivRel & "NomeDbExt" | "Ie" & nLivRel & "NomeDbExt" |
"Ie" & nLivRel & "NumeroFile" (numero restituito dal comando 'freefile' del file ASCII in export) | "Ie" & nLivRel & "DataTable" (tabella in memoria su cui scrivere i dati) |
In import: "Ie" & nLivRel & "DbExt" | Sostituito con "IeDataIn" ovvero datatable corrente contenente i dati da importare |
"IeIn" & nLivRel & "nome_campo_da_importare" (elenco dei campi della tabella IN) esempio 'IeIn1ar_descr' | "IeIn" & nLivRel & "Row" (riga della tabella IN) per accedere ai campi esempio: 'VARS!IeIn1Row!ar_descr' |
"IeOun" & nLivRel & "nome_campo_da_esportare" (elenco dei campi della tabella OU) esempio 'IeOu1ar_descr' | "IeOu" & nLivRel & "Row" (riga della tabella OU) per accedere ai campi esempio: 'VARS!IeOu1Row!ar_descr' |
objImex.WriteFileExport | In export i dati rimangono in un datatable in memoria fino a quando l'operazione di export non è terminata, poi vengono riversati tutti nel file di out. Nel frattempo da ogni funzione/script è possibile aggiungere/togliere/modificare record nel datatable di out |
objImex.WriteLog | ocleImex.WriteLog("Messaggio per il log") |
Gli oggetti/variabili pubblici disponibili SOLO nella routine TERMINATE in tutti gli script in .NET sono:
Visto che in NET non si può utilizzare il componente AGDO, BEIEIMEX carica
tra le procedure la RicalcolaOrd e la RicalcolaDoc. Che non fanno
altro che istanziare beveboll/beorgsor e chiamare la funzione
nuovodaimportexport
. Esempio di come realizzare una chiamata
tramite le nuove funzioni:
Corpo procedura
Normalmente l'editor delle procedure è disabilitato; per abilitarlo premere sul pulsante 'Modifica'. Terminata la modifica o l'inserimento della nuova procedura è possibile salvare o ripristinare il tutto; il pulsante controlla, se abilitato, consente di controllare la sintassi solo per procedure di tipo Sub, Function o Expression.