It is currently 13 April 2021, 9:34 Advanced search

Metodo AddQuerySubstitution

Domande e risposte su come utilizzare Instant Developer Foundation al meglio

Metodo AddQuerySubstitution

Postby ludovicoluca.santucci » 1 April 2021, 7:07

Salve a tutti.
Per la sostituzione delle tabelle, avevamo implementato il metodo OnTableSubstitution.
Poco tempo fa ci siamo accorti che non funziona in scrittura. È una cosa che ci farebbe piacere avere come funzionalità.
A questo punto, vorremmo implementare l'AddQuerySubstitution.
Sulla documentazione dell'OnTableSubstitution viene però riportato che l'AddQuerySubstitution "in alcuni casi potrebbe non funzionare correttamente".
Di cosa si tratta nello specifico?

Image

Grazie anticipatamente.
Last edited by ludovicoluca.santucci on 1 April 2021, 7:41, edited 1 time in total.
User avatar
ludovicoluca.santucci
 
Posts: 81
Joined: 8 November 2017, 8:06

Re: Metodo addQuerySubstitution

Postby lucabaldini » 1 April 2021, 7:36

Ciao. Il significato di quella frase è il seguente: se decidi di sostituire il testo PIPPO nella query potresti avere problemi se la query contiene il testo PIPPO anche in altri punti.

Mi spiego meglio. Supponi di avere la tabella CLIENTI e tu vuoi sostituire il testo CLIENTI con il testo UTENTI.

Se attivi la sostituzione "CLIENTI" con "UTENTI" potresti avere problemi se la parola CLIENTI è in altri punti dove non avevi previsto...
Per esempio se da codice esegui questa query:
Code: Select all
  select   
    A.IDCLIENTE as IDCLIENTE
  from   
    CLIENTI A,   
    ORDINI B
  where
    A.IDCLIENTE = B.IDCLIENORDIN
    and (B.DESCRIORDINE = 'ORDINI CLIENTI ESTERI')

ottieni una doppia sostituzione... la sostituzione del nome della tabella nella clausola FROM ma anche la sostituizione della parola CLIENTI nella where clause.

Quindi la query che viene eseguita sarebbe questa:
Code: Select all
  select
    A.IDCLIENTE as IDCLIENTE
  from   
    UTENTI A,   
    ORDINI B
  where
    A.IDCLIENTE = B.IDCLIENORDIN
    and (B.DESCRIORDINE = 'ORDINI UTENTI ESTERI')


Ecco perché consigliamo di usare il metodo addQuerySubstitution per testi "che è molto improbabile trovare altrove" (es: $$CLIENTI$$ o qualcosa del genere). Se si usano token "strani" i comportamenti imprevisti non ci sono.
User avatar
lucabaldini
Pro Gamma
Pro Gamma
 
Posts: 4703
Joined: 1 October 2010, 17:03
Location: Bologna

Re: Metodo addQuerySubstitution

Postby lucabaldini » 1 April 2021, 7:38

Riguardo il fatto che la OnTableSubstitution non funzioni in scrittura è un po' più complesso.

Per rispondere al meglio mi servirebbe avere qualche info in più. Es:
- quale tecnologia usi (c#/Java)
- quale motore (DB, DO)
- devi usarla solo nei pannelli? O anche per le query scritte da codice?
User avatar
lucabaldini
Pro Gamma
Pro Gamma
 
Posts: 4703
Joined: 1 October 2010, 17:03
Location: Bologna

Re: Metodo addQuerySubstitution

Postby ludovicoluca.santucci » 1 April 2021, 7:44

lucabaldini wrote:Riguardo il fatto che la OnTableSubstitution non funzioni in scrittura è un po' più complesso.

Per rispondere al meglio mi servirebbe avere qualche info in più. Es:
- quale tecnologia usi (c#/Java)
- quale motore (DB, DO)
- devi usarla solo nei pannelli? O anche per le query scritte da codice?


Grazie per la celere ed esaustiva risposta.

- Come tecnologia utilizziamo C#
- Questa funzionalità ci piacerebbe averla su entrambi i motori.
- La utilizziamo sia nei pannelli che nelle query.
User avatar
ludovicoluca.santucci
 
Posts: 81
Joined: 8 November 2017, 8:06

Re: Metodo AddQuerySubstitution

Postby ludovicoluca.santucci » 2 April 2021, 7:06

Se ci fosse la possibilità di inserire questa funzionalità e fosse poco economica da sviluppare in termini di tempo, preferirei che fosse sviluppata per il motore DB. Grazie.
User avatar
ludovicoluca.santucci
 
Posts: 81
Joined: 8 November 2017, 8:06

Re: Metodo AddQuerySubstitution

Postby lucabaldini » 6 April 2021, 7:20

Nel caso di pannelli DB oriented dovrebbe essere automatico.

Mi spiego meglio. Ai pannelli DB-oriented viene comunicata solo il testo della query da utilizzare per recuperare i dati (SELECT). Quella query viene adattata tramite la addQuerySubstitution quindi il pannello legge i dati correttamente tramite una query sostituita.

Quando il pannello deve scrivere (UPDATE, DELETE, INSERT) è il driver .NET che, a partire dall'istruzione SELECT (che è stata modificata sopra), calcola le istruzioni UPDATE, DELETE e INSERT corrispondenti per eseguire le operazioni di scrittura.

In quel caso dovrebbe già funzionare l'addQuerySubstitution.

Per quanto riguarda le query da codice dovrebbe già funzionare per qualunque query, sia quelle di lettura (SELECT INTO VARIABLES e SELECT INTO RECORDSET) ma anche per le query in scrittura (UPDATE, DELETE, INSERT).
User avatar
lucabaldini
Pro Gamma
Pro Gamma
 
Posts: 4703
Joined: 1 October 2010, 17:03
Location: Bologna

Re: Metodo AddQuerySubstitution

Postby lucabaldini » 6 April 2021, 7:21

Nel caso DO non mi aspetto funzioni perché in quel caso le query sono automaticamente calcolate a partire dal metaschema dei documenti. In quel caso si potrebbe valutare di cambiare il DBCode della classe per generare una query differente... ma la cosa andrebbe studiata un attimo...
User avatar
lucabaldini
Pro Gamma
Pro Gamma
 
Posts: 4703
Joined: 1 October 2010, 17:03
Location: Bologna

Re: Metodo AddQuerySubstitution

Postby ludovicoluca.santucci » 9 April 2021, 10:04

Grazie per i chiarimenti. Confermo che i pannelli funzionano sia in lettura che in scrittura. Non sono riuscito ad utilizzare l'OnTableSubstitution sulle query di insert e di update del motore DB.
User avatar
ludovicoluca.santucci
 
Posts: 81
Joined: 8 November 2017, 8:06


Return to Tips & Tricks - Foundation

Who is online

Users browsing this forum: r.sorrentino and 21 guests