Exact Online Premium Flex custom fields ophalen en bijwerken

Vanaf release 24.0.306 is het mogelijk om de waardes van custom fields op te halen en bij te werken.

Met custom flex binnen de Flex-module van Exact Online Premium is het mogelijk om verschillende soorten custom fields te definieren. Uw Exact Online-specialist kan u hier meer over vertellen.

Custom fields kunnen op een aantal tabellen toegevoegd worden, die Exact “business components” noemt. Een lijst van de beschikbare business components is op te vragen met:

select *
from   BusinessComponents

Het ophalen van alle custom fields uit een lijst kan met een query zoals:

select cfd.Division
,      cfd.Id
,      cfd.Code
,      cfd.Name
,      cfd.INVAN_ExtDemoLoyaltyMember
,      cfd.INVAN_ExtDemoLoyaltyCard
,      cfd.INVAN_ExtDemoLoyaltyDiscount
,      cfd.INVAN_ExtDemoLoyaltyLevel
,      cfd.INVAN_ExtDemoLoyaltyRemarks
,      cfd.INVAN_ExtDemoContact
from   ( select act.Division
         ,      act.Id
         ,      act.Code
         ,      act.Name
         ,      cfd.PropertyName
         ,      cfd.Value
         from   ExactOnlineREST..Accounts act
         left
         outer
         join   CustomFieldValues
                ( division => act.Division
                , linkId => act.Id
                , BusinessComponentName => 'Account'
                ) cfd
         where  act.Division = 135483
       ) act
pivot  ( max(act.value)
         for act.PropertyName in 
         ( [INVAN_ExtDemoLoyaltyMember]
         , [INVAN_ExtDemoLoyaltyCard]
         , [INVAN_ExtDemoLoyaltyDiscount]
         , [INVAN_ExtDemoLoyaltyLevel]
         , [INVAN_ExtDemoLoyaltyRemarks]
         , [INVAN_ExtDemoContact]
         )
       ) cfd

Het resultaat is vergelijkbaar met:

Helaas biedt Exact Online Premium geen automatische en ondersteunde manier om alle custom field-namen op te vragen. Daarnaast is er per rij een API-call nodig om de waardes op te halen; bij grotere aantallen rijen kan de loopduur daardoor enorm oplopen ondanks een limiet van 300 calls per minuut.

De bovenstaande query begint met ophalen van de relaties, en voegt via CustomFieldValues daaraan de custom field-waarden toe. Het omzetten van de custom field-waarden naar individuele kolommen gebeurt met pivot, een standaard SQL-keyword.

Om custom field waardes op te halen is het momenteel helaas noodzakelijk om een custom view te maken voor gebruik in Power BI. Als de custom field metadata ooit beschikbaar komen als Exact Online Premium API, dan kan Invantive SQL ook automatisch de nodige views zelf maken.

Bijwerken

Het bijwerken van een custom field voor een rij van een business component gaat via de procedure set_custom_field_value in de package eol_premium:

begin
  eol_premium.set_custom_field_value
    ( 135483
    --
    , LinkId => 'fe53c880-96dd-4dd6-b3b4-c5cc96ace5e8'
    , BusinessComponentName => 'Account'
    , PropertyName => 'INVAN_ExtDemoLoyaltyCard'
    , Value => to_char(sysdateutc, 'HH24MISS')
    --
    );
end;

Hieraan wordt meegegeven:

  • de divisiecode,
  • de naam van de business component,
  • de unieke waardes van de technische sleutel in Id, en
  • de gewenste waarde.

Het bijwerken kost 1 API-call per custom field en rij. Het bijwerken van 10 custom fields voor 1.000 rijen kost dus 10.000 API-calls.

Het resultaat is na het bijwerken meteen zichtbaar als een nieuwe waarde voor “Loyalty card”:

image

Geen data?

Geeft CustomFieldValues geen waardes terug? Controleer dan dat de gebruikte app in het Exact Online App Center de bijbehorende scope organization.extensibility heeft:

image