Itgenclr217 blijft onopgemerkt bij Exact Online medewerkers

De volgende instructie verandert niets in een Exact Online-database:

use 90420@eol

set use-http-disk-cache@eol false

set use-http-memory-cache@eol false

create or replace table EmployeesSoll@InMemoryStorage
as
select jte.*
from   jsontable
       ( '[*]'
         passing '[{  "id":31870082, "first_name":"yyy"},{  "id":31870282, first_name":"xxx"}]'
         columns EmployeeHid number path 'id'
         ,       FirstName varchar2 path 'first_name'
       ) jte

synchronize EmployeesSoll@InMemoryStorage
to ExactonlineREST..Employees@eol
with insert or update
identified by EmployeeHID
triggers
instead of insert 
  begin
    dbms_output.put_line('Insert: ' || dbms_sync.diff(:old, :new));
    insert into ExactOnlineREST..Employees@eol
    ( EmployeeHID
    , FirstName
    )
    values
    ( :new.EmployeeHID
    , :new.FirstName
    );
  exception
    when others
    then
      dbms_output.put_line('Error on insert employee on ' || :new.EmployeeHId || ' due to ' || sqlerrm);
      raise;
  end
  instead of update
  begin
    dbms_output.put_line('Update: ' || dbms_sync.diff(:old, :new));
    update ExactOnlineREST..Employees@eol
    set    FirstName    = :new.FirstName
    where  EmployeeHID = :old.EmployeeHID
    ;
  exception
    when others
    then
      dbms_output.put_line('Error on update employee on ' || :new.EmployeeHId || ' due to ' || sqlerrm);
      raise;
  end

Er wordt geen fout getoond. Het aantal en de logging geven aan dat er daadwerkelijk 2 rijen zijn bijgewerkt.

De volgende query op de eigenlijke API-aanroepen retourneert een 403 Forbidden met de itgenclr217 berichtcode:

select *
from   sessionios@DataDictionary
order 
by     id desc

Maar er treedt geen fout op bij het synchroniseren.

Bij de volgende SQL:

update exactonlinerest..employees
set    firstname='FirstName'
where  employeehid=53

heeft de update geen effect. SessionIOs toont een itgenclr217, maar er wordt geen fout getriggerd.

De tabel heeft can_insert = true en kolom heeft influences_insert = true in de tabellen respectievelijk SystemTables@DataDictionary en SystemTableColumns@DataDictionary.

Een analyse van het native oproeplog onthult dat een HTTP PUT wordt verzonden naar Exact Online op de URL:

https://start.exactonline.de/api/v1/90420/payroll/Employees(guid'4662acaf-d235-4e82-9c37-da1207814736')

met payload:

{"FirstName":"FirstName"}

en resultaat:

{"error": {"code": "", "message": {"lang": "", "value": "Forbidden"}}}

Verwachtingen:

  • er wordt een fout getoond aangezien het mislukt is,
  • en het zou de gegevens daadwerkelijk moeten bijwerken wanneer het niet mislukt.

An analysis revealed that two problems:

  • the error should have been shown in a pop-up or alike
  • at least the insert / update / delete functionality on the REST API for Employees is gone, see:

https://start.exactonline.nl/docs/HlpRestAPIResourcesDetails.aspx?name=PayrollEmployees

Invantive will reach out to Exact Online to get more information on the background and motivations. In case this is an intended change, the following alternatives can be thought of:

  • Use the XML API tables instead (when still supported).
  • Use a signal list instead.

An answer will be added once more information has been made available by Exact Online.

The Exact Online support case is 05260663.

Er is een aanpassing die dit probleem zou moeten oplossen. De benodigde wijzigingen zijn beschikbaar vanaf release 27.0 (de volgende release) en alle BETA-releases.

Deze nieuwe release is/wordt naar verwachting binnen 2 maanden in productie genomen op Invantive Cloud.

Voor meer informatie zie:

Deze vraag is automatisch gesloten na 1 week 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.