• Passa al contenuto principale
  • Passa alla barra laterale primaria
  • HOME
  • INIZIA QUI
  • CHI SONO
  • APEXLab

APPin5Minuti

Creare APP Gestionali con Oracle APEX e Low-Code

Crea Applicazioni Gestionali con Oracle APEX e gli strumenti Low-Code.

Come collegare Oracle APEX con Google Drive

Agosto 23, 2021

Google Workspace è una suite di software e strumenti di produttività che l’azienda di Mountain View mette a disposizione di tutti coloro che cercano una alternativa alla piattaforma Office 365.

Include tutta una serie di applicazioni web, tra cui i le più famose sono Gmail, Hangouts, Calendar e Drive.

Probabilmente, anche tu che stai leggendo questo post, avrai usato almeno una di queste applicazioni e sarai d’accordo con me nell’affermare che oggi sono una realtà più che mai consolidata.

Ormai sono moltissime le aziende che hanno deciso di utilizzare Google Workspace come piattaforma di collaboration, quindi nasce spontanea la domanda: Oracle APEX può essere integrato con Google Workspace?

Beh, se sono qui a spiegarlo, potrai immaginare la risposta.

Sì, naturalmente! 

Per questo motivo ho intenzione di scrivere una serie di articoli dedicati all’integrazione tra questi due mondi partendo da un’esigenza di integrazione direi molto utile: quella tra Oracle APEX e Google Drive.

In questo articolo scoprirai:

  • come configurare un progetto sulla piattaforma Google Cloud
  • come collegare Oracle APEX a Google Drive
  • come creare una applicazione APEX che visualizza l’elenco dei files archiviati in Google Drive

Sei pronto?

Iniziamo!

IN QUESTO ARTICOLO

  • Step 1: Crea un Progetto su Google Cloud Platform
  • Step 2: Abilita le Google Drive API
  • Step 3: Configura le Credenziali
  • Step 4: Crea un Repository su Google Drive
  • Step 5: Crea una applicazione APEX
  • Step 6: Collega Oracle APEX a Google Drive
    • Google API Client Library for JavaScript
    • Come includere le librerie JavaScript Google API in una pagina APEX
    • Come ottenere il Token di Autenticazione
  • Step 7: Recuperare i file da Google Drive
  • Conclusioni

Step 1: Crea un Progetto su Google Cloud Platform

La prima cosa da fare per collegare Oracle APEX a Google Drive consiste nell’attivare le API Rest di Google Drive che successivamente andremo a chiamare da Oracle APEX.

In maniera molto simile a quanto serve per implementare l’autenticazione APEX tramite account Google, dovremo creare un progetto sulla Google Cloud Platform ed attivare le API di Google Drive.

  • Collegati all’indirizzo https://console.cloud.google.com/ usando il tuo account Google e clicca su My Project

  • Dai un nome al progetto e premi Crea
  • Dopo qualche secondo dovresti ricevere una notifica che conferma il completamento della procedura.
  • Clicca su SELEZIONA PROGETTO.
  • Una volta che il progetto è selezionato dovresti vedere il suo nome nella barra degli strumenti

Step 2: Abilita le Google Drive API

Per creare un connettore a Google Drive è necessario attivare le sue API REST.

  • Clicca su API e Servizi
  • Clicca su ABILITA API E SERVIZI per accedere alla Google API Library
  • Seleziona la libreria Google Drive API
  • Clicca Abilita API

Step 3: Configura le Credenziali

Per utilizzare le API di Google Drive devi configurare le credenziali che saranno autorizzate ad usare le API.

Normalmente, quando si tratta di applicazioni che devono manipolare i dati e le informazioni di un utente, viene configurato uno schema di autenticazione basato OAuth 2.0.

Un altro modo per integrare i servizi di Google con la tua applicazione APEX è tramite un Account di Servizio che dovrà poi essere autorizzato a manipolare i file gestiti in Google Drive.

In questo tutorial utilizzerò il primo metodo di autenticazione.

  • Dopo aver selezionato il progetto, clicca su Credenziali.
  • Clicca CREA CREDENZIALI
  • A questo punto devi scegliere che tipo di credenziali usare tra le due disponibili. Seleziona il tipo di credenziali ID Client OAuth
  • Imposta i seguenti parametri:
    • Tipo di Applicazione: Applicazione Web
    • Nome: il nome che preferisci
  • Vai alla sezioni Origini JavaScript Autorizzate ed URI di Reindirizzamento Autorizzati ed inserisci l’indirizzo principale del tuo Workspace APEX. Facciamo qualche esempio
    • Se l’applicazione APEX che vuoi integrare sarà installata su https://apex.oracle.com/ inserirai la stringa https://apex.oracle.com
    • Se, invece, stai usando un ambiente privato su Oracle Cloud inserirai l’indirizzo principale del Workspace APEX

  • Una volta completata la procedura dovresti avere a disposizione il Client ID e il Client Secret che utilizzeremo più avanti per connetterci a Google Drive
  • L’ultima cosa da fare è la configurazione della Schermata consenso OAuth, per la quale ci limiteremo ad un setup minimo.
  • Clicca su Schermata consenso OAuth
  • Vai alla sezione Informazioni sull’applicazione ed inserisci
    • Nome Applicazione
    • Email per assistenza utenti
  • Vai alla sezione Domini Autorizzati ed inserisci il dominio della tua applicazione APEX. Puoi inserire anche più di un dominio
  • Vai alla sezione Informazioni di Contatto dello Sviluppatore ed inserisci la tua email. Clicca SALVA E CONTINUA.
  • Per quanto riguarda le sezioni Ambiti, Utenti di Prova e Riepilogo, puoi lasciare i valori di default

Step 4: Crea un Repository su Google Drive

A questo punto possiamo creare un repository in Google Drive per archiviare i files.

Per comodità creerò questo repository all’interno del mio Drive personale, tuttavia potrebbe essere un repository aziendale condiviso con i membri della tua organizzazione

  • Accedi a Google Drive
  • Se vuoi puoi creare una nuova cartella con il nome che preferisci (io l’ho chiamata APPin5Minuti Drive)
  • Carica uno o più file di test nella cartella che hai creato
  • Dalla finestra del browser che stai usando per caricare i file nella cartella di Google Drive, posizionati sulla barra degli indirizzi.
  • La stringa evidenziata è l’ID della cartella che hai creato: copialo e salvalo in un file di testo perché tra non molto ci servirà

Step 5: Crea una applicazione APEX

Ora che abbiamo creato e configurato il repository Google Drive, possiamo concentrarci nella creazione di una applicazione Oracle APEX che utilizzeremo recuperare i riferimenti ai files.

Potresti integrare questa funzionalità nelle tue applicazioni APEX per recuperare, ad esempio, gli allegati ad una offerta oppure ad un ordine di vendita.

  • Accedi ad Oracle APEX ed apri l’APP Builder
  • Crea una nuova applicazione che chiamerai Google Drive APP
  • In un primo momento limitiamoci a creare una sola una pagina, che chiameremo My Files.

Step 6: Collega Oracle APEX a Google Drive

Questa è una dei punti più delicati di questo esercizio e non nascondo che mi ha fatto faticare un po’.

Inizialmente ho pensato di configurare una origine dati di tipo REST usando questo metodo.

Inutile dire che purtroppo ho fallito miseramente.

Sicuramente ho sbagliato ma non sono stato in grado di capire cosa.

Magari se vuoi puoi farmi sapere nei commenti se anche tu hai avuto lo stesso problema ed eventualmente come lo hai risolto.

Senza farmi prendere troppo dallo sconforto, ho fatto qualche ricerca in rete e finalmente ho trovato questo blog che propone una soluzione promettente per risolvere il problema, basata sull’uso delle librerie JavaScript fornite da Google.

Google API Client Library for JavaScript

OAuth 2.0 è un protocollo standard aperto che consente alle applicazioni di accedere alle risorse protette di un servizio per conto dell’utente con un processo di autorizzazione che in generale può essere descritto nel modo seguente.

  1. L’applicazione invia all’Authorization Server una richiesta di autorizzazione per accedere ad una risorsa protetta
  2. Il proprietario della risorsa (di solito, l’utente) concede l’accesso
  3. L’Authorization Server restituisce un Access Token da utilizzare in tutte le successive richieste come una sorta di “cartellino di riconoscimento”

Le API di Google implementano questo protocollo di autenticazione e a tal proposito Google ha messo a disposizione degli sviluppatori una serie di librerie che possono essere utilizzate per ottenere il token di accesso alle risorse.

Noi utilizzeremo le librerie JavaScript.

A questa pagina puoi trovare i riferimenti alla libreria in questione.

Come includere le librerie JavaScript Google API in una pagina APEX

Quello che dobbiamo fare per usare le api rest di Google Drive è, prima di tutto, recuperare un Access Token.

A tal proposito dobbiamo creare un Page Item che useremo per salvarlo nella sessione di utilizzo dell’applicazione.

  • Collegati all’APP Builder e seleziona l’applicazione Google Drive APP
  • Seleziona la pagina My Files creata precedentemente
  • Crea una Page Region di tipo Static Content con queste proprietà:
    • Title: Google Client Region
    • Type: Static Content
    • Static ID: google-client-region
  • Crea un Page Item con queste proprietà:
    • Name: P1_GOOGLE_TOKEN
    • Type: Display Only
  • Crea un Page Button di cui, per il momento, configuriamo solo il nome
    • Name: REQUEST_TOKEN
    • Static ID: request-token
  • Seleziona il nodo radice della pagina e vai alla proprietà JavaScript > File URLs
  • Inserisci la seguente entry: https://apis.google.com/js/api.js

Cosa abbiamo fatto esattamente?

Abbiamo incluso nella nostra applicazione APEX le librerie JavaScript di Google.

Adesso possiamo finalmente implementare il codice che si occuperà di recuperare il Token di Autenticazione.

Come ottenere il Token di Autenticazione

  • Apri un nuovo file di testo
  • Copia il seguente codice JavaScript, all’interno del quale devi valorizzare opportunamente la variabile CLIENT_ID, API_KEY e APP_ID recuperandoli direttamente dal progetto Google.
// Credentials - API keys section
var API_KEY = '***';
// Credentials - OAuth 2.0 Client IDs section
var CLIENT_ID = '***';
// Main menu - Admin - Settings
var APP_ID = '***';
// Scope to use to access user's G Workspace items (Google Drive example) - space delimited
var SCOPES = "https://www.googleapis.com/auth/drive " +
  "https://www.googleapis.com/auth/drive.file " +
  "https://www.googleapis.com/auth/drive.readonly " +
  "https://www.googleapis.com/auth/drive.metadata.readonly " +
  "https://www.googleapis.com/auth/drive.appdata " +
  "https://www.googleapis.com/auth/drive.metadata " +
  "https://www.googleapis.com/auth/drive.photos.readonly ";
// To store Access Token for Google API
var OAUTHTOKEN;
function showErrorMessage(messageText) {
  apex.message.showErrors([{
    type: 'error',
    location: 'page',
    message: messageText,
    unsafe: false
  }]);
}
// Load necessary components
function loadGapiLibraries() {
  gapi.load('client:auth2', { 'callback': initAuth2, 'onerror': gapiLoadError });
}
function initAuth2() {
  gapi.auth2.init({ 'client_id': CLIENT_ID, 'scope': SCOPES }).then(authInitialized, authError);
}
function gapiLoadError(error) {
  showErrorMessage('Error occured while loading library');
}
function authInitialized() {
  authInstance = gapi.auth2.getAuthInstance();
  authInstance.isSignedIn.listen(updateSigninStatus);
  updateSigninStatus(authInstance.isSignedIn.get());
}
function authError(error) {
  console.log(error);
  showErrorMessage('Error occured while authenticating with Google');
}
// You can adjust the way how sign in state is handled (if-else code)
function updateSigninStatus(isSignedIn) {
  if (isSignedIn) {
    var user = authInstance.currentUser.get();
    var authResp = user.getAuthResponse();
    OAUTHTOKEN = authResp.access_token;
    // Add APEX item on Page 0 to store Google API Access Token
    apex.item('P1_GOOGLE_TOKEN').setValue(OAUTHTOKEN);
    $('#request-token').show();
  } else {
    console.log('User is not logged in');
    $('#request-token').show();
  }
}
function signIn() {
  authInstance.signIn({ scope: SCOPES }).then(signInCallback, signInCallbackError);
}
function signInCallback() {
  // your sign in callback
}
function signInCallbackError(error) {
  showErrorMessage('Error occured while confirming identity');
}
  • Salva il file di testo con il nome google-api-client.js

Prima di andare avanti, ti chiedo solo di prestare un attimo attenzione alla funzione updateSigninStatus(isSignedIn) che esegue le seguenti operazioni:

  1. Verifica se l’utente è collegato a Google
  2. Se è collegato recupera il token e lo memorizza nel Page Item che abbiamo creato nella pagina APEX
  3. Se invece non è collegato, mostra il bottone REQUEST_TOKEN

Questo script è un esempio e ovviamente puoi modificarlo per adattarlo alla tua applicazione come meglio credi.

Per caricare il file JavaScript nell’applicazione APEX

  • Vai in Shared Components > Static Application Files
  • Clicca Upload File
  • Seleziona il file JavaScript google-api-client.js premi Upload
  • Dopo aver caricato il file copia la stringa Reference: #APP_IMAGES#google-api-client.js

Ora possiamo includere questa libreria JavaScript nella nostra applicazione

  • Vai all’APP Builder e selezionala pagina APEX My Files
  • Seleziona il nodo radice e vai alla proprietà JavaScript > File URLs (lo stesso punto dove abbiamo inserito il riferimento alle librerie Google) ed inserisci la stringa #APP_IMAGES#google-api-client.js
  • Seleziona il Page Button REQUEST_TOKEN
  • Crea una nuova Dynamic Action di tipo Execute JavaScript Code
  • Vai alla proprietà dell’Action ed inserisci nel campo Settings > Code la seguente istruzione
signIn();
  • Sempre nella pagina My Files, seleziona il nodo radice e vai alla proprietà JavaScript > Execute when Page Loads
  • Inserisci la seguente istruzione
loadGapiLibraries();

A questo punto possiamo eseguire l’applicazione.

  • Premi Request Token e ti verrà chiesto, se non lo hai già fatto, di collegarti con il tuo account Google
  • Se il progetto è ancora in test potresti vedere questo messaggio, clicca su Continua
  • Dai le autorizzazioni richieste e clicca Continua
  • Nel campo Token dovresti vedere il token di autorizzazione

È importante ricordare che l’Access Token ha una durata massima che è di 3600 secondi, dopodiché dovrà essere rinnovato.

Questo significa che dovrai nella tua applicazione dovresti verificare se il Token è scaduto e in caso affermativo richiederne uno nuovo, magari in modo trasparente per l’utente.

A tal proposito, puoi usare il seguente codice JavaScript

gapi.auth2.getAuthInstance().currentUser.get().reloadAuthResponse()

Step 7: Recuperare i file da Google Drive

Ora che sappiamo come ottenere un Access Token, possiamo finalmente utilizzare le API di Google Drive per recuperare i file dal nostro repository.

Per effettuare questa operazione possiamo utilizzare il seguente script PL-SQL dove:

  • P1_GOOGLE_TOKEN è il Page Item in cui abbiamo memorizzato l’Access Token
  • P1_OUTPUT_REST è un altro Page Item dove andremo a salvare la response della chiamata REST.
declare
  l_clob clob;
begin
  apex_web_service.g_request_headers.delete;
  apex_web_service.g_request_headers(1).name := 'Authorization';
  -- your Access Token in format Bearer/*space*/Access Token
  apex_web_service.g_request_headers(1).value := 'Bearer '||:P1_GOOGLE_TOKEN; 
  l_clob := apex_web_service.make_rest_request(p_url         => 'https://www.googleapis.com/drive/v3/files/',
                                               p_http_method => 'GET');
  dbms_output.put_line(l_clob);
  :P1_OUTPUT_REST := l_clob;
end;

La cosa interessante è visualizzare i files archiviati in Google Drive con un output tabellare.

  • Accedi all’APP Builder a vai nella pagina My Files
  • Crea una nuova Page Region di tipo Interactive Report: My Files Region
  • Inserisci nella definizione dell’Interactive Report la seguente query che utilizza una JSON_TABLE.
select jt.*
  from
    json_table ( :P1_OUTPUT_REST, '$.files[*]'
        columns (
            "id" varchar2 ( 4000 ) path '$.id',
            "kind" varchar2 ( 4000 ) path '$.kind',
            "name" varchar2 ( 4000 ) path '$.name',
            "mimeType" varchar2 ( 4000 ) path '$.mimeType'
        )
    )
jt
  • Inserisci nel parametro Page Items to Submit il parametro (che ancora non abbiamo creato) P1_OUTPUT_REST
  • Crea un Page Item
    • Name: P1_OUTPUT_REST
    • Type: Hidden
    • Value Protected: No
  • Crea un Page Button
    • Name: VIEW_FILES
  • Assegna al pulsante VIEW_FILES una nuova Dynamic Action
    • Name: View Files
    • Type: Execute Server-Side Code
  • Seleziona l’Action e vai alla proprietà PL/SQL Code. Inserisci il seguente codice PL-SQL
declare
  l_clob clob;
begin
  apex_web_service.g_request_headers.delete;
  apex_web_service.g_request_headers(1).name := 'Authorization';
  -- your Access Token in format Bearer/*space*/Access Token
  apex_web_service.g_request_headers(1).value := 'Bearer '||:P1_GOOGLE_TOKEN; 
  l_clob := apex_web_service.make_rest_request(p_url         => 'https://www.googleapis.com/drive/v3/files/',
                                               p_http_method => 'GET');
  dbms_output.put_line(l_clob);
  :P1_OUTPUT_REST := l_clob;
end;
  • Inserisci nelle proprietà Items to Submit e Items to Return rispettivamente P1_GOOGLE_TOKEN (il Page Item dove abbiamo salvato l’Access Token) e P1_OUTPUT_REST.
  • Esegui la Preview dell’applicazione e premi View Files per visualizzare l’elenco dei files che sono archiviati in Google Drive

La colonna Mime Type ci dice che tipo di oggetto è: ad esempio application/vnd.google-app.folder è una sotto cartella mentre text/plain è un file di testo.

In questo momento l’api restituisce tutti gli oggetti che sono archiviati nel mio Drive personale, tuttavia possiamo passare dei parametri di ricerca per filtrare i risultato.

Ad esempio, possiamo modificare la chiamata per visualizzare tutti e soli i file contenuti all’interno di una specifica cartella, quella che abbiamo creato nello Step 4 di questo tutorial.

A questo link scopriamo che per filtrare i record restituiti dall’API possiamo usare il seguente parametro

Per maggiori dettagli su come usarlo puoi controllare qui.

Senza approfondire troppo, scopriamo che per ottenere la lista di tutti i files contenuti in una specifica cartella possiamo usare il seguente filtro:

parents='<folder_id>'

Per passare un parametro alla chiamata REST puoi usare il seguente script PL-SQL

declare
  l_clob clob;
begin
  apex_web_service.g_request_headers.delete;
  apex_web_service.g_request_headers(1).name := 'Authorization';
  -- your Access Token in format Bearer/*space*/Access Token
  apex_web_service.g_request_headers(1).value := 'Bearer '||:P1_GOOGLE_TOKEN; 
  l_clob := apex_web_service.make_rest_request(p_url         => 'https://www.googleapis.com/drive/v3/files/',
                                               p_http_method => 'GET',
                                               p_parm_name   => apex_util.string_to_table('q'),
                                               p_parm_value  => apex_util.string_to_table('parents=''1rMAqd01JVZT_Nhb2Vjqwr-px7k6WzXUA'''));
  dbms_output.put_line(l_clob);
  :P1_OUTPUT_REST := l_clob;
end;

Questo è il risultato

Conclusioni

In questo tutorial abbiamo visto insieme un modo per integrare Oracle APEX e Google Drive.

Ovviamente possiamo fare tante altre cose come, ad esempio, caricare dei file da Oracle APEX direttamente in Google Drive.

Sono sicuro che l’argomento ti interessa, vero? Fammelo sapere!

Se questo post ti è piaciuto, ti invito a condividerlo con amici e colleghi.

Se poi vuoi rimanere aggiornato ti invito a seguirmi sul mio profilo Twitter e a seguire la pagina LinkedIn di APPin5Minuti per essere aggiornato su tutti gli altri articoli che pubblicherò in futuro.

Bene, direi che per il momento è tutto.

Ti saluto e ti mando un abbraccio

Daniele

TI POTREBBE INTERESSARE:

  • Come migrare le applicazioni da Oracle Forms ad Oracle APEX
  • CPQ in Oracle APEX
  • Come sviluppare applicazioni sicure con Oracle APEX
  • Come gestire i files su Object Storage da Oracle APEX
  • Prevedere l'interesse di un cliente verso un prodotto o servizio con Oracle APEX e Machine Learning
  • Costruiamo un CRM con Oracle APEX

api rest, google cloud, google drive, google workspace, oracle apex

Interazioni del lettore

Lascia un commento Annulla risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Barra laterale primaria

BENVENUTO!

Il mio nome è Daniele Trasarti, autore di APPin5Minuti, il blog italiano che parla di piattaforme di Oracle APEX e applicazioni low-code.

Qui troverai tantissimi tutorial e risorse per imparare a sviluppare in pochissimo tempo bellissime applicazioni per gestire i dati ed i processi della tua azienda.

Se vuoi saperne di più inizia da qui.

Seguimi sui social!

  • LinkedIn
  • Twitter

NEWSLETTER

Iscriviti anche tu per far parte della più grande community italiana di persone che amano sviluppare low-code!

api rest appsheet appsheet data sources appsheet views appsheet workflow automation autonomous database build apps cpq crm css cyber security database dynamic layout facebook flowform flows4apex google google cloud interactive grid interactive report javascript list microsoft microsoft access mobile oracle oracle apex oracle cloud oracle rest data service ords pl-sq PL-SQL power apps product configurator sales configurator security social login software gestionale sql theme roller ux woocommerce wordpress workflows

COMMENTI RECENTI

  1. Daniele Trasarti su Costruiamo un CRM con Oracle APEX

    Grazie Stefania

  2. Stefania su Costruiamo un CRM con Oracle APEX

    Grazie, Daniele, per questo tutorial davvero esaustivo ma anche molto semplice da capire. Questa app è diventata un ottimo punto…

  3. Daniele Trasarti su Oracle APEX: come creare un’applicazione web in 5 minuti

    Ciao Sabatino, grazie per l'apprezzamento. Riguardo alla tua domanda ti consiglio di usare Oracle Cloud. Puoi creare un account gratis…

  4. Sabatino Iannazzo su Oracle APEX: come creare un’applicazione web in 5 minuti

    Ciao Daniele, complimenti per la guida, mi hai aperto un mondo! volevo chiederti se con Apex e Oracle Database Express…

  5. Laura su Autenticazione a 2 Fattori basata su TOTP (Time-based One-time Password) con Oracle APEX

    Ciao, trovo molto interessante il tuo articolo. Hai qualche suggerimento per l'autenticazione con spid? pensi di fare qualche guida al…

  6. Mario Volpetti su Oracle APEX: come creare un’applicazione web in 5 minuti

    Ottima spiegazione e complimenti per la semplicità che ai usato. Sono riuscito a farlo anche io con un foglio excel…

  7. Riccardo Liviabella su Google AppSheet: come creare una APP Mobile da un foglio Excel in 5 minuti

    Ciao Daniele e grazie per le tue interessanti spiegazioni. E' da un pò di anni che lavoro su Appsheet e…

Copyright © 2023 · APPin5Minuti.it · Privacy Policy · Cookie Policy