Itgenclr217 passa inosservato ai dipendenti di Exact Online

La seguente dichiarazione non modifica nulla in un database di Exact Online:

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('Errore nell'inserimento del dipendente su ' || :new.EmployeeHId || ' a causa di ' || 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('Errore nell'aggiornamento del dipendente su ' || :new.EmployeeHId || ' a causa di ' || sqlerrm);
      raise;
  end

Nessun errore è mostrato. Il conteggio e il log mostrano che sono effettivamente state aggiornate 2 righe.

La seguente query sulle chiamate effettive API restituisce un 403 Forbidden con codice messaggio itgenclr217:

select *
from   sessionios@DataDictionary
order 
by     id desc

Ma non si verifica nessun errore sulla sincronizzazione.

Sul seguente SQL:

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

l’aggiornamento non ha effetto. SessionIOs mostra un itgenclr217, ma nessun errore è attivato.

La tabella ha can_insert = true e la colonna ha influences_insert = true nelle tabelle rispettivamente SystemTables@DataDictionary e SystemTableColumns@DataDictionary.

Un’analisi del log delle chiamate native rivela che viene inviato un HTTP PUT a Exact Online sull’URL:

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

con il payload:

{"FirstName":"FirstName"}

e il risultato:

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

Aspettative:

  • viene mostrato un errore poiché ha fallito,
  • e dovrebbe effettivamente aggiornare i dati quando non ha fallito.

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.

È stata apportata una modifica che dovrebbe risolvere questo problema. Le modifiche necessarie saranno disponibili a partire dalla versione 27.0 (la prossima release) e in tutte le versioni BETA.

Questa nuova versione si prevede sarà in produzione su Invantive Cloud entro 2 mesi.

Per ulteriori informazioni, vedi:

Questa domanda è stata chiusa automaticamente dopo 1 settimana di inattività. L’ultima risposta data è stata contrassegnata come soluzione.

Si prega di porre una nuova domanda in un argomento separato se il problema si ripresenta. Nel nuovo quesito, includere un link a questo argomento incollando l’URL nel testo.