g.foschini wrote:... non abbiamo mai cambiato strategie o eliminato funzionalità se non a causa di forza maggiore...
Però Lanzi stesso e gli altri tecnici hanno chiaramente detto che, siccome non era possibile il porting in Java, anni fa fu lasciata indietro durante il porting in C# e così è rimasta fino a poco tempo fa, quando ho segnalato il bug.
Quindi non definirei "causa di forza maggiore" una scelta (consapevole per i tecnici ma ignota all'altra metà di Progamma) legata al fatto che si voleva mantenere il paralellismo su entrambe piattaforme Java/C# ed è risultato certamente più semplice tagliare quel che già c'era in VB/C# piuttosto che studiare come colmare la mancanza su Java.
Sarei anche in disaccordo nel definire oggi questo bug una "feature improvement"... Ma bando alle polemiche:
...Non so se CR possa essere una soluzione. Abbiamo fatto una breve analisi preliminare della questione ma ci rimangono dei dubbi che potrebbero essere chiariti, in un senso o nell’altro, solo con un’analisi molto più approfondita.
In ogni caso non sarebbe un problema utilizzarlo con Instant Developer e come sempre siamo a disposizione per supportarvi ed aiutarvi nelle vostre necessità.
Io posso riportare la nostra esperienza, ormai più che decennale, con CR. Nel nostro pacchetto applicativo ogni esigenza di stampa l'abbiamo sempre risolta riconducendo tutto ad una tabella temporanea di stampa, che viene poi data in pasto al "CR Viewer", la parte liberamente distribuibile di CR, che ne fa l'anteprima a video e ne permette la stampa, oppure la butta direttamente in stampa se nella funzione che lo chiama gli si passa la stampante su cui stampare.
CR, in modo molto simile ai report di MsAccess, è in grado di creare dei 'raggruppamenti', campi calcolati, subtotali, ordinamenti, eccetera. Con lo strumento editor del CR noi creiamo quindi un report per il cliente in maniera del tutto simile al 'libro' di InDe, ma la differenza è che gli eventi di formattazione in CR sono tutti 'locali' e indipendenti, perchè è lui stesso a leggere il DB per conto suo. Quindi cose come 'if <condizione> sopprimi sezione' eccetera sono caratteristiche del report stesso facili da implementare. Infatti le chiamate del viewer come parametri vogliono il nome del db e le credenziali di accesso. Nel report invece è salvata la query sql che legge una o più tabelle in join.
Il risultato è che, per esempio, se devo stampare tutti gli ordini di una certa lista di articoli, io a programma preparo una tabella temporanea contenente i codici articolo selezionati, poi nel report stesso metto tale tabella in join con righe ordini, testate ordini, causali, categorie merceologiche, e tutto ciò che mi servirà tirare fuori nel report. Quindi salvo il report, che è un file .rpt in una cartella della procedura e lo 'censisco' in una tabella che tiene conto dei report disponibili. A quel punto, quando l'utente va in stampa, una mascherina gli chiede quale report vuole usare e gli presenta anche quello nelle opzioni.
In una app Web fatta con InDe si potrebbe adottare lo stesso sistema dato che esiste un "viewer" apposta per .Net / VisualStudio in modalità Web. Anche lui è in grado di stampare su disco producendo un PDF da passare al client, ma è anche in grado di fare la stampa "raw" sulla stampante del server, locale o di rete, semplicemente passandola come parametro.
Il vantaggio è che quando il cliente ti chiede un nuovo layout di stampa, tutto si risolve mandando un file .rpt di poche decine di kb e 'censendolo' nella tabella stampe.
Allo stesso modo, in certe stampe delle quali si vuole concedere l'autonomia di personalizzazione al cliente, gli prepariamo una vista "documentata" nella quale i campi sono comprensibili, e gli diamo un report campione che poi lui si personalizza avendo la licenza del CR Editor.
Se gli intenti degli altri sono più o meno questi, credo sia la strada giusta.