#dd12 Domino e DB2

855 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
855
On SlideShare
0
From Embeds
0
Number of Embeds
203
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

#dd12 Domino e DB2

  1. 1. Gestione Documentale e Flussi di lavorazioneDomino & DB2Fabio Di Paola
  2. 2. chi sono• Nellinformatica dal 1986• Lavoro con Notes dal 1991 – In Lotus Italia dal 1991 al 1998• Sistemista , amministratore di Notes• Poi col tempo mi sono spostato verso la parte di programmazione – (Domino e stabile, per gli amministratori non ce molto da fare...)• Attualmente in ERGO Previdenza
  3. 3. ERGO nel mondoERGO Italia appartiene al Gruppo ERGO, un partner solido e affidabile, in Germania e a livello internazionaleERGO è uno dei maggiori gruppi assicurativi in Germania e in Europa.A livello mondiale, è presente in oltre 30 paesi, principalmente in Europa e Asia.ERGO offre una vasta gamma di soluzioni assicurative che rinnova costantemente per soddisfare le semprenuove esigenze dei clienti. Vanta ottimi giudizi da parte delle più importanti agenzie di rating: A+ da Fitch e A daStandard & Poor*. ERGO appartiene a Munich Re, uno dei principali riassicuratori mondiali.
  4. 4. ERGO in ItaliaERGO sviluppa soluzioni assicurative semplici e chiare dedicate alle famiglie e ai professionisti grazie a ERGOPrevidenza e ERGO Assicurazioni, specializzate rispettivamente in prodotti per il risparmio e per la protezione dellapersona. I RISULTATI DEL 2011 IL MODELLO DISTRIBUTIVO E quello della rete delle reti. ERGO basa la propria struttura di vendita sulla multicanalità e, sostenendo l’impegno dei singoli, punta ad una continua espansione sul territorio e allo sviluppo di strategie commerciali adatte alle singole realtà di mercato. DISTRIBUTION RETI RETE DIRETTA ISTITUZIONI AGENZIE STRUTTURATE EIDN FINANZIARIE Circa 3.000 collaboratori su tutto il territorio italiano.
  5. 5. Il problema Lopportunità Domanda: "vorremmo passare allo scanner tutto larchivio cartaceo aziendale in modo daarchiviare i documenti in formato elettronico e poterli poi cercare ed estrarre. Puoi farlo con Notes? Si tratta di qualche centinaio di migliaia di documenti(forse si supera il milione)." Ahia, penso io, una cosa del genere mica la puoi gestire con i file di immagine inseriti come attachment in un .nsf. E poi anche per le ricerche Notes potrebbe non essere la soluzione piu performante. Ci vuole un motore di database sotto e poi si puo far girare il tutto con Notes“ah , dimenticavo, i documenti in entrata devono anche generare delle notifiche per le persone che devono prenderseli in carico e rispondere al cliente”
  6. 6. Cosa implementare• Lacquisizione di nuovi doc. da archiviare che possono essere file pdf, jpg, doc ecc. e che possono provenire da diverse fonti : scanner, email , videate, fax ecc.• Poi serve ovviamente un sistema di ricerca e visualizzazione di questi documenti• Ed infine una gestione dei flussi di lavorazioni associati ai documenti acquisiti.
  7. 7. Come implementarlo?• Notes per gestire i flussi di lavoro• DB2 per gestire il database dei documenti• Lotusscript per legare il tutto – Tutti gli script iniziano con Uselsx "*lsxlc" – cioè LotusScript Extension for Lotus Domino Connectors (LSX LC)N.B: non e NSFDb2
  8. 8. Lotus Domino Connectors• Non stiamo parlando di una tecnologia nuova• Fa parte di Lotus Enterprise Integrator (LEI) • (il redbook e del 2003)• Meglio ! E sperimentata ed e stabile !• I primi sviluppi in ERGO sono di 3 anni fa circa
  9. 9. Struttura Srv applicativo Notes Srv database DB2 9.x Ibm data server client (ex DB2 Connect)Il database DB2 ha 3 tabelle: INDICE DOCS AltroINDICE : i dati legati al singolo doc.DOCS : i documenti in formato BLOBALTRO: note e altri dati legati al singolo doc.Ed in aggiunta quella dellID che lega il tutto
  10. 10. Struttura (2)• Tutte le procedure di acquisizione dati agiscono allo stesso modo : – viene aperta la tabella Db2 CONTATORE che contiene un solo record: lultimo ID utilizzato – questo viene aumentato di 1 e memorizzato – vengono scritti i 3 record in indice, varie ed immagine utilizzando il numero ID sopra ottenuto – viene verificato il tipo documento aprendo lapposita tabella . – Se il tipo documento richiede lavorazione viene creato un documento notes di notifica
  11. 11. Flusso - 1• Una azienda esterna riceve la nostra posta• La posta viene passata allo scanner, salvata in Pdf ed indicizzata – Per ogni pdf vengono registrati i dati indicativi come num.polizza, tipo documento, contraente ecc.• Procedura notturna via FTP scarica i dati – Tutti i Pdf – Un file di indice con un record per ogni Pdf
  12. 12. Flusso - 2• Procedura LS legge il file di indice e – i dati di indicizzazione del singolo PDF vengono scritti in DB2 nella tabella indice – il campo delle eventuali note finisce nella tabella varie – il file nella tabella immagine – i record delle tre tabelle sono legati fra di loro dal numero di ID , un progressivo univoco.
  13. 13. Flusso - 3• Se nei dati correlati al Pdf sono presenti le condizioni richieste crea un documento nellapplicazione Notes• Sempre a secondo delle condizioni il campo $Reader del documento viene settato con lappropriato valore dando visibilità solo al gruppo che dovrà gestirlo• A cura degli addetti aprire poi questa notifica e prenderla in carico
  14. 14. Flusso - 4• La parte di Gestione/Presa in carico e un classico workflow in Notes – Ogni “notifica” puo generare fino a 5 lavorazioni diverse, gestite da 5 persone diverse – Segnala ai colleghi che la pratica e in lavorazione – Alla chiusura il workflow viene archiviato
  15. 15. Il risultato: Notifica
  16. 16. Un po di codiceUselsx "*lsxlc"
  17. 17. PrerequisitoSul server Domino deve esserci "Ibm data serverclient" oppure “Db2 Connect”che mi permette di instaurare le connessioni con irelativi driver Odbc (che non uso) e CLI (che sonoquelli che servono) piu tutta una serie di utility per ilDb2• Per maggiori info sulla parte CLI (Call Level Interface) vi aggiungo una citazione:It is a C and C++ application programming interface for relational databaseaccess that uses function calls to pass dynamic SQL statements as functionarguments. It is an alternative to embedded dynamic SQL, but unlikeembedded SQL, DB2 CLI does not require host variables or a precompiler.
  18. 18. Il “Cuore” in LotusscriptUselsx "*lsxlc"Dim c_immagine As New LCConnection ("db2") c_immagine.Database = “nomedb” c_immagine.Userid = “utenza” c_immagine.Password = “password” c_immagine.connect c_immagine.MapByName = True
  19. 19. Uselsx "*lsxlc"• Offre due diverse possibilita di utilizzo: – Creare una stringa di query SQL ed utilizzarla – Oppure una “immagine” del record Db2 in Lotuscript da manipolare
  20. 20. Con il comando SQLDim c_immagine As New LCConnection ("db2")....Dim fieldlist As New LCFieldListinterroga="select * from tabella where ID=" & Cdbl(id$)Call c_immagine.Execute(interroga, fieldlist)Call c_immagine.Fetch (fieldlist)
  21. 21. Creando “limmagine” del record• Dichiaro il record – Dim fieldlist As New LCFieldList• Dichiaro i campi contenuti nel record – Dim f_creata As New LCField(LCTYPE_DATETIME) – Dim f_nome As LCField• Assegno i campi al record – Set f_creata = fieldlist.append("creata",LCTYPE_DATETIME) – Set f_nome = fieldlist.Append("tariffa",LCTYPE_TEXT)• In questo modo ho preparato loggetto collegato a DB2 e posso manipolarlo – f_nome.Value = "Pippo"
  22. 22. Con gli oggetti di LC• Dim c_indice As New LCConnection ("db2")• Dim db2record As New LCFieldList• Dim f_nome As LCField – ....dichiaro i campi che mi servono• Set f_nome=db2record.Append("nome",LCTYPE_TEXT) – .... assegni i campi al record• f_nome.Value = "Pippo" – ....valorizzo i campi• Call c_indice.Insert(db2record) – Scrivo il record in DB2
  23. 23. La ricerca in archivio
  24. 24. Ricerca nel database• Oltre a gestire il flusso di lavoro e anche necessario poter ricercare i documenti allinterno del database• Questa funzionalità e servita via browser• Menu di ricerca – Per polizza / contraente / stampato• Riporta tutto il contenuto della posizione con i link ai singoli documenti che la compongono
  25. 25. Perchè Browser• Si e preferito servire la parte di ricerca via Http – Separazione netta fra le due componenti • Alcuni utenti non accedono alla parte lavorazione ma consultano comunque larchivio – Nessuna necessità di installazione ODBC sul client • Tutte le ricerche sono condotte centralmente dal server • Nessun mal di testa per gestire configurazioni Odbc, utenze , password e cosi via...
  26. 26. Costruzione dei risultati• La form di ricerca e una form notes• Il pulsante costruisce la query SQL e la esegue – interroga="select * from "& tabella & " where POLIZZA="& arg$ – While (connect.Fetch (fldLst) > 0) • Print "<table>" • Print "<td>" & fldlst.polizza(0) & "</td>" • .....
  27. 27. Interfaccia di ricerca
  28. 28. Risultati ricerca
  29. 29. • Elenco dei documenti per la polizza – icona la visualizzione del documento – Icona per visualizzazione dei dettagli di indice – Icona per la modifica dei dettagli di indice – Icona per visualizzazione dettagli anagrafici cliente
  30. 30. Visualizzazione/Modifica dei dati di indice
  31. 31. Un po di codiceInserimento e recupero dei blob
  32. 32. BLOB• In DB2 i file (pdf o altro) vengono memorizzati in campi BLOB • binary large object• La tabella Immagini contiene il campo Blob• Come memorizzarli e richiamarli da Lotusscript?
  33. 33. Memorizzazione• Devo avere due connessioni – Dim con As New LCConnection ("db2") – Una per la tabella DB2 – Dim c_file As New lcconnection("file") – Una per il filesystem • Le proprietà di questultima puntano a disco/directory: • c_file.database="d:" • c_file.metadata="nomedirectory" • c_file.binary=True • c_file.connect
  34. 34. Memorizzazione– Poi creo due FieldList • Dim fl_file As New LCFieldList • Dim fl_db2 As New LCFieldList– Ed una che uso per la ricerca • Dim cercalista As New LCFieldList • Dim cercacampo As LCField • Set cercacampo =cercalista.Append("filename",LCTYPE_TEXT) • cercacampo.value=nomefile • cercacampo.Flags=LCFIELDF_KEY
  35. 35. Memorizzazione - 2• ...e quindi lego il tutto • Call c_file.select(cercalista,1,fl_file) – Cerco il file definito da cercalista • Call fl_db2.MapName(fl_file,"contents","documento") – Mappatura del risultato della ricerca al record DB2 • Call c_file.fetch(fl_file) – Fetch del file che quindi e ora allinterno di fl_db2• Ed inserisco in DB2 • Call con.Insert(fl_db2) – scrivo fisicamente fl_db2 creando un nuovo record DB2
  36. 36. Estrazione• Esattamente speculare – Sempre due connettori : db2 e filesystem – Il fetch lo faccio pero da Db2 • int_immagine="select * from immagine where ID=999" • Call c_immagine.Execute(int_immagine, fldLstimm) • Call c_immagine.Fetch (fldLstimm) • Call c_file.Insert(fl_file)
  37. 37. Estrazione - 2• Poiche questa parte gira sul server ho poi bisogno di visualizzarla nel browser e lo faccio con: – Print "<SCRIPT LANGUAGE=Javascript>" – Print "window.open(/temp/" + nf$+",_self,)" – Print "</SCRIPT>"
  38. 38. Altri flussi
  39. 39. Altri flussi• Fax in entrata (serverfax su Domino – diverse linee in entrata) – Il fax deve essere letto, dopodiche la persona aggiunge i dati necessari per lindicizzazione – Script passa periodicamente ed elabora i fax indicizzati – Scarica il TIF e lo carica in DB2 coi dati di indice – Se necessario (sempre in base ai criteri) apre la “notifica di lavorazione” e quindi il tutto rientra nel ciclo
  40. 40. Altri flussi• Email – Corrispondenza inviata con casella di servizio come BCC – Il subject deve iniziare con “Polizza : xxxxxx” – Script passa periodicamente , scarica testo dellemail creando file HTML che viene caricato in DB2 – Allo stesso modo si comporta per eventuali allegati
  41. 41. Altri flussi• Reclami – Procedura particolare (sempre Notes) per la gestione dei reclami come regolamentato da ISVAP – Tutta la corrispondenza (entrata od uscita) a seguito di reclamo viene protocollata e scaricata in DB2
  42. 42. Altri flussi• Caricamenti manuali (spot) – Qualunque file sia necessario caricare puo essere inserito in apposita applicazione – Caricato come attachment insieme ai dati necessari per lindicizzazione (polizza, contraente ecc)
  43. 43. Corrispondenza in uscita• Tutta la corrispondenza in uscita da ERGO verso i clienti e gestita automaticamente: – Viene generato file .pdf della lettera – La produzione giornaliera dei pdf viene girata a Postel per stampa/imbustamento/spedizione – Contestualmente copia del pdf viene salvato in Db2 dalla procedura Questa e lunica parte dellapplicazione che non gira sotto Domino/Lotusscript
  44. 44. Visualizzazione dei dati allesterno Come passare i documenti alle agenzie
  45. 45. Reperimento documenti• Alcuni dei documenti memorizzati in Db2 devono essere a disposizione delle agenzie esterne• Il “cosa” puo essere visibile ed “a chi” deve essere controllato e ristretto• Le nostre agenzie già avevano/hanno una serie di applicativi Notes con interfaccia Html
  46. 46. Reperimento documenti (2)• La conseguenza naturale e una applicazione in Html che contiene solo i link per scaricarsi i documenti• Ogni agenzia ha il suo .nsf (sicurezza & performance)• Aprendolo vede la lista dei documenti a sua disposizione• Cliccando lancia uno script sul server che controlla la congruenza e scarica il file
  47. 47. Come è fatto• Il “cosa” puo vedere lagenzia e deciso in base alla tabella “Tipo documento”• Lotusscript gira giornalmente per verificare cosa e stato inserito nel giorno – Se il tipodocumento lo prevede apre l .nsf dellagenzia e scrive un Doc contenente il link – Il link e codificato in modo da contenere il numero agenzia e il riferimento al documento – Se questo match non e verificato lo Script sul server non mi passa il documento
  48. 48. Come viene visto
  49. 49. Qualche numero Db2 contiene : 4.043.362 files sulla parte Vita e 796.000 files sulla parte DanniNotes contiene 1.337.000 documenti (notifiche + lavorazioni)
  50. 50. Sviluppi futuri
  51. 51. I prossimi passi• Estensione del sistema alla parte Danni della compagnia – Gia iniziata , al momento presenti più di 800.000 documenti• Estensione del sistema allarchivio Sinistri – Previsto entro fine anno ...dopodichè diverremo realmente Paperless
  52. 52. I prossimi passi• Migrazione di Db2 dalla corrente piattaforma ad AIX – Il sistema danni e già partito su AIX – Quello Sinistri e già pianificato per AIX• Login sulla parte browser automatizzata via SPNEGO• Migrazione di alcune parti verso Xpages – A partire dalla componente per le agenzie
  53. 53. Side Effects• Lesperienza acquisita lavorando su questo progetto e poi stata riutilizzata• Altre applicazioni Notes che dialogano con Db2• Integrazione dei sistemi e dati aziendali
  54. 54. Riferimenti• Working with file attachments in the LCLSX http://www.ibm.com/developerworks/lotus/library/lclsx- attachments/• Redbook Implementing IBM Lotus Enterprise Integrator 6 http://publib- b.boulder.ibm.com/Redbooks.nsf/RedbookAbstracts/sg246067.html? Open• L Help di LS … ed altro cercando su Google
  55. 55. Grazie a tuttiit.linkedin.com/in/fabdipaolafabdipaola@gmail.com

×