ik probeer via Azure DataFactory gegevens op te halen van TeamLeader middels een eigen opgezette API in Invantive Cloud (via de modules van applicaties). Ik loop nu vast op de MFA instellingen van het account dat ik voor authenticatie heb ingesteld in ADF. In plaats van de gegevens, krijg ik een “voer uw MFA code in”-pagina.
Wat zijn mijn mogelijkheden om om de MFA heen te werken?
In Azure heb ik voor het testen alleen een “copy data” taak in een pipeline staan. Hierin gebruik ik de nieuwe endpoint als source en wil de gegevens in het gunstigste geval meteen wegschrijven in een Microsoft SQL Server database.
Bij het uitvoeren van de pipeline in Azure krijg ik een foutmelding dat er geen valide data vanuit de bron wordt aangeleverd of wanneer ik de data wegschrijf naar een BLOB Storage krijg ik een HTML-pagina, zie ook bijlage.
Wanneer ik de endpoint in een incognito venster open, krijg ik een doorverwijzing naar de MFA authenticator pagina. Met het invoeren van de juiste code, krijg ik de gewenste gegevens te zien.
De code die ik gebruik om in Invantive een nieuwe endpoint te definiëren:
declare
l_table_name constant varchar2 := cloud_http.get_request_query_parameter_value('table');
l_date_from constant varchar2 := cloud_http.get_request_query_parameter_value('date_from');
l_query constant varchar2 := 'select * from '
|| table_name
|| ' where created_at >= '''
|| date_from
|| ''' or updated_at >= '''
|| date_from
|| ''' for json auto'
;
begin
--
-- Check that a 'table' and 'created_date' are specified.
--
if coalesce(length(table_name), 0) = 0
then
raise_application_error(-20163, 'Specify a value for the ''table'' query parameter.');
end if;
if date_from is null
then
raise_application_error(-20163, 'Specify a value for the ''date_from'' query parameter.');
end if;
--
-- Check if table exists
--
declare
l_dummy pls_integer;
begin
select 1
into l_dummy
from systemtables@datadictionary
where full_qualified_name = table_name
;
exception
when no_data_found
then
raise_application_error(-20163, 'There is no table with the name ''' || table_name || '''.');
end;
--
-- Set return to output JSON.
--
cloud_http.set_response_content_type('application/json');
--
-- Loop over result set and append JSON to response body.
--
for r in (execute immediate query)
loop
cloud_http.append_to_response_body_text(r.json);
end loop;
end;
De gebruikte PSQL module kan eventueel vervangen worden door onderstaande.
Voor het testen van de module kan eventueel Invantive Cloud gebruikt worden, maar voor productiegebruik is het nodig om Invantive App Online te gebruiken.
PSQL Module
declare
l_table_name varchar2;
l_date_from date;
l_query varchar2;
begin
--
-- Check that a 'table' and 'created_date' are specified.
--
l_table_name := cloud_http.get_request_query_parameter_value('table');
if coalesce(length(l_table_name), 0) = 0
then
raise_application_error(-20163, 'Specify a value for the ''table'' query parameter.');
end if;
--
l_date_from := to_date(cloud_http.get_request_query_parameter_value('date_from'), 'YYYY-MM-DD');
if l_date_from is null
then
raise_application_error(-20163, 'Specify a value for the ''date_from'' query parameter in the format YYYY-MM-DD.');
end if;
--
-- Check that table exists on Teamleader.
--
declare
l_dummy pls_integer;
begin
select 1
into l_dummy
from systemtables@datadictionary
where full_qualified_name = l_table_name
-- Optional: filter on alias or provider_name being Teamleader.
;
exception
when no_data_found
then
raise_application_error(-20163, 'There is no table with the name ''' || table_name || '''.');
end;
--
-- Set return to output JSON.
--
cloud_http.set_response_content_type('application/json');
l_query := 'select * from '
|| l_table_name
|| '@tlr' /* Or whatever alias. */
|| ' where created_at >= to_date('''
|| to_char(l_date_from, 'YYYY-MM-DD')
|| '', ''YYYY-MM-DD'')' or updated_at >= to_date('''
|| to_char(l_date_from, 'YYYY-MM-DD')
|| '', ''YYYY-MM-DD'')' for json auto'
;
--
-- Loop over result set and append JSON to response body.
--
for r in (execute immediate l_query)
loop
cloud_http.append_to_response_body_text(r.json);
end loop;
end;
Invantive App Online
Modules kunnen gedurende het bouwen getest worden op Invantive Cloud. Dit is voor interactief gebruik met een eis om te autoriseren via gebruikersnaam/wachtwoord plus MFA.
Invantive App Online is het broertje van Invantive Bridge Online. Waar Invantive Bridge Online dient om gegevens uit bijvoorbeeld Teamleader in OData4 formaat naar bijvoorbeeld Power BI of Power Query te sturen, kunnen via Invantive App Online apps gestart worden met de Invantive Cloud-aanmeldgegevens en alleen IP-adrescontrole.
De URL voor een module is eenvoudig op te vragen door op “Kopieer Link” te klikken vanuit het uitvoeren van de applicatie in Invantive Cloud:
Deze vraag is automatisch gesloten na 2 weken inactiviteit. Het laatste gegeven antwoord is gemarkeerd als oplossing.
Gelieve een nieuwe vraag te stellen via een apart topic als het probleem opnieuw optreedt. Gelieve in de nieuwe vraag een link naar dit topic op te nemen door de URL er van in de tekst te plakken.