< Indietro | Avanti >

Lezione 6: Creazione del gestore dei risultati del calcolo

Il prossimo gestore che verrà creato, CalculationResultsHandler, crea un grafico a torta per illustrare i dettagli della logica creata precedentemente, MortgageCalculatorHandler.

Il codice che agisce come intermediario tra i due gestori è un Infobus, una libreria EGL nel progetto com.ibm.egl.rui.

L'Infobus funziona nel modo riportato di seguito:
  • Un gestore come CalculationResultsHandler esegue la sottoscrizione ad un evento con un nome specificato. Al momento della sottoscrizione, il gestore fornisce anche il nome di una funzione che riceverà i dati quando si verifica l'evento specificato. Come risultato di tale sottoscrizione, l'Infobus registra la funzione, conservando i dettagli necessari per richiamare la funzione successivamente.
  • Al momento opportuno, lo stesso gestore o un gestore differente pubblica l'evento. Tale gestore specifica il nome dell'evento ed i dati specifici dell'evento ed indica all'Infobus di richiamare la funzione registrata.

Questa lezione parte dal secondo di tali due passi. Il gestore MortgageCalculatorHandler scritto precedentemente viene aggiornato in modo da richiamare la funzione publish dell'Infobus quando viene restituito un nuovo calcolo dal servizio remoto. Quindi, si verifica che il gestore CalculationResultsHandler abbia eseguito la sottoscrizione all'evento.

L'operazione di pubblicazione e sottoscrizione rende possibile la visualizzazione del grafico a torta.

Pubblicazione dei risultati del servizio

  1. Individuare la funzione displayResults() creata nella lezione precedente. Aggiungere la riga riportata di seguito prima dell'istruzione end:
    InfoBus.publish("mortgageApplication.mortgageCalculated", retResult);
    Il primo argomento è il nome dell'evento ed il secondo è il record passato alle funzioni registrate per tale evento. La struttura di tale record è riportata di seguito:
    record MortgageCalculationResult
       	// input utente
       loanAmount money;
       interestRate decimal(10, 8);
       term int;
    
       	// campi calcolati
       monthlyPayment money;
       interest money;
    end

    Viene visualizzato un contrassegno di errore perché non si sta importando la libreria Infobus. Per aggiungere l'istruzione import richiesta, premere Ctrl+Maius+O. Per rimuovere il contrassegno di errore, salvare il file.

    La funzione displayResults() è ora simile a quella riportata di seguito:
    function displayResults(retResult MortgageCalculationResult in)
       paymentLabel.text = MortgageLib.formatMoney(retResult.monthlyPayment as STRING);
       inputRec_form.publish();
       hideProcessImage();
       InfoBus.publish("mortgageApplication.mortgageCalculated", retResult);
    	end

    Come in precedenza, tale codice mostra l'importo del pagamento nel campo Pagamento ed utilizza il meccanismo MVC Rich UI per pubblicare i risultati del calcolo nel record retResult. La nuova istruzione implica un tipo differente di pubblicazione, rendendo il record disponibile per tutti i widget che eseguono la sottoscrizione all'evento mortgageApplication.mortgageCalculated.

    Nota: i nomi degli eventi Infobus sono sensibili al maiuscolo/minuscolo. Ad esempio, “mortgageApplication” è diverso da “MortgageApplication.”
  2. Salvare e chiudere il file.

Creazione del gestore CalculationResultsHandler

  1. Nel progetto MortgageUIProject, fare clic con il tasto destro del mouse sul package handlers e fare clic su Nuovo > Gestore Rich UI. Tali azioni assicurano che la pagina Nuovo gestore EGL Rich UI faccia riferimento al package.
  2. Specificare il nome del file sorgente CalculationResultsHandler e fare clic su Fine. Il gestore viene visualizzato nella vista Progettazione dell'editor Rich UI.
  3. Effettuando le stesse operazioni effettuate quando è stato creato il codice del calcolatore, ridurre le dimensioni del widget GridLayout iniziale ad una singola cella. Nella pagina Generale della vista Proprietà, impostare la proprietà rows su 1 e la proprietà columns su 1.
  4. Trascinare un widget PieChart dal drawer Visualizzazione della tavolozza sulla cella singola del layout di griglia ed assegnare al widget il seguente nome:
    interestPieChart
    EGL visualizza un grafico a torta predefinito.
    Il grafico a torta predefinito mostra modelli di auto.
  5. Nella parte inferiore dell'editor, fare clic sulla scheda Origine.
  6. Nella dichiarazione del widget interestPieChart, impostare la proprietà height su 250.
  7. Nel grafico a torta sono necessarie solo due sezioni. Nella dichiarazione interestPieChart, nel campo data, sostituire le quattro righe che dichiarano i record PieChartData. Il nuovo codice è riportato di seguito:
    new PieChartData{ y=1, text="Capitale", 	color="#99ccbb"},
    new PieChartData{ y=0, text="Interesse", 		color="#888855"}
    Per calcolare la quantità di grafico a torta utilizzata da un determinato record, dividere il valore del campo y di tale record per la somma dei valori del campo y. In questo caso, la divisione è 1/1 e la visualizzazione iniziale mostra il capitale ipotecario al 100%. La visualizzazione al momento dello sviluppo è solo un segnaposto fino a quando l'applicazione non gestisce il primo calcolo predefinito al runtime.
  8. Eseguire la sottoscrizione all'evento Infobus precedentemente indicato aggiungendo la riga riportata di seguito alla funzione start:
    InfoBus.subscribe("mortgageApplication.mortgageCalculated", displayChart);
    Utilizzando questo codice, Infobus richiama la funzione displayChart ogni volta che si verifica l'evento specificato. Il passo successivo rimuove i contrassegni di errore.
  9. Dopo la funzione start, aggiungere la funzione displayChart come riportato di seguito, quindi organizzare le istruzioni di importazione premendo Ctrl+Maius+O:
    function displayChart(eventName STRING in, dataObject ANY in)
       localPieData PieChartData[2];
    
       resultRecord MortgageCalculationResult = 
          dataObject as MortgageCalculationResult;
       localPieData = interestPieChart.data;
       localPieData[1].y = resultRecord.loanAmount;
       localPieData[2].y = resultRecord.interest;
       interestPieChart.data = localPieData;
    end
    Quando si verifica l'evento, la funzione displayChart riceve i dati di input nel parametro dataObject. L'utilizzo di ANY come tipo di parametro garantisce la possibilità di utilizzare il meccanismo Infobus per trasferire qualsiasi tipo di record.
    Successivamente, la funzione agisce nel modo riportato di seguito:
    • Crea l'array localPieData, di tipo PieChartData[], appropriato per la proprietà data del grafico a torta.
    • Assegna il valore ricevuto ad un record di tipo MortgageCalculationResult, in un'istruzione che invia il secondo parametro di input al tipo di dati appropriato per l'utilizzo dell'Infobus:
      resultRecord MortgageCalculationResult = 
         dataObject as MortgageCalculationResult;
    • Assegna la proprietà data del grafico a torta, inclusi i dettagli relativi al colore, al nuovo array localPieData.
    • Assegna l'importo del prestito ricevuto e il valore degli interessi a tale array.
    • Forza l'aggiornamento del grafico a torta aggiornando la relativa proprietà data. In particolare, l'array localPieData viene assegnato a tale proprietà.
  10. Salvare il file. Se vengono visualizzati errori nel file sorgente, confrontare il codice con il contenuto del file in Codice terminato per CalculationResultsHandler.egl dopo la Lezione 6.

Verifica del grafico a torta

  1. Passare alla vista Anteprima. EGL visualizza un grafico a torta predefinito con il capitale al 100%.
    L'intera area è di colore verde con la parola "Capitale" in bianco.
  2. Chiudere il file.

Riepilogo della lezione

È stato illustrato come completare le seguenti attività:
  • Utilizzare la libreria InfoBus per lo scambio delle informazioni tra i gestori.
  • Creare un grafico a torta.

Nella lezione successiva, verrà creato il gestore principale, che utilizza gli altri gestori.

< Indietro | Avanti >

Feedback