Itgenclr217 bleibt bei Exact Online-Mitarbeitern unbemerkt

Die folgende Anweisung ändert nichts in einer Exact Online-Datenbank:

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('Fehler beim Einfügen des Mitarbeiters auf ' || :new.EmployeeHId || ' aufgrund von ' || 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('Fehler beim Aktualisieren des Mitarbeiters auf ' || :new.EmployeeHId || ' aufgrund von ' || sqlerrm);
      raise;
  end

Es wird kein Fehler angezeigt. Die Zählung und die Protokollierung zeigen, dass tatsächlich 2 Zeilen aktualisiert wurden.

Die folgende Abfrage zu den tatsächlichen API-Aufrufen gibt eine 403 Forbidden mit der Meldung itgenclr217 zurück:

select *
from   sessionios@DataDictionary
order 
by     id desc

Aber bei der Synchronisation tritt kein Fehler auf.

Im folgenden SQL:

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

hat die Aktualisierung keine Wirkung. SessionIOs zeigt ein itgenclr217, aber es wird kein Fehler ausgelöst.

Die Tabelle hat can_insert = true und die Spalte hat influences_insert = true in den Tabellen SystemTables@DataDictionary bzw. SystemTableColumns@DataDictionary.

Eine Analyse des nativen Anrufprotokolls zeigt, dass ein HTTP PUT an Exact Online unter der URL gesendet wird:

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

mit der Nutzlast:

{"FirstName":"FirstName"}

und Ergebnis:

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

Erwartungen:

  • Es wird ein Fehler angezeigt, da es fehlgeschlagen ist,
  • und es sollte die Daten tatsächlich aktualisieren, wenn es nicht fehlgeschlagen ist.

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.

Es gibt eine Anpassung, die dieses Problem lösen sollte. Die notwendigen Änderungen sind ab Version 27.0 (der nächsten Version) und allen BETA-Versionen verfügbar.

Diese neue Version soll voraussichtlich innerhalb von 2 Monaten auf Invantive Cloud in Produktion genommen werden.

Für weitere Informationen siehe:

Diese Frage wurde nach 1 Woche Inaktivität automatisch geschlossen. Die letzte gegebene Antwort wurde als Lösung markiert.

Bitte stelle eine neue Frage in einem separaten Thema, wenn das Problem erneut auftritt. Bitte füge in der neuen Frage einen Link zu diesem Thema ein, indem du die URL in den Text einfügst.