È una bella domanda e la risposta è molto interessante. Devi sapere che il presentation layer è gestito da un framework javascript chiamato RD3 (cosa che immagino tu già sappia), che si occupa di creare e modificare gli oggetti del DOM della pagina che vede l'utente.
Il client e il server non si scambiano HTML, bensì XML contentente solo le informazioni degli oggetti dal mostrare. Ci pensa poi il framework javascript lato client (che gira nel browser) a creare e gestire tutti gli oggetti.
In questo contesto ci sono operazioni che devono essere gestite dal server e per le quali il client non può far nulla, come la validazione di una riga del pannello, mentre altre sono gestibili in autonomia. Ad esempio se il pannello va da lista a dettaglio lo fa da solo, informando il server della cosa solo in un evento posteriore all'effettivo cambio di layout. Cioè il presentation layer cambia layout "mentre" informa il server.
Il changeLocking è uguale, il client è in grado di farlo da solo e quindi l'evento è definito come gestibile sia lato client, sia lato server.
Per ottenere il risultato che vuoi è necessario usare l'evento di load della form e scrivere:
- Code: Select all
pannello.toolbarEventType = ServerSide + Immediate + Blocking;
Che significa che l'evento non può essere gestito in autonomia dal client ma deve essere subito informato il server, senza comunicazione differita, bloccando l'interfaccia finché il server non risponde e agendo di conseguenza alla risposta.
Con un evento definito in questo modo puoi scrivere:
- Code: Select all
int res = MessageConfirm("vuoi davvero cambiare il lock?");
if (res != true)
{
cancel = true;
}
E vedere che il pannello cambia lock solo se l'utente risponde ok.
Allego un progettino in cui l'ho fatto funzionare.