martedì 20 marzo 2007

Filenet visualizzare un documento di filenet tramite Visual basic net e C#

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


Sub New(ByVal libreria As IDMObjects.Library)


InitializeComponent()


objLibrary = libreria


End Sub


C#


public FrmVisualizzaDocumento(IDMObjects.Library libreria)


{


InitializeComponent();


ObjLibrary = 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



' Dim StrSql As String = "Select F_DOCNUMBER, F_DOCCLASSNAME,F_ENTRYDATE from FnDocument where F_DOCCLASSNAME='Fatture' order by F_DOCNUMBER,F_ENTRYDATE"


'Queri per la versione CS


Dim StrSql As String = "Select idmId , idmName,idmDateAdded from FnDocument where idmDocType ='ClasseTest' order by idmId,idmDateAdded "


Dim StrConnessione As String = "provider=FnDBProvider;data source=" _


& objLibrary.Name _


& ";Prompt=4;SystemType=" & objLibrary.SystemType _



& ";user id=Admin;password=MiaPassword;LogonID=" & objLibrary.LogonId & ";"


ConDati = New OleDbConnection(StrConnessione)


ConDati.Open()


'Effettuo la query


Dim oledbcommand As New OleDbCommand(StrSql, ConDati)


'Rilevo i dati



Dim oledbReader As OleDbDataReader = oledbcommand.ExecuteReader()


oledbReader.Read()


ListBox1.Items.Add(oledbReader(0).ToString())


'valorizzo la lista



While oledbReader.Read()



ListBox1.Items.Add(oledbReader(0).ToString())


End While


'Eccezione



Catch ex As Exception


Dim ObjErrorManager As New IDMError.ErrorManager


Dim ObjErrori As IDMError.Errors


Dim StrTestoErrore As String = ""


Dim objErrore As IDMError.Error


If ObjErrorManager.Errors.Count > 0 Then



ObjErrori = ObjErrorManager.Errors


'ciclo per tutti gli errori


For Each objErrore In ObjErrori



StrTestoErrore = objErrore.Description


Next


Else



StrTestoErrore = ex.Message


End If


MsgBox(StrTestoErrore)


Finally


'chiudo i vari oggetti


DtaDati = Nothing


dtsDati = Nothing


If ConDati.State = ConnectionState.Open Then ConDati.Close()



ConDati = 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


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);


ConDati.Open();


//Eseguo la query


OleDbCommand oledbcommand = new OleDbCommand(StrSql, ConDati);


//Ricavo i dati


OleDbDataReader oledbReader = oledbcommand.ExecuteReader();


oledbReader.Read();


ListBox1.Items.Add(oledbReader[0].ToString());


//valorizzo la lista


while (oledbReader.Read())


{




ListBox1.Items.Add(oledbReader[0].ToString());


}


}


catch (Exception ex)



{


//Gestione dell'eccezioni tramite classe di filenet


IDMError.ErrorManager ObjErrorManager = new IDMError.ErrorManager();


IDMError.Errors ObjErrori;


string StrTestoErrore = "";


IDMError.Error ObjErrore;


//verifico che in filenet ci siano errori


if (ObjErrorManager.Errors.Count > 0)


{



ObjErrori = ObjErrorManager.Errors;


//ciclo per tutti gli errori


foreach (IDMError.Error objErrore in ObjErrori)


{



StrTestoErrore = objErrore.Description;


}


}


else


{



StrTestoErrore = ex.Message;


}


MessageBox.Show(StrTestoErrore, "FileNet");


}


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


Dim ObjDocument As IDMObjects.Document


Try


'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 Exception



Dim ObjErrorManager As New IDMError.ErrorManager


Dim ObjErrori As IDMError.Errors


Dim StrTestoErrore As String = ""


Dim objErrore As IDMError.Error


If ObjErrorManager.Errors.Count > 0 Then



ObjErrori = ObjErrorManager.Errors


'ciclo per tutti gli errori


For Each objErrore In ObjErrori



StrTestoErrore = objErrore.Description


Next


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, null,null,null);


//"pulisco" l'immagine precedente


axIDMViewerCtrl1.Clear();


axIDMViewerCtrl1.DocumentID = ObjDocument.ID;


axIDMViewerCtrl1.Refresh();


}



catch (Exception ex)


{


IDMError.ErrorManager ObjErrorManager = new IDMError.ErrorManager();


IDMError.Errors ObjErrori;


string StrTestoErrore = "";


IDMError.Error ObjErrore;


//verifico che in filenet ci siano errori


if (ObjErrorManager.Errors.Count > 0)


{



ObjErrori = ObjErrorManager.Errors;


//ciclo per tutti gli errori


foreach (IDMError.Error objErrore in ObjErrori)


{


StrTestoErrore = objErrore.Description;


}


}


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 Exception


Dim ObjErrorManager As New IDMError.ErrorManager


Dim ObjErrori As IDMError.Errors


Dim StrTestoErrore As String = ""


Dim objErrore As IDMError.Error


If ObjErrorManager.Errors.Count > 0 Then



ObjErrori = ObjErrorManager.Errors


'ciclo per tutti gli errori


For Each objErrore In ObjErrori


StrTestoErrore = objErrore.Description


Next


Else



StrTestoErrore = ex.Message


End If


MsgBox(StrTestoErrore)


Finally


'distruggo l'oggetto


objLibrary = Nothing


End Try



C#


try



{


if (objLibrary.GetState(IDMObjects.idmLibraryState.idmLibraryLoggedOn) = True )


{



//chiudo la connessione


ObjLibrary.Logoff();


}



}


catch (Exception ex)


{


IDMError.ErrorManager ObjErrorManager = new IDMError.ErrorManager();


IDMError.Errors ObjErrori;


string StrTestoErrore = "";


IDMError.Error ObjErrore;


//verifico che in filenet ci siano errori


if (ObjErrorManager.Errors.Count > 0)


{


ObjErrori = ObjErrorManager.Errors;


//ciclo per tutti gli errori


foreach (IDMError.Error objErrore in ObjErrori)


{



StrTestoErrore = objErrore.Description;


}


}


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)

Nessun commento: