Massaal testen welke Twinfield administraties een error geven bij General Ledger Details V3

Bij het ophalen van Twinfield grootboektransacties uit 800 administraties krijg ik bij een redelijk aantal administraties de Twinfield interne foutmelding:

itgentfr091
Server was unable to process request. —> Invalid name character in 'http://www.twinfield.com/_Unexpected'.

We willen graag uitzoeken wat dit veroorzaakt qua instellingen en de relatie terugleggen naar de administraties. Het is echter veel werk; het gaat om ruim 800 Twinfield administraties die proefondervindelijk getest moeten worden.

Is er een slimmere manier om per administratie dit vast te stellen?

Ja, dat kan. Een manier kan zijn om achtereenvolgens een Twinfield administratie te kiezen en een query te draaien. Via begin...exception...end kunnen foutmeldingen afgevangen worden en afgedrukt, waarna weer de volgende administratie uitgelezen wordt.

De volgende code is een voorbeeld van het per administratie testen of een tabel werkt:

--
-- Scans all Twinfield companies whether the data can be retrieved of a table.
-- Check the DBMS Output tab during execution for the results.
--
begin
  --
  -- Select the Twinfield companies (offices).
  --
  for r 
  in
  ( select spn.code
    ,      spn.provider_data_container_alias
    from   SYSTEMPARTITIONS@DataDictionary spn
    where  spn.provider_name = 'Twinfield'
    order
    by     spn.code
    limit  100 /* Test at most 100 companies. */
  )
  loop
    begin
      use select r.code, r.provider_data_container_alias;
      --
      -- Replace 'create or replace table ... as select *' by
      -- 'select count(*) into l_cnt' when you just want to touch
      -- the records.
      --
      execute immediate 
      'select *'
      || chr(13) || chr(10)
      || 'from   GeneralLedgerDetailsV3'
      || case
         when r.provider_data_container_alias is not null
         then '@' || r.provider_data_container_alias
         end
      || chr(13) || chr(10)
      || 'where  1=1 /* Add filter what you need like year. */'
      ;
      dbms_output.put_line('Success: ' || r.code);
    exception      
      when others
      then
        --
        -- This code is executed when the use or create/select fails.
        --
        dbms_output.put_line('Fail: ' || r.code || ': ' || sqlerrm);
    end;
  end loop;
end;

Na afloop van de code staat in de DBMS Output (tabblad in Query Tool en Invantive Cloud, scherm bij Data Hub) het resultaat.

Het verdient aanbeveling om met set log-native-calls-to-trace true de foutmeldingen te verzamelen en te overleggen. Die landen dan (meestal, afhankelijk van setup) in %USERPROFILE%\invantive\NativeLog. Zie Collect Native Platform Call Data

De melding itgentfr091 met tekst “Server was unable to process request. —> Invalid name character in ‘http://www.twinfield.com/_Unexpected’.” treedt ook op als er maar 1 administratie is maar wel een tabel met veel data. Denk aan bijvoorbeeld miljoenen boekingen in een administratie die in 1x opgehaald worden.

Deze melding treedt ook op bij het gebruik van een limit zoals met:

select *
from   TABEL
limit  10

omdat Twinfield geen zogenaamde “paging” kent: alle rijen die voldoen aan de criteria worden in 1x opgehaald.

Een oplossing is om filters mee te geven zoals:

select *
from   TABEL
where  ...

Niet op alle kolommen kan zinvol gefilterd worden, maar financieel jaar en/of periode zijn een goed startpunt.

Een verbetering is opgenomen vanaf release 24.0.135 om ook relatief grote administraties qua aantallen transacties zonder aanpassingen betrouwbaar te verwerken in Power BI en/of SQL. Zie voor meer informatie: