Laad Exact Online als JSON data in Qlik

Invantive Cloud ondersteunt het laden van real-time data uit Exact Online administraties voor Power BI, Power Query en Azure Data Factory via het OData4 protocol.

Qlik en Tableau met Exact Online

Echter, Qlik ondersteunt alleen OData3. Qlik gebruikers konden daardoor alleen via een tussenstap zoals datareplicatie naar een SQL Server database gegevens verwerken uit Exact Online of één van de andere ondersteunde platformen.

Hetzelfde geldt ook voor Tableau: Tableau ondersteunt alleen OData3 met JSON en OData4 met XML.

For JSON

Dankzij de for json clause is het echter eenvoudig om zelf een driver te maken als webapp in Invantive Cloud die de real-time gegevens uit Exact Online teruggeeft voor verwerking in Qlik met de Qlik REST Connector.

De Qlik REST Connector ondersteunt standaard de benodigde Basic authentication en via de URL kan meegegeven worden welke tabel(len) uit Exact Online teruggegeven moeten worden. Ook geavanceerdere scenario’s met filteren op Exact Online administratie of bijvoorbeeld specifieke klanten of datums is zo eenvoudig mogelijk.

Webapp

Doorloop de volgende stappen om een webapplicatie te maken die de JSON teruggeeft. Dit concept is niet alleen eenvoudig toepasbaar voor Exact Online maar voor willekeurig welk cloudplatform zoals ActiveCampaign of Simplicate:

  • Zorg dat een Exact Online database bestaat. Als die niet bestaat, maak hem aan via https://cloud.invantive.com/app/setup/databases/new/exactonline.
  • Voeg een applicatie toe voor de JSON connector:
    JSON connector
  • Voeg aan deze nieuwe applicatie een uitvoerbare module toe:
    JSON output voor Qlik REST Connector
  • De broncode staat aan het einde van dit topic.
  • Ga terug naar de applicatie en kies de knop “Uitvoeren”:
    Uitvoeren applicatie
  • Kies de Exact Online database:
    Exact Online database
  • En kies de knop “Uitvoeren”.
  • Test de module door op de module te klikken en kies uiteindelijk “Kopieer Link”.
  • Op het klembord staat nu de URL om deze applicatiemodule uit te voeren voor de gekozen database.
  • Plaats deze URL in de Qlik REST Connector met erachter de tabelnaam, samen met de Invantive Cloud aanmeldgegevens:

https://app-online.invantive.com/apps/GUID/databases/URLSEGMENT/modules/GUID/?table=ExactOnlineREST.Financial.Journals

Broncode

declare
  l_table_fq_name constant varchar2 := cloud_http.get_request_query_parameter_value('table');
begin
  --
  -- Check that a table is specified.
  --
  if coalesce(length(l_table_fq_name), 0) = 0
  then
    raise_application_error(-20163, 'Specify a value for the ''table'' query parameter.');
  end if;
  --
  -- Check correct table name.
  -- 
  declare
    l_dummy pls_integer;
  begin
    select 1
    into   l_dummy
    from   systemtables@datadictionary
    where  full_qualified_name = l_table_fq_name
    ;
  exception
    when no_data_found
    then
      raise_application_error
      ( -20163
      , 'There is no table with the name ''' 
        || l_table_fq_name 
        || '''.'
      );
  end;
  --
  -- Return output as JSON.
  --
  cloud_http.set_response_content_type('application/json');
  --
  -- Append JSON form of table contents to HTTP output.
  --
  for r in
  ( execute
    immediate 
    'select * from ' 
    || coalesce(l_table_fq_name, 'MISSING')
    || ' for json auto'
  )
  loop
    cloud_http.append_to_response_body_text(r.json);
  end loop;
end;
1 Like

Ik kan de JSON in een browser aanroepen maar ik kom niet verder in Qlik.
Bij het invoeren van “Basic” authentication wordt er nog steeds de onderstaande error gegeven. Moet dit met parameters gedaan worden?

HTTP protocol error 401 (Unauthorized): Requested resource requires authentication.

Wanneer ik onderstaande probeer met bijvoorbeeld divisie code 123456 werkt dit niet. Hoe kan je filters hier invoeren?

https://app-online.invantive.com/apps/GUID/databases/URLSEGMENT/modules/GUID//?table=ExactOnlineREST.System.SystemDivisions?$filter=Code%20eq%20123456

De melding

geeft aan dat blijkbaar de Basic authenticatiegegevens niet doorgegeven worden. Neem even contact op met support via Teamviewer, dan wordt er gezamenlijk gekeken.

M.b.t. filters: die zijn in dit voorbeeld niet mogelijk gemaakt. $filter is OData syntax, maar dit loopt volledig buiten OData om, hetgeen juist het voordeel is voor specifieke toepassingen.

Filters zijn wel mogelijk, net zoals via get_request_query_parameter_value('table') de waarde van de GET-parameter table wordt opgevraagd en gebruikt. Bijvoorbeeld door een parameter division te verwerken in de PSQL is zo’n filter mogelijk.

Hou er wel rekening mee dat GET-parameters maar 1x door een ? voorafgegaan mogen worden om een geldige URL te vormen. Denk aan bijvoorbeeld deze URLs:

https://app-online.invantive.com/apps/GUID/databases/URLSEGMENT/modules/GUID//?table=ExactOnlineREST.System.SystemDivisions&division=123456

1 Like