Un oggetto è remoto quando le sue istanze vengono recuperate tramite webservice.
Un OAV è remoto quando il suo valore viene recuperato da un webservice.

In questo articolo impareremo a configurare oggetti remoti e OAV remoti in Sme.UP.

Per una descrizione delle potenzialità di queste feature e di alcuni esempi pratici di utilizzo si rimanda ai due articoli seguenti:

 

Modulo WSREOB e api £K47

Oggetti e OAV remoti sono gestiti dal modulo WSREOB.

Qui è presentato un diagramma di sequenza che mostra come opera il modulo WSREOB. Il recupero delle informazioni remote viene effettuato tramite il passaggio alla £OAV che richiama la £K47 che a sua volta richiama la £K11. La £K47 è la nuova /COPY (api RPG) nata appositamente per gestire oggetti e OAV remoti. La £K11 è la /COPY che si occupa di interfacciarsi con il costruttore LOA38, per l’integrazione di webservice esterni in Sme.UP.


 

 

Gli script di configurazione per la £K47 si trovano nel file SCP_K47. Esistono script dedicati alla definizione di oggetti remoti e script dedicati agli OAV remoti. Nel modulo WSREOB esistono due capitoli appositi in cui vedere l’elenco degli uni e degli altri.

 

Oggetti remoti

In uno script di oggetti remoti dovrà essere presente:

  • una sezione ::SEZ.LIS, che indica come recuperare la lista delle istanze degli oggetti remoti
  • una sezione ::SEZ.DEC, che indica come recuperare la DEC di un singolo oggetto remoto
  • nessuna, una o più sezioni ::SEZ.OAV nel caso in cui si vogliano definire OAV remoti di oggetti remoti

Questo è un estratto (con dati sensibili mascherati da xxx) per l’oggetto remoto V50000003 (Computer su Ebay), di cui si è fatto un esempio nell’articolo https://www.smeup.com/blog/blog-software-gestionali-erp/oggetti-remoti-parte-1, a cui si rimanda.

::SEZ.LIS Sub="EB.A02.001" Var="Content-Type(application/json) Authorization(Bearer &AUT) QUERY(computer) LIM(&CO.LIM)"

   ::AUT Sub="EB.A01.001" Var="Authorization(xxx)" Pay="grant_type=refresh_token&refresh_token=xxx=&scope=xxx" Ind="access_token"

   ::COD Ind="itemSummaries(*)\itemId" Hsh="1"
   ::DES Ind="itemSummaries(*)\title"

::SEZ.DEC Sub="EB.A03.001" Var="Content-Type(application/json) Authorization(Bearer &AUT) IDITEM(&CO.CD)" Hsh="IDITEM(1)"

   ::AUT Sub="EB.A01.001" Var="Authorization(xxx)" Pay="grant_type=refresh_token&refresh_token=xxx=&scope=xxx" Ind="access_token" 

   ::COD Ind="itemId" Hsh="1"
   ::DES Ind="title"

Tutte le sezioni necessitano la configurazione del webservice da interrogare.
La sezione del webservice del LOA38 è indicata nell’attributo Sub. Tramite l’attributo Var è invece possibile passare variabili al webservice. Inoltre se il webservice necessita di autenticazione è necessario aggiungere un tag ::AUT. Il relativo token ottenuto potrà essere utilizzato nello script attraverso la variabile &AUT.

I tag ::COD e ::DES indicano rispettivamente come recuperare dal json restituito dal webservice il valore di codice e descrizione dell’oggetto. L’attributo Ind indica la parte di dati nel json restituito dal webservice dalla quale ottenere il valore richiesto.

Si noti la presenza dell’attributo Hsh. Esso è utile quando l’identificativo dell’oggetto nel webservice esterno ha una lunghezza maggiore di 15. In questo caso viene codificato con un hash per avere comunque a disposizione un codice da 15. La variabile &CO.CD viene de-hashizzata e quindi l’identificativo è ripristinato al suo valore originale nella chiamata al webservice di DEC.

Grazie allo script precedente il risultato di una chiamata alla seguente fun sarà appunto la lista dei computer su Ebay.

F(EXB;LOA10_SE;ELK) 1(LI;V50000003;*)

 

OAV remoti

In uno script di OAV remoti potranno essere presenti una o più ::SEZ.OAV, a seconda del webservice interrogato. In ogni ::SEZ.OAV ci potranno essere tanti tag ::OAV quanti sono gli attributi remoti recuperati da quel webservice.

Questo è un esempio (con dati sensibili mascherati da xxx) di script SCP_K47 per l’oggetto Provincia (TAV§P), i cui OAV remoti sono stati già descritti nell’articolo https://www.smeup.com/blog/blog-software-gestionali-erp/attributi-remoti-parte-2, a cui si rimanda.

::SEZ.OAV Sub="GO.A06.001" Var="Authorization(Bearer &AUT) Accept(application/json) IdFile(xxx)" Sca="\values(*)\(4)"

::AUT Sub="GO.A01.001" Var="Content-Type(application/x-www-form-urlencoded)" Pay="client_secret=xxx&grant_type=refresh_token&refresh_token=xxx" Ind="access_token" Ind="access_token"

::OAV Cod="U/K47A" Ind="\values(*)\(3)" Txt="Numero Abitanti" Ogg="NR" Len="9" Cnv="*ANGNUM"

::SEZ.OAV Sub="GO.B01.001" Var="Via_e_civico() Città(&CO.CD%I/T$DESC) Nazione(Italia) API_KEY(xxx)"

::OAV Cod="U/K47B" Ind="\results(1)\geometry\location\lat" Txt="Latitudine" Ogg="" Cnv="*NUMTOTEXT" CnvVar="DECSEP(.) DECNUM(7)" IntVar="U02"
::OAV Cod="U/K47C" Ind="\results(1)\geometry\location\lng" Txt="Longitudine" Ogg="" Cnv="*NUMTOTEXT" CnvVar="DECSEP(.) DECNUM(7)" IntVar="U03"

::SEZ.OAV Sub="RS.S16.B01" Var="LAT(&CO.U02) LNG(&CO.U03)"

::OAV Cod="U/K47D" Ind="\words" Txt="What3Words" Ogg=""

Nello script sono stati definiti 4 OAV remoti:

  • il Numero di Abitanti ottenuto dal webservice di Google Drive
  • Latitudine e Longitudine ottenuti dal webservice di localizzazione di Google
  • l’OAV What3Words ottenuto dall’interrogazione del webservice What3Words

Come per gli oggetti remoti le informazioni del webservice interrogato sono scritte negli attributi Sub e Var. E come per gli oggetti remoti se il webservice necessita di autenticazione è necessario aggiungere un tag ::AUT.

Nel tag ::OAV si trovano le specifiche di definizione del singolo OAV. Si noti che tramite l’attributo Cnv è possibile definire la modalità di conversione dei dati. Ad esempio la conversione *ANGNUM permette di convertire un numero in formato anglossassone (ovvero col punto come separatore decimale) in un oggetto numero di Sme.UP.

E’ inoltre possibile definire delle variabili interne in maniera tale da poterle utilizzare nel calcolo degli OAV successivi. In questo modo si possono definire OAV remoti di OAV remoti. Nel caso d’esempio l’OAV U/K47D è un OAV remoto ottenuto passando al webservice del What3Words latitudine e longitudine della provincia, anch’essi attributi remoti ma ottenuti dal webservice di localizzazione di Google.

Per maggiori dettagli sul modulo WSREOB e sull’api £k47 e per ulteriori esempi di script di SCP_K47 si rimanda alla documentazione specifica di modulo e api e ai capitoli e alle schede esempio del modulo! Buona configurazione!