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

Sviluppatori 4D

Utility 4D

Risorse 4D



4d logo
Naviga:

Faq

Ho trovato 26 faq.

Categoria Argomento Commenti
Web Web Header di risposta da Web
Quando si usa 4D come Web server, normalmente si risponde con le normali pagine come richieste dall'utente con un leader di default (= 200)

Quando invece bisogna rispondere con una pagina che non è quella richiesta, la cosa migliore per rispondere ai casi eccezionali sarebbe quella di mettere il corretto header.

Ad esempio, se l'url non è riconosciuto puoi mandare l'utente alla pagina che vuoi, dovresti impostare questo header

ARRAY TEXT($atHeaders;2)
ARRAY TEXT($atValues;2)
$atHeaders{1}:="X-VERSION"
$atValues{1}:="HTTP/1.1"
$atHeaders{2}:="X-STATUS"
$atValues{2}:="404 Not Found"
WEB SET HTTP HEADER($atHeaders;$atValues)
WEB SEND FILE("pagina_errore.html")

Un altro header utile:
"302 Moved Temporarily" (equivalente al redirect) cfr http://www.sviluppo4d.it/Detail_Faq_Display?ID=632&title=Alternativa+al+comando+SEND+HTTP+REDIRECT

Per una funzione non disponibile si dovrebbe usare:
"501 Not implemented"

Da notare che usualmente si vedono due tipi di errore gestiti automaticamente da 4D Web Server:
"500 Internal server error" : il codice ha incontrato una condizione non prevista, di solito errore puro
"503 Service Unavailable" : hai superato il numero di richieste contemporanee accettate ( di solito legato ad un parametro di configurazione )

Qui l'elenco ufficiale:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
Web Web Dichiarazione delle variabili per i metodi web services
Quando si decide di rendere fruibile un metodo via web service server è bene creare manualmente il metodo COMPILER_WEB.

Questo metodo (che a differenza degli altri metodi COMPILER non viene creato automaticamente) si occupa in sostanza di dichiarare le variabili che vengono passate come parametro al metodo chiamato dal client web service.

Ciò risulta obbligatorio quando il parametro passato come SOAP input è un array: in tal caso infatti nel metodo COMPILER_WEB l'array viene dichiarato con dimensione 0, ma nel metodo chiamato come web service l'array avrà la dimensione corretta in funzione degli elementi che aveva sul client web.
Web Web Accedere a un sito su una macchina locale - Apple MacOSX
Dopo l'esempio per Windows, vediamo come modificare il file hosts su Mac per rendere accessibile da rete interna un sito web come se ci trovassimo all'esterno della rete stessa.

Individuare il file:
/etc/hosts

e inserire la seguente riga:
192.168.1.1 www.sviluppo4d.it

dove l'ip è quello interno del web server.

Individuare poi il file:
/etc/host.conf

che si occupa del lookup e che deve contenere la riga:
order hosts,bind

Infine, nel file:
/etc/nsswitch.conf

inserire la riga:
hosts: files nisplus nis dns
Web Web Accedere a un sito su una macchina locale - Microsoft Windows
Per poter consultare un sito installato all'interno della propria rete come se ci trovassimo all'esterno è necessario modificare il file "hosts" della nostra macchina. Vediamo la soluzione per PC.

Individuare il file hosts nei percorsi seguenti:

Windows 95/98/Me c:\windows\hosts
Windows NT/2000/XP Pro c:\winnt\system32\drivers\etc\hosts
Windows XP Home c:\windows\system32\drivers\etc\hosts

e inserire la seguente riga:

192.168.1.1 www.sviluppo4d.it

dove l'ip è quello interno del web server.
Web Web Creare un sito per Apple iPhone - Riconoscere il browser Safari
Se si desidera creare un versione del sito ottimizzato per iPhone è importante intanto riconoscere che il navigante sia su un iPhone.
Siccome ogni browser è riconoscibile tramite il suo User Agent (un testo che lo identifica univocamente), se il collegamento avviene tramite iPhone lo User Agent sarà simile (ovviamente cambieranno i numeri di versione nel tempo):

Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/4A93 Safari/419.3


che è diverso dallo User Agent del Safari installato ad esempio su un Apple MacOSX 10.5 o su un Microsoft Windows XP, e perfino da quello installato su un iPod Touch!

Quindi nel codice della On Web Connection si potrà scrivere così, presupponendo di avere la versione delle pagine per iphone in un'apposita cartella:

wbUrl:=$1
If ((position("iPhone";wbUrl)>0) | (position("iPod";wbUrl)>0))
  percorso_s:="iphone/"
Else
  percorso_s:=""
End if

`.. qui la gestione normale

SEND HTML FILE(percorso_s+"pagina.html")
Web Web Inviare immagini dinamiche in una pagina html
Per caricare una immagine dinamica, cioè inviata da 4d in funzione di alcuni parametri o calcoli, in una pagina web occorre inserire un tag del tipo:

<img src="/4DACTION/webImmagine?parametro=<!--#4dvar vParametroEsempio-->" alt=""/>

Il metodo webImmagine (che deve essere impostato nelle proprietà come disponibile a 4DAction) contiene un codice simile:

... `qui il codice elabora l'immagine usando il parametro passato
$immagine:=CT Area to picture (AreaVirt;-2)
PICTURE TO GIF($immagine; $mioBlob)
SEND HTML BLOB($mioBlob;"image/gif")

Con il formato GIF si mantiene meglio la grafica di un'immagine creata con Chart e contenente testo e grafici lineari.

Alternativamente, se l'immagine è ad esempio un disegno o una foto potrebbe essere meglio utilizzare il formato Jpeg; allora il codice sarebbe il seguente:

... `qui sempre usando il parametro passato il codice recupera un'immagine da disco
$percorso:="Hd:Immagini:"+vParametroEsempio
READ PICTURE FILE($percorso;$Immagine)
PICTURE TO BLOB($Immagine;$mioBlob;"JPEG")
SEND HTML BLOB($mioBlob;"image/jpeg")

(grazie ai contributi di Sandro Bonin e Giuseppe Scarafoni)
Web Web Aprire un documento XML
Per aprire un documento XML da processare il comando da utilizzare è
Parse XML source (per la 2004 DOM Parse XML source).

La sintassi è:

Parse XML source (document{; validation{; dtd}})

dove document è il percorso al file, validation è un booleano che controlla se il documento rispetta o no le specifiche DTD (Document Type Declaration, una serie di regole che un documento XML deve rispettare) e il percorso dove è memorizzato il file di validazione.

Stesso principio usano i comandi Parse XML variable (DOM Parse XML variable per la 2004), ma su variabili testo o blob.

Il comando resistuisce una stringa da utilizzare come riferimento al documento.

Web Web 4DScript e il limite dei 32K
Con il tag 4dscript puoi inserire in una pagina html il contenuto della variabile testo ritornata in $0.

Come fare se si vuole mandare più di 32K di testo?

Bisogna usareun 4DHTMLVAR dopo il 4DSCRIPT.

Per esempio:
<!--#4DSCRIPT/MioMetodoGetHTML/Mio_blob-->
<!--4DHTMLVAR Mio_blob-->
Nel metodo "MioMetodoGetHTML" Method, potresti ottenere il puntatore alla variabile blob passata in $1.
Se il puntatore è valido puoi riempire il Blob con fino a 2GB di dati (troppi per una pagina Html, cerca di metterne di meno :)
Successivamente i dati verranno mostrati dalla successiva 4DHTMLVAR.
Web Web Tag HTML nidificati
Spesso può essere necessario nidificare i tag HTML. Ad esempio:

<input type ="text" name="varName" value = "<!--4DVAR [Table]Field-->">

è un esempio interessante poiché il tag nifificato è inserito all'interno delle virgolette. Poiché però le specifiche HTML non permettono di inserire tag all'interno di altri, per specificare se un check box è attivo NON si può scrivere:

<input type="checkbox" name="cbOne" value="Yes" <!--4DHTMLVAR isChecked-->>

dove la variabile isChecked ha il valore "checked".

Ovviamente, in casi come questo, si può usare un semplice stratagemma:

<!--4DIf (isChecked="checked")-->
<input type="checkbox" name="cbOne" value="Yes" checked>
<!--4DElse-->
<input type="checkbox" name="cbOne" value="Yes">
<!--4DENDIF-->

Web Web Un javascript per i valori di default
Se sviluppo siti internet che gesticono form di input ho due possibilità di gestire i valori di default.
Uno è quello di riempire i campi col valore che mi attendo più frequentemente (ad esempio per il campo nazione potrebbe essere Italia) senza però essere certo che l'utente, in fase di inserimento, non abbia sbagliato a non modificare quel valore.

Il secondo è assai più raffinato, e prevede l'uso di uno script in java per controllare dinamicamente l'inserimento dei dati, prima che questi vengano poi processati e controllati da 4D al "Submit" del form. Per il nostro esempio riguardante la nazione:

<input
type="text"
name="newcountry"
size="30"
maxlength="40"
value="«Inserisci la nazione»"
onFocus="If (this.value=='«Inserisci la nazione»'){this.value=''}" onBlur="if(this.value==''){this.value='«Inserisci la nazione»'}">

In questo modo, nell'evento onFocus, se l'oggetto ha ancora il valore di default, lo cancello per permettere l'inserimento.
Se non viene inserito nulla, inserisco nuovamente il valore di default.


Fonte: 4DToday
Web Web Scrivere i robots per i siti dinamici in 4D [3/3]
In aggiunta all'uso del meta tag ROBOTS che abbiamo visto si può inoltre utilizzare un secondo meta tag il "revisit-after". La sintassi è del tipo:

<META NAME="revisit-after" content="nnnn days">

dove nnnn indica il numero di giorni che il motore di ricerca deve attendere per rivisitare la pagina. Ora, essendo il nostro sito completamente dinamico, fare rivisitare tutte le pagine non avrebbe senso, il motore di ricerca penserebbe che le pagine del sito non sono permanenti e lo declasserebbe.

La soluzione diventa allora inserire sulla prima pagina del sito un valore di nnnn molto basso, ad esempio 2, per fare in modo che la prima pagina venga rivisitata spesso (e con essa, di conseguenza tutto il sito, poiché sulla prima pagina abbiamo scritto il nostro robot "index,follow"), e in tutte le altre un valore altissimo, tipo 1000 o 2000, per evitare che queste vengano rivisitate con richiesta diretta da parte del motore di ricerca.
Web Web Scrivere i robots per i siti dinamici in 4D [2/3]
Supponiamo di avere un sito che raccolga link e materiale su alcuni degli argomenti informatici più ricercati su Internet: computers, database software, database design, Oracle, Access, 4Th Dimension, ecc...

Date le parole chiave, per essere da motore di ricerca mi interessa che la prima pagina e ogni pagina di dettaglio sia indicizzata, ma nelle pagine successive ci sono ancora link uguali a quelli della prima pagina: senza i Robots il sito verrebbe visitato dal motore di ricerca all'infinito.
Invece decidiamo di usarli! La sintassi è:

<META NAME =ROBOTS CONTENT="all | none | index | noindex | follow | nofollow">

Alcuni esempi:

<meta name="robots" content="index,follow">
<meta name="robots" content="noindex,follow">
<meta name="robots" content="index,nofollow">
<meta name="robots" content="noindex,nofollow">

dove:
- follow o nofollow indicano allo snake di visitare o no tutti i link della pagina.
- index o noindex indicano allo snake di indicizzare o meno la pagina.

La soluzione diventa semplice: alle pagine in testa all'albero di visita darò un meta tag di tipo "index,follow", a quelli che contengono notizie o risorse assignerò un "index,nofollow".
Web Web Scrivere i robots per i siti dinamici in 4D [1/3]
Come richiesto ad Umberto Migliore durante il corso web spiego come abbiamo risolto per Sviluppo4D.it il problema delle visite dei motori di ricerca.

Il motore di ricerca, per creare l'indice delle pagine lancia un programma detto "snake" che, a partire dalla pagina iniziale, si preoccupa di visitare tutti i link del sito.
Molti programmatori avranno però notato che gli snake di Google o Msn, nel cercare di tracciare tutto il sito dinamico costruito con 4D, in realtà continuano a girare sempre sulle stesse pagine, innalzando così il numero di richieste in maniera esagerata: quando Sviluppo4D conteneva ancora poche informazioni ho notato picchi di 250 visite contemporanee!

Questo è dovuto al fatto che, come avrà notato il programmatore che si è guardato il sorgente del sito, per riconoscere gli utenti, 4D genera una "Session", diversa per ogni visita (guardate l'URL che avete in questo momento sulla barra dell'indirizzo). Questa sessione però, in breve lasso di tempo, viene cancellata, il che significa che alla prossima visita del motore di ricerca, quella pagina per lo snake non esisterà più, e ricomincerà da capo a visitare il sito.
La soluzione adottata per problema è stata semplice ed efficace: utilizzare i meta tag "ROBOTS".
Web Web Usare i metodi con 4DIF
Supponiamo di avere un metodo che ritorni una stringa, e di volerlo utilizzare in un tag 4DIF per controllare se il metodo ritorna una stringa vuota. Penseremmo di scrivere:

<!--4DIf (Il_metodo="")-->

Pur essendo Il_metodo un prokect method corretto che ritorna una stringa, 4D ritornerà un errore del tipo:

:A Boolean argument was expected

Il problema è che bisogna aiutare 4th Dimension a valutare l'espressione, e lo si fa aggiungendo una coppia di parentesi alla chiamata del metodo, in questo modo:

<!--4DIf (Il_metodo()="")-->

Ciò segnala a 4D che Il_metodo è un metodo.
Web Web La sintassi di 4DIF
La documentazione di 4th Dimension specifica che la sintassi di 4DIF richiede l'uso delle parentesi, quindi:

<!--4DIf (qualsiasivariabile=True)-->

4DIF potrebbe essere usato anche senza parentesi, ma meglio usarle, anche perché, ad esempio, il plug-in per Dreamweaver richiede l'uso delle parentesi perché il tag venga correttamente valutato.

Inoltre è bene sottolineare che, insieme alle parentesi, la sintassi richiede uno spazio tra il tag e la parentesi; infatti se si usa:

<!--#4DIF(qualsiasivariabile=True)-->

4D non valuterà correttamente il 4DIF.

Web Web Nidificazione dei tag 4D e HTML
Spesso può risultare necessario usare i tag 4D all'interno di altri tag HTML.
Analizziamo questo esempio:

<input type ="text" name="varName" value = "<!--#4DVAR [Table]Field-->">

Si noti l'uso del tag 4D all'interno delle virgolette. Ciò non crea problemi.
Infatti, le specifiche HTML impediscono l'uso di tag nidificati. Se scriviamo:

<input type="checkbox" name="cbOne" value="Yes" <!--#4dhtmlvar isChecked-->>

l'editor HTML (che sia Dreamweaver o GoLive) potrebbe ritornare un warning o un errore. Per aggirare l'ostacolo siamo costretti a riscrivere il codice così:

<!--#4DIF(isChecked="CHECKED")-->
<input type="checkbox" name="cbOne" value="Yes" CHECKED>
<!--#4DElse-->
<input type="checkbox" name="cbOne" value="Yes">
<!--#4DENDIF-->
Web Web Quando viene eseguito il database method On Web Authentication
Se usato, il metodo On Web Authentication viene richiamato nelle seguenti circostanze:

- quando 4D riceve un URL che comincia con 4DACTION/

- quando 4D riceve un URL che comincia con 4DMETHOD/

- quando 4D riceve un URL che comincia con 4DCGI/

- quando 4D riceve la richiesta per una pagina statica che non esiste

- quando 4D processa una richiesta con un tag 4DSCRIPT in una pagina semidinamica

- quando 4D processa una richiesta con un tag 4DLOOP seguito da un metodo in una pagina semidinamica (solo la prima chiamata )

- quando 4D riceve una richiesta SOAP

Web Web Seleziona un elemento in una lista Html
Ecco il testo con i tag da scrivere in Html per far sì che in una lista sia selezionato un elemento particolare.

Il codice sfrutta un generico Array di testo che contiene le varie opzioni e il contenuto in una variabile "sceltaProposta"

<SELECT NAME="Lista">
<!--4DLOOP Array-->
<!--4DIf (sceltaProposta=Array{Array})-->
<OPTION VALUE="<!--4DVAR Array{Array}-->" selected><!--4DVAR Array{Array}--></OPTION>
<!--4DElse-->
<OPTION VALUE="<!--4DVAR Array{Array}-->"><!--4DVAR Array{Array}--></OPTION>
<!--4DENDIF-->
<!--4DENDLOOP-->
</SELECT>
Web Web Cambio dinamico della porta web
Il numero della porta TCP usata da 4D può essere modificato da linguaggio utilizzando il comando SET DATABASE PARAMETER utilizzando il parametro 15 (corrispondente alla costante Port ID). Per fare in modo che 4D usi la porta 8080 si userà:

SET DATABASE PARAMETER(15;8080)

o

SET DATABASE PARAMETER(Port ID;8080)

Web Web Riconoscere la lingua dell'utente
Il sistema più semplice e affidabile è quello di dare all'utente la lingua con cui lui si imposta il browser.. così accontenti anche l'utente che si trova in italia, ma parla (o meglio legge) inglese.

L'informazioni la trovi facilmente nell'header che ti invia il browser.

Ecco un esempio di codice:

GET HTTP HEADER(array_nomi;array_valori)
$elem:=find in array(array_nomi;"Accept-language")
$codice:=array_valori{$elem}

La variabile codice conterrà una stringa del tipo "it, us.." dove sono elencate le lingue in ordine di preferenza.
Web Web Modificare la barra di stato nei siti dinamici
Se devo creare (o programmare, o sviluppare, o mantenere) un sito dinamico con 4th Dimension, capita che i collegamenti all'interno della pagina non siano "diretti", ma siano in realtà dei "redirect" che 4D esegue al momento del clic, vedi ad esempio lo stesso webhome.

Ovviamente non è carino che il link venga visualizzato sulla barra di stato del browser con la sintassi del redirect di 4D.

Si può fare allora in modo che, al passare del mouse sul collegamento, la barra di stato visualizzi l'indirizzo che verrà poi realmente visitato. Basta usare nella zona dell'html con l'"a href" che segnala il link questo attributo:

onMouseOver="return stat('INDIRIZZO')"
Web Web Comunicazione con Macromedia Flash
Ecco un esempio di Action Script per un pulsante in Flash che invia dei dati a 4D:

on (release) {
loadVariables ("http://www.sviluppo4d.it/4DCGI/web_esempio", _root, "POST");
}

"loadVariables" è una funzione Flash che chiama l'URL indicato. Modificando la funzione "loadVariables" nella palette Object Action, vedrai che ci sono delle scelte: "Send using POST" e "Send using GET". Così puoi inviare le variabili Flash a 4D, che da 4D leggi usando GET WEB FORM VARIABLES come se i dati venissero da una pagina HTML.

Per rimandare dei dati a Flash, puoi rispondere con una chiamata semplice del tipo:

SEND HTML TEXT("success=1&message="QUESTO VIENE DA 4D")

dove "success" e "message" saranno delle variabili in Flash. La chiamata "loadVariables" leggerà la risposta e invierà le informazioni alle variabili Flash.
Web Web 4D Portal: un'introduzione
Uno degli applicativi sviluppati con 4th Dimension dalla 4D, Inc di maggiore interesse è senz'altro 4D Portal.

Questo software mostra le capacità di 4D nel gestire contenuti web di vario genere, come forum, sondaggi, aste, chat, blog, calendari, scadenze, appuntamenti, cartoline, siti web preferiti, e così via. Si utilizza direttamente come server, oppure si interfaccia in maniera nativa con 4D Webstar, o usando 4DLINK oppure con un proxy (cioè lo si può tenere su una macchina in locale e su webstar si imposta l'indirizzo locale cui fare riferimento ad una determinata richiesta di dominio).

Il costo di 4D Portal è ZERO, nel senso che è un programma free: si installa ed è già tutto disponibile (non è richiesto alcun plugin aggiuntivo, anche le licenze Web sono incluse!). E' possibile configurare anche più portali contemporaneamente.

E' però anche un utile strumento didattico, poiché è disponibile il sorgente, consultabile e modificabile. Se però lo si modifica è poi necessario acquistare una licenza web.

Sia il freeware che il sorgente sono scaricabili dal sito di 4d portal stesso.
Web Web Servire le pagine web inesistenti con 4D
La parte web di 4D permette di servire o pagine fisiche o pagine generate da codice. Se non è possibile soddisfare la richiesta, 4D invia un mesaggio standard di pagina non trovata al browser.
È però possibile modificare questa pagina aggiungendo una risorsa alla struttura nella maniera che segue:
- aprire 4D su Mac con un editor di risorse;
- copiare la risorsa Html numero 45 nella struttura;
- copiare il contenuto della risorsa in un editor html o un editor di testo per effettuare le modifiche;
- copiare di nuovo l'HTML modificato nella risorsa.

A questo punto la pagina servita per le pagine non trovate sarà quella da noi modificata.

1
Web Web 4D come WebServer: Tag HTML
Usando 4D come webserver si possono costruire pagine semi-dinamiche utilizzando alcuni tag riservati, che hanno il seguente formato (che rappresenta un commento in Html):
<--4DVAR variabile--> : viene sostituito dal valore della variabile
<--4DVAR campo--> : viene sostituito dal contenuto del campo
<--4DVAR espressione--> : viene sostituito dal valore calcolato
<--4DVAR metodo--> : viene sostituito dal risultato del metodo
<--4DHTMLVAR variabile--> : come sopra, ma il testo viene considerato da elaborare come Html
<--4DINCLUDE /percorso/esempio.html--> : viene sostituito dalla pagina indicata
<--4DIf (condizione)--> : le righe successive prima dell'endif o dell'Else vengono incluse solo se la condizione è vera
<--4DElse--> : se la condizione sopra è falsa vengono incluse le righe successive fino al prossimo endif
<--4DENDIF--> : chiude la condizione
<--4DSCRIPT/metodo/parametro--> : viene sostituito dal risultato del metodo prima di continuare; al metodo viene passato in $1 il "parametro"
<--4DLOOP [Tabella]--> : fa un ciclo sulla selezione corrente della tabella
<--4DLOOP array--> : fa un ciclo sulla elementi dell'array
<--4DLOOP metodo--> : fa un ciclo passando a metodo un parametro numerico (da 0) che si incrementa automaticamente, finchè il risultato è True
<--4DENDLOOP--> : chiude il ciclo


4D elabora questi tag prima di servire:
- una pagina inviata con SEND HTML FILE o SEND HTML BLOB (di tipo "text/html")
- una pagina con suffisso .shtm, .shtml, .xml, .xsl, .wml (per Wap)
- le pagine incluse con <--4DInclude -->
Web Web Difendersi da virus Web come il Nimda
Nel sorgente di questo sito WebHome, trovate il metodo HTTP_RequestFilter che serve a filtrare i tentativi di attacchi da virus che cercano i web server windows.
Poiche' questi virus provano centinaia di attacchi in contemporanea, in viaWeb ho implemtentato questa piccola variante che sposta sul chiamante l'onere del rallentamento:
invece di rispondere con un --access denied--, io rispondo con un

SEND HTTP REDIRECT("http://www.stop_that_virus.invalid")

Cosi' il chiamante perde il suo tempo a cercare il dns inesistente e gli attacchi sul mio server si rilassano.

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
301 utenti registrati

Pagina servita il 19/03/24 alle 03:44:47 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