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;