2. chi sono
• Nell'informatica 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 c'e' molto
da fare...)
• Attualmente in ERGO Previdenza
3. ERGO nel mondo
ERGO Italia appartiene al Gruppo ERGO, un partner solido e affidabile, in Germania e a livello internazionale
ERGO è 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 sempre
nuove esigenze dei clienti. Vanta ottimi giudizi da parte delle più importanti agenzie di rating: A+ da Fitch e A da
Standard & Poor*. ERGO appartiene a Munich Re, uno dei principali riassicuratori mondiali.
4. ERGO in Italia
ERGO sviluppa soluzioni assicurative semplici e chiare dedicate alle famiglie e ai professionisti grazie a ERGO
Previdenza e ERGO Assicurazioni, specializzate rispettivamente in prodotti per il risparmio e per la protezione della
persona.
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. Il problema L'opportunità
Domanda:
"vorremmo passare allo scanner tutto l'archivio cartaceo aziendale in modo da
archiviare 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. Cosa implementare
• L'acquisizione 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. 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. 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. Struttura
Srv applicativo
Notes Srv database
DB2 9.x
Ibm data server
client (ex DB2
Connect)
Il database DB2 ha 3 tabelle: INDICE DOCS Altro
INDICE : i dati legati al singolo doc.
DOCS : i documenti in formato BLOB
ALTRO: note e altri dati legati al singolo doc.
Ed in aggiunta quella dell'ID che lega il tutto
10. Struttura (2)
• Tutte le procedure di acquisizione dati agiscono
allo stesso modo :
– viene aperta la tabella Db2 CONTATORE che contiene un
solo record: l'ultimo 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 l'apposita tabella
.
– Se il tipo documento richiede lavorazione viene creato un
documento notes di notifica
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. 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. Flusso - 3
• Se nei dati correlati al Pdf sono presenti le
condizioni richieste crea un documento
nell'applicazione Notes
• Sempre a secondo delle condizioni il campo
$Reader del documento viene settato con
l'appropriato valore dando visibilità solo al gruppo
che dovrà gestirlo
• A cura degli addetti aprire poi questa notifica e
prenderla in carico
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
17. Prerequisito
Sul server Domino deve esserci "Ibm data server
client" oppure “Db2 Connect”
che mi permette di instaurare le connessioni con i
relativi driver Odbc (che non uso) e CLI (che sono
quelli che servono) piu' tutta una serie di utility per il
Db2
• Per maggiori info sulla parte CLI (Call Level
Interface) vi aggiungo una citazione:
It is a 'C' and 'C++' application programming interface for relational database
access that uses function calls to pass dynamic SQL statements as function
arguments. It is an alternative to embedded dynamic SQL, but unlike
embedded SQL, DB2 CLI does not require host variables or a precompiler.
18. Il “Cuore” in Lotusscript
Uselsx "*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. 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. Con il comando SQL
Dim c_immagine As New LCConnection ("db2")
....
Dim fieldlist As New LCFieldList
interroga="select * from tabella where ID=" & Cdbl(id$)
Call c_immagine.Execute(interroga, fieldlist)
Call c_immagine.Fetch (fieldlist)
21. Creando “l'immagine” 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 l'oggetto collegato a DB2 e
posso manipolarlo
– f_nome.Value = "Pippo"
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
24. Ricerca nel database
• Oltre a gestire il flusso di lavoro e' anche necessario
poter ricercare i documenti all'interno 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. 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 l'archivio
– 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. 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>"
• .....
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
31. Un po' di codice
Inserimento e recupero dei blob
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. 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 quest'ultima puntano a disco/directory:
• c_file.database="d:"
• c_file.metadata="nomedirectory"
• c_file.binary=True
• c_file.connect
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. 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 all'interno di fl_db2
• Ed inserisco in DB2
• Call con.Insert(fl_db2)
– scrivo fisicamente fl_db2 creando un nuovo record DB2
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. 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>"
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 l'indicizzazione
– 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. Altri flussi
• Email
– Corrispondenza inviata con casella di servizio come BCC
– Il subject deve iniziare con “Polizza : xxxxxx”
– Script passa periodicamente , scarica testo dell'email
creando file HTML che viene caricato in DB2
– Allo stesso modo si comporta per eventuali allegati
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. Altri flussi
• Caricamenti manuali (spot)
– Qualunque file sia necessario caricare puo essere
inserito in apposita applicazione
– Caricato come attachment insieme ai dati necessari per
l'indicizzazione (polizza, contraente ecc)
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' l'unica parte dell'applicazione che non gira
sotto Domino/Lotusscript
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. 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. Come è fatto
• Il “cosa” puo' vedere l'agenzia 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 dell'agenzia 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
49. Qualche numero
Db2 contiene :
4.043.362 files sulla parte Vita
e 796.000 files sulla parte Danni
Notes contiene 1.337.000 documenti (notifiche +
lavorazioni)
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 all'archivio Sinistri
– Previsto entro fine anno
...dopodichè diverremo realmente Paperless
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. Side Effects
• L'esperienza acquisita lavorando su questo
progetto e' poi stata riutilizzata
• Altre applicazioni Notes che dialogano con Db2
• Integrazione dei sistemi e dati aziendali
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