DBM – come aggiornare un database non Sme.UP (Oracle, Mysql, MS Sql ecc…) da Sme.UP

In questo articolo vedremo come andare ad aggiornare un database non Sme.UP da Sme.UP.

Questa funzionalità è disponibile in LoocUp/Sme.UP Provider, tramite i servizi JA_00_39/JA_00_19.

Il servizio JA_00_19 è il servizio interno che compie il lavoro. Il JA_00_39 è stato creato per fornire un’interfaccia più semplice al JA_00_19.

Questi servizi utilizzano i driver JDBC per agganciarsi ai database su cui si vuole operare.

Va pertanto compiuto lo sforzo di comprendere alcuni concetti fondamentali della tecnologia JDBC.

La tecnlogia JDBC fornisce uno strumento generico per accedere a database che la supportano.

Per agganciarsi ad un DB, è necessario specificare

  • Il driver: si tratta di una classe java
  • La stringa di connessione: si tratta di una stringa che contiene i parametri per collegarsi al database. Tipicamente, è necessario indicare, l’ip del server e il nome del database.
  • L’utente
  • La password

Se si utilizza il JA_00_39 basterà indicare il tipo di database a cui ci si vuole collegare e il servizio provvederà a selezionare il driver e a comporre la stringa di connessione. Mentre se si volesse andare ad aggiornare un db, senza passare da un file S01, allora sarà necessario utilizzare il JA_00_19 e comporre manualmente la stringa di connessione.

Come aggiornare un db partendo da un file S01

Il JA_00_39 riesce a gestire l’accesso ai seguenti DB: Microsoft Sql Server,Orcale MySql, IBM DB2, Postgree, Hypersonic Sql. Se si volesse accedere al altri DB, sarà necessario procurarsi i driver e l’URL di connessione.

Iniziamo dal caso più semplicie: eseguire l’update con il JA_00_39.

Utilizzando e i dati vengono attinti da un file S01, allora si può utilizzare il JA_00_39.

Se l’operazione è gestita da RPG, dovremo creare un flusso, il cui primo passo è la creazione di un file di tipo S01.

La fun da utilizzare è la seguente:

F(INT;JA_00_05;NEW) 1(J1;PATHFILE;path file input) INPUT(OUT(SXF) Fun(funzione))

Il parametro Fun, conterrà la funzione che dovrà restiuire un XML di tipo matrice.

Una volta ottenuto il file S01, potremo richiamare la fun di update:

F(INT;JA_00_39;DBE.UPD) 1(J1;PATHFILE;path file input) P( DBTYPE(Tipo database) SERVER(Indirizzo del server) CAT(catalogo) TABLE(Tabella Destinazione) USER(Nome utente) PASS(Pssword) DESTKEYS(Chiavi WHERE separate da ‘,’) EXCLKEYS(Chiavi da escludere dall’update separate da ‘,’)  NOMSG(Nascondi messaggi) )

Vediamo come riempire i vari parametri:

  • path file input: è il percorso del file S01 che contiene i dati da usare per aggiornare il DB esterno. Verrà determinato nel flusso
  • DBTYPE – Tipo database – valori possibili:
    • DB2400 per andare a scrivere su IBM DB2
    • MYSQL: Oracle  My Sql
    • POSTGRE: Postregee
    • MSSQL: Microsoft Sql Server
    • HSQL: Hypersonic Sql
  • SERVER – Indirizzo del server: es. 172.16.1.1:1433
  • CAT – Catalogo: es. QUANTUM

esempio:

F(INT;JA_00_39;DBE.UPD) 1(J1;PATHFILE;C:\Users\fedforti\Desktop\Lo_S01\_articoli.s01) P(DBTYPE(DB2400) SERVER(srvlab01.smeup.com) CAT(W_FORFED) TABLE(A20162812) USER(forfed) PASS(password) DESTKEYS(CCIDOJ) EXCLKEYS(CCIDOJ) )

 

NOTA: i nomi delle colonne devono coincidere con i nomi della tabella di destinazione

Le colonne che definiscono la clausola where sono specificate nel parametro DESTKEYS, le colonne che non devono essere aggiornate vanno specificate in EXCLKEYS.

Prendiamo ad esempio una matrice con 2 colonne:

<Griglia>
 <Colonna Cod="ID" Txt="id" Tip="" Lun="10 0" IO="O" Ogg="NR" Dpy="" Fill="" Aut=""/>
 <Colonna Cod="ELABORATO" Txt="Elaborato" Tip="" Lun="10 0" IO="O" Ogg="NR" Dpy="" Fill="" Aut=""/>
 </Griglia>
 <Righe>
 <Riga Fld="53|2"/>
 <Riga Fld="54|2"/>
 <Riga Fld="55|2"/>
 </Righe>

Avremo che la chiave è indicata nell’ID mentre il dato è nella colonna ELABORATO, pertanto andremo ad aggiungere alla fun i prametri

DESTKEYS(ID)  e EXCLKEYS(ID)

 

Come aggiornare un db partendo da una fun

Se si volesse invece utilizzare un’unica fun è necessario utilizzare il JA_00_19.

Nella scheda di esempio (oggetto V3 ASE JA_00_19) sono riportati molti esempi di accesso a vari DB.

Questa scheda è da prendere come spunto per la scelta del driver e la composizione degli url di connessione *.

 

*NOTA per accedere a database il cui driver non è distribuito con Looc.UP o nel caso in cui si voglia utilizzare un driver alternativo, eseguendo delle ricerche con google si trovano gli url di connessione