SALSCRIPT
sono dei pezzi di codice sviluppati dai tecnici per personalizzare Stratega™ senza dover modificare i codici sorgenti; normalmente non permettono di implementare grosse modifiche, ma attraverso di essi si possono impostare valori di default di alcuni campi, o variarne alcuni in funzione di valori presenti su altri campi. Si attivano su eventi predefiniti presenti su ogni campo (o Tab o l’intera form) come ad esempio la modifica di un campo, o la validazione di una riga di un documento o la verifica dei dati prima della conferma;
“Oggetto” – nome dell’oggetto su cui attivare i codici
“Azione” – elenco delle azioni disponibili in base all’oggetto
“Elenco salscript attivati” – elenco di tutti gli salscript salvati
“Script” – il codice all’interno dell’oggetto+azione
“Item explorer” – elenco degli oggetti nella form da copiare e mettere nell’oggetto
Cursori da poter utilizzare:
- hSqlTable
- hSqlUser
- hSqlTmp
Variabili globali:
- gdTODAY – Data odierna
- gnANNO – Anno corrente
- gnANNOCOMP – Anno di competenza fiscale
- gbValidateCustom – Variabile da settare a FALSE se si vuole bloccare il codice salscript
- gsCODAZI – Codice azienda
- sPROFILI_CODICE – Nome utente Stratega
- sPROFILI_GRUPPO – Gruppo di utente Stratega
Funzioni:
- Call fnUserPBDefineEx(NumPulsante, Titolo, Icona)
- Attiva pulsante custom
- Call fnUserPBDefineExTooltip(NumPulsante, Titolo, Descrizione, Icona)
- Attiva pulsante custom con descrizione
- Call SalEnableWindow(nome_form.nome_campo)
- Abilitare campo
- Call SalEnableWindow(nome_form.nome_tabella.nome_campo)
- Abilitare tabella
- Call SalDisableWindow(nome_form.nome_campo)
- Disabilitazione campo
- Call SalDisableWindow(nome_form.nome_tabella.nome_campo)
- Disabilitazione tabella
- Call SalShowWindow(nome_form.nome_tabella.nome_campo)
- Visualizzazione di un campo
- Call SalHideWindow(frmGsOrdcli.tblORDCCC.colORDCCC_MIS2)
- nascondere una tabella, colonna … campo
- Call SalFmtSetPicture( frmGsOrdcli.tblORDCCC.colORDCCC_QUANTIT2, ‘#0,000’ )
- settare un formato diverso
- Call SalTblSetColumnTitle(colonna, “NOME”)
- cambiare il nome ad una colonna
- Call SalTblSetColumnTitle(colonna, “NOME”)
- cambiare il nome ad una colonna
- Call fnMessageBox (“Attenzione Cliente con fatture di Acconto!”, “Stratega”, 0)
- Inviare messaggio di avviso
- LEGGERE VALORE DA SETUP INI:
- VALORE NUMERICO: VARIABILE = fnLoadNumberFromIni (SEZIONE, CHIAVE)
- VALORE STRINGA : VARIABILE = fnLoadStringFromIni (SEZIONE, CHIAVE)
Alcuni esempi di codice:
quando devo avere la stessa form attiva su più programmi devo ricavare l’handle e anteporlo al nome form
Window Handle: HWndFTAnaartCla
Set HWndFTAnaartCla = fnGetHWndFormInTab( frmGsAnaart, ‘frmGsAnaartCla’)
—————————————————————————-
MANDARE UN MESSAGGIO AD UNA VIDEATA/OGGETTO
Call SalSendMsg (NOME OGGETTO , MESSAGGIO, PARAMETRO1, PARAMETRO2)
ES Call SalSendMsg(frmGsBolven, PM_NewRec, 0, 0)
——————————————————————————
lettura di un numero di caratteri da una sttring e trasformazione in numero
Number: nDeposito
Set nDeposito = SalStrToNumber ( SalStrRightX ( DESCRIZIONE , Numero-Di-Caratteri ))
SalStrRightX -> legge i caratteri partendo da destra (es. SalStrRightX(“prova 001”, 3) = “001”)
SalStrToNumber -> converte da Stringa a Numerico (Es. SalStrToNumber (“003”) = 3)
——————————————————————————
Fare la somma dei valori di una colonna
Set frmUGsOrdcli.dfTOT_NETTO = SalTblColumnSum( frmUGsOrdcli.tblWU_ORDCCC_PESI, SalTblQueryColumnID(frmUGsOrdcli.tblWU_ORDCCC_PESI.colWU_ORDCCC_PESI_NETTO_RIGA), 0, ROW_MarkDeleted | ROW_Hidden )
——————————————————————————
Data consegna = a 3 giorni più della data documento (come fare su un campo data per aumentare o diminuire i giorni)
Call frmGsOrdcli.dfORDCTT_DATCON.fnSetValueDateTime(frmGsOrdcli.dfORDCTT_DATDOC + 3)
——————————————————————————
COPIA DI UN CAMPO AD UN ALTRO SENZA SCATENARE EVENTI DI CLASSE
Set frmGsOffcli.dfOFFCTT_DATCON = frmGsOffcli.dfOFFCTT_DATDOC
COPIA DI UN CAMPO AD UN ALTRO FACENDO SCATENARE EVENTI DI CLASSE
Call frmGsOffcli.dfOFFCTT_DATCON. fnSetValueDateTime(frmGsOffcli.dfOFFCTT_DATDOC)
——————————————————————————
SETTARE UNA COMBO BOX AD UN VALORE(INDICE)
Call frmGsOffcli.cmbOFFCTT_UFFICIO.fnSetValueNum(1)
——————————————————————————
SETTARE UN CAMPO DATA ALLA DATA ODIERNA
Call frmGsOffcli.dfOFFCTT_DATCON. fnSetValueDateTime(gdTODAY)
——————————————————————————
RICERCA TRAMITE SQL DI UNA INFORMAZIONE; SE NON LA TROVA MESSAGGIO DI ERRORE:
Call SqlPrepareAndExecute( hSqlTable, “SELECT TOP 1 * FROM FATVTT WHERE CONTO = :frmGsFatven.dfFATVTT_CONTO AND EXISTS (SELECT * FROM FATVCC WHERE KEYRIF = FATVTT.KEYRIF AND FATVCC.CODART = ‘F.ACCONTO’ AND FATVTT.DATDOC <= :frmGsFatven.dfFATVTT_DATDOC ) AND CODAZI = :gsCODAZI “)
——————————————————————————
DISABILITAZIONE TAB
Su: CreateComplete
Il testo sottostante, partendo dalla form dell’anagrafica articoli, disattiva il tab produzione se l’utente non è
abilitato ad utilizzare il livello 200.
Number: nConta
Call SqlPrepareAndExecute(hSqlTmp,”SELECT COUNT(*) INTO :nConta FROM PROFILIRANGE WHERE (CODICE IN (SELECT GRUPPO FROM PROFILI WHERE CODICE = :sPROFILI_CODICE) OR CODICE = :sPROFILI_CODICE) AND DALIV = 200″)
Call SqlFetchNext(hSqlTmp,nSqlStatus)
If nConta = 0
Call frmGsAnaart.fnTABDelete(‘tabProduzione’, TRUE)
EndIf
——————————————————————————
CONTROLLO SU CAMPO NUMERICO PER NON VALIDARE MASCHERA
Su: ApplayIsPossible
L’esempio blocca la conferma di un’offerta se manca l’agente, o è 999
If frmGsOffcli.dfOFFCTT_AGENTE.fnGetValueNum() = 0
Call fnMessageBox(“Inserire l’Agente prima di procedere con il Salvataggio dell’offerta”, “Stratega”, 0)
set gbValidateCustom = FALSE
Else
If frmGsOffcli.dfOFFCTT_AGENTE.fnGetValueNum() = 999
Call fnMessageBox(“Assegnare Segnalatore corretto prima di procedere con il Salvataggio dell’offerta”, “Stratega”, 0)
set gbValidateCustom = FALSE
EndIf
EndIf
——————————————————————————
CREARE DELLE REGOLE IN BASE ALL’UTENTE
Es. quando faccio nuovo inserito e sono uno di questi utenti mi viene impostato il tipo documento 44 e mi viene bloccato per non poterlo cambiare
If sPROFILI_CODICE = ‘UTENTE1’ or sPROFILI_CODICE = ‘UTENTE2’ OR sPROFILI_CODICE = ‘GRUPPO1’ OR sPROFILI_CODICE = ‘GRUPPO2’
Call frmGsOrdcli.cmbORDCTT_TIPDOC.fnSetValueNum (44)
Call SalSendMsg ( frmGsOrdcli.cmbORDCTT_TIPDOC, SAM_Validate, 0 , 0)
Call SalDisableWindow ( frmGsOrdcli.cmbORDCTT_TIPDOC )
EndIf
——————————————————————————
CONTROLLO SU RIGA “DOCUMENTO”: MANCA CAMPO E PER NON VALIDARE MASCHERA
If frmGsOrdfor.tblORDFCC.colORDFCC_TIPRIGA.fnGetValueNum() != 3
If frmGsOrdfor.tblORDFCC.colORDFCC_CONTO.fnGetValueString() = STRING_Null
Call fnMessageBox(“Per il codice articolo ” || frmGsOrdfor.tblORDFCC.colORDFCC_CODART || ” manca il Conto”, “Stratega”, MB_IconStop)
Set gbValidateCustom = FALSE
EndIf
EndIf
——————————————————————————
INVIO MESSAGGIO DI VALIDAZIONE CAMPO
Call SalPostMsg(frmGsAnaart.dfARTPROD_UM_MAG, SAM_Validate, 0, 0)
——————————————————————————
CHIUDERE UNA FORM
Call SalSendMsg( frmGsMovcon, SAM_Close, 0, 0 )
——————————————————————————
CREAZIONE DI UNA FORM IN TAB CON CAMPI VARIABILI ED ASSOCIARLA ALLA MASTER FORM
Su frmGsANACLITEST-CreateComplete
Number: nNewPage
Window Handle: hWndTab
Window Handle: hWndCustom
Boolean: bFlagSalScript
Set hWndTab = frmGsANACLITEST.tab1
Set frmGsANACLITEST.tab1.i_bSilentChange = TRUE
Set nNewPage = SalTabPageCount( hWndTab )
Call SalTabAddPage( hWndTab, nNewPage, ‘ALTRI DATI UTENTE’)
Set bFlagSalScript = 1 ! — per dimostrare on off script
If bFlagSalScript
Set hWndCustom = SalCreateWindowEx( frmTBLCUSTOM, frmGsANACLITEST, 0, 0, 0, 0, CREATE_AsChild )
Call SalTabAttachWindow( hWndTab, nNewPage, hWndCustom )
Call hWndCustom.frmTBLCUSTOM.fnDynFormInit( ‘ANACLI’, ‘ANACLI.CONTO’,’:§dfANACLI_CONTO’, TRUE )
Call hWndCustom.frmTBLCUSTOM.fnDynTabSetPage( 0,’Prima Pagina’ )
Call hWndCustom.frmTBLCUSTOM.fnDynTabSetPage( 1,’Seconda Pagina’ )
Call hWndCustom.frmTBLCUSTOM.fnDynTabSetPage( 2,’Terza Pagina’ )
!
Call hWndCustom.frmTBLCUSTOM.fnDynFormEnableItem( ‘frmTBLCUSTOM.dfString01’, DT_LongString, TRUE, ‘PRIMO’, 0 )
Call hWndCustom. frmTBLCUSTOM.dfString01.fnDynAttributes( FALSE, STRING_Null, ‘TBLCUSTOM’, ‘STRING01’, TRUE, TRUE, FALSE, STRING_Null, NUMBER_Null )
Call hWndCustom.frmTBLCUSTOM.dfString01.fnDynAttributesExtra( ‘TABIVA’, ‘ANAGRA’, ‘CODICE’, STRING_Null, STRING_Null, TRUE )
!
Call hWndCustom.frmTBLCUSTOM.fnDynFormEnableItem( ‘frmTBLCUSTOM.dfDate01’, DT_DateTime, FALSE, ‘CAMPO DATA’, 0 )
Call hWndCustom.frmTBLCUSTOM.dfDate01.fnDynAttributes( FALSE, STRING_Null, ‘TBLCUSTOM’, ‘DATE01’, TRUE, TRUE, FALSE, STRING_Null, NUMBER_Null )
!
Call hWndCustom.frmTBLCUSTOM.fnDynFormEnableItem( ‘frmTBLCUSTOM.dfNumber01’, DT_Number, FALSE, ‘CAMPO NUMERO’, 0 )
Call hWndCustom.frmTBLCUSTOM.dfNumber01.fnDynAttributes( FALSE, STRING_Null, ‘TBLCUSTOM’, ‘NUMBER01’, TRUE, TRUE, FALSE, STRING_Null, NUMBER_Null )
!
Call hWndCustom.frmTBLCUSTOM.fnDynFormEnableItem( ‘frmTBLCUSTOM.mlMultiLine01’, DT_LongString, FALSE, ‘CAMPO NOTE’, 0 )
Call hWndCustom.frmTBLCUSTOM.mlMultiLine01.fnDynAttributes( FALSE, STRING_Null, ‘TBLCUSTOM’, ‘STRING04’, TRUE, TRUE, FALSE, STRING_Null, NUMBER_Null )
Call hWndCustom.frmTBLCUSTOM.fnDynObjectResize( hWndCustom.frmTBLCUSTOM.mlMultiLine01, 10,3)
!
Call hWndCustom.frmTBLCUSTOM.fnDynFormEnableItem( ‘frmTBLCUSTOM.cmbFromListAlfa01’, DT_String, FALSE, ‘COMBO IVA’, 1 )
Call hWndCustom.frmTBLCUSTOM.cmbFromListAlfa01.fnDynAttributes( FALSE, STRING_Null, ‘TBLCUSTOM’, ‘STRING02’, TRUE, TRUE, FALSE, STRING_Null, NUMBER_Null )
Call hWndCustom.frmTBLCUSTOM.cmbFromListAlfa01.fnDynAttributesExtra( ‘TABIVA’, ‘ANAGRA’, ‘CODICE’, STRING_Null, STRING_Null, TRUE )
!
Call hWndCustom.frmTBLCUSTOM.fnDynFormEnableItem( ‘frmTBLCUSTOM.cmbFromListAlfa02’, DT_String, FALSE, ‘TERZO’, 1 )
Call hWndCustom.frmTBLCUSTOM.cmbFromListAlfa02.fnDynAttributes( FALSE, STRING_Null, ‘TBLCUSTOM’, ‘STRING03’, TRUE, TRUE, FALSE, STRING_Null, NUMBER_Null )
Call hWndCustom.frmTBLCUSTOM.cmbFromListAlfa02.fnDynAttributesExtra( ‘TABIVA’, ‘ANAGRA’, ‘CODICE’, STRING_Null, STRING_Null, TRUE )
!
Call hWndCustom.frmTBLCUSTOM.fnDynFormEnableItem( ‘frmTBLCUSTOM.cbCheck01’, DT_Number, FALSE, ‘VERO/FALSO’, 2 )
Call hWndCustom.frmTBLCUSTOM.cbCheck01.fnDynAttributes( FALSE, STRING_Null, ‘TBLCUSTOM’, ‘NUMBER02’, TRUE, TRUE, FALSE, STRING_Null, NUMBER_Null )
! — Attivo la prima pagina del Tab
Call SalTabSetActivePage(hWndCustom.frmTBLCUSTOM.tab01, 0 )
Set frmGsANACLITEST.tab1.i_bSilentChange = FALSE
EndIf
——————————————————————————
COLONNE CUSTOM AGGIUNTIVE
colCustomString01
colCustomString02
colCustomString03
colCustomNumber01
colCustomNumber02
colCustomDate01
PER ATTIVARE UNA COLONNA
fnDynAttributes (p_bShow, p_sTitle, p_sTableName, p_sColumnName, p_bPartecipaWhere, p_bUpdatable, p_bPrimaryKey, p_sLinkBind, p_nColumnPos)
ATTIVA LE COLONNE DINAMICHE SULLE TABELLE
Boolean: p_bShow
! Indica se l’oggetto deve essere visibile (TRUE) o meno (FALSE)
String: p_sTitle
! Titolo della colonna dinamica
String: p_sTableName
! Proprietà dell’oggetto: Nome della tabella associata
String: p_sColumnName
! Proprietà dell’oggetto: Nome della colonna associata
Boolean: p_bPartecipateWhere
! Proprietà dell’oggetto: Flag Partecipa a funzionalità QBE
TRUE – Partecipa
FALSE – Non partecipa
Boolean: p_bUpdatable
! Proprietà dell’oggetto: Flag Modificabile
TRUE – Modificabile
FALSE – Non Modificabile
Boolean: p_bPrimaryKey
! Proprietà dell’oggetto: Flag Chiave primaria
TRUE – Oggetto che compone la chiave primaria
FALSE – Oggetto che NON compone la chiave primaria
String: p_sLinkBind
! Proprietà dell’oggetto: Definizione del Link al quale l’oggetto fa riferimento per il valore
Number: p_nColumnPos
Posizione della colonna
PER ATTIVARE LA DECODIFICA
fnDynAttributesExtra(p_sDecodTable, p_sDecodColumn, p_sDecodKey, p_sDecodWhere, p_sDecodBind, p_bDecodAcceptIfNull)
QUALIFICA LA DECODIFICA DELLE COLONNE DINAMICHE SULLE TABELLE
String: p_sDecodTable
! Proprietà dell’oggetto: Indica la tabella usata per decodificare il campo
String: p_sDecodColumn
! Proprietà dell’oggetto: Indica la colonna che decodifica il campo
String: p_sDecodKey
! Proprietà dell’oggetto: Indica il campo chiave usato per la decodifica
String: p_sDecodWhere
! Proprietà dell’oggetto: Indica ca condizione where per la select di decodifica
String: p_sDecodBind
! Proprietà dell’oggetto: Indica il data field sul quale decodificare (se NULL viene gestito dinamicamente)
Boolean: p_bDecodAcceptIfNull
! Proprietà dell’oggetto: Indica se il campo deve accettare valori nulli nonostante la decodifica
TRUE = Accetta
FALSE = Non Accetta