Salvare i criteri di ordinamento via script

Salvare i criteri di ordinamento via script

0
0

Buongiorno a tutti. Ecco un problema a cui non riesco a trovare la soluzione: ho un elenco di record in un formato visualizzato come lista. Sopra ogni campo c'è un pulsante che ha la funzione di ordinare i record sottostanti. Lo script che ho impostato prevede un "ordina i record per campo (ascendente)" intercettando il campo giusto mediante "Get ParametroScript", e funziona correttamente. Ecco il dilemma: cliccando su pulsanti diversi, l'ordinamento avviene in base al campo relativo, ma, nel caso in cui il contenuto di questo campo è uguale in più record, questo gruppo di record avente campo con stesso valore non mantiene l'ordinamento avvenuto in precedenza. Per spiegarmi meglio, l'effetto voluto si otterrebbe manualmente aprendo la finestra di dialogo di ordinamento e mettendo in ordine di importanza i vari criteri di ordinamento. C'è modo via script di definire questo elenco di priorità di ordinamento? La procedura logica dovrebbe essere: ordina per "campo selezionato", quindi per "campo selezionato in precedenza", quindi per "campo selezionato ancora prima"... e così via. Grazie per l'aiuto!

RISOLTO
Segnalato come spam
Pubblicato da (Domande: 4, Risposte: 10)
Domandato il 31 Agosto 2021 17:14
38 visualizzazioni
0
Domanda privata

Mi autorispondo perchè ho parzialmente risolto il problema: usare Esegui SQL nello script di ordinamento. Ma non funziona, probabilmente sbaglio qualcosa nella stringa SQL, perchè lo script intercetta il campo corretto da ordinare ma non avviene l'ordinamento, ecco il codice SQL utilizzato:

"SELECT "&$$Campo&" FROM "&Get(NomeTabellaFormato)&" ORDER BY "&$$Campo&" ASC"

dove $$Campo è il nome del campo individuato mediante variabile globale

Segnalata come spam
Pubblicato da (Domande: 4, Risposte: 10)
Risposto il 1 Settembre 2021 09:57
0
Domanda privata

Buongiorno.

EseguiSQL non serve nell'ordinamento di un formato lista. com'è lo script di ordinamento che usi?

.g.

Segnalata come spam
Pubblicato da (Domande: 0, Risposte: 1488)
Risposto il 1 Settembre 2021 09:59
0
Domanda privata

Buongiorno,

ecco lo script che sto usando:

  1. Imposta variabile [$$Campo; Valore: Get(ParametroScript)]
  2. Vai all'Oggetto [Nome Oggetto: $$Campo]
  3. Imposta variabile [$$Campo; Valore: Get(NomeCampoAttivo)]
  4. Vai all'Oggetto ["Null"]
  5. Esegui SQL [la stringa che ho scritto sopra]
  6. Vai a Record/Richiesta/Pagina [Primo]
  7. Esci dallo Script
Segnalata come spam
Pubblicato da (Domande: 4, Risposte: 10)
Risposto il 1 Settembre 2021 10:05
0
Domanda privata

forse non ho capito bene io, ma teoricamente uno script del genere non dovrebbe funzionare del tutto. L'istruzione di script ESEGUI SQL (che è diversa dalla funzione EseguiSQL) non serve per ordinare il foundset ma per effettuare operazioni su sorgenti dati ODBC esterne al file.

per ordinare i record via script in un foundset è necessario utilizzare l'istruzione ordina record, andando a memorizzare i criteri. Sfortunatamente non è possibile passare i criteri dinamicamente, ma è necessario creare manualmente tanti casi quanti sono i criteri di ordinamento.

OPPURE si crea un campo calcolato non memorizzato popolato in base a variabili e si ordina sempre per quello, ma si perde in prestazioni (soprattutto in rete).

.g.

 

Segnalata come spam
Pubblicato da (Domande: 0, Risposte: 1488)
Risposto il 1 Settembre 2021 10:25
0
Domanda privata

Grazie mille per la risposta, proverò ad applicare la seconda soluzione e vedrò quanto impatterà sulle prestazioni...

Segnalata come spam
Pubblicato da (Domande: 4, Risposte: 10)
Risposto il 1 Settembre 2021 10:29
0
Domanda privata

domanda: per quale motivo la prima non è soddisfacente? in caso di una decina di criteri è più veloce da realizzare e più performate.

.g.

Segnalata come spam
Pubblicato da (Domande: 0, Risposte: 1488)
Risposto il 1 Settembre 2021 10:32
0
Domanda privata

Semplicemente perché non sarebbe "portabile", cioè dovrei impostare i criteri di ordinamento per ogni formato e quindi creare uno script specifico per ogni formato e non uno valido ovunque. Col un campo di ordinamento specifico che riporta i dati delle variabili, che ha lo stesso nome oggetto in tutti i formati, dovrei riuscire a far funzionare il tutto con un solo script (anche se di fatto in ogni tabella dovrò creare il campo calcolato specifico per quella tabella).

Segnalata come spam
Pubblicato da (Domande: 4, Risposte: 10)
Risposto il 1 Settembre 2021 10:39
0
Domanda privata

devi comunque creare un campo per ogni tabella e uno script per ogni formato, e hai problemi in caso di multifinestra.

per quello dico che è poco pratico, a meno di esigenze specifiche.

.g.

p.s. il nome oggetto non ti serve a nulla e nemmeno il vai all'oggetto.

Segnalata come spam
Pubblicato da (Domande: 0, Risposte: 1488)
Risposto il 1 Settembre 2021 10:54
0
Domanda privata

Mi sto perdendo... riassumo quello che ho capito: la prima soluzione non andrebbe bene, perché, per ordinare i record con "Ordina Record" dovrei definire manualmente l'elenco dei campi, quindi non posso creare a priori una procedura dinamica che dica: "Ordina per il campo X", quindi "Ordina per il campo che avevi ordinato in precedenza", quindi "Ordina per il campo che avevi ordinato prima ancora", e così via. Perché i campi da ordinare cambierebbero in base alle scelte dell'utente e non in base ad una scelta fatta secondo la logica dallo sviluppatore.

Oppure c'è la possibilità di memorizzare i criteri di ordinamento, magari in una variabile, e inviarli in qualche modo all'istruzione di script "Ordina Record"?

Segnalata come spam
Pubblicato da (Domande: 4, Risposte: 10)
Risposto il 1 Settembre 2021 11:37
0
Domanda privata

puoi memorizzare l'ordine dei campi e il tipo di ordinamento in ogni istruzione ordina record. però lo devi fare manualmente nel momento incui inserisci l'istruzione nello script, e poi viene ricordato.

quindi lo script sarebbe qualcosa tipo:

if[get(parametroscript)="abc"]
ordina record[ ripristina; con finesta di dialogo: disattavata] //e con parametri memorizzati

else if[get(parametroscript)="123"]
ordina record[ ripristina; con finesta di dialogo: disattavata] //e con altri parametri memorizzati

else if[…]

end if

alla fine è noioso e un po meno flessibile, ma sicuramente meno lungo da sviluppare dell'alternativa. IN realtà in questo capo potresti pure fare un unico script, ma con tanti parametri quanti sono i criteri di ordinamento in tutti i formati. Il vantaggio di questa soluzione è che puoi usarlo pure all'interno di trigger SuEntrataModo o SuEntrataFormato con parametri specifici.

.g.

Segnalata come spam
Pubblicato da (Domande: 0, Risposte: 1488)
Risposto il 1 Settembre 2021 11:59