Pregunta a l'IA
Hola! Pregunta'm qualsevol cosa

Moving from ZK event thread to the recommended servlet thread. Part I.

Blog
26/7/15
Lluís Turró Cutiller
602
0
zk

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.

This is not a replacement to ZK migration guide (ZK Event Threads), but an extension taken from a real-world application.

Close without saving?

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.

Before you get mad with modal windows

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.

Encaixada de mans, BrightSide fa una primera aproximació al B2B

New & Noteworthy
22/7/15
Lluís Turró Cutiller
13.179
2
financials

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.

Avantatges del documents rebuts via handshake

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.

Enviant la petició

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:

  • clicar per conèixer l'estat
  • relació activa
  • pendent de confirmació
  • relació trencada, contracte no actiu

Enviar un document

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ó.

Càrrega de la norma 43 per contractes bancaris

Customer Relationship
10/7/15
Lluís Turró Cutiller
12.935
2
brightside

Ja està disponible la darrera versió de Elephant i BrightSide, instal·lada en el seu servei BaaS.

Norma 43 per extractes bancaris

Ara pot carregar el seu extracte bancari en el contracte BS Financials de C.Corrent. Els pasos a seguir són els següents:

  1. Descarregui l'extracte des del seu banc en línia, demanant la opció de format Norma 43.
  2. Obri el contracte de 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.

Mostrant l'activitat del teu negoci, BrightSide s'apropa al tot-en-un

New & Noteworthy
4/7/15
Lluís Turró Cutiller
13.069
0
brightside calendar elephant

Les noves capacitats de calendari de BrightSide arriben també a les llibreries Elephant.

Mostrant l'activitat

El calendari web que incorpora Elephant permet connectar amb els mòduls BrightSide com font d'esdeveniments. Les fonts actuals són:

  • Els temes de BrightSide Dossiers:
    • Inici
    • Control
    • Resolució
    • Entrega
  • Les entrades de BrightSide Publications
  • Les accions de venda de BrightSide CRM:
    • Data de l'acció
    • Data final de l'acció

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.

Visor de detall sensible al visitant

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 visitant no autenticat:
    • Descripció del tema i breu resum de l'estat
  • Un visitant autenticat sense permisos:
    • Igual que un visitant no autenticat
  • Un visitant autenticat amb permisos:
    • Si no té cap participació:
      • Igual que un visitant no autenticat
    • Si participa directa o indirectament:
      • Detall de l'activitat dins el tema: comentaris, canvis d'estat, adjunts
      • Enllaç al tema dins l'àrea per membres
      • Enllaç al tema dins l'aplicació

Un exemple d'un calendari d'activitat el podeu trobar a Calendari d'activitat Turro.Org

El calendari d'usuari exportat a d'altres calendaris

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

Els enllaços a l'àrea per membres seran puntualment inestables en els calendaris exportats

Customer Relationship
4/7/15
Lluís Turró Cutiller
11.611
0

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.

Canvis en les URLs de l'àrea per membres

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.