<< Fare clic per visualizzazione il sommario >> Percorso: Api SOAP > Lettura di un catalogo di dati da un sistema esterno |
Lettura di un catalogo di dati Jamio openwork da un sistema esterno
In questo paragrafo descriviamo i metodi coinvolti e i relativi parametri. Prima di procedere occorrono alcune specificazioni:
•E’ necessario possedere le credenziali di accesso alla piattaforma Jamio openwork (nome utente, password e Area). Normalmente queste informazioni sono già in possesso di che vuole accedere alla piattaforma. In caso contrario richiederle all’Amministratore dell’Area;
•Il catalogo che si vuole interrogare deve essere noto alla piattaforma per nome e contenuto. Questo implica che il modello di catalogo debba essere pubblicato sull'area in questione;
•Occorre possedere l’identificativo - oltre che il nome - dell’Area. Queste informazioni devono essere richieste al gestore dell’Area;
•Occorre possedere l'URL - oltre che il nome - del modello di catalogo. Queste informazioni devono essere richieste al gestore dell’Area;
•Il risultato della invocazione a qualsiasi metodo delle API di Jamio è di tipo ServiceResult. Esso contiene l’esito della chiamata, il risultato vero e proprio del metodo – laddove previsto - e una lista di eventuali messaggi (informazioni, warning o errori).
Lettura di un catalogo specifico di risorse di tipo dati
Le azioni da effettuare per leggere un catalogo sono le seguenti:
1.Autenticazione del chiamante tramite invocazione al metodo Login del servizio SessionManagement. Questa può essere effettuata una tantum, fintanto che la relativa sessione aperta resti in piedi e quindi non scada il token generato o non sia chiusa la sessione. Il metodo Login del servizio SessionManagement richiede in input i parametri:
Parametri del metodo Login |
|||
Nome |
Descrizione |
Tipo |
Opzionale |
identityRepositoryName |
Identificativo dell’Area. |
String |
|
userName |
Nome utente di autenticazione. |
String |
|
password |
Password dell'utente che effettua l'autenticazione. |
String |
|
multiPosition |
Indicare come valore false. |
Bool |
|
source |
Rappresenta un identificativo del sistema che effettua la richiesta |
String |
|
2.Lettura dei dati di sessione tramite invocazione al metodo GetSession del servizio SessionManagement. Questa invocazione permette di ricavare l'identificativo dell'Area corrente. Il metodo GetSession del servizio SessionManagement richiede in input i parametri:
Parametri del metodo GetSession |
|||
Nome |
Descrizione |
Tipo |
Opzionale |
info |
Oggetto contenente il token di sessione. |
RequestInfo |
|
3.Lettura di un catalogo di risorse dati tramite invocazione al metodo GetCatalog del servizio DataManagement di cui riportiamo i parametri:
Parametri del metodo GetCatalog |
|||
Nome |
Descrizione |
Tipo |
Opzionale |
repositoryId |
Identificativo dell’Area. |
String |
|
modelUrl |
URL del modello di catalogo. |
String |
|
parameters |
Parametri di apertura del catalogo (paginazione, numero di righe, etc.) |
|
|
info |
Oggetto contenente il token di sessione. |
RequestInfo |
|
Lettura dell'elenco di tutti i cataloghi di risorse di tipo dati
Per alcuni scenari applicativi può essere utile leggere l'elenco di tutti i cataloghi il quale riporta i riferimenti di tutti i cataloghi di dati a disposizione dell'utente pubblicati nell'Area, sia di tipo predefinito che di tipo personalizzato. Ad esempio se si conosce solo il nome di un modello di catalogo e si vuole ottenere il suo URL, dal risultato ottenuto dalla lettura dell'elenco di tutti i cataloghi è possibile ricercare il catalogo specifico attraverso la proprietà Name. Le azioni da effettuare per leggere l'elenco di tutti i cataloghi di risorse di tipo dati sono le seguenti:
1.Autenticazione del chiamante tramite invocazione al metodo Login del servizio SessionManagement. Questa può essere effettuata una tantum, fintanto che la relativa sessione aperta resti in piedi e quindi non scada il token generato o non sia chiusa la sessione. I parametri di input previsti dal metodo Login sono sopra riportati.
2.Lettura dei dati di sessione tramite invocazione al metodo GetSession del servizio SessionManagement. Questa invocazione permette di ricavare l'identificativo dell'Area corrente. I parametri di input previsti dal metodo GetSession sono sopra riportati.
3.Lettura dell'elenco di tutti i cataloghi di risorse dati tramite invocazione al metodo GetMainCatalog del servizio DataManagement di cui riportiamo i parametri:
Parametri del metodo GetMainCatalog |
|||
Nome |
Descrizione |
Tipo |
Opzionale |
repositoryId |
Identificativo dell’Area. |
String |
|
info |
Oggetto contenente il token di sessione. |
RequestInfo |
|
Jamioware di esempio
Nei paragrafi successivi sono riportati esempi di lettura di un catalogo di risorse dati specifico e del catalogo di tutti gli eventi in C#.
L' applicazione di esempio GetCatalog.zip a corredo di questa pagina effettua le seguenti operazioni:
•autenticazione del chiamante, mediante la funzione SessionManagement.Login. Da questa funzione si ottiene il token di sessione, che sarà usato per tutte le chiamate successive;
•lettura dati di sessione con la funzione SessionManagement.GetSession (utilizzato per ricavare l'identificativo dell'area corrente);
•lettura dell'elenco di tutti i cataloghi di DataManagement, con la funzione DataManagement.GetMainCatalog: questo contiene i riferimenti di tutti i cataloghi a disposizione dell'utente, sia di tipo predefinito che di tipo personalizzato;
•lettura di un catalogo specifico di DataManagement (il primo disponibile dall'elenco precedente), con la funzione DataManagement.GetCatalog;
•chiusura della sessione, funzione SessionManagement.CloseSession.
Preparazione del Proxy
Nell’esempio, è utilizzata la generazione del proxy dal WSDL delle interfacce dei Web Services attraverso l’utilizzo dell’applicazione svcutil.exe presente nel pacchetto Microsoft SDK for Windows. Questa utility cambia in base alla versione dell’SDK, cambiando la location dell’utility stessa e il risultato che essa genera. Se il comando di seguito riportato non funzionasse occorrerebbe trovare la versione installata sulla propria macchina.
"C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\svcutil.exe" /out:ProxyJamio.cs /serializer:Auto https://paas.jamio.com/gateway/gateway/ISessionManagement/mex?wsdl https://paas.jamio.com/gateway/gateway/IDataManagement/mex?wsdl |
Durante l’esecuzione del comando la console mostrerà una serie di errori, ma non inficeranno il risultato finale, che sarà la generazione del file ProxyJamio.cs.
Jamioware Visual Studio
Il Jamioware di seguito descritto è disponibile nell’archivio qui scaricabile GetCatalog.zip.
Per la preparazione del Jamioware effettua i seguenti passi:
1.Inserisci nel progetto Visual Studio il file ProxyJamio.cs prodotto al passo precedente;
2.Verifica che nel progetto siano presenti i riferimenti a System.Runtime.Serialization, System.ServiceModel e System.XML, altrimenti aggiungili;
3.Sovrascrivi il file app.config con il contenuto qui di seguito riportato:
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="basicHttpsBinding_Gateway" maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="65536" maxStringContentLength="65536"
maxArrayLength="65536" maxBytesPerRead="65536" maxNameTableCharCount="65536"/>
<security mode="Transport" />
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="https://paas.jamio.com/gateway/gateway/ISessionManagement"
binding="basicHttpBinding" bindingConfiguration="basicHttpsBinding_Gateway"
contract="ISessionManagement"
name="basicHttpsBinding_Gateway_ISessionManagement"/>
<endpoint address="https://paas.jamio.com/gateway/gateway/IDataManagement"
binding="basicHttpBinding" bindingConfiguration="basicHttpsBinding_Gateway"
contract="IDataManagement"
name="basicHttpsBinding_Gateway_IDataManagement"/>
</client>
</system.serviceModel>
</configuration>
4.Inserisci prima del codice di invio lo using www.openworkbpm.com.schema, o comunque quello del namespace inserito dall’utility;
5.Copia il codice e valorizza i parametri e le credenziali.
Codice di esempio
// Indirizzo di base dei servizi Jamio
static string realBaseAddress = "https://paas.jamio.com/gateway/gateway/";
// parametri e credenziali da impostare
static string identityRepositoryName = null;
static string userName = null;
static string password = null;
static string source = null;
static SessionManagementClient sessionManagement = null;
static DataManagementClient dataManagement = null;
static string token = null;
static string tenantId = null;
static string dataModelUrl = null;
static void Main(string[] args)
{
// rappresenta un identificativo del sistema che effettua la richiesta
source = Environment.MachineName;
// creazione del client per la gestione delle sessioni
sessionManagement = new SessionManagementClient("basicHttpsBinding_Gateway_ISessionManagement", realBaseAddress + "ISessionManagement");
Console.Write("Tenant: ");
identityRepositoryName = Console.ReadLine();
if (String.IsNullOrWhiteSpace(identityRepositoryName)) return;
Console.Write("Username: ");
userName = Console.ReadLine();
if (String.IsNullOrWhiteSpace(userName)) return;
Console.Write("Password: ");
password = Console.ReadLine();
Console.WriteLine();
try
{
if (DoLogin())
{
GetSession();
// creazione del client per la gestione dei dati
dataManagement = new DataManagementClient("basicHttpsBinding_Gateway_IDataManagement", realBaseAddress + "IDataManagement");
GetDataMainCatalog();
GetDataCatalog();
dataManagement.Close();
// logout e chiusura sessione
Console.WriteLine("Logout...");
www.openworkbpm.com.schema.RequestInfo info = new www.openworkbpm.com.schema.RequestInfo();
info.Token = token;
sessionManagement.CloseSession(info);
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.WriteLine();
}
sessionManagement.Close();
Console.WriteLine("Terminato... Premi INVIO per uscire");
Console.ReadLine();
}
private static bool DoLogin()
{
// invocazione del servizio di login
www.openworkbpm.com.schema.ServiceResultOfLoginInfo loginResult = sessionManagement.Login(identityRepositoryName, userName, password, false, source);
if (!loginResult.Error)
{
Console.WriteLine("Login: OK");
token = loginResult.Value.Token; // memorizza il token di sessione
}
else
{
Console.WriteLine("Login: KO. " + loginResult.ResultInfoList[0].Message);
}
Console.WriteLine();
return !loginResult.Error;
}
private static void GetSession()
{
// lettura dati sessione corrente
www.openworkbpm.com.schema.RequestInfo info = new www.openworkbpm.com.schema.RequestInfo();
info.Token = token;
www.openworkbpm.com.schema.ServiceResultOfSession sResult = sessionManagement.GetSession(info);
if (!sResult.Error)
{
Console.WriteLine("GetSession: OK");
tenantId = sResult.Value.TenantId; // memorizza l'identificativo del tenant
}
else
{
Console.WriteLine("GetSession: KO. " + sResult.ResultInfoList[0].Message);
}
Console.WriteLine();
}
private static void GetDataMainCatalog()
{
// lettura catalogo dei cataloghi di DataManagement
RequestInfo info = new RequestInfo();
info.Token = token;
ServiceResultOfCatalog mcatResult = dataManagement.GetMainCatalog(tenantId, info);
if (!mcatResult.Error)
{
Console.WriteLine("GetMainCatalog: OK");
Catalog mainCatalog = mcatResult.Value;
// prende il primo catalogo con un URL
string catalogName = null;
foreach (var item in mainCatalog.ItemList)
{
if (item.Fields.Length>1) // l'URL si trova nel secondo campo
{
dataModelUrl = item.Fields[1].Val.ToString();
catalogName = item.Name;
break;
}
}
Console.WriteLine(String.Format("Catalog Name: {0} - model URL: {1}", catalogName, dataModelUrl));
}
else
{
Console.WriteLine("GetMainCatalog: KO. " + mcatResult.ResultInfoList[0].Message);
}
Console.WriteLine();
}
private static void GetDataCatalog()
{
// lettura catalogo dati
RequestInfo info = new RequestInfo();
info.Token = token;
// inizializzazione parametri per la GetCatalog
SearchParameters parameters = new SearchParameters();
parameters.OrderingCriteria = new Ordering[0]; // questo per evitare errori
// paginazione
parameters.PageSize = 50;
parameters.PageSizeSpecified = true;
parameters.PageNumber = 1;
parameters.PageNumberSpecified = true;
ServiceResultOfCatalog catResult = dataManagement.GetCatalog(tenantId, dataModelUrl, parameters, info);
if (!catResult.Error)
{
Console.WriteLine("GetCatalog: OK");
Catalog catalog = catResult.Value;
Console.WriteLine(String.Format("Catalog items: {0}/{1}", catalog.ItemList.Length, catalog.TotalCount));
foreach (var item in catalog.ItemList) // stampa il Name per ogni riga
{
Console.WriteLine("\t" + item.Name);
}
}
else
{
Console.WriteLine("GetCatalog: KO. " + catResult.ResultInfoList[0].Message);
}
Console.WriteLine();
}