visualizzare un documento di Filenet tramite la tecnologia .net con Visual basic net e c#

In questo articolo, viene descritta la tecnica di come visualizzare un documento di Filenet, in una nostra applicazione per windows, tramite il linguaggio Visual basic net e C#.

il
Sviluppatore Microsoft .Net, Collaboratore di IProgrammatori

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"