SlideShare a Scribd company logo
1 of 18
Download to read offline
UNIVERSITÀ DEGLI STUDI DI TRIESTE
               FACOLTÀ DI INGEGNERIA
       Corso di laurea triennale in ingegneria informatica



  Migrazione dei meccanismi di
workflow di un sistema informativo
  assicurativo verso l’ambiente
       SQL Server e .NET


 Relatore:                                         Laureando:
 Prof. Leonardo Felician                           Donato Clun
Contesto:
Onlife è una assicurazione vita venduta su internet,
 proposta da L.A. Vita S.p.A., società controllata al
 100% da Allianz S.p.A.



Finalità:
Migrare e migliorare la componente software del
 sistema informativo che esegue ed automatizza
 parte del workflow aziendale.
Alcuni esempi di automatismi:
 •   Operazioni periodiche sui dati


 •   Generazione di documenti PDF (estratti conto,
     ordini di pagamento, ... )


 •   Automazione delle campagne di marketing
     (generazione e invio di email personalizzate)
Obiettivi:
   Riprodurre tutte le funzionalità del
    vecchio software di automazione

   Rispettare gli standard aziendali

   Garantire un elevato livello di
    servizio (alta disponibilità)

   Avere margine di crescita futura
Rispettare i vincoli imposti dagli standard aziendali.




                   Strumenti utilizzati:
 C#, .NET Framework 3.5,Visual Studio 2008
 SQL Server 2005
 Librerire dell’architettura Allianz
 NO Microsoft Office
 NO Stampanti virtuali
Obiettivi:
   Riprodurre tutte le funzionalità del
    vecchio software di automazione

   Rispettare gli standard aziendali

   Garantire un alto livello di servizio
    (alta disponibilità)

   Avere margine di crescita futura
Problema: garantire alta disponibilità.

    Stato del        Istante in cui il servizio      Istante in cui il servizio
    servizio             viene ripristinato            cessa di funzionare



Funzionamento

                                                                                          Tempo di
                                          Tempo tra due                                  riparazione
                                         malfunzionamenti
  Riparazione



                                                                                                       Tempo




                                                                                  MTBF
         Disponibilità media =
                                                                   MTBF + MTTR
Alta disponibilità: fattori chiave

   Comportarsi ragionevolmente in caso di
    situazioni impreviste (+ MTBF, - MTTR)

   Minimizzare i casi che possono bloccare il
    servizio (+ MTBF)

   Agevolare il lavoro di debug e riparazione
    (- MTTR)
Garantire alta disponibilità: soluzione
                 Applicare una metodologia
                  di gestione degli errori:
   Controllare sempre che i dati in input rispettino le specifiche.
   Qualunque situazione di errore va segnalata tramite un’eccezione.
   La decisione sul come comportarsi in seguito ad un errore, e il dovere
    di salvare le informazioni sul log, spetta sempre alla funzione che
    gestisce l’eccezione.

            Utilizzare un thread supervisore:
   Verificare che l’esecuzione di un automatismo non prosegua troppo.

         Documentare ampiamente gli errori:
   Ogni funzione che riceve un’eccezione e non è in grado di gestirla,
    deve lanciare una nuova eccezione (contenente i dettagli sul contesto
    che conosce) a cui è concatenata l’eccezione ricevuta.
Soluzione: lista concatenata di eccezioni.
Eccezione 6                              Eccezione 4                               Eccezione 2
Messaggio: “. . . . . . . . .”            Messaggio: “. . . . . . . . .”            Messaggio: “. . . . . . . . .”

InnerException                            InnerException                            InnerException




                   Eccezione 5                               Eccezione 3                               Eccezione 1
                    Messaggio: “. . . . . . . . .”            Messaggio: “. . . . . . . . .”             Messaggio: “. . . . . . . . .”

                    InnerException                            InnerException                             InnerException = NULL




  Ogni eccezione della catena contiene un messaggio che spiega il contesto
  in cui è avvenuto l’errore, dal punto di vista della funzione che l’ha creata.
Obiettivi:
   Riprodurre tutte le funzionalità del
    vecchio software di automazione

   Rispettare gli standard aziendali

   Garantire un alto livello di servizio
    (alta disponibilità)

   Avere margine di crescita futura
Problema: avere margine di crescita.
   Dato di fatto: negli automatismi la
      maggior parte del tempo è
       dedicata all’accesso ai dati.




   Migliorare l’efficienza ha significato
        migliorare l’accesso ai dati.
Migliorare l’efficienza: soluzione.
   Ridurre il numero di interrogazioni
    ripensando il codice

   Accorpare più interrogazioni in una sola

   Utilizzare stored procedure e stored
    functions per spostare parte della logica
    nel database
Esempio: “Ridurre il numero di interrogazioni
            ripensando il codice”.

                         PRIMA:
                     SELECT [...] WHERE
   CAST(NUMERO_QUOTAZIONE AS INT) = [numero quotazione]
                      (ripetuta N volte)


                          DOPO:
    SELECT [...] WHERE CAST(NUMERO_QUOTAZIONE AS INT)
    IN (SELECT DISTINCT IDQuotazione FROM logQuotazioni)
                      (eseguita una volta)
Esempio: “Utilizzare stored
                  procedure e stored functions”.
                 L’eliminazione dei dati sensibili è completamente a
                 carico dalla stored procedure EliminaDatiSensibili:
DECLARE @dataElim datetime
SET @dataElim = GETDATE()
DECLARE @eliminati int

UPDATE Contratti
SET
  QuestAltezza = NULL, QuestPeso = NULL, QuestPressioneMax = NULL, QuestTrigliceridi = NULL,
  QuestColesteroloTot = NULL, QuestColesteroloHdl = NULL, [QuestFlagDiabete?] = NULL,
  [QuestFlagInfarti?] = NULL, DataCancellazioneDatiSensibili = NULL,
  Note = Note + 'Scaduta validità proposta in data ' + CAST(GETDATE() AS nvarchar)
WHERE NOT DataCancellazioneDatiSensibili IS NULL AND
  DataCancellazioneDatiSensibili < DateAdd(d, 1, @dataElim) AND
  Status <> 100 AND
  Status <> 200 AND
  NOT ID IN (SELECT NumeroProposta FROM CarichiContabili WHERE TipoCarico = 1) AND
  Contratti.ID NOT IN (SELECT Contratti.ID FROM Contratti WHERE (((Contratti.IDPartner) IN
  (SELECT DISTINCT Contratti.IDPartner FROM Contratti INNER JOIN CarichiContabili ON
  Contratti.ID = CarichiContabili.NumeroProposta WHERE (((CarichiContabili.TipoCarico)=1))))))

SET @eliminati = @@ROWCOUNT

UPDATE IntMaster SET DataUltimaEliminazioneDatiSensibili = GETDATE()

DECLARE @risultato as nvarchar(50)
SET @risultato = 'Eliminati i dati sensibili di ' + CAST(@eliminati as nvarchar) + ' proposte'
EXEC [dbo].[addToLog] @risultato, 'Stored procedure: eliminaDatiSensibili', 5
Obiettivi:
   Riprodurre tutte le funzionalità del
    vecchio software di automazione

   Rispettare gli standard aziendali

   Garantire un alto livello di servizio
    (alta disponibilità)

   Avere margine di crescita futura
Alcuni aspetti interessanti
      dell’implementazione degli automatismi:
   Successivamente alla definizione delle metodologie
    risolutive, è stata adottata una strategia di sviluppo mista
    top-down e bottom-up, orientata ad un precoce debug dei
    moduli software creati.

   La produzione PDF avviene tramite la libreria iTextSharp (al
    ritmo di 50 documenti al secondo).

   La classe che si occupa di scrivere sul log i messaggi di
    errore è realizzata secondo il design pattern Singleton.

   La mutua esclusione dell’accesso metodi della classe Logger
    è gestita tramite Lock.
Il software sviluppato ha soddisfatto i requisiti
imposti dall’azienda, e l’entrata in produzione delle
        prime funzionalità è prevista a breve.


        Riprodurre tutte le funzionalità del vecchio
         software di automazione

        Rispettare gli standard aziendali

        Garantire un alto livello di servizio (alta
         disponibilità)

        Avere margine di crescita futura

More Related Content

Similar to Migrazione dei meccanismi di workflow di un sistema informativo assicurativo verso l'ambiente SQL Server e .NET

PASS Virtual Chapter - SQL Server Continuous Integration
PASS Virtual Chapter - SQL Server Continuous IntegrationPASS Virtual Chapter - SQL Server Continuous Integration
PASS Virtual Chapter - SQL Server Continuous IntegrationAlessandro Alpi
 
Presentazione understand
Presentazione understandPresentazione understand
Presentazione understandLuigi La Torre
 
Introduzione al Test Driven Development
Introduzione al Test Driven DevelopmentIntroduzione al Test Driven Development
Introduzione al Test Driven DevelopmentEnnio Masi
 
Agile Day 2012 - Sviluppo agile in un contesto bancario: come far convivere t...
Agile Day 2012 - Sviluppo agile in un contesto bancario: come far convivere t...Agile Day 2012 - Sviluppo agile in un contesto bancario: come far convivere t...
Agile Day 2012 - Sviluppo agile in un contesto bancario: come far convivere t...Tommaso Torti
 
Introduzione a Node.js
Introduzione a Node.jsIntroduzione a Node.js
Introduzione a Node.jsMichele Capra
 
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...Alessandro Alpi
 
Machine learning models continuous deployment on azure using devops
Machine learning models continuous deployment on azure using devopsMachine learning models continuous deployment on azure using devops
Machine learning models continuous deployment on azure using devopsIgor Antonacci
 
Layered Expression Trees feat. CQRS
Layered Expression Trees feat. CQRSLayered Expression Trees feat. CQRS
Layered Expression Trees feat. CQRSAndrea Saltarello
 
Studio di una Architettura per un Sistema Distributivo ad Alta Affidabilità
Studio di una Architettura per un Sistema Distributivo ad Alta AffidabilitàStudio di una Architettura per un Sistema Distributivo ad Alta Affidabilità
Studio di una Architettura per un Sistema Distributivo ad Alta AffidabilitàRoberto Peruzzo
 
Detailed Model Capture
Detailed Model CaptureDetailed Model Capture
Detailed Model Capturefcospito
 
Detailed Model Capture
Detailed Model CaptureDetailed Model Capture
Detailed Model Capturefcospito
 
Integrazione continua con TFS Build
Integrazione continua con TFS BuildIntegrazione continua con TFS Build
Integrazione continua con TFS BuildGian Maria Ricci
 
Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011Gian Maria Ricci
 
SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!
SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!
SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!DotNetCampus
 
Signal r to the-max
Signal r to the-maxSignal r to the-max
Signal r to the-maxDotNetCampus
 

Similar to Migrazione dei meccanismi di workflow di un sistema informativo assicurativo verso l'ambiente SQL Server e .NET (20)

PASS Virtual Chapter - SQL Server Continuous Integration
PASS Virtual Chapter - SQL Server Continuous IntegrationPASS Virtual Chapter - SQL Server Continuous Integration
PASS Virtual Chapter - SQL Server Continuous Integration
 
Presentazione understand
Presentazione understandPresentazione understand
Presentazione understand
 
Introduzione al Test Driven Development
Introduzione al Test Driven DevelopmentIntroduzione al Test Driven Development
Introduzione al Test Driven Development
 
Agile Day 2012 - Sviluppo agile in un contesto bancario: come far convivere t...
Agile Day 2012 - Sviluppo agile in un contesto bancario: come far convivere t...Agile Day 2012 - Sviluppo agile in un contesto bancario: come far convivere t...
Agile Day 2012 - Sviluppo agile in un contesto bancario: come far convivere t...
 
Introduzione a node.js
Introduzione a node.jsIntroduzione a node.js
Introduzione a node.js
 
Introduzione a Node.js
Introduzione a Node.jsIntroduzione a Node.js
Introduzione a Node.js
 
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
 
TTT - Test, Tools and Tips - jug roma
TTT - Test, Tools and Tips - jug romaTTT - Test, Tools and Tips - jug roma
TTT - Test, Tools and Tips - jug roma
 
Machine learning models continuous deployment on azure using devops
Machine learning models continuous deployment on azure using devopsMachine learning models continuous deployment on azure using devops
Machine learning models continuous deployment on azure using devops
 
Layered Expression Trees feat. CQRS
Layered Expression Trees feat. CQRSLayered Expression Trees feat. CQRS
Layered Expression Trees feat. CQRS
 
Studio di una Architettura per un Sistema Distributivo ad Alta Affidabilità
Studio di una Architettura per un Sistema Distributivo ad Alta AffidabilitàStudio di una Architettura per un Sistema Distributivo ad Alta Affidabilità
Studio di una Architettura per un Sistema Distributivo ad Alta Affidabilità
 
XPages Tips & Tricks, #dd13
XPages Tips & Tricks, #dd13XPages Tips & Tricks, #dd13
XPages Tips & Tricks, #dd13
 
3DD 1e Reconfig
3DD 1e Reconfig3DD 1e Reconfig
3DD 1e Reconfig
 
Detailed Model Capture
Detailed Model CaptureDetailed Model Capture
Detailed Model Capture
 
Detailed Model Capture
Detailed Model CaptureDetailed Model Capture
Detailed Model Capture
 
Integrazione continua con TFS Build
Integrazione continua con TFS BuildIntegrazione continua con TFS Build
Integrazione continua con TFS Build
 
TYPO3 CMS 8.1 - Le novità
TYPO3 CMS 8.1 - Le novitàTYPO3 CMS 8.1 - Le novità
TYPO3 CMS 8.1 - Le novità
 
Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011
 
SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!
SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!
SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!
 
Signal r to the-max
Signal r to the-maxSignal r to the-max
Signal r to the-max
 

Migrazione dei meccanismi di workflow di un sistema informativo assicurativo verso l'ambiente SQL Server e .NET

  • 1. UNIVERSITÀ DEGLI STUDI DI TRIESTE FACOLTÀ DI INGEGNERIA Corso di laurea triennale in ingegneria informatica Migrazione dei meccanismi di workflow di un sistema informativo assicurativo verso l’ambiente SQL Server e .NET Relatore: Laureando: Prof. Leonardo Felician Donato Clun
  • 2. Contesto: Onlife è una assicurazione vita venduta su internet, proposta da L.A. Vita S.p.A., società controllata al 100% da Allianz S.p.A. Finalità: Migrare e migliorare la componente software del sistema informativo che esegue ed automatizza parte del workflow aziendale.
  • 3. Alcuni esempi di automatismi: • Operazioni periodiche sui dati • Generazione di documenti PDF (estratti conto, ordini di pagamento, ... ) • Automazione delle campagne di marketing (generazione e invio di email personalizzate)
  • 4. Obiettivi:  Riprodurre tutte le funzionalità del vecchio software di automazione  Rispettare gli standard aziendali  Garantire un elevato livello di servizio (alta disponibilità)  Avere margine di crescita futura
  • 5. Rispettare i vincoli imposti dagli standard aziendali. Strumenti utilizzati:  C#, .NET Framework 3.5,Visual Studio 2008  SQL Server 2005  Librerire dell’architettura Allianz  NO Microsoft Office  NO Stampanti virtuali
  • 6. Obiettivi:  Riprodurre tutte le funzionalità del vecchio software di automazione  Rispettare gli standard aziendali  Garantire un alto livello di servizio (alta disponibilità)  Avere margine di crescita futura
  • 7. Problema: garantire alta disponibilità. Stato del Istante in cui il servizio Istante in cui il servizio servizio viene ripristinato cessa di funzionare Funzionamento Tempo di Tempo tra due riparazione malfunzionamenti Riparazione Tempo MTBF Disponibilità media = MTBF + MTTR
  • 8. Alta disponibilità: fattori chiave  Comportarsi ragionevolmente in caso di situazioni impreviste (+ MTBF, - MTTR)  Minimizzare i casi che possono bloccare il servizio (+ MTBF)  Agevolare il lavoro di debug e riparazione (- MTTR)
  • 9. Garantire alta disponibilità: soluzione Applicare una metodologia di gestione degli errori:  Controllare sempre che i dati in input rispettino le specifiche.  Qualunque situazione di errore va segnalata tramite un’eccezione.  La decisione sul come comportarsi in seguito ad un errore, e il dovere di salvare le informazioni sul log, spetta sempre alla funzione che gestisce l’eccezione. Utilizzare un thread supervisore:  Verificare che l’esecuzione di un automatismo non prosegua troppo. Documentare ampiamente gli errori:  Ogni funzione che riceve un’eccezione e non è in grado di gestirla, deve lanciare una nuova eccezione (contenente i dettagli sul contesto che conosce) a cui è concatenata l’eccezione ricevuta.
  • 10. Soluzione: lista concatenata di eccezioni. Eccezione 6 Eccezione 4 Eccezione 2 Messaggio: “. . . . . . . . .” Messaggio: “. . . . . . . . .” Messaggio: “. . . . . . . . .” InnerException InnerException InnerException Eccezione 5 Eccezione 3 Eccezione 1 Messaggio: “. . . . . . . . .” Messaggio: “. . . . . . . . .” Messaggio: “. . . . . . . . .” InnerException InnerException InnerException = NULL Ogni eccezione della catena contiene un messaggio che spiega il contesto in cui è avvenuto l’errore, dal punto di vista della funzione che l’ha creata.
  • 11. Obiettivi:  Riprodurre tutte le funzionalità del vecchio software di automazione  Rispettare gli standard aziendali  Garantire un alto livello di servizio (alta disponibilità)  Avere margine di crescita futura
  • 12. Problema: avere margine di crescita. Dato di fatto: negli automatismi la maggior parte del tempo è dedicata all’accesso ai dati. Migliorare l’efficienza ha significato migliorare l’accesso ai dati.
  • 13. Migliorare l’efficienza: soluzione.  Ridurre il numero di interrogazioni ripensando il codice  Accorpare più interrogazioni in una sola  Utilizzare stored procedure e stored functions per spostare parte della logica nel database
  • 14. Esempio: “Ridurre il numero di interrogazioni ripensando il codice”. PRIMA: SELECT [...] WHERE CAST(NUMERO_QUOTAZIONE AS INT) = [numero quotazione] (ripetuta N volte) DOPO: SELECT [...] WHERE CAST(NUMERO_QUOTAZIONE AS INT) IN (SELECT DISTINCT IDQuotazione FROM logQuotazioni) (eseguita una volta)
  • 15. Esempio: “Utilizzare stored procedure e stored functions”. L’eliminazione dei dati sensibili è completamente a carico dalla stored procedure EliminaDatiSensibili: DECLARE @dataElim datetime SET @dataElim = GETDATE() DECLARE @eliminati int UPDATE Contratti SET QuestAltezza = NULL, QuestPeso = NULL, QuestPressioneMax = NULL, QuestTrigliceridi = NULL, QuestColesteroloTot = NULL, QuestColesteroloHdl = NULL, [QuestFlagDiabete?] = NULL, [QuestFlagInfarti?] = NULL, DataCancellazioneDatiSensibili = NULL, Note = Note + 'Scaduta validità proposta in data ' + CAST(GETDATE() AS nvarchar) WHERE NOT DataCancellazioneDatiSensibili IS NULL AND DataCancellazioneDatiSensibili < DateAdd(d, 1, @dataElim) AND Status <> 100 AND Status <> 200 AND NOT ID IN (SELECT NumeroProposta FROM CarichiContabili WHERE TipoCarico = 1) AND Contratti.ID NOT IN (SELECT Contratti.ID FROM Contratti WHERE (((Contratti.IDPartner) IN (SELECT DISTINCT Contratti.IDPartner FROM Contratti INNER JOIN CarichiContabili ON Contratti.ID = CarichiContabili.NumeroProposta WHERE (((CarichiContabili.TipoCarico)=1)))))) SET @eliminati = @@ROWCOUNT UPDATE IntMaster SET DataUltimaEliminazioneDatiSensibili = GETDATE() DECLARE @risultato as nvarchar(50) SET @risultato = 'Eliminati i dati sensibili di ' + CAST(@eliminati as nvarchar) + ' proposte' EXEC [dbo].[addToLog] @risultato, 'Stored procedure: eliminaDatiSensibili', 5
  • 16. Obiettivi:  Riprodurre tutte le funzionalità del vecchio software di automazione  Rispettare gli standard aziendali  Garantire un alto livello di servizio (alta disponibilità)  Avere margine di crescita futura
  • 17. Alcuni aspetti interessanti dell’implementazione degli automatismi:  Successivamente alla definizione delle metodologie risolutive, è stata adottata una strategia di sviluppo mista top-down e bottom-up, orientata ad un precoce debug dei moduli software creati.  La produzione PDF avviene tramite la libreria iTextSharp (al ritmo di 50 documenti al secondo).  La classe che si occupa di scrivere sul log i messaggi di errore è realizzata secondo il design pattern Singleton.  La mutua esclusione dell’accesso metodi della classe Logger è gestita tramite Lock.
  • 18. Il software sviluppato ha soddisfatto i requisiti imposti dall’azienda, e l’entrata in produzione delle prime funzionalità è prevista a breve.  Riprodurre tutte le funzionalità del vecchio software di automazione  Rispettare gli standard aziendali  Garantire un alto livello di servizio (alta disponibilità)  Avere margine di crescita futura