Contenuto di un portale condizionato

Contenuto di un portale condizionato

0
0

Buon giorno a tutti

Sono nuovo di questo sito e ho subito un quesito che vorrei sottoporvi.

Ho 2 tabelle: "Anagrafica" e "Offerte".

Nell'layout delle "Offerte" vorrei aprire un portale di 20 righe che contiene i record dell'anagrafica con "Cod. utente" e "Intestazione".

Sempre nelle "Offerte" ho un campo esterno al portale che chiamiamo "Campo ricerca" incaricato di filtrare il contenuto del portale.

Ho creato una relazione di "Maggiore e uguale" tra le 2 tabelle tra "Campo ricerca" per le "Offerte" e "Intestazione" per l'"Anagrafica".

Mi piacerebbe capire se e' possibile aggiornare il portale MANO A MANO CHE SI SCRIVE nel campo ricerca SENZA USCIRE DAL CAPO STESSO con il tasto TAB.

Ma soprattutto mi piacerebbe sapere se e' possibile condizionare una relazione tra 2 tabelle al risultato dell'esecuzione di un normale script e non "solo" =≠<≤>≥x.

 

Spero di essere stato chiaro

 

Grazie in anticipo per chiunque voglia darmi un suggerimento

Segnalato come spam
Pubblicato da (Domande: 7, Risposte: 6)
Domandato il 2 Maggio 2015 11:02
56 visualizzazioni
0
Domanda privata

Buongiorno, Giorgio.

temo di dover iniziare con un po di teoria: in FileMaker il valore di una campo viene valutato all’uscita, quindi comunque devi uscire dal campo per valutare quanto inserito. ciò detto, nulla ti impedisce di impostare sul campo un trigger SuModificaOggetto che  mediante script memorizzi la posizione del cursore, esca dal campo, ci rientri e si riposizioni sulla posizione di partenza, in maniera del tutto trasparente all’utente, realizzando effettivamente l’illusione di aggiornamento man mano che si scrive.

Questa impostazione richiede ovviamente più risorse che la ricerca finale e quindi può essere più lenta in caso di grandi quantità di dati o di accesso remoto al DB con una connessione non buona.

Passando poi al discorso portale, hai due opzioni: un portale filtrato e una relazione. Il primo è più lento ma più flessibile. La seconda è più veloce ma più rigida.
Per fare un portale filtrato, ti basta una relazione cartesiana (X), ovvero mettere in relazione tutti i record della prima con tutti i record della seconda; per definire il filtro ti basta un calcolo del tipo:
if(evuoto(tuocamporicerca); nomerelazione::chiaveprimaria; contaricorrenze(nomerelazione::cod.utente & nomerelazione::intestazione; tuocamporicerca)

ovvero: se il tuo campo ricerca è vuoto mostra tutti i record (ovvero quelli che hanno la chiave primaria piena, quindi tutti), in caso contrario mostra quei record che comprendono nel codice utente e descrizione quanto hai inserito nel campo ricerca (che ti conviene rendere globale). Questa opzione ha il vantaggio di permetterti una ricerca completa nella descrizione (ad es. cercando ”ver” trovi sia VERDI che AVVERTITI), ma richiede una potenza di calcolo molto maggiore, perché non sfrutta gli indici su cui sono basate le relazioni, quindi è molto più lenta.

Il portale basato sulla relazione conviene impostarlo invece NON sul campo ricerca ma su un campo calcolato invisibile all’utente, e basato su una relazione multikey (FileMaker interpreta ogni linea separata da acapo come una chiave di relazione a se stante), creando un campo calcolato del tipo:

if(evuoto(tuocamporicerca) ”  ¶zz”; tuocamporicerca&¶&”tuocamporicerca&zz”)

e mettendo il campo in relazione con il campo intestazione della tabella anagrafica. per ≤ E ≥.

In sostanza il calcolo se il campo è vuoto riporta due spazii sulla prima riga e ”zz ”sulla seconda; se il campo è pieno riporta il campo nella prima riga e il campo e zz sulla seconda. La doppia relazione in ≤ E ≥ cerca tutti i record che siano maggiori o uguali E minori o uguali di entrambe li righe, quindi tutti i valori nel caso del campo vuoto e tutti i valori compresi fra Rossi e Rossizz nel catu tu abbia inserito Rossi nel campo ricerca.Volendo essere raffinati puoi anche creare nella tabella anagrafica un campo calcolato   codice cliente & ¶ & intestazione da mettere in relazione per cercare su tutti e due i campi.

Questo approccio è più veloce, ma oltre ad essere più macchinoso ti permette di trovare solo i valori che INIZIANO CON quello che hai inserito nel campo.

Per quanto attiene alla tua ultima domanda, è difficile rispondere così: qualìè il risultato che devi ottenere?

a presto.

.g.

 

 

Segnalata come spam
Pubblicato da (Domande: 0, Risposte: 1480)
Risposto il 4 Maggio 2015 10:54
0
Domanda privata

Bella funzione.

Sono Paolo, uso FM 16 ho letto e studiato, credo, queste due funzioni, ma la prima restituisce quanto richiesto la seconda non mi restituisce nessun risultato. Sicuramente sbaglio da qualche parte.

Per la seconda soluzione ho messo in relazione i due campi calcolati.

Nel primo campo calcolato c'è la funzione che crea la lista con il contenuto del campo filtro,

If(EVuoto(g_FILTRO); "  ¶zz"; g_FILTRO&¶&g_FILTRO&"zz")

Nel secondo campo calcolato c'è la lista con il contenuto dei campi su cui voglio fare la ricerca, NOME COGNOME & ¶ & RAGIONE SOCIALE & ¶ & TIPO & ¶ & DISCIPLINE

Grazie

Paolo

Segnalata come spam
Pubblicato da (Domande: 18, Risposte: 21)
Risposto il 25 Aprile 2018 10:26
0
Domanda privata

Sono Paolo, ho risolto il problema, ho cancellato la relazione e reimpostato i calcoli adesso funzionano correttamente tutte e due le funzioni.

La prima funzione, grazie a contaricorenze( ) trova ciò che hai inserito nel tuocamporicerca in qualunque parte del testo.

La seconda funzione trova ciò che hai inserito a partire dalla prima lettera del tuocamporicerca  se ci sono piu parole nel testo es: Nome - spazio - Cognome in un unica stringa trova solo ciò che è nella prima parte del testo. Devo studiare meglio e raffinare l'istruzione.

Il contaricorrenze in questa funzione restituisce un numero quindi perde la relazione e non trova i record. Qualcuno mi puo dare dei suggerimenti/spunti?

Grazie mille  e complimenti

Paolo

Segnalata come spam
Pubblicato da (Domande: 18, Risposte: 21)
Risposto il 26 Aprile 2018 13:56