Press "Enter" to skip to content

Category: Serie

Serie di articoli collegati

InnoSetupFilesGen – Automatizzare le operazioni manuali.

InnoSetupFilesGen, è una piccola utility per automatizzare la creazione della lista dei files di una applicazione per il compilatore di InnoSetup, questa operazione effettuata manualmente potrebbe portare ad errori, a dimenticarsi qualche file, a dimenticarsi di aggiornare un file quando si aggiunge un reference nuovo, pertanto automatizzarla ci aiuterà ad evitare errori non voluti quando creiamo un setup.

Si tratta di una applicazione molto semplice. Una applicazione Console a cui passare una serie di parametri che le permettono di produrre uno script con la lista dei files che compongono il setup di una applicazione.

Comments closed

2 – Multi Clock – Miglioriamo la User interface

In questo secondo articolo dedicato all’orologio multi fuso orario che abbiamo costruito nel precedente articolo, vogliamo migliorare la qualità del comportamento della nostra User Interface. Se avete provato la versione 1.0 del nostro orologio avrete notato 2 problemi che erano presenti nella gestione della configurazione degli orologi, se non lo aveste fatto, i problemi sono i seguenti:

  • Annullando le modifiche effettuate in configurazione, chiudendo senza salvare, sembrava che tali modifiche non fossero state applicate, ma alla chiusura e riapertura dell’applicazione invece le modifiche annullate venivano comunque applicate e gli orologi modificati.
  • Chiudendo la finestra senza salvare, il sistema non chiedeva alcuna conferma prima di annullare le modifiche.

Il motivo di questi due problemi, ovviamente correlati è il seguente:

  1. La modifica alla configurazione nella versione 1.0 viene effettuata direttamente sui dati attualmente in uso.
  2. A causa di questo, visto che alla chiusura della finestra principale i dati di configurazione vengono comunque automaticamente aggiornati per salvare le dimensioni della finestra, anche le modifiche annullate vengono salvate.
  3. Modificando direttamente i dati attuali di configurazione, non c’era modo di sapere se al momento della chiusura della finestra c’erano state variazioni quindi non era possibile notificare l’utente.

Vediamo quindi come ovviare ai problemi e rendere il nostro orologio un po’ più professionale.

Comments closed

1 – Multi Clock – Un applicazione in WPF

Qualche giorno fa, ero in ferie e ovviamente pioveva a dirotto, così ho deciso di fare una piccola applicazione che serve a me e ai miei colleghi in ufficio visto che lavoriamo quasi esclusivamente con aziende estere e più o meno tutte sono su fusi orari diversi dal nostro. Mentre sviluppavo la piccola applicazione che mi sono immaginata, mi sono resa conto che pure essendo semplice, potrebbe essere didatticamente interessante, pertanto, invece di farla divenire un progetto aziendale, l’ho fatta divenire un progetto DotNetwork, e la costruirò usando questo articolo, poi la modificherò aggiungendo nuove funzionalità e spiegando varie cose in alcuni articoli successivi.

L’applicazione verrà sviluppata in MVVM basico, cercando di far comprendere i concetti fondamentali del Binding e facendo vedere a chi si approccia alla programmazione C# XAML che non è difficile, che è potente e davvero ottima per creare applicazioni desktop.

La User Story

Partiamo indicando quali sono le richieste dei “clienti” in questo caso io e i miei colleghi. Spesso, ci troviamo ad organizzare video conferenze con i nostri clienti che si trovano su fuso orario diverso, pertanto se prima di chiamarli possiamo sapere che ore sono a casa loro evitiamo di svegliarli alle quattro del mattino, o di chiamarli mentre sono a pranzo o a cena. Per farlo, ci serve avere un orologio che possa mostrare l’ora di un diverso fuso orario. Ovviamente, l’appetito vien mangiando e la richiesta è divenuta, “Ma non potremmo avere un applicazione con una serie di orologi?”. Pertanto la storia è la seguente:

“Vorremmo un applicazione che ci mostri l’ora locale e l’ora di almeno due o tre diversi fusi orari, quelli che usiamo più spesso così è facile sapere come schedulare video conferenze, telefonate e anche appuntamenti.”

Comments closed

Utility e User Experience in WPF

In questo progetto implementeremo una semplice utility per verificare la target platform delle Dll e degli Exe memorizzati su una cartella e ne approfitteremo per mostrare come utilizzare la classe AutoSettingsManager già  implementata nella console del MiniSqlAgent, per migliorare la User Experience. Inoltre, visto che è un utility che possiamo “utilizzare” creiamo anche il setup della stessa utilizzando InnoSetup e mostriamo come utilizzare Visual Studio per effettuare la build del setup grazie ai Post Build Events.

Comments closed

16 – MIniSqlAgent – Modificare i Job per poter gestire il Timeout

In quanto sviluppato fino ad ora per creare un servizio in grado di eseguire script SQL su un Sql Server in modo schedulato, abbiamo predisposto tutto quanto per una esecuzione molto semplice, lasciando al client ADO e alla configurazione del Server SQL il compito di decidere come eseguire gli script. In questo post, aggiungeremo un parametro di controllo fondamentale per i Jobs, ovvero la possibilità di decidere dopo quanto tempo la connessione andrà in timeout se non riuscirà a completare un Job.

Comments closed

15 – MiniSqlAgent – Implementare il servizio per eseguire Job Schedulati su SQLServer

Alla distanza di 42 post dall’inizio della serie di quest’anno, arriviamo finalmente al post più importante per concludere lo sviluppo della versione 1.0 di MiniSqlAgent, un Servizio Windows in grado di eseguire in modo schedulato degli script SQL su qualsiasi SqlServer simulando in versione minimalista il Sql Server Agent. In questo post implementeremo quanto necessario ad effettuare le seguenti operazioni:

  • Allo startup del servizio leggere tutti i Job memorizzati sulla cartella dati del servizio ed inserirli in una collection.
  • Impostare un file system watcher che controlli se vengono aggiunti, cancellati, modificati dei Job sulla cartella dati riportando gli aggiornamenti sulla collection.
  • Impostare il Loop di servizio in modo tale che controlli se vi sono Job da eseguire e li esegua.
Comments closed

14 – MiniSqlAgent – User interface Tuning – Fare aprire una sola volta il Jobs Manager

In questo post andremo ad implementare il necessario a fare in modo che la finestra di base della MiniSqlAgentConsole non apra più di una volta l’interfaccia per la gestione dei Jobs. Per fare questo andremo ad implementare una classe entity Generic, una collection Generic, ed un metodo anonimo.

Comments closed

Common Libraries – Implementare una Window WPF con funzionalità estese

In questo post, vedremo come WPF ci permetta di derivare le proprie classi per permetterci di aggiungere funzionalità anche quando non vogliamo modificare l’aspetto visuale della classe WPF. In questo caso, avendo introdotto nel post precedente un sistema di memorizzazione di parametri di stato per la User Interface delle nostre applicazioni, vogliamo estendere la Window WPF e creare una nuova Window che sappia automaticamente come salvare la propria dimensione. Fatto questo, useremo questa nuova window come classe base per la MainWindow di MiniSqlAgentConsole.

Comments closed

Common Libraries – Una classe per memorizzare informazioni sullo stato della User Interface WPF

La dimensione delle finestre è ovviamente un esempio di ciò che si può fare con questo tipo di funzionalità, un’altra potrebbe essere quella di riaprire le finestre che erano aperte nell’ultima sessione di lavoro, ripopolare i parametri di filtro su una finestra dati, ed altre cose che rendono la vita dell’utente più semplice.

Non stiamo parlando di preferenze, ma di “stato” dell’applicazione.

Comments closed

13 – MiniSqlAgent – Una classe per far comunicare Strati diversi della User Interface WPF

In questo post spieghiamo come fare in modo che uno User Control che si trova vari strati all’interno della user interface possa comunicare con la MainWindow dell’applicazione senza passare per l’ufficio complicazione affari semplici. Per farlo utilizzeremo i delegate e le Action.

Il problema

Nell’interfaccia della console del servizio MiniSqlAgent abbiamo iniziato ad implementare una User Interface complessa, che simula le Child Window di una MDI utilizzando il TabControl e gli user control. Gli User Control che gestiscono gli oggetti Job, possono trovarsi vari “strati” lontani dalla Window che li contiene, e non sapere nulla di tale window per il proprio funzionamento, ma sulla MainWindow abbiamo implementato una StatusBar, che ci mostra se il Servizio è attivo oppure no, e visto che abbiamo dello spazio, ci piacerebbe utilizzarla per dare dei messaggi di status all’utente. Come facciamo a fare arrivare alla MDI dei messaggi che arrivano dagli User Control senza complicarci troppo la vita?

Comments closed