Articolo: Visualizzare un documento di Filenet con Visual Basic Net e C#
Figura 1
Introduzione
In questo articolo, vedremo come visualizzare un documento, inserito in filenet, in una nostra applicazione windows, tramite la tecnologia .net, i linguaggi che utilizzeremo sono Visual Basic Net e C#.
Tramite i controlli messi a disposizione da filenet, ed in particolare del controllo Filenet Panagon IDM VIEW Control, possiamo visualizzare in una nostra applicazione per windows, i file (immagini, .doc, ecc) inseriti in filenet. Tale controllo, permette una visualizzazione di tale file all'interno del controllo, come mostrato in figura 1.
Inserimento del controllo nella barra degli strumenti.
Continuando dal progetto sviluppato nell'articolo precedente, si crea una form, il cui compito è quello di aprire (tramite appositi pulsanti) altre finestre. Dopo aver creato tale finestra, si aggiunge al progetto una nuova form, la quale avrà il compito di visualizzare i documenti. Aggiungiamo al progetto il controllo Filenet Panagon Idm View control, tramite il tasto destro del mouse, sulla barra degli strumenti, selezioniamo dal menu di scelta rapida, la voce aggiungi controllo. Verrà aperta una finestra, contenente i controlli installati sul pc, da questa finestra selezioniamo il controllo Filenet Panagon IDM VIew control, come mostrato in figura 2.
Figura 2
Dopo aver selezionato tale voce, mettiamo una spunta a tale controllo, e chiudiamo la finestra tramite il pulsante ok, in questo modo verrà visualizzato il controllo nella barra degli strumenti, come mostrato in figura 3.
Figura 3
Creazione della finestra per la visualizzazione del documento.
Si crea una finestra, nella quale saranno visualizzati i documenti, la finestra avrà una lista dei nomi (corrispondenti al codice id, impostato da filenet) ed il controllo idm view di filenet, per la visualizzazione dei documenti. Inseriamo nella finestra, due controlli label, un pulsante, un controllo listbox ed infine il controllo filenet idm viewer, inserito precedentemente, la finestra dovrà avere un aspetto simile alla figura 1.
Inseriamo lo spazio dei nomi, per la gestione dei database generali, oledb. Di seguito si riporta tale codice:
Vb.Net
Imports
System.Data.OleDb
C#
using
System.Data.OleDb;
Si dichiara a livello generale della form, un oggetto di tipo idmlibrary per la gestione delle librerie
Vb.Net
Private
objLibrary As New IDMObjects.Library
C#
//oggetto libreria
IDMObjects.Library ObjLibrary =
new IDMObjects.Library();
Siccome l'oggetto library, è quel oggetto per le gestione dei documenti che in precedenza abbiamo utilizzato tramite il metodo logon per effettuare il login, quindi l'autenticazione a filenet, dobbiamo utilizzare l'istanza di quell'oggetto, per gestire i vari documenti nella nostra form, a tal fine si crea un nuovo costruttore, che accetta come parametro un oggetto di tipo library.
Di seguito si riporta un frammento di codice.
Vb.Net
InitializeComponent()
objLibrary = libreria
Sub New(ByVal libreria As IDMObjects.Library)End Sub
C#
public
{
InitializeComponent();
ObjLibrary = libreria;
}
FrmVisualizzaDocumento(IDMObjects.Library libreria)
Caricamento dei nomi dei file
Nell'evento load della form, carichiamo nel controllo lista tutti i nomi dei documenti inseriti in filenet, in particolare, per rilevare tali nomi, dobbiamo effettuare una query, nel provider di filenet, tale query è diversa se utilizziamo la versione IS (Image Services) o CS (content Services) perchè i nomi dei campi della tabella sono differenti. La query che andremo ad eseguire, avrà il compito di restituire tutti quei nomi dei documenti, in cui hanno il campo classe documentale impostato secondo un nostro valore (Es. "classeTest"). Le Classi che utilizzeremo sono le seguenti:
Oledbconnection per la connessione al database, oledbcommand (occorre lavorare in modalità connessa) per effettuare le query, un oledbdatareader per il rilevamento dei dati trovati. Infine utilizzeremo le classi messi a disposizione da filenet per la gestione degli errori. Di seguito si riporta il codice, da inserire nell'evento load della form.
Vb.Net
'carico i dati nella listbox
Dim ConDati As OleDbConnection Dim DtaDati As OleDbDataAdapter Try
' Query per la versione IS
'Queri per la versione CS
Dim StrSql As String = "Select idmId , idmName,idmDateAdded from FnDocument where idmDocType ='ClasseTest' order by idmId,idmDateAdded "
& objLibrary.Name _
&
&
Dim StrConnessione As String = "provider=FnDBProvider;data source=" _";Prompt=4;SystemType=" & objLibrary.SystemType _";user id=Admin;password=MiaPassword;LogonID=" & objLibrary.LogonId & ";"
ConDati =
ConDati.Open()
'Effettuo la query
'Rilevo i dati
Dim oledbReader As OleDbDataReader = oledbcommand.ExecuteReader()'valorizzo la lista
ListBox1.Items.Add(oledbReader(0).ToString())
While oledbReader.Read()End While
'Eccezione
Catch ex As ExceptionDim ObjErrorManager As New IDMError.ErrorManagerDim ObjErrori As IDMError.ErrorsDim StrTestoErrore As String = ""
Dim objErrore As IDMError.ErrorIf ObjErrorManager.Errors.Count > 0 Then
ObjErrori = ObjErrorManager.Errors
'ciclo per tutti gli errori
StrTestoErrore = objErrore.Description
For Each objErrore In ObjErroriNext
Else
StrTestoErrore = ex.Message
End If
MsgBox(StrTestoErrore)
Finally
'chiudo i vari oggetti
DtaDati =
Nothing
dtsDati =
Nothing
ConDati =
If ConDati.State = ConnectionState.Open Then ConDati.Close()Nothing
End Try
C#
try
{
//DA UTILIZZARE SOLO PER IS - string StrSql = "Select F_DOCNUMBER,F_DOCCLASSNAME,F_ENTRYDATE from FnDocument where F_DOCCLASSNAME='ClasseTest' order by F_DOCNUMBER,F_ENTRYDATE" ;
//Query da utilizzare per la versione CS
ConDati.Open();
//Eseguo la query
//Ricavo i dati
OleDbDataReader oledbReader = oledbcommand.ExecuteReader();//valorizzo la lista
oledbReader.Read();
ListBox1.Items.Add(oledbReader[0].ToString());
while (oledbReader.Read()) catch (Exception ex)new IDMError.ErrorManager();string StrTestoErrore = "";//verifico che in filenet ci siano errori
{
ObjErrori = ObjErrorManager.Errors;
}
if (ObjErrorManager.Errors.Count > 0)//ciclo per tutti gli errori
{
StrTestoErrore = objErrore.Description;
}
foreach (IDMError.Error objErrore in ObjErrori)else
{
StrTestoErrore = ex.Message;
}
}
Visualizzare un documento
In questa parte viene descritto come visualizzare nel controllo di filenet, un documento, in particolare quando selezioniamo dalla lista, il nome del documento, verrà visualizzato nel controllo idm view il file selezionato. Utilizzeremo un oggetto di tipo document, il quale tramite la proprietà Id, ci fornirà l'identificativo univoco che filenet assegna ai file, con questo valore, impostiamo la proprietà DocumentId del controllo IDM View, e tramite il metodo refresh aggiorniamo il controllo con il documento selezionato.
Il codice riportato qui di seguito va inserito nell'evento SelectedIndexChanged della listbox, inserita precedemente.
Vb.Net
'oggetto per la visualizzazione
'ottengo l'oggetto documento del nome selezionato nella lista
ObjDocument = objLibrary.GetObject(IDMObjects.idmObjectType.idmObjTypeDocument, ListBox1.SelectedItem.ToString())
'"pulisco" l'immagine precedente
AxIDMViewerCtrl1.Clear()
AxIDMViewerCtrl1.DocumentID = ObjDocument.ID
AxIDMViewerCtrl1.Refresh()
Catch ex As ExceptionDim ObjErrorManager As New IDMError.ErrorManagerDim ObjErrori As IDMError.ErrorsDim StrTestoErrore As String = ""
Dim objErrore As IDMError.ErrorIf ObjErrorManager.Errors.Count > 0 Then
ObjErrori = ObjErrorManager.Errors
'ciclo per tutti gli errori
StrTestoErrore = objErrore.Description
For Each objErrore In ObjErroriNext
Else
StrTestoErrore = ex.Message
End If
MsgBox(StrTestoErrore)
Finally
ObjDocument =
Nothing
End Try
C#
try
{
//oggetto per la visualizzazione
IDMObjects.Document ObjDocument;
//ottengo l'oggetto documento selezionato nella lista
ObjDocument = (IDMObjects.Document) ObjLibrary.GetObject(IDMObjects.idmObjectType.idmObjTypeDocument, ListBox1.SelectedItem,
axIDMViewerCtrl1.Refresh();
}
{
IDMError.ErrorManager ObjErrorManager =
IDMError.Errors ObjErrori;
IDMError.Error ObjErrore;
}
null,null,null);//"pulisco" l'immagine precedente
axIDMViewerCtrl1.Clear();
axIDMViewerCtrl1.DocumentID = ObjDocument.ID;
catch (Exception ex)new IDMError.ErrorManager();string StrTestoErrore = "";//verifico che in filenet ci siano errori
{
ObjErrori = ObjErrorManager.Errors;
if (ObjErrorManager.Errors.Count > 0)//ciclo per tutti gli errori
{
StrTestoErrore = objErrore.Description;
}
foreach (IDMError.Error objErrore in ObjErrori) else
{
StrTestoErrore = ex.Message;
}
}
MessageBox.Show(StrTestoErrore, "FileNet");
Chiusura della form
Per concludere, quando si chiude la finestra, prima di eliminare gli oggetti in memoria, dobbiamo chiudere la connessione a filenet, questo avviene tramite il metodo logoff, verificando che la connessione è ancora attiva. Queste operazioni vanno effettuate nell'evento closing della form. Di seguito si riporta un esempo di codice:
Vb.Net
Try
If objLibrary.GetState(IDMObjects.idmLibraryState.idmLibraryLoggedOn) = True Then
'chiudo la connessione
objLibrary.Logoff()
End If
Catch ex As ExceptionDim ObjErrorManager As New IDMError.ErrorManagerDim ObjErrori As IDMError.ErrorsDim StrTestoErrore As String = ""
Dim objErrore As IDMError.ErrorIf ObjErrorManager.Errors.Count > 0 Then
ObjErrori = ObjErrorManager.Errors
'ciclo per tutti gli errori
StrTestoErrore = objErrore.Description
For Each objErrore In ObjErroriNext
Else
StrTestoErrore = ex.Message
End If
MsgBox(StrTestoErrore)
Finally
'distruggo l'oggetto
objLibrary =
Nothing
End Try
C#
try
{
{
}
}
{
IDMError.ErrorManager ObjErrorManager =
IDMError.Errors ObjErrori;
IDMError.Error ObjErrore;
if (objLibrary.GetState(IDMObjects.idmLibraryState.idmLibraryLoggedOn) = True )//chiudo la connessione
ObjLibrary.Logoff();
catch (Exception ex)new IDMError.ErrorManager();string StrTestoErrore = "";//verifico che in filenet ci siano errori
{
ObjErrori = ObjErrorManager.Errors;
if (ObjErrorManager.Errors.Count > 0)//ciclo per tutti gli errori
{
StrTestoErrore = objErrore.Description;
}
}
foreach (IDMError.Error objErrore in ObjErrori)else
{
StrTestoErrore = ex.Message;
}
}
MessageBox.Show(StrTestoErrore, "FileNet");finally
{
}
//distruggo l'oggetto
ObjLibrary =
null;
Conclusioni
In questo articolo, si è visto come visualizzare un documento tramite un apposito controllo di filenet, da notare che non tutti i file possono essere visualizzati in quel controllo per esempio quelli in formato .zip, o altri tipi. Tramite la parola download è possibile effettuare il donwload dell'esempio utilizzato in questo articolo.
Download esempio
I siti web di riferimento:
http://www.filenet.com/Italiano/index.asp Italia
http://www.filenetinfo.com/mk/get/feis_ita_reg Per richiedere gratuitamente il cd "FileNet is Essential"
http://www.filenet.com/ (Inglese)
Dim ObjDocument As IDMObjects.DocumentTry
MessageBox.Show(StrTestoErrore, "FileNet");
{
ListBox1.Items.Add(oledbReader[0].ToString());
}
}
{
//Gestione dell'eccezioni tramite classe di filenet
IDMError.ErrorManager ObjErrorManager =
IDMError.Errors ObjErrori;
IDMError.Error ObjErrore;
string StrSql = "Select idmId , idmName,idmDateAdded from FnDocument where idmDocType ='ClasseTest' order by idmId,idmDateAdded" ;string StrConnessione = "provider=FnDBProvider;data source=" + ObjLibrary.Name + ";Prompt=4;SystemType=" + (int)ObjLibrary.SystemType + ";user id=Admin;password=MiaPassword;LogonID=" + ObjLibrary.LogonId + ";"; OleDbConnection ConDati = new OleDbConnection (StrConnessione);OleDbCommand oledbcommand = new OleDbCommand(StrSql, ConDati);
oledbReader.Read()
ListBox1.Items.Add(oledbReader(0).ToString())
New OleDbConnection(StrConnessione)Dim oledbcommand As New OleDbCommand(StrSql, ConDati)
' Dim StrSql As String = "Select F_DOCNUMBER, F_DOCCLASSNAME,F_ENTRYDATE from FnDocument where F_DOCCLASSNAME='Fatture' order by F_DOCNUMBER,F_ENTRYDATE"