La déclaration suivante ne modifie rien dans une base de données 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('Insertion : ' || 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('Erreur lors de l'insertion de l'employé sur ' || :new.EmployeeHId || ' en raison de ' || sqlerrm);
raise;
end
instead of update
begin
dbms_output.put_line('Mise à jour : ' || 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('Erreur lors de la mise à jour de l'employé sur ' || :new.EmployeeHId || ' en raison de ' || sqlerrm);
raise;
end
Aucune erreur n’est affichée. Le comptage et le journal d’activité indiquent qu’il a effectivement mis à jour 2 lignes.
La requête suivante sur les appels API réels retourne un 403 Forbidden avec le code de message itgenclr217 :
select *
from sessionios@DataDictionary
order
by id desc
Mais aucune erreur ne se produit lors de la synchronisation.
Sur le SQL suivant :
update exactonlinerest..employees
set firstname='FirstName'
where employeehid=53
la mise à jour n’a pas lieu. SessionIOs affiche un itgenclr217, mais aucune erreur n’est déclenchée.
La table a can_insert = true et la colonne a influences_insert = true dans les tables, respectivement, SystemTables@DataDictionary et SystemTableColumns@DataDictionary.
Une analyse du journal des appels natifs révèle qu’un HTTP PUT est envoyé à Exact Online sur l’URL :
https://start.exactonline.de/api/v1/90420/payroll/Employees(guid'4662acaf-d235-4e82-9c37-da1207814736')
avec la charge utile :
{"FirstName":"FirstName"}
et le résultat :
{"error": {"code": "", "message": {"lang": "", "value": "Forbidden"}}}
Attentes :
- une erreur est affichée puisque l’opération a échoué,
- et elle doit en fait mettre à jour les données lorsque cela ne devait pas échouer.