Simulare l'evento click sul bottone ok di una Form modale

Ciao a tutti.

Dovrei simulare l’evento click sul bottone ok di una form modale ma non so come fare.

Vi riassumo bravemente ciò che abbiamo fatto.

Onde evitare di continuare a modificare le form standard di navision abbiamo pensato di creare delle form pesonalizzate (scheda cliente, scheda fornitore, scheda articolo ecc…). Nel trigger “on open form” delle form standard di navision abbiamo inserito del codice che dice di aprire la form Customizzata (se essa è specificata in un setup). Alla chiusura della form personalizzata si chiude la form standard rendendo trasparente all’utente la presenza di essa.

Questo sistema consente di non personalizzare più le form standard. Se microsoft rilascia una nuova release di NAV è sufficente importare gli oggetti personalizzati e inserire un pezzettino di codice nell’ “on open form” delle form standard. In questo modo modificando un punto si sistemano tutte le chiamate alla form.

Tutto funziona correttamente tranne che per le form lista utilizzate per esempio come lookup per restituire un record o un campo di un record.

Infatti nell’on open form della standard si è inserito il seguente codice…

IF FORM.RUNMODAL(InvSetup.“Alternative Item Variant List”,Rec) = ACTION::LookupOK THEN BEGIN
LookupMode := CurrForm.LOOKUPMODE;
END ELSE
CurrForm.CLOSE;

Se l’utente fa click su OK della form personalizzata la form si chiude e si torna al codice della form standard. Adesso come adesso mi si apre ancora la form standard posizionata sul record selezionato in quella personalizzata. In Realtà non dovrebbe riaprirsi ma ciò che si desidera è di chiudere automaticamente dando un Ok automatico. Se no l’utente deve dare 2 volte ok il che non va bene.

Se avete idee di come poter fare…[;)]

grazie mille per l’attenzione…

Nelle liste è più facile (almeno così lo penso io) aggiungere un extra tablebox in quale si metteno i campi che servono.

Poi si deve dare un nome ad entrambi i tablebox.

Nel OnOpenForm-trigger si decide quale tablebox da fare vedere con questo code:

currForm.tabTableboxStandard.VISIBLE(InvSetup."Show Tablebox = 0);

currForm.tabTablebox1.VISIBLE(InvSetup."Show Tablebox = 1);

currForm.tabTablebox2.VISIBLE(InvSetup."Show Tablebox = 2);

Ciao, posso approfittare della tua esperienza?

Avevo preso in considerazione anch’io un’idea del genere, però mi sono sempre fermata davanti ad un dubbio: se Microsoft distribuisce una nuova versione di una form, si suppone che abbia fatto qualcosa di nuovo o abbia corretto qualcosa che non andava - le modifiche fatte da Microsoft andrebbero comunque messe a disposizione degli utenti. Salvo casi molto particolari ogni form personalizzata è implementata sulla form originale di Microsoft (o una copia di essa, come nel tuo caso) e ha tutto quello che ha la form standard più qualcosa.

Non è che così facendo si finisce per doverne tenere aggiornate due? [8-|]

Utilizzare delle form custom in luogo di quelle standard non la trovo una grande idea. Mi sembra che il gioco non valga la candela. Comunque mi viene questo dubbio: per le liste avete modificato tutte le proprietà LookupFormID delle tabelle? E ancora: se l’utente non lavora a tutto schermo, per come avete fatto le cose, mi pare che alla fine vengano aperti due form sovrapposti tra loro e che sia fin troppo facile sbagliare e passare da uno all’altro…se sono bravi e non ci passano, comunque dal menu Finestra gli appaiono 2 form in lista. Il tutto per non riportare i campi sulla form quando c’è un upgrade? Quanti upgrade si fanno in un anno? Considerando che le form a scheda non hanno codice, non dovrebbero quasi mai uscire con le HotFix o i ServicePack, a meno che non siano stati aggiunti campi nuovi alla tabella. Inoltre mi risulta che per quelli a lista il Navision Developers Toolkit aggiunga lui tutti i campi custom e quelli aggiunti dallo standard in automatico dunque davvero non capisco il senso…

Marco

Sì.

La cosa che io faccio di solito è creare un extra tablebox nello stesso form. Nel OnOpenForm-trigger, decido quale dei due fare vedere. Anche se cambiano i menuitem su un menubutton, di solito ne creo un secondo e d nuovo nel OnOpenForm-trigger decido quale fare vedere.

Il merge è un po’ più complicato, ma almeno sono sicuro di non domenticare uno.

Beh, il problema, credo, non sono tanto gli upgrade, quanto l’innesto sui database dei clienti di granuli specializzati, sviluppati da un NSC.
I problema non è così peregrino, anche se certamente più sentito nelle form di tipo card. Il merge di una form o peggio ancora di un report è sempre un lavoro da certosino nevrotico. [:)]

La soluzione suggerita da Alain non è male, però l’editor delle form non si può dire che sia molto portato a gestire controlli sovrapposti. [8-)]

No, ma si riesce a farlo. Si potrebbe anche lasciarli diversi e nel OnOpenForm mettere anche il X,Y,Width,Height degli controlli.

I report standard (non i batch) infatti non vanno customizzati, ma portati nella customer area, in quanto il loro lancio (almeno quelli dei documenti) è paramterizzato e non da codice. Se non è paramterizzato in genere il loro lancio avviene da un punto solo, quindi non è così oneroso scambiarli con quelli standard.

In ogni caso i form, per quello che mi riguarda, sono sempre stati l’ultimo dei miei problemi. In un recente passaggio dalla 3.70 alla 5.01 di un database estremamente customizzato li ho rifatti tutti e la cosa non è stata così allucinante, anzi è stato un buon modo per fare un po’ di pulizia. Alla fine poi in un passaggio di relaease è assai probabile che il tuo form customizzato lo debba anche rifare in modo che tenga conto delle novità dell’applicativo (ad esempio nuove voci di menu) e quindi sei punto e a capo con il problema.

Insomma rimango della mia idea, mi sembra un problema inutile e contorto che genera a sua volta più problemi che soluzioni.

Un ultimo dubbio. Il Developer’s Toolkit non aggiunge lui le nuove voci di menu in un menu button?

M

Non lo so.

Ma posso dire una cosa (anche 2):

-Il NDT non è completamente affidabile. E un grande tools per confrontare 2 o 3 versioni di oggetti e lo puoi anche usare per le tabelle e codeunit per fare il merge.

-Ma se fai il merge, devi communque controllare tutto ciò che fa il NDT perché può capitare che non fa sembre le cose giuste.

Si riesce sempre? [*-)]

Scusate se approfitto di questo thread per chiarirmi i miei dubbi su un argomento collaterale. Recentemente ho provato a sostituire la frame che si trova a sinistra dei subform delle righe vendite (form 46, 95…). Non vorrei ridimensionare i form, ma mi servirebbe aggiungere un pulsante nel frame, possibilmente senza toccare l’originale. Avevo quindi pensato di creare un nuovo frame, nella stessa posizione del primo con i pulsanti leggermente ridimensionati, quel tanto che basta per farci entrare un altro pulsantino. Ho esportato il form in formato testo, ho copiato le linee relative al frame in un altro file, ho cambiato nomi, numeri, etc… e poi ho copiato di nuovo le linee dentro il sorgente. Che ci crediate o no sono anche riuscita a reimportare il txt, ma a questo punto sono cominciati i dolori. Quando ho cercato di completare il lavoro con l’editor, non c’è stato verso di accedere al frame che mi restava sotto, né di spostare temporaneamente quello che stava sopra…

Alain, tu come fai? Hai mai provato un’acrobazia del genere? [8-|]

MAI usare frame. Fanno solo casino!

Quindi prendi il form originale, cancella i frame e salva di nuovo.

Farrei come ho fatto primo: Nel OnOpenForm cambio il width,height,xpos,ypos dei control.

Eh, ma lì il frame c’è! Ce l’hanno messo loro!

Però, ridimensionando il subform, tocca ridimensionare anche il form principale, spostare i pulsanti sotto… per quello avevo cercato una soluzione alternativa! [:(]

Adesso ho guardato il form, ma con pulsante vuoi dire un button o un extra riga di dati?

Se è solo un button, c’è spazio per aggiungerlo.

Per un extra riga : potresti cambiare il fontsize dei control essistenti e farli diventare più piccoli. Poi puoi aggiungere un’ altra riga.

Mi potrei accontentare di un button, ma dove lo ficco? vicino a l pulsante dei commenti? [:^)]

Dove trovi posto. Forse conviene aggrandire un po’ i form.

Ciao.

Ho fatto qualche esperimento con la tua idea. Non ho trovato una soluzione al tuo problema, anzi ho una domanda da farti - nel tuo esempio, qual è la funzione della variabile LookupMode? Perché ti interessa memorizzare lo stato della LOOKUPMODE del form corrente? Quello che servirebbe trasferire e il valore di ritorno della funzione RUNMODAL ma non c’è un posto dove trasferirlo [^o)]