Itgenclr217 går obemärkt förbi hos anställda på Exact Online

Följande påstående ändrar ingenting i en Exact Online-databas:

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

Ingen felmeddelande visas. Antalet och loggningen visar att det faktiskt uppdaterade 2 rader.

Följande fråga på de faktiska API-anropen returnerar en 403 Forbidden med meddelandekoden itgenclr217:

select *
from   sessionios@DataDictionary
order 
by     id desc

Men inget fel uppstår vid synkroniseringen.

Vid nästa SQL:

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

har uppdateringen ingen effekt. SessionIOs visar en itgenclr217, men inget fel utlöses.

Tabellen har can_insert = true och kolumnen har influences_insert = true i tabellerna, respektive SystemTables@DataDictionary och SystemTableColumns@DataDictionary.

En analys av den ursprungliga anropsloggen avslöjar att en HTTP PUT skickas till Exact Online på URL:

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

med nyttolast:

{"FirstName":"FirstName"}

och resultat:

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

Förväntningar:

  • ett fel visas eftersom det misslyckades,
  • och det borde faktiskt uppdatera data när det inte misslyckades.

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.

Det finns en justering som borde lösa detta problem. De nödvändiga ändringarna finns tillgängliga från och med version 27.0 (nästa release) och alla BETA-releaser.

Denna nya release förväntas tas i produktion inom två månader på Invantive Cloud.

För mer information se: