As you already imagined, migrating code to the recommended servlet thread is a nightmare. Anyway, since ZK deprecated the event thread, I thought reasonable to start the migration now. Here are some issues I encountered while doing so.
Are you capturing the onClose
event of a container to prevent user from exiting without saving its content?
This piece of code does capture the event, ask user if really want to exit loosing modifications. If user says no, the event method stopPropagation()
is called and the tab remains open.
Tab tab = container.getLinkedTab(); tab.addEventListener(9000, Events.ON_CLOSE, new EventListener() { @Override public void onEvent(Event event) throws Exception { if(modified) { if(!ZkossUtils.confirmMessage(ElLabel.getLabel("lCloseWithoutSaving"))) { event.stopPropagation(); } } } }); ... public static boolean confirmMessage(String message) { if(Messagebox.show(message, ElLabel.getLabel("lQuestion"), Messagebox.OK | Messagebox.CANCEL, Messagebox.QUESTION) == Messagebox.OK) { return true; } return false; }
With servlet thread this code no longer works. The method stopPropagation()
gets never called. Messagebox.show()
returns immediately and there is no chance that confirmMessage()
returns true.
We need to make some changes. In the example I choose commons-chain
, but Runnable
is also a choice.
final Tab tab = container.getLinkedTab(); tab.addEventListener(9000, Events.ON_CLOSE, new EventListener() { @Override public void onEvent(final Event event) throws Exception { if(modified) { // check whether tab content has been changed event.stopPropagation(); ZkossUtils.confirmMessage(ElLabel.getLabel("lCloseWithoutSaving"), new Command() { @Override public boolean execute(Context context) throws Exception { tab.close(); return Command.PROCESSING_COMPLETE; } }); } } }); ... public static void confirmMessage(String message, final Command command) { Messagebox.show(message, ElLabel.getLabel("lQuestion"), Messagebox.OK | Messagebox.CANCEL, Messagebox.QUESTION, new EventListener () { @Override public void onEvent(Event event) throws Exception { Context ctx = new ContextBase(); switch ((Integer) event.getData()) { case Messagebox.OK: command.execute(ctx); break; } } }); }
First modification is to use Messagebox's EventListener. There we put the code we want to execute when the OK button gets clicked.
The onClose
event has changed some more. Fist, we call stopPropagation()
when modified
is true. This ensures the tab will remain open. Then, we close the tab. Doing so programmatically prevents from entering an endless loop. Notice that in real-world applications, the tab may have its own listeners and perform some stuff.
Setting the modal state. With the event thread enabled you could do setMode("modal")
before attaching the window to the page. With the servlet thread that's no longer true. It will throw a not attached exception
. So, if you set the window mode somewhere before setPage(page)
, simply remove the call to setMode()
and use doModal()
once the page has been set.
BrightSide Financials permet ara fer encaixades de mans entre diferents clouds BaaS. Tal i com el nom apunta, handshake
, la relació s'estableix entre dos contractes i cal que els responsables dels mateixos intervinguin en l'acord.
Un cop establert el handshake, el contracte que ha fet la petició pot enviar documents directament al contracte que ha acceptat.
Els documents rebuts en aquest format no cal introduir-los, en obrir el document tindrà sempre les línies del document original i la data i numeració correctes. Si el document conté productes, el procés permet donar-los d'alta si no existeixen, o relacionar-los amb productes ja existents.
El resum de benvinguda a BrightSide mostra si hi han documents pendents de confirmar i un enllaç per obrir-los.
Obri un contracte de client i premi el botó de handshake . Se li demanarà l'adreça del BaaS del seu client. Un cop confirmada, la petició es guarda a la cua de hanshakes pendent de confirmació.
El botó de handshake mostra sempre l'estat de la relació entre contractes:
Quan el contracte permet l'enviament de documents via handshake, es mostra en la barra de botons:
Per enviar el document només cal prémer el botó i aquest mostrarà un missatge amb el resultat de l'acció i canviarà el color per mostrar l'estat de la relació.
Ja està disponible la darrera versió de Elephant i BrightSide, instal·lada en el seu servei BaaS.
Ara pot carregar el seu extracte bancari en el contracte BS Financials de C.Corrent
. Els pasos a seguir són els següents:
Norma 43
.C.Corrent
i carregui l'arxiu del seu banc usant el botó de càrrega.
Pot executar aquests pasos sense por de repetir informació o perdre informació ja guardada. BrightSide manté la qualitat de registre del compte corrent. Tampoc cal que recordi quines dates ha importat anteriorment, es manté el saldo per moviment.
Un cop carregada la informació en el contracte, aquesta pot ser usada en els extractes bancaris per quadrar amb el banc. Per veure les dades reals del banc, vagi al l'extracte del compte comptable i premi el botó Afegir moviments bancaris
. Aquests es mostraran a continuació dels introduïts a la comptabilitat i ordenats per data.
Les noves capacitats de calendari de BrightSide arriben també a les llibreries Elephant.
El calendari web que incorpora Elephant permet connectar amb els mòduls BrightSide com font d'esdeveniments. Les fonts actuals són:
Per a tots els casos, el calendari permet discriminar quines fonts s'han de mostrar. Quan aplicable, es consulta l'atribut publicable
de l'entitat mostrada.
Totes les entrades del calendari mostren un resum de l'esdeveniment. Aquest resum és sensible al usuari que està veient el calendari. Per posar un exemple, un tema de BrightSide Dossier seria vist així segons l'usuari:
Un exemple d'un calendari d'activitat el podeu trobar a Calendari d'activitat Turro.Org
Qualsevol usuari BrightSide pot accedir al seu calendari d'activitat pendent des de l'aplicació. Un cop dins el calendari i usant la opció Copiar
de la barra de botons, és possible exportar aquest calendari a, per exemple, calendaris Google.
Les noves característiques d'aquest calendari inclouen adreces d'accés directe a l'aplicació. Des de qualsevol calendari, amb un sol clic, es pot accedir a l'aplicació ja autenticat.
Intentant ser cada dia més útils
Aquesta incidència afecta a tots els usuaris que tinguin exportat el seu calendari dins l'aplicació a calendaris externs, com per exemple Google, MS Exchange, MS Outlook, Thunderbird Lightning, KOrganizer, etc.
Pels usuaris de l'aplicació, les noves URLs són transparents i no afecten el funcionament normal. Pels calendaris exportats, en canvi, la periodicitat d'actualització pot crear inestabilitat. L'actualització ha creat noves adreces que poden no haver-se actualitzat en els calendaris. Aquest inconvenient pot durar un màxim de 15 hores.
Els usuaris amb accés a l'àrea per membres poden usar l'enllaç Veure dins l'aplicació enlloc de Veure dins l'àrea per membres.