Sviluppo4d.it
Sito indipendente di informazioni tecniche per sviluppatori 4th Dimension italiani  

Sviluppatori 4D

Utility 4D

Risorse 4D



4d logo
Naviga:

Faq

Ho trovato 58 faq.

Categoria Argomento Commenti
Novita' Novita' 4d su Mac OS X 10.9
Su Mac OS X 10.9 Maverick le applicazioni che non sono davanti (in 'foreground') vengono automaticamente abbassate di priorità con la nuova funzione "App Nap".

Questo è ovviamente un problema se il 4d Server viene usato su un 10.9: in questo caso basta andare nella finestra Info del Finder per l'app Server e impostare il flag "Impedisci App Nap"
Novita' Novita' Tempo consigliato per il Flush Cache
Mentre fino alla versione 4d 11 il tempo consigliato per la flush cache era di default 15 minuti.

Dalla versione v12 il tempo consigliato è 20 secondi, grazie alle nuove ottimizzazioni del funzionamento della cache.
Novita' Novita' [v11 SQL] Cast dei dati con 4D ODBC Pro
La v11 SQL non consente più il cast in automatico dei dati con i comandi di ODBC.

Per essere più chiari, se cerco di importare in un array di tipo stringa dei dati che nella sorgente ODBC sono invece di tipo longint, l'array sarà riempito da stringhe vuote; a differenza della versione 2004, dove il cambio di tipo era automatico ( e peraltro abbastanza pericoloso per l'integrità dei dati, benché comodo per il programmatore! )
Novita' Novita' [v12 SQL] XLIFF: dalle applicazioni multilingua alle finestre multilingua
Uno degli aspetti introdotti dalla v11 SQL era stata la possibilità di sviluppare software multilingua grazie all'uso di XLIFF.

Con 4D v12 SQL viene data innanzitutto la possibilità di utilizzare una lingua diversa da quella impostata nel sistema operativo; ma soprattutto sarà possibile definire, all'interno di ogni processo, se deve essere utilizzato per quel processo un fie XLIFF differente, senza che ciò intacchi l'impostazione di base della lingua del database intero o degli altri processi attivi.
Novita' Novita' [v12 SQL] Listbox gerarchiche
Le listbox ottengono una nuova funzionalità: quando alcune colonne hanno dei valori ripetuti è possibile scegliere una visualizzazione gerarchica, dove è possibile espandere e collassare le righe raggruppate sotto le stesse voci.
Novita' Novita' [v12 SQL] Oggetti dinamici nei form
Con la v12 SQL sarà possible costruire dinamicamente i form.

Dinamiche saranno anche le variabili: sarà possibile infatti avere variabili solo col nome la cui visibilità e utilizzo diventa non il processo chiamante bensì il form in quanto tale.

Uno dei comandi più potenti presentati è il comando di Duplicazione degli Oggetti, che dà la possibilità di aggiungere in fase di utilizzo campi ed etichette.

Ovviamente il linguaggio di programmazione mette a disposizione tutti gli strumenti per poter interagire con questo tipo di oggetti, tramite puntatori: sarà possibile ad esempio cambiare il testo delle etichette.. come dire che sono dinamici anche gli oggetti statici!
Novita' Novita' [v12 SQL] Rich text: il testo con formattazione
Con 4D v12 SQL sarà possibile avere un oggetto testo formattato.

Può essere personalizzata dimensione, forma, colore e quant'altro. Il testo è formattabile se si attiva un apposito check nelle proprietà dell'oggetto che lo visualizza a video.

Due nuovi comandi del linguaggio permettono inoltre di ottenere il testo nella versione con i tag html che esplicita gli stili oppure lo stesso testo nella versione pulita dagli stili.
Novita' Novita' [v11 SQL] Il comando Find in field
Il comando Find in field della v11 SQL sostituisce il Find index key delle versioni precedenti.

Il comando permette di trovare il numero di record che contengono un certo valore da cercare senza modificare la selezioni corrente.

La differenza più sostanziale, oltre al nome, sta nel fatto che il comando adesso accetta anche campi non indicizzati per la ricerca.
Novita' Novita' [v11 SQL] Modifiche al comando QUERY WITH ARRAY
Rispetto alle versioni precedenti, con la v11 SQL non è più necessario che il campo su cui eseguire il comando sia indicizzato.
Novita' Novita' [v11 SQL] Il file Catalog.xml
Convertendo una struttura a 4D v11 SQL Release 3 da una qualsiasi versione precedente, viene creato un file chiamato "Catalog.xml".

Questo file si troverà allo stesso livello della struttura e conterrà tutte le informazioni relative agli oggetti presenti nel database, comprese tabelle, campi e relazioni. Contiene inoltre tutte le informazioni relative allo UUID di ogni oggetto.

Questo file risulta assolutamente necessario per eseguire conversioni "multiple" della stessa struttura: permette infatti di utilizzare dati precedentemente convertiti alla v11 SQL con strutture convertite alla v11 SQL in momenti successivi.
Novita' Novita' [v11 SQL] WEDD e UUID
4D v11 SQL ha introdotto una nuova caratteristica: l'indissolubile collegamento tra struttura e file dati, chiamato UUID (Universally Unique Identifier). Questa caratteristica è decisamente più forte della risorsa WEDD presente nelle versioni precedenti (infatti adesso è stata rimossa). Mentre infatti in precedenza la risorsa WEDD poteva essere aggiunta, la UUID è "obbligatoriamente" inserita all'atto della conversione da una versione precedente alla versione v11 SQL.
Novita' Novita' [v11 SQL] Uso di CAST nelle query SQL di 4D
Una prerogativa dell'SQL Engine è la restituzione di errore in caso di uso di tipi differenti per il confronto. Modifichiamo un precedente esempio come se l'anno di ricerca "1960" fosse stato ad esempio precedentemente chiesto all'utente con una REQUEST o fosse stato salvato in una variabile di tipo testo.

Partiamo al solito dalla query scritta con il linguaggio standard di 4th Dimension:




Ecco la stessa query con BEGIN SQL




Con i comandi SQL




Con QUERY BY SQL




Con EXECUTE IMMEDIATE



Novita' Novita' [v11 SQL] Popolare gli array con i risultati di una SELECT
Vogliamo ottenere un insieme dei film catalogati risalenti almeno all'anno 1960 e con questi risultati popolare deli array. Ecco la query 4D:



Si noti in particolare l'uso di $MovieYear all'interno della query.
A questo punto possiamo mostrare gli array aMovieYear, aTitles, aDirectories, aMedias and aSoldTickets o come scrollable area raggruppate:



o come list box



Ecco la stessa query usando i comandi SQL




Usando QUERY BY SQL:




Usando il comando EXECUTE IMMEDIATE di SQL:




Novita' Novita' [v11 SQL] La clausola WHERE nelle query 4D. Alcuni esempi di SELECT
Volendo sapere quanti film si trovano nella nostra videoteca che siano stati pubblicati dal 1960 in poi scriveremo:




Usando codice SQL, la SELECT diventa:




Usando i comandi SQL del linguaggio 4D, avremmo:




Usando QUERY BY SQL avremmo:




Infine, usando il comando EXECUTE IMMEDIATE all'interno di un blocco SQL avremmo




Si noti nella query SQL l'uso di COUNT(*) per il conteggio dei record.
Novita' Novita' [v11 SQL] Uso di INSERT
Continuiamo nella presentazione dei comandi SQL parlando di INSERT. La sintassi è assai agevole:

INSERT INTO {sql_name | sql_string}

[(column_reference, ..., column_reference)]


{VALUES({arithmetic_expression |NULL}, ..., {arithmetic_expression |NULL}) |subquery}




dove {sql_name | sql_string} denotano in qualche modo la tabella dove eseguire gli inserimenti, >[(column_reference, ..., column_reference)] sono i campi dove verranno inseriti i dati, e i dati possono essere espressioni o anche altre sottoespressioni SQL. Vediamo di esempi:


INSERT INTO table1 (SELECT * FROM table2)

inserisce in table2 tutti i record di table1



CREATE TABLE ACTOR_FANS
           (ID INT32, Name VARCHAR);
      INSERT INTO ACTOR_FANS
           (ID, Name)
           VALUES (1, 'Francis');


crea la tabella ACTOR_FANS, definisce i campi e di seguito inserisce i valori nella tabella.
Novita' Novita' [v11 - Conferenza] SQL injection
Una delle maggiori novità della versione 11 di 4D è l'uso dell'SQL. E' però necessario fare attenzione ad gli inserimenti all'interno dell'ambiente web per creare stringhe SQL. Facciamo il seguente esempio.

Supponiamo di avere:

SELECT * FROM Contact WHERE Name = :vName

dove vName è una variabile proveniente dalla pagina web. Supponiamo che lo smaliziato utente web abbia scritto nella variabile vName

Pippo; DELETE * FROM Contact

Ci ritroveremmo la tabella totalmente svuotata.
1
Novita' Novita' [v11 - Conferenza] Uso dei nuovi tipi di indice [1]
La v11 mette a disposizione una svariata serie di indici. Eccone una breve spiegazione con relativo utilizzo:

- BTree index è da usare per valori non ripetuti (ID dei record, ragioni sociali, nomi, ecc.)
- Cluster index per valori ripetuti (booleani, categorie, sesso, ecc.)
- Composite index (indici compositi) per gli ordinamenti(Nome + Cognome, Città + CAP, ecc.)
- Keyword index per i testi.
Novita' Novita' [v11 SQL] Quattro modi per utilizzare SQL [4]
Partiamo sempre dalla query 4D



Un quarto modo per interagire col motore SQL di 4D è quello di utilizzare il comando EXECUTE IMMEDIATE all'interno di un blocco Begin SQL - End SQL. La query diventa:

Novita' Novita' [v11 SQL] Quattro modi per utilizzare SQL [3]
Partiamo sempre dalla query 4D



Un terzo modo per ottenere gli stessi dati via SQL è quello di utilizzare il comando QUERY BY SQL. In questo caso l'esempio diventa:



Infatti il comando QUERY BY SQL non fa altro che eseguire una semplice SELECT del tipo:

SELECT *
FROM myTable
WHERE <SQL_Formula>

dove myTable è la tabella passata come primo parametro a QUERY BY SQL, e SQL_Formula il secondo parametro; otterremmo:

QUERY BY SQL(myTable;SQL_Formula)

Nel nostro caso, in cui non esiste una clausola WHERE, ne forziamo l'esistenza con "ID <> 0" e la query SQL eseguita diventa:

SELECT *
FROM MOVIES
WHERE ID <> 0
Novita' Novita' [v11 SQL] Quattro modi per utilizzare SQL [2]
Partiamo sempre dalla solita query 4D



Un secondo sistema per ottenere dati da 4D usando SQL è quello di eseguire una query ODBC usando come origine dei dati lo stesso database 4D. L'esempio diventa:



dove al comando ODBC LOGIN viene associata come fonte dati SQL INTERNAL.
Novita' Novita' [v11 SQL] Quattro modi per utilizzare SQL [1]
Supponiamo di avere la seguente query in modalità 4D



Un primo modo per ottenere lo stesso risultato via SQL diventa il seguente:




dove il riferimento a $AllMovies viene effettuato attraverso i caratteri speciali "<<" e ">>"

Una sintassi equivalente è data dall'uso di ":"




Una attenzione particolare deve essere posta alle variabili interprocesso, dove diventa necessario l'uso delle parentesi quadre:


Novita' Novita' [v11.1 SQL] DESCRIBE QUERY EXECUTION
Il comando DESCRIBE QUERY EXECUTION è stato aggiunto nella versione 11.1 del sistema di sviluppo per permettere una migliore analisi delle query.

Passando al comando un parametro booleano True si attiva la possibilità di chiedere a 4th Dimension di tenere traccia di come viene eseguita una query (sia essa SQL o del linguaggio 4D). Le query infatti sono ottimizzate da 4D per essere efficenti al massimo, ma non è detto che il nostro modo di pensare una ricerca sia migliore da un punto di vista prestazionale rispetto alla stessa ricerca eseguita in altro modo.

Gli aspetti che 4D permette di analizzare sono:
- come viene pianificata la query (query plan);
- come viene eseguita la query (query path).

Tali informazioni vengono ottenute tramite i nuovi comandi Get Last Query Plan e Get Last Query Path.

Ecco un esempio:

C_TEXT ($vResultPlan;$vResultPath)
ARRAY TEXT (aTitles;0)
ARRAY TEXT (aDirectors;0)
DESCRIBE QUERY EXECUTION (True) `analysis mode

Begin SQL
      SELECT ACTORS.FirstName, CITIES.City_Name
      FROM ACTORS, CITIES
      WHERE ACTORS.Birth_City_ID=CITIES.City_ID
      ORDER BY 1
      INTO :aTitles, :aDirectors;
End SQL

$vResultPlan:=Get Last Query Plan (Description in Text Format)
$vResultPath:=Get Last Query Path (Description in Text Format)
DESCRIBE QUERY EXECUTION (False) `End analysis mode
Novita' Novita' [v11 SQL] Confronto di caratteri ascii inferiore a 32
Dalla versione v11 SQL il parametro di confronto = non distingue più i caratteri da 1 a 8 e da 14 a 31.

Quindi il Char(2) = Char(3), esattamente come fa con "A"="à".

La cosa è importante per chiunque abbia sviluppato procedure di controllo del flusso delle seriali, ad esempio dove appunto questi caratteri servono come delimitatori.

La soluzione è ovviamente quella di confrontare il Character Code, cioè:

Character code(Char(2)) # Character code(Char(3))
Novita' Novita' [v11 SQL] Aprire un file trascinato sull'icona di 4d
Dalla versione v11 è disponibile il metodo del database On Drop, sia in monoutenza che dal client.

Il metodo viene eseguito quando si trascina un file dalla scrivania sull'icona di 4d ( o su un'area vuota della finestra contenitore in Windows); normalmente è eseguito solo se l'applicazione è già aperta, però nel caso in cui il programma sia compilato con il Runtime (chiamato ora 4D Desktop) viene lanciato anche all'apertura.

Adesso è possibile ad esempio aprire un documento di 4d Write trascinandolo sull'icona dell'applicativo compilato; ecco un esempio di codice da usare dentro il metodo On Drop:

fileTrascinato_s:=Get file from pasteboard(1)
If (Position(".4W7"; fileTrascinato_s)=Length(fileTrascinato_s)-3)
  areaEsterna:=Open external window(100;100;500;500;0;droppedFile;"_4D Write")
  WR OPEN DOCUMENT(areaEsterna; fileTrascinato_s)
End if

Novita' Novita' [v11 SQL] Nuovo valore assunto dalla variabile di sistema Document
La variabile di sistema Document, a partire dalla v11, conterrò sempre il percorso completo del documento.
Per essere più precisi, al comando:

docRef:=Create document("miodoc.txt")

nelle versioni precedenti avremmo ottenuto:

Document = "miodoc.txt"

Con la v11 SQL invece:

Document = "c:\Documenti\ miodoc.txt"

oppure

Document = "MacHD:Documenti:miodoc.txt"
Novita' Novita' [v11 SQL] Le nuove costanti per BLOB to text
BLOB to text permette di estrarre testo da un blob. Con l'avvento della v11 SQL con la gestione dell'Unicode, le costanti per il secondo parametro, textformat, sono cambiate. Adesso le costanti sono:


0 Mac C string
1 Mac Pascal string
2 Mac Text with length
3 Mac Text without length
4 UTF8 C string
5 UTF8 Text with length
6 UTF8 Text without length
Novita' Novita' [v11 - Conferenza] Le "Nested transaction"
Con la v11 SQL è possibile utilizzare le transazioni annidate. Il seguente codice è ammesso:

START TRANSACTION
  CREATE RECORD([Tabella1])
  START TRANSACTION
    CREATE RECORD([Tabella2])
    SAVE RECORD([Tabella2])
  VALIDATE TRANSACTION
  [...]
CANCEL TRANSACTION

Alla fine l'ultimo Cancel annulla anche la creazione del record in Tabella2.
1
Novita' Novita' [v11 - Conferenza] DISTINCT VALUES per avere la lista delle singole parole
Sappiamo che DISTINCT VALUES si usa per popolare un array con il contenuto di un campo indicizzato della selezione corrente.

Con la v11 SQL il codice:

ALL RECORDS([Testo])
ARRAY STRING(80;arrTesto;0)
DISTINCT VALUES([Testo]Informazioni;arrTesto)

se il campo [Testo]Informazioni è indicizzato per parola chiave (keyword index), DISTINCT VALUES popola l'array arrTesto con le singole parole che compongono i testi del campo [Testo]Informazioni.

È inoltre interessante notare che il comando lavora in modo coerente con la selezione. Con la leggera variante al codice precedente:

ALL RECORDS([Testo])
REDUCE SELECTION([Testo];1)
ARRAY STRING(80;arrTesto;0)
DISTINCT VALUES([Testo]Informazioni;arrTesto)

(aggiungendo REDUCE SELECTION) l'array viene popolato con le parole dell'unico record che rappresenta la selezione attuale.
Novita' Novita' [v11 - Conferenza] Uso di Project Form e DIALOG
I project form sono indipendenti dalla tabella:

  • è la posizione preferibile per tutte le maschere di dialogo indipendenti dai dati;
  • è possibile trascinare i form da una tabella all'altra o spostarli sotto i Project Form;
  • quando si cancella una tabella i relativi form automaticamente si spostano fra i Project form;

Il comando DIALOG adesso può ricevere come form anche una project form, che vengono passate al comando semplicemente col loro nome (senza il primo parametro che indica la tabella).

Novita' Novita' [v11 SQL] Il comando COMPONENT LIST
Il comando COMPONENT LIST, che prende come parametro un array, popola quest'ultimo con i nome dei components caricati dal database corrente.

Il comando può essere chiamato sia dal database principale che dai componenti stessi.

L'array viene riempito con i nomi completi dei file di riferimento (.4db, .4dc or .4dbase).

Se non sono presenti componenti, l'array viene restituito vuoto.

Novita' Novita' [v11 SQL] Come gestire i numeri di tabella e di campo
La possibilità di cancellare tabelle e campi pone un problema con la gestione di Count tables e Count fields, i comandi che permettevano di conoscere le dimensioni di riferimento nella struttura.

I due comandi sono stati adesso modificati in Get last table number e Get last field number, che permettono di conoscere gli ultimi numeri di tabella e di campo usati. Visto però che alcune tabelle o campi potrebbero essere stati cancellati, si dovranno usare anche i nuovi comandi Is table number valid e Is field number valid, che ritornano True se tabella o campo non sono stati cancellati.

Un ciclo completo sulla struttura diventa dunque:

For($thetable;1;Get last table number)
      If (Is table number valid($thetable))
           For($thefield;1;Get last field number($thetable))
           If(Is field number valid($thetable;$thefield))
           ... `il campo esiste ed è valido
           End if
           End for
      End if
End for

Novita' Novita' 4D 2004: Raggruppare i radio button
Nelle precedenti versioni di 4D i radio button all'interno dei form venivano raggruppati in base alla prima lettera del nome della variabile (m_button1, m_button2, m_button3, ecc.).

Essendo questo approccio in certi casi insufficiente, dalla versione 2004 è possibile utilizzare il comando Group nel menu Object del form per raggruppare i radio button indipendentemente dal nome.

Per ragioni di compatibilità è comunque possibile continuare ad utilizzare il vecchio metodo di raggruppamento selezionando il check box Radio buttons grouped by name nella pagina "Compatibility" della voce "Application" nelle Preferences di 4th Dimension.

Novita' Novita' 4D 2004: Deselezionare le righe di un subform
Se serve deselezionare le righe di un subform si possono utilizzare queste due possibilità:
- creare un set vuoto e utilizzare HIGHLIGHT RECORDS col set creato se il tipo di selezione del subform è "Multiple";
- usare GOTO SELECTED RECORD([Nome_Tabella_Subform];0) se il tipo di selezione del subform è "Single".

Novita' Novita' 4D 2004: Selezionare le righe di un subform
Con la versione 2004 di 4D è possibile controllare le righe da selezionare all'interno di un subform. Ciò è possibile grazie alle nuove funzionalità del comando HIGHLIGHT RECORDS: tale comando fin dalla versione 6.5, permetteva di selezionare i record di un set; adesso è in più possibile specificare la tabella da considerare e se abilitare o meno lo scroll automatico. La sintassi è dunque:

HIGHLIGHT RECORDS ({table}{; setName{; *}})

Tutto questo vale se nel suform è abilitata l'opzione di selezione è multipla: se la selezione è singola si deve usare invece GOTO SELECTED RECORD.

Novita' Novita' 4D 2004.3 - Il comando SET SCROLLBAR VISIBLE
Nelle prime versioni della 2004, era presente il comando SHOW LISTBOX SCROLLBAR che permetteva di visualizzare le barre di scorrimento per le listbox.

Dalla versione 2004.3 questo comando è stato rimpiazzato dal più potente SET SCROLLBAR VISIBLE, che dal capitolo List Box" è stato spostato in quello "Object Properties"; questo comando può adesso essere utilizzato, oltre che sulle List box, anche su Scrollable area e Subform.

Novita' Novita' 4D 2004 - Proprietà delle ListBox: Number of Static Columns
Fra le proprietà delle ListBox, quella denominata Number of Static Columns permette di impostare il numero di colonne, a partire dalla prima e comprese quelle nascoste, che non possono essere mosse in modalità User/Custom.
Quindi per impedire che le colonne vengano mosse, basta impostare questo parametro sullo stesso numero impostato su Number of Columns.

Novita' Novita' 4D 2004: la variabile associata ad una listbox
La variabile associata ad un oggetto list box può essere utilizzata per impostare o ottenere la selezione di righe della ListBox stessa.

La variabile è infatti un array di tipo Boolean creato e mantenuto da 4th Dimension. La dimensione dell'array è determinata dalla listbox: conterrà infatti lo stesso numero di elementi del più piccolo fra gli array associati alle colonne.

Ogni elemento dell'array è impostato su True se la corrispondente linea è selezionata, False altrimenti. 4th Dimension aggiorna automaticamente il contenuto dell'array in base alle azioni dell'utente. D'altra parte, è possibile modificare il valore degli elementi dell'array in modo da modificare la selezione nella listbox.

Questo frammento di codice, ad esempio, inverte la selezione del primo elemento della listbox lbElenco:

If (lbElenco{1} = True)
      lbElenco{1}:= False
Else
      lbElenco{1}:= True
End if


Quindi questo array non è modificabile in dimensione o in tipo.


Novita' Novita' 4D 2004 - Spostamento automatico degli oggetti
Disegnando un form, è stato sempre possibile spostare gli oggetti di 10 punti nelle varie direzioni usando insieme alle frecce il maiuscolo.

Dalla versione 2004, fra le preferenze (in "Preferences - Design Mode - Form Editor"), è stata inserita la possibilità di modificare il numero di punti per questo tipo di spostamento ("Step using keyboard").

Novita' Novita' Customizer e 2004: dimensione della finestra di avvio
Con la versione 2004 le funzionalità del Customizer Plus sono state integrate in 4th Dimension. Una opzione che è "scomparsa" è quella riguardante la dimensione della finestra di avvio (nelle "Preferences" si può scegliere solo se mostrarla o no).
A ciò si può facilmente ovviare da linguaggio di programmazione: ad esempio, se usavamo una dimensione costante per la finestra di avvio, basta eseguire

SET WINDOW RECT(left;top;right;bottom)

nello Startup method per ottenere lo stesso risultato.

Novita' Novita' Generare il metodo che crea un Report
Nell'ultima pagina del wizard del Quick Report della 2004 l'ultimo pulsante di opzione, Build 4D Code permette di generare il codice corrispondente al report appena definito e di incollarlo negli Appunti.

Questa funzione è molto utile perché permette di modificare via linguaggio un report

Build 4D Code è disponibile solo in ambiente User

Novita' Novita' Ottenere l'elenco degli oggetti di un form
Il nuovo comando della versione 2004 GET FORM OBJECTS permette di popolare tre array (passati come parametro) che elencano gli oggetti presenti in un certo form. Ciò risulta molto utile se l'aspetto del form deve essere gestito in modo dinamico. La sintassi è del tipo:

GET FORM OBJECTS($arrOggetti_at;$arrVariabili_aptr;$arrPagine_ai)

dove i tre array contengono i nomi degli oggetti, i relativi puntatori ad essi e il numero di pagina in cui si trovano. Una seconda sintassi prevede l'aggiunta del parametro "*" che forza la restituzione degli oggetti relativi alla sola pagina corrente del form.
Novita' Novita' Il comando DISPLAY NOTIFICATION
Il comando (della 2004) DISPLAY NOTIFICATION permette, sotto Windows, di visualizzare un messaggio nella barra delle applicazioni, per intenderci accanto all'orologio!
Ecco una immagine esplicativa proveniente dal sito 4D:



La sintassi è:

DISPLAY NOTIFICATION (title; text{; duration})

dove title è il titolo della notifica (la parte in grassetto), text il testo del messaggio e, opzionalmente, duration è la durata del messaggio.
Novita' Novita' 4D 2004: il pulsante Done di default
Una caratteristica delle versioni precedenti di 4th Dimension era l'aggiunta in automatico di un pulsante di chiusura del form ("Done") nel caso in cui il form stesso non contenesse altri pulsanti.

A partire dalla versione 2004 questo pulsante non viene più aggiunto automaticamente: quindi l'unico modo per chiudere la finestra diventa quello di utilizzare la combinazione di uscita impostata ("Escape"), ad esempio su Windos Ctrl+"." e su Mac Command+"."
Novita' Novita' I cambiamenti del form event On Display Detail
Fino alla versione 2003, l'evento On Display Detail veniva eseguito per i soli record visualizzati, non per tutto il form: per capirci, se ho un form può contenere 15 record ma da mostrare ne ha solo 4, il codice inserito per l'evento On Display Detail verrà eseguito solo 4 volte.
Invece, a partire dalla versione 2004, On Display Detail si comporta diversamente: infatti, nell'esempio visto, il codice verrebbe eseguito comunque 15 volte, anche se i record mostrati sono solo 4.

Ecco una esemplificativa modifica ad una porzione di codice del manuale di upgrade alla 2004. Si noti anche l'uso del comando Displayed line number, che ritorna il numero di riga visualizzata:

If (Form event=On Display Detail)
    If (Displayed line number %2=0) 'riga pari
        If (Record number([Tabella1])>-1) 'esiste un record sulla riga
        'testo nero su verde chiaro
           SET RGB COLORS([Tabella1]Campo1;0;0x009FFF89)
        Else 'il record non esiste
           'testo nero su azzurro
           SET RGB COLORS([Tabella1]Campo1;0;0x00A1FFFF)
        End if
    Else 'riga dispari
        If (Record number([Tabella1])>-1)
           'nero su verde
           SET RGB COLORS([Tabella1]Campo1;0;0xAA99)
        Else
           'blu scuro
           SET RGB COLORS([Tabella1]Campo1;0;0x70FF)
        End if
    End if
End if

Le righe contenenti un record sono o verde scuro o verde chiaro, le righe senza record sono azzurre o blu.
Novita' Novita' 4D 2004: accesso alla cartella delle Licenze
Se l'attivazione del prodotto 4D è andata a buon fine, il file di licenza dell'applicazione è posizionato nella cartella Licenses.
Tutti gli altri prodotti 4D attivati e i prodotti aggiuntivi (Expansion) avranno i loro file di licenza nella stessa cartella.

Questa cartella Licenses può essere trovata in questi percorsi:
Windows: Documents and Settings\All Users\Application Data\4D\Licenses
Macintosh: Library:Application Support:4D:Licenses

Per trovarla direttamente da 4D basta andare nelle finestre di “Update License” e di “About 4D”, dove c'è un pulsante “Licenses Folder” che aprirà una nuova finestra della cartella Licenses.

(Fonte: Tech Tips #33938)
Novita' Novita' 4D 2004: i file per l'help in linea
Nelle versioni precedenti di 4D in cui era previsto un help in linea direttamente da method editor per il programmatore, il file 4D Help (MacOS) o 4D Help.rsr (Windows) doveva essere posto nella cartella di sistema di 4D (per i ragguagli sull'argomento si può consultare questa faq).

Per semplificare gli aggiornamenti, con la nuova versione di 4th Dimension il file si chiama adesso 4D Syntax.rsr su entrambe le piattaforme e deve essere inserito nella cartella 4D Extensions della applicazione 4D.
Novita' Novita' 4D 2004: i form event delle List box
Con l'avvento delle List box hanno fatto la loro comparsa sette nuovi form event:
- On Before Data Entry: generato prima che il cursore venga mostrato in una cella;
- On Selection Change: generato ogni volta che viene cambiato l'insieme delle righe selezionate (l'evento è valido anche per le liste di record e le gerarchiche);
- On Column Moved: generato quando una colonna viene spostata (e il comando MOVED LISTBOX COLUMN NUMBER restituisce la nuova posizione);
- On Row Moved: lo stesso ma per le righe (e il comando correlato è MOVED LISTBOX ROW NUMBER);
- On Column Resize: generato quando di una colonna viene modificata la larghezza (o col mause o col comando SET LISTBOX COLUMN WIDTH);
- On Header Click: generato quando si clicca sull'intestazione della colonna (è ciò può anche generare l'ordinamento della stessa);
- On After Sort: generato dopo un ordinamento.

Inoltre un evento On Clicked viene generato ogni volta che si clicca su un elemento della list box o sull'intestazione col tasto di destra (Ctrl+clic su MacOs).
Novita' Novita' 4D 2004: introduzione all'uso delle ListBox
Le "List box" possono essere definite come la naturale e attesa evoluzione delle "Scrollable area" raggruppate o, dall'altra parte, l'inglobamento nella versione standard di 4th Dimension di alcune caratteristiche presenti in 4D View.
Fino ad oggi, infatti, i sistemi per mostrare a video il contenuto di un array erano due: o avere delle scrollable area, ognuna chiamata come l'array da mostrare, che dovevano poi essere raggruppate in modo da poter scorrere gli array in maniera "sincronizzata" con un'unica barra di scorrimento, con però le limitazioni create da questo approccio (ad eempio, per avere delle linee orizzontali queste dovevano essere disegnate manualmente e aggiornate per esempio con un timer in modo da non essere nascoste, oppure inserire un bottone invisibile sugli array raggruppati per impedire il clic), oppure usare 4DView in maniera da personalizzare notevolmente l'interfaccia, usando però uno strumento a pagamento potentissimo per una cosa relativamente semplice.

Le List box consentono adesso di avere dei dati raggruppati come le scrollable area, ma con funzioni aggiuntive, tipo l'inserimento di valori, ordinamenti, alternanza di colori, ecc.
Le proprietà delle List box sono settabili sia via Form editor che direttamente la linguaggio di programmazione, da dove quindi è facile ad esempio aggiungere, togliere o scambiare array visualizzati.

Ecco un elenco dei nuovi comandi del linguaggio di programmazione:
INSERT LISTBOX COLUMN
DELETE LISTBOX COLUMN
Get number of listbox columns
SORT LISTBOX COLUMNS
SET LISTBOX COLUMN WIDTH
Get listbox column width
SELECT LISTBOX ROW
INSERT LISTBOX ROW
DELETE LISTBOX ROW
Get number of listbox rows
SET LISTBOX ROWS HEIGHT
Get listbox rows height
MOVED LISTBOX ROW NUMBER
GET LISTBOX ARRAYS
Get listbox information
SHOW LISTBOX GRID
SET LISTBOX GRID COLOR
SHOW LISTBOX SCROLLBAR
MOVED LISTBOX COLUMN NUMBER
Novita' Novita' 4D 2004: Impostare le opzioni di stampa in 4D Write
Seguendo l'esempio dato dal comando SET PRINT OPTION dalla versione 2003, adesso anche 4D Write permette di settare da linguaggio di programmazione le impostazioni di stampa usando il comando WR SET PRINT OPTION. La sintassi del comando è:

WR SET PRINT OPTION (area; option; value1{; value2{; value3}})

dove area è l'area di 4DWrite, option è l'opzione da settare e i valori value1, value2 e value3 sono i valori che possono essere assegnati ad option.

Le costanti utilizzabili nel parametro option ricalcano molto da vicino le costanti del già citato comando SET PRINT OPTION; in aggiunta notiamo però la presenza delle due costanti wr pages from option e wr pages to option, che permettono di definire da quale pagina a quale pagina effettuare la stampa.
Novita' Novita' 4D 2004: creare un nuovo elemento in un array
Per aggiungere un elemento ad un array, siamo sempre stati abituati nei nostri software 4D a scrivere:

INSERT ELEMENT($mioarray;Size of array($mioarray)+1)
$mioarray{Size of array($mioarray)}:=$ilvalore

Dalla versione 2004 di 4D tutto questo viene sostituito dall'unica istruzione APPEND TO ARRAY che accetta come parametri il nome dell'array e il valore che deve assumere l'elemento aggiunto all'array.
In modalità interprete, se l'array non esiste viene creato, in relazione al valore passato come parametro.
Il comando funziona con tutti i tipi di array.
Novita' Novita' 4D 2004: il comando GET SERIAL PORT MAPPING
Tramite questo comando è finalmente possibile avere due array con i nomi e i codici delle porte seriali attive, specialmente utile in situazioni dove è importante sapere quando si usano adattatori seriali sulle porte USB.
Novita' Novita' 4D 2004: 4D Server come servizio su Mac OS X
Adesso anche su Mac è diventato molto semplice eseguire 4D Server come servizio: basta scegliere nel menu File di 4D Server la voce Register Current Database as Service: la volta successiva che il server verrà avviato, 4D Server verrà lanciato automaticamente usando il database corrente.
Novita' Novita' 4D 2004: comandi da terminale
Avvio del programma (la & in fondo lo apre in un processo a parte):
/MiaCartella4D/4th\ Dimension.app/Contents/MacOS/4th\ Dimension &

Per avere l'elenco dei parametri possibili:
/MiaCartella4D/4th\ Dimension.app/Contents/MacOS/4th\ Dimension -h

Con una struttura:
/MiaCartella4D/4th\ Dimension.app/Contents/MacOS/4th\ Dimension /Users/umigliore/db/MioDB/MioDB.4DB

Con una struttura e una base dati:
/MiaCartella4D/4th\ Dimension.app/Contents/MacOS/4th\ Dimension -d /Users/umigliore/db/MioDB/MioDB.4DD /Users/umigliore/db/MioDB/MioDB.4DB

Con un nome utente e gruppo diversi:
/MiaCartella4D/4th\ Dimension.app/Contents/MacOS/4th\ Dimension -u umigliore -g admin

Chiudere il programma:
Kill -s INT numero_del_processo
Novita' Novita' 4D 2004: raggruppare i radio button
Una nuova caratteristica interessante nella fase di disegno di un form è la possibilità di raggruppare dei radio button semplicemente selezionandoli; uno degli aspetti più complicati dei radio button delle versioni precedenti di 4D era infatti rappresentato dal dover chiamare i radio button appartenenti allo stesso gruppo con un nome cominciante con la stessa lettera, il che comportava ovviamente anche una serie di limitazioni.

Adesso con 4th Dimension 2004 basta selezionare i radio button da raggruppare e scegliere Group nell'Object menu.

Convertendo i software da versioni precedenti può anche essere utile attivare o disattivare l'opzione delle Preferenze presente sotto la voce Application chiamata "Radio buttons grouped by name", per mantenere il vecchio metodo di raggruppamento.
Novita' Novita' 4D 2004: contare un certo elemento in un array
Fino alla versione 2003 di 4D per conoscere il numero delle volte in cui un valore compariva in esso era necessario sviluppare un algoritmo del tipo:

Contatore:=0
For (dimensione dell'array)
    If (valore i-esimo dell'array = valore cercato)
          Contatore:=Contatore+1
    End if
End for

Tutto questo viene adesso condensato nell'unica istruzione Count in array. Questo comando prende come parametri l'array in cui contare le occorrenze e il valore da cercare, restituendo un longint che rappresenta il numero di occorrenze del valore nell'array.
Novita' Novita' 4D 2004: gli oggetti Pulsanti
Le novità sono tante, tutte da provare giocando con il form editor:

Stili:
- Background Offset è lo stile 'ad incasso' dei 3D button nelle versioni precedenti
- Push, standard del sistema operativo
- Toolbar, per le toolbar :), su Windows si evidenzia passandoci sopra
- Circle, per avere i pulsanti tondi su Mac
- Small System Square, per avere i pulsanti piccoli su Mac
- Office XP, colori che si adattano al sistema, su Windows si evidenzia passandoci sopra
- Bevel, come il Toolbar, ma con il triangolino del menu in basso a destra
- Rounded Bevel, come sopra con gli angoli arrotondati su Mac
- Custom, personalizzabile nelle immagini e posizionamenti di icone e scritta

Icone:
- le si possono aggiungere a qualsiasi degli stili sopra
- icona e testo si possono allineare a sinistra, destra, sopra, sotto e al centro

Pop-up menu
- lo si può aggiungere ad alcuni stili sopra, sia attaccato che separato da un righino con diversi effetti in funzione dello stile

Valore
I pulsanti storicamente corrispondevano a variabili Intere, ma ora è possibile scegliere il valore Booleano, quindi la variabile è True (vero) se il pulsante è premuto o selezionato.

Gruppi
I pulsanti di selezione (radio buttons) ora si comportano (la selezione di uno deseleziona gli altri) controllando il gruppo a cui appartengono e non più soltanto per il loro nome.

Eventi
Ci sono due nuovi eventi:
- On long Click segnala che il mouse è stato premuto per un certo tempo
- On Arrow Click segnala che è stato premuto il pusantino del menu a comparsa utile se il pop-up menu è tenuto separato
Novita' Novita' 4D 2004: Convertire in Base64 e viceversa
Con la versione di 4D 2004 sono presenti due comandi che permettono di convertire un blob di dati ( e quindi non solo un testo) in Base64 e viceversa.

I comandi sono:
ENCODE(blob_blb)
DECODE(blob_blb)

Attenzione che questi non verificano il contenuto del blob.
Novita' Novita' 4D 2004: Stampa sul server
E' finalmente possibile stampare dal server, ad esempio per produrre PDF. I comandi di stampa erano disabilitati specialmente per evitare che sul server di solito non usato da nessun utente apparissero eventuali messaggi di problemi sulla stampante (queste non genereranno errori nella 2004!)

Ora funzionano i comandi Print Record, Print Selection, Print form, Set Print Option, Print Label, QR Report; ovviamente dove è possibile è necessario chiamarli con il parametro * per evitare le finestre di dialogo.

Accesso

User:
Pass: Accedi

Cerca

Se non trovi le informazioni che cerchi scrivi a aiuto@sviluppo4d.it

4D Principali

4D Discussioni

Faq random


Crediti

Dominio registrato da ZetaNet
Sito realizzato da Nexus srl
4D SQL 11.9.0 offerto da 4D & Italsoftware
Icone di FAMFAMFAM
Moderato da Umberto Migliore
328 utenti registrati

Pagina servita il 06/11/24 alle 00:39:05 Valid HTML 4.01! Valid CSS!

Mutuo Facile, iDigitalScout, iDigitalTags e altre app di Nexid srl per iPhone e iPad

Cidroid, distributore italiano lettori barcode per IOS Apple iPhone, iPod, iPad