Articolo Filenet: Eliminare le queue (code) di Filenet tramite la tecnologia .Net (Vb.Net e C#)
Figura 1
Introduzione
In questo articolo conclusivo sulla programmazione Filenet, vedremo l'ultima parte riguardante le queue, in particolare come cancellare una coda (queue) tramite la tecnologia .Net, in particolare con il linguaggio VB.Net e C#, le classi che utilizzeremo a tale scopo, sono queue, queuequeryspecification e queueentry. Si crea una nuova form, nella quale inseriamo tre label per i vari titoli, due controlli listbox, che avranno il compito di riportare i dati da cancellare e due pulsante, uno per eliminare il dato selezionato e l'altro per chiudere la finestra. La form dovrà avere un aspetto simile a quella illustrata in figura 1.
Variabili a livello di form e modifica del costruttore
Si creano a livello di form, due oggetti, uno di tipo queue e l'altro di tipo queuequeryspecification, di seguito si riporta un esempio di codice.
Fatta tale operazione, si modifica il costruttore della form, aggiungendo come argomento un oggetto library, usato in precedenza per effettuare il login a filenet, tale oggetto avrà il compito di creare un isanza dell'oggetto queue, da un determinato workspace (Anagrafica) e queue (dati).
Di seguito si riportano i frammenti di codice delle suddette operazioni.
Vb.Net
Public
InitializeComponent()
Sub New(ByVal Objlibreria As IDMObjects.Library)'inizializzo
ObjQueue =
ObjQueueQuery =
New IDMObjects.QueueNew IDMObjects.QueueQuerySpecification'imposto la classe
ObjQueue = Objlibreria.GetObject(IDMObjects.idmObjectType.idmObjTypeQueue,
ObjQueueQuery = ObjQueue.CreateQuerySpecification()
CaricaDati()
"ANAGRAFICA/DATI")End Sub
C#
public
{
InitializeComponent();
ObjQueue =
ObjQueueQuery =
FrmEliminaCoda(IDMObjects.Library objlibreria)new IDMObjects.Queue ();new IDMObjects.QueueQuerySpecification();//imposto la classe
ObjQueue = (IDMObjects.Queue) objlibreria.GetObject(IDMObjects.idmObjectType.idmObjTypeQueue,
ObjQueueQuery = ObjQueue.CreateQuerySpecification();
}
"ANAGRAFICA/DATI", null, null, null );
Funzione per il caricamento dei dati
La funzione carica dati, ha il compito di valorizzare i controlli listbox con i valori delle queue. Tramite l'oggetto QueueQuerySpecificatio viene eseguita una query, ossia permette di fare una ricerca di determinati valori, mentre con l'oggetto QueueBrowseSet, valorizziamo gli oggetti tramite la proprietà value. Mentre con il metodo movenext scorriamo per tutti i dati.
Di seguito si riporta il frammento di codice di tale funzionalità.
Vb.Net
Private
Sub CaricaDati()Try
'flag per l'accesso al sistema di filenet
ObjQueueQuery.CheckUser =
False
'Indica i valori delle code
ObjQueueQuery.EvenIfDelayed =
False
'permette di impostare o restituire un valore in base allo stato delle queue inserite, ossia se il ritorno della query è incompleta.
ObjQueueQuery.Incomplete = IDMObjects.idmQueueIncompleteOpt.idmIncompleteOK
ObjQueueQuery.MinPriority = 0
'restituisce tutti gli entry anche se sono loccati ossia bloccati
ObjQueueQuery.Status = IDMObjects.idmQueueBusyOpt.idmBusyOK
'oggetto per il risultato della query
ObjQueueBrowser = ObjQueueQuery.Browse()
Dim ObjQueueBrowser As New IDMObjects.QueueBrowseSetDim ObjErrorManager As New IDMError.ErrorManagerDim ObjErrori As IDMError.ErrorsDim StrTestoErrore As String = ""
Dim objErrore As IDMError.Error'se la ricerca ha esito negativo ossia no trova nulla restituisce il seguente numero di errore
If ObjErrorManager.Errors.Count > 0 Then
ObjErrori = ObjErrorManager.Errors
If objErrore.Number = -2147208689 Then
MessageBox.Show(
"non ci sono code", "FileNet", MessageBoxButtons.OK, MessageBoxIcon.Information)Exit Sub
End If
End If
lstNome.Items.Add(ObjQueueBrowser.Entry.Properties(
lstCognome.Items.Add(ObjQueueBrowser.Entry.Properties(
For inconta As Integer = 1 To ObjQueueBrowser.RecordCount"Nome").Value)"Cognome").Value)'mi sposto avanti di un record
If ObjQueueBrowser.MoreResults = True Then
ObjQueueBrowser.MoveNext()
End If
Next
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)
End Try
End Sub
C#
{
private void CaricaDati()try
{
}
{
IDMError.ErrorManager ObjErrorManager =
IDMError.Errors ObjErrori;
IDMError.Error ObjErrore;
//flag per l'accesso al sistema di filenet
ObjQueueQuery.CheckUser =
false;//Indica i valori delle code
ObjQueueQuery.EvenIfDelayed =
false ;//permette di impostare o restituire un valore in base allo stato delle queue inserite, ossia se il ritorno della query è incompleta.
ObjQueueQuery.Incomplete = IDMObjects.idmQueueIncompleteOpt.idmIncompleteOK ;
ObjQueueQuery.MinPriority = 0;
//restituisce tutti gli entry anche se sono loccati ossia bloccati
ObjQueueQuery.Status = IDMObjects.idmQueueBusyOpt.idmBusyOK ;
//oggetto per le query
IDMObjects.QueueBrowseSet ObjQueueBrowser =
ObjQueueBrowser = ObjQueueQuery.Browse();
{
lstNome.Items.Add(ObjQueueBrowser.Entry.Properties[
lstCognome.Items.Add(ObjQueueBrowser.Entry.Properties[
}
new IDMObjects.QueueBrowseSet();for (int intconta = 1; intconta <= ObjQueueBrowser.RecordCount; intconta++)"Nome"].Value);"Cognome"].Value);//verifico la fine
{
ObjQueueBrowser.MoveNext();
}
if (ObjQueueBrowser.MoreResults == true)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");
Funzione per eliminare la coda selezionata.
Per eliminare una queue (coda) dobbiamo utilizzare il metodo delete dell'oggetto queueentry, il quale elimina il record selezionato.
La funzionalità di elimina, situato nell'evento click del pulsante elimina, permette di eliminare il record selezionato nella lista box, in particolare filtrando per il campo cognome. E' buona norma prima di eliminare il dato accertarsi che esso esista. Di seguito si riporta il codice delle suddette operazioni..
Vb.net
Try
ObjQueueQuery = ObjQueue.CreateQuerySpecification()
ObjQueueQuery.Filters(
"Cognome").Value = lstCognome.Text'verifico se ho trovato il record
ObjQueueBrowser = ObjQueueQuery.Browse()
Dim ObjQueueBrowser As New IDMObjects.QueueBrowseSetDim ObjErrorManager As New IDMError.ErrorManagerDim ObjErrori As IDMError.ErrorsDim StrTestoErrore As String = ""
Dim objErrore As IDMError.Error'se la ricerca ha esito negativo ossia no trova nulla restituisce il seguente numero di errore
If ObjErrorManager.Errors.Count > 0 Then
ObjErrori = ObjErrorManager.Errors
If objErrore.Number = -2147208689 Then
MessageBox.Show(
"Attenzione il record non esiste", "FileNet", MessageBoxButtons.OK, MessageBoxIcon.Information)Exit Sub
End If
End If
ObjQueueEntry = ObjQueueBrowser.Entry
ObjQueueEntry.MakeReadWrite()
ObjQueueEntry.Delete()
CaricaDati()
Dim ObjQueueEntry As New IDMObjects.QueueEntryCatch 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)
End Try
C#
try
{
ObjQueueQuery = ObjQueue.CreateQuerySpecification();
ObjQueueQuery.Filters[
}
{
IDMError.ErrorManager ObjErrorManager =
IDMError.Errors ObjErrori;
IDMError.Error ObjErrore;
}
"Cognome"].Value = lstCognome.Text ;//verifico se ho trovato il record
IDMObjects.QueueBrowseSet ObjQueueBrowser =
ObjQueueBrowser = ObjQueueQuery.Browse();
IDMError.ErrorManager ObjErrorManager =
IDMError.Errors ObjErrori;
new IDMObjects.QueueBrowseSet();new IDMError.ErrorManager();string StrTestoErrore = "";//se la ricerca ha esito negativo ossia no trova nulla restituisce il seguente numero di errore
{
ObjErrori = ObjErrorManager.Errors ;
{
{
}
StrTestoErrore = ObjErrore.Description;
}
}
IDMObjects.QueueEntry ObjQueueEntry =
ObjQueueEntry = ObjQueueBrowser.Entry;
ObjQueueEntry.MakeReadWrite();
ObjQueueEntry.Delete();
CaricaDati();
if (ObjErrorManager.Errors.Count > 0)foreach (IDMError.Error ObjErrore in ObjErrori)if ( ObjErrore.Number == -2147208689)MessageBox.Show("Attenzione il record non esiste", "FileNet", MessageBoxButtons.OK, MessageBoxIcon.Information);return ;new IDMObjects.QueueEntry();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");
Conclusioni:
Vb.Net
Dim ObjQueue As IDMObjects.QueueDim ObjQueueQuery As IDMObjects.QueueQuerySpecification
C#
IDMObjects.Queue ObjQueue;
IDMObjects.QueueQuerySpecification ObjQueueQuery;