Ga naar hoofdinhoud
Versie: Versie 22

Calculaties


Introductie​

Wat zijn calculaties?

Met calculaties in Fortes Change Cloud kun je customvelden verrijken met logica. Ze worden geschreven in XML en kunnen bewerkingen uitvoeren zoals het optellen van velden, het vergelijken van waarden, het aggregeren van gegevens van onderliggende objecten, en meer. Calculaties vormen de ruggengraat van geavanceerde configuratie in FCC en maken geautomatiseerde gegevensverwerking mogelijk binnen portfolio's, projecten en andere objecten.

Wie gebruikt calculaties?

Calculaties worden aangemaakt en onderhouden door systeembeheerders en consultants die het datamodel van FCC configureren. Ze worden doorgaans gebruikt om veldwaarden te automatiseren, bedrijfsregels af te dwingen en afgeleide kengetallen te creëren binnen de portfolio- en projecthiërarchie.

Drie manieren om een customveld te vullen​

Customvelden kunnen op drie manieren worden gevuld:

  • Handmatige invoer: De gebruiker vult de waarde handmatig in.
  • Conditionele logica: Er wordt alleen een waarde naar het veld geschreven als aan een specifieke voorwaarde wordt voldaan.
  • Calculatie: De waarde wordt automatisch berekend met behulp van op XML gebaseerde calculatieblokken.

Objectenreferentietabel​

Elk object in FCC heeft een referentienummer (foldertype). Deze nummers worden in calculaties gebruikt om specifieke objecttypes aan te spreken. Hieronder vind je de volledige referentietabel.

FoldertypeInterne objectnaamEngelsNederlands
3PersonResourceResource
4KnowledgeRepositoryKnowledge RepositoryKennisbibliotheek
16SkillSkillSkill
76CurrencyCurrencyValuta
81TimesheetTime SheetWeekstaat
83CostEntryCost / Hour EntryBoekingsregel (kosten/uren)
84TimesheetRowTime Sheet RowWeekstaatregel
100EntryEntryBoekingsregel
301DocumentBaseDocumentDocument
302DocumentHistoryDocumentDocument
500OrganizationalUnitOrganisational UnitOrganisatie-eenheid
701PortfolioPortfolioPortfolio
703PortfolioModelPortfolio ModelPortfolio model
711PortfolioDashboardCustom DashboardEigen Overzicht
720BenefitBenefitBenefit
730ScenarioScenarioScenario
4900ProjectBaseProject BaseProject Base
4901IdeaIdeaIdee
4910ProgramProjectProgrammeProgramma
4911ProgramProjectModelProgramme ModelProgrammamodel
5000P2ProjectProjectProject
5002P2ProjectTemplateProject ModelProjectmodel
5003ProjectReportPortfolio ItemPortfolio-item
5004ProjectReportsHistoryVersionVersie
5005ProjectReportModelReport ModelRapportagemodel
5006SavedProjectReportSaved Portfolio ItemBewaard portfolio-item
5010ProjectPublicationProject publicationProject publication
5031ProjectRoleProject RoleProject Rol
5100P2ProgramFolderMap
5110P2ProgramProjectMSP ProgrammeMSP Programma
5111P2ProgramTemplateMSP Programme ModelMSP-programmamodel
5301P2StageStageFase
5302P2ProductProductProduct
5303P2WorkpackageWorkpackageWerkpakket
5499NonProjectActSetsNPA set containerNPA set container
5500NonProjectNon-project Activity SetNiet-project activiteitenset
5501NonProjectCategoryCategoryCategorie
5502NonProjectActivityNon-project ActivityNiet-project activiteit
5510TimeRegistrationGroupTime Entry GroupTijdregistratiegroep
5519TimeRegistrationConfigurationsTime Entry ConfigurationsTijdregistratieconfiguraties
5520TimeRegistrationConfigurationTime Entry ConfigurationTijdregistratieconfiguratie
5602PlanItemPlan ItemPlanning-item
6001P2IssueIssueIssue
6011P2RiskRiskRisico
6021P2QualityQuality reviewKwaliteitsbeoordeling
6031P2ChangeChangeWijziging
6041P2ActionActionActie
6051P2LessonlearnedLesson learnedLeerpunt
6061OrderOrderOrder
8017ProjectResourceProject ResourceProject Resource

Calculatiesyntaxis​

Enkele calculatie​

Calculaties worden geschreven in XML. De meest voorkomende vorm is een enkele calculatie:

<calculation>
<!-- This is a comment and has no effect on the XML code -->
<block></block>
</calculation>

Belangrijke regels:

  • Elke calculatie moet beginnen met <calculation> en eindigen met </calculation>. Deze tags zijn hoofdlettergevoelig.
  • Binnen een calculatie definieer je blokken die een specifieke bewerking uitvoeren (bijvoorbeeld <cmp/>, <add/>).
  • Gebruik XML-commentaar (<!-- ... -->) om te documenteren wat de calculatie doet. Dit wordt beschouwd als best practice.

Meerdere calculaties​

Als je meerdere calculatieblokken nodig hebt (bijvoorbeeld om afhankelijk van voorwaarden verschillende logica uit te voeren), plaats je ze binnen een <calculations>-element (meervoud):

<calculations>
<!-- Execute when condition A is met -->
<calculation>
<condition></condition>
<block></block>
</calculation>
<!-- Execute when condition B is met -->
<calculation>
<condition></condition>
<block></block>
</calculation>
</calculations>

Tips voor het schrijven van XML​

  • Gebruik inspringing. Inspringen is niet vereist om de XML te laten werken, maar het maakt calculaties veel makkelijker om te lezen en te onderhouden.
  • Gebruik commentaar. Documenteer je keuzes en leg uit wat elk blok doet. Zo blijft de calculatie begrijpelijk, ook wanneer iemand anders deze later opnieuw bekijkt.

Calculatieblokken​

Calculatieblokken zijn de bouwstenen binnen een <calculation>. Elk blok voert een specifieke bewerking uit. Je kunt één of meerdere blokken gebruiken in een enkele calculatie.


Add​

Het <add>-blok berekent de som van de opgegeven velden.

AttribuutWaardeOmschrijving
minustrue / falseIngesteld op een <field> om de waarde te negeren

Voorbeeld: Twee velden optellen:

<calculation>
<add>
<field>Custom1</field>
<field>Custom2</field>
</add>
</calculation>

Voorbeeld: Aftrekken (add met minus):

<calculation>
<add>
<field>Custom1</field>
<field minus='true'>Custom2</field>
</add>
</calculation>

Resultaat: Custom1 + (-Custom2) = Custom1 - Custom2


Vergelijken​

Het <cmp>-blok vergelijkt een of meerdere velden/waarden. Geeft True, False of een aangepast resultaat terug.

AttribuutWaardenOmschrijving
valueElke waardeVaste waarde die wordt gebruikt in de vergelijking
conditionequals, smaller, smallerequals, greater, greaterequals, not, in, not in, empty, not emptyDe vergelijkingsoperator
resultElke waardeAangepaste waarde die wordt teruggegeven als de vergelijking waar is

Voorbeeld: Gelijkheidscontrole:

<calculation>
<cmp condition='equals' value='test'>
<field>Custom1</field>
</cmp>
</calculation>

Geeft True terug als Custom1 gelijk is aan "test".

Voorbeeld: Ongelijk met aangepast resultaat:

<calculation>
<cmp condition='not' value='test' result='my value'>
<field>Custom1</field>
</cmp>
</calculation>

Geeft "my value" terug als Custom1 niet gelijk is aan "test".

Voorbeeld: In lijst:

<calculation>
<cmp condition='in' value='value1,value2,value3'>
<field>Custom1</field>
</cmp>
</calculation>

Geeft True terug als Custom1 overeenkomt met een van de opgegeven waarden.

Voorbeeld: Groter dan met geneste waarde:

<calculation>
<cmp condition='greater'>
<field>Custom1</field>
<value>10</value>
</cmp>
</calculation>

Samenvoegen​

Het <concat>-blok voegt meerdere velden of waarden samen tot één string.

AttribuutWaardeOmschrijving
separatorElke waardeWordt geplaatst tussen de samengevoegde waarden. Standaard: geen scheidingsteken

Het <field>-element binnen <concat> ondersteunt aanvullende attributen:

AttribuutOmschrijving
offsetAantal tekens dat wordt overgeslagen vanaf het begin van de veldwaarde
lengthAantal tekens dat wordt behouden vanaf het begin van de veldwaarde
minlengthMinimale lengte die de veldwaarde moet hebben

Voorbeeld: Samenvoegen met scheidingsteken:

<calculation>
<concat separator=" " subfolders="true" relation="planning" foldertype="5602">
<field>Owner</field>
</concat>
</calculation>

Als er 3 planning-onderliggende objecten zijn, wordt het volgende teruggegeven: Owner1 Owner2 Owner3

Voorbeeld: Meerdere velden en waarden samenvoegen:

<calculation>
<concat separator="+">
<field>EntryType</field>
<field>P2Project</field>
<value>RowApproval</value>
</concat>
</calculation>

Geeft bijvoorbeeld terug: Planned+12345+RowApproval


Splitsen​

Het <cut>-blok splitst een veldwaarde op basis van een scheidingsteken en geeft specifieke delen terug op basis van index.

AttribuutWaardeOmschrijving
delimiterElke waardeHet teken waarop wordt gesplitst (standaard: spatie)
indexesKommagescheiden indicesWelke delen worden teruggegeven (0-based)

Voorbeeld: Selecteren op index (gescheiden door spaties):

<calculation>
<cut>
<field indexes='0,2'>Custom2</field>
</cut>
</calculation>

Als Custom2 = "One Two Three Four", wordt het volgende teruggegeven: OneThree

Voorbeeld: Selecteren op index met scheidingsteken:

<calculation>
<cut>
<field indexes='0' delimiter='-'>Custom1</field>
</cut>
</calculation>

Als Custom1 = "One-Two-Three-Four", wordt het volgende teruggegeven: One


Datum​

Het <date>-blok berekent datums op basis van aangepaste periodes.

ElementOmschrijving
<field>Het datumveld dat als invoer wordt gebruikt
<startof>Geeft het begin van een periode terug (bijvoorbeeld maand, jaar)
<endof>Geeft het einde van een periode terug
<offset>Telt tijdsintervallen op of trekt ze af (weken, maanden, kwartalen, jaren)

Voorbeeld: Laatste dag van volgende maand:

<calculation>
<date>
<field>Portfolio veld 1</field>
<offset>
<scale>months</scale>
<intervals>1</intervals>
</offset>
<endof>
<scale>month</scale>
</endof>
</date>
</calculation>

Datumopmaak​

Het <dateproperty>-blok geeft een datumveld weer als een specifieke tekstuele representatie.

AttribuutWaardeOmschrijving
formatOpmaakstringHet te gebruiken datumopmaakpatroon

Ondersteunde opmaaktokens:

TokenOmschrijvingVoorbeeld
GTijdperkAD
y / yyyyJaar1996; 96
M / MMMaand in het jaarJuly; Jul; 07
wWeek in het jaar27
WWeek in de maand2
DDag in het jaar189
dDag in de maand10
EDag van de week (tekst)Tuesday
aAM/PM-aanduidingPM
HUur (0-23)0
hUur (1-12)12
mMinuut30
sSeconde55
SMilliseconde978
zTijdzonePST; GMT-08:00

Voorbeeld: Weeknummer:

<calculation>
<dateProperty format="WW">
<field>Enddate</field>
</dateProperty>
</calculation>

Voor einddatum 2010-01-08 wordt het volgende teruggegeven: 01

Voorbeeld: Jaar met label:

<calculation>
<dateProperty format="'Year: 'yyyy">
<field>Enddate</field>
</dateProperty>
</calculation>

Geeft terug: Year: 2010


Datumberekening​

Het <datecalculation>-blok voert berekeningen uit op datumvelden.

Voorbeeld: Huidige datum:

<calculation>
<datecalculation>
<var>%currentdate%</var>
</datecalculation>
</calculation>

Voorbeeld: Eerste dag van het jaar:

<calculation>
<datecalculation>
<field>Custom1</field>
<startof>
<scale>year</scale>
</startof>
</datecalculation>
</calculation>

Voorbeeld: Laatste dag van de maand:

<calculation>
<datecalculation>
<field>Custom1</field>
<endof>
<scale>month</scale>
</endof>
</datecalculation>
</calculation>

Delen​

Het <div>-blok deelt het ene veld door het andere.

AttribuutWaardeOmschrijving
minustrue / falseIngesteld op een <field> om de waarde te negeren

Voorbeeld: Delen door een vaste waarde:

<calculation>
<div>
<field>Custom1</field>
<value>3</value>
</div>
</calculation>

Voorbeeld: Delen door een genegeerd veld:

<calculation>
<div>
<field>Custom1</field>
<field minus="true">Custom2</field>
</div>
</calculation>

Folderfield​

Het <folderfield>-blok neemt de waarde over van een veld van het huidige object of van een gerefereerd object.

Voorbeeld: Veld overnemen via referentie:

<calculation>
<folderfield>
<field reference="ProjectReport">FolderID</field>
</folderfield>
</calculation>

Voorbeeld: Percentage overnemen van huidige fase:

<calculation>
<folderfield>
<field reference="CurrentStage">PercentageCompleted</field>
</folderfield>
</calculation>

Max​

Het <max>-blok evalueert twee waarden en geeft de grootste terug. Waarden moeten van het type double zijn.

<calculation>
<max>
<field>20.0</field>
<field>25.0</field>
</max>
</calculation>

Geeft terug: 25.0


Min​

Het <min>-blok evalueert twee waarden en geeft de kleinste terug. Waarden moeten van het type double zijn.

<calculation>
<min>
<field>20.0</field>
<field>25.0</field>
</min>
</calculation>

Geeft terug: 20.0


Vermenigvuldigen​

Het <mul>-blok vermenigvuldigt velden met elkaar.

AttribuutWaardeOmschrijving
minustrue / falseIngesteld op een <field> om de waarde te negeren

Voorbeeld:

<calculation>
<mul>
<field>Custom43</field>
<field>Custom45</field>
</mul>
</calculation>

Voorbeeld: Vermenigvuldigen met negatie:

<calculation>
<mul>
<field>Custom42</field>
<field minus="true">Custom44</field>
</mul>
</calculation>

Som​

Het <sum>-blok telt de waarden van een veld op over alle overeenkomende onderliggende objecten.

tip

Als je twee velden op hetzelfde object wilt optellen, gebruik dan <add> in plaats daarvan.

Voorbeeld: Som over alle onderliggende projecten:

<calculation>
<sum>
<folderFilter foldertype='5000'/>
<field>Custom1</field>
</sum>
</calculation>

Voorbeeld: Som met een naamfilter:

<calculation>
<sum>
<folderFilter foldertype='5000'>
<Name operator='equals' filterValues='Test Project'/>
</folderFilter>
<field>Custom1</field>
</sum>
</calculation>

Waar / onwaar​

De <tst>- en <not>-blokken evalueren een veld naar True of False.

Voorbeeld: Test:

<calculation>
<tst>
<field>Custom1</field>
</tst>
</calculation>

Voorbeeld: Not (omgekeerd):

<calculation>
<not>
<field>Custom1</field>
</not>
</calculation>

Geeft True terug als Custom1 False is.


Waarde​

Het <value>-blok geeft een vaste waarde terug. Wordt niet gebruikt om te rekenen, maar om een constante in te stellen.

<calculation>
<value>123.89</value>
</calculation>

Aantal werkdagen​

Het <nrworkingdays>-blok berekent het aantal werkdagen tussen twee datumvelden.

<calculation>
<nrworkingdays>
<field>Custom1</field>
<field>Custom2</field>
</nrworkingdays>
</calculation>

Aantal dagen tussen​

Het <nrdaysbetween>-blok berekent het totale aantal dagen (inclusief weekenden) tussen twee datumvelden.

<calculation>
<nrdaysbetween>
<field>Startdate</field>
<field>Enddate</field>
</nrdaysbetween>
</calculation>

Aantal​

Het <count>-blok telt het aantal overeenkomende onderliggende objecten.

Voorbeeld: Portfolio-items tellen:

<calculation>
<count>
<folderFilter foldertype="5003" />
</count>
</calculation>

Voorbeeld: Tellen met voorwaarden:

<calculation>
<count foldertypes="301">
<condition>
<cmp value="4">
<field>DocumentType</field>
</cmp>
</condition>
</count>
</calculation>

Boekingensom​

Het <timelinesum>-blok berekent de som van alle boekingen die aan een specifiek object zijn gerelateerd. Het ondersteunt verschillende attributen en filteropties.

Hoofdattributen​

AttribuutWaardenOmschrijving
typePlanned, Actual, Budget, Forecast, Demand, Request, Realised, enz.Filtert op het opgegeven boekingstype
hourstrue / falseUren meenemen in de calculatie
moneytrue / falseGeld meenemen in de calculatie
valuetrue / falseWaarde-items meenemen in de calculatie
periodStartDatum of FIELD:FieldNameStartdatum van de periode
periodEndDatum of FIELD:FieldNameEinddatum van de periode
bookdateDatum of FIELD:FieldNameEffectieve datum voor een enkele dag
project%folderID%Beperken tot een specifiek project
timelineUnitGUIDCorreleert met een booking method en waardeveldtype

Filterattributen​

Filters kunnen binnen <timelinesum> genest worden met een <filter>-element:

FilterveldOmschrijving
periodStartdateStartdatum van de boeking
periodEnddateEinddatum van de boeking
referenceObjectreferentie van de boeking (bijvoorbeeld Product, Project)
typeBoekingstype: Actual, Assigned, Budget, Committed, Remaining, Reserved, Capacity, Demand, Supply, Allocation, Available, Request, Planned, Estimate, EAC, ETC
parentHet object waaronder de boeking is toegevoegd
skillDe skill die aan de geboekte uren is gerelateerd
resourceDe resource die aan de geboekte uren is gerelateerd
categoryDe financiële categorie die aan het geboekte geld is gerelateerd
isDraftDefinitief (0) of concept (1)
programDe gerelateerde map
programProjectHet gerelateerde programma
projectHet gerelateerde project
productHet gerelateerde product
stageDe gerelateerde projectfase
projectReportHet gerelateerde portfolio-item
resourceOUDe OE die wordt gebruikt voor tijdregistratie (GroupID) of resourcemanagement (Pool)

Booking methods​

De timeline unit bepaalt hoe boekingen worden opgeslagen en opgehaald.

Booking methodInvoerveldenOmschrijving
BookdateTotalBookdate, ValueGeboekt op een enkele datum
PeriodTotalWorkingDaysStartdate, Enddate, ValueInvoerwaarden gespreid over werkdagen
PeriodPerWorkingDayStartdate, Enddate, ValueInvoerwaarde is de waarde per werkdag

Timeline units​

Timeline unitBooking method
Uren (gewijzigd op boekdatum)BookdateTotal
Geld (gewijzigd op boekdatum)BookdateTotal
Uren en geld (gewijzigd op boekdatum)BookdateTotal
FTE (Uren per werkdag / 8)PeriodPerWorkingDay
Days per Working Week (Uren per werkdag x 5)PeriodPerWorkingDay
Uren per werkdagPeriodPerWorkingDay
Uren (wijzigingen gespreid over een periode)PeriodTotalWorkingDays
Mandagen (wijzigingen gespreid over een periode)PeriodTotalWorkingDays
Geld (wijzigingen gespreid over werkdagen)PeriodTotalWorkingDays

Voorbeeld: Geplande uren met een specifieke timeline unit:

<calculation>
<timelinesum type="Planned" timelineUnit="1281FD30-D2BD-4BD5-8529-7487F9813BA2"/>
</calculation>

Voorbeeld: Besteed geld met datumbereik en categoriefilter:

<calculation>
<timelinesum type="Actual" money="true" project="%folderID%"
periodStart="2010-01-01" periodEnd="FIELD:ReportProvideStatusPer">
<filter>
<Category operator="in" filterValues="208989,208990,243797" />
</filter>
</timelinesum>
</calculation>

Calculatie-opties​

Calculaties op hetzelfde object worden automatisch herberekend wanneer dat nodig is. Calculaties op het bovenliggende object worden ook automatisch getriggerd.

Wanneer een calculatie echter afhankelijk is van een ander object (bijvoorbeeld: een wijziging in een project moet herberekening van het gekoppelde portfolio-item triggeren), moet je een calculatie-optie configureren op het customveld.

notitie

Calculatie-opties zijn in de meeste gevallen niet nodig. Configureer ze alleen wanneer er afhankelijkheden tussen objecten bestaan.

Relaties gebruiken​

Standaard worden de calculaties van de directe bovenliggende laag getriggerd via het "normal relation"-mechanisme. Als je een andere relatie nodig hebt (bijvoorbeeld de planningsstructuur), geef je deze op in de calculatie-optie.

Voorbeeld: Som over plan-items (met planningsrelatie):

<calculation>
<sum>
<folderFilter foldertype='5602'>
<field>Custom1</field>
</sum>
</calculation>

Calculatie-optie: relation='planning'

Dit vertelt de calculatie-engine om herberekening te triggeren via de "planning"-relatie.

Referentievelden gebruiken​

Wanneer een calculatie gegevens uitleest van een gerefereerd object, configureer je de calculatie-optie zodat de referentie herberekening triggert.

Voorbeeld: Veld kopiëren van gekoppeld project van een portfolio-item:

<calculation>
<folderField reference='OperationalProject'>
<field>Custom1</field>
</folderField>
</calculation>

Calculatie-optie: 1 (of geef de referentie op indien nodig, bijvoorbeeld 1,reference=P2Project)


Calculatievoorwaarden​

Wat zijn voorwaarden?​

Met voorwaarden kun je een calculatie alleen uitvoeren als aan een specifieke vereiste wordt voldaan. Gebruik het <condition>-blok binnen een <calculation>. De calculatie wordt alleen uitgevoerd als de voorwaarde als waar wordt geëvalueerd.

<calculation>
<!-- Calculation only executes if the condition is met -->
<condition/>
<block/>
</calculation>

Voorwaarden kunnen worden gedefinieerd in customvelden onder de knop Advanced.

Break gebruiken​

Om te voorkomen dat volgende calculaties worden uitgevoerd wanneer al aan een voorwaarde is voldaan, voeg je break='true' toe aan de calculatie:

<calculations>
<calculation break='true'>
<condition>
<cmp condition='empty'>
<field>Owner</field>
</cmp>
</condition>
</calculation>
<calculation>
<cmp condition='empty'>
<field>Parent</field>
</cmp>
</calculation>
<calculation>
...
</calculation>
</calculations>

Wanneer break='true' is ingesteld en aan de eerste voorwaarde wordt voldaan, worden alle volgende calculaties overgeslagen. Zonder de break blijft de engine elk calculatieblok evalueren.

Type voorwaarden: AND en OR​

Standaard worden meerdere <conditions>-blokken geëvalueerd als AND. Alle voorwaarden moeten waar zijn:

<calculation>
<conditions>
...
</conditions>
<conditions>
...
</conditions>
</calculation>

Om OR-logica te gebruiken (er hoeft slechts aan één voorwaarde te worden voldaan), stel je type='or' in:

<calculation>
<conditions type='or'>
...
</conditions>
<conditions>
...
</conditions>
</calculation>

Depends gebruiken​

Het <depends>-blok geeft aan welke velden herberekening moeten triggeren wanneer hun waarde verandert:

<calculation>
<depends>
<field>Custom121</field>
</depends>
<folderfield>
<field>ModificationDate</field>
</folderfield>
</calculation>

Deze calculatie wordt herberekend wanneer Custom121 verandert, en schrijft de wijzigingsdatum naar het doelveld.


Bewerkbaarheid en zichtbaarheid van velden configureren​

Voorwaarden kunnen worden gecombineerd met <editCheck> en <displayCheck> om te bepalen wie een veld kan bewerken of zien.

Bewerkcontrole​

Beperkt het bewerken van een veld op basis van een voorwaarde. In dit voorbeeld kunnen alleen beheerders het veld bewerken:

<calculation>
<fieldConditions>
<editCheck>
<condition>
<adminCheck/>
</condition>
</editCheck>
</fieldConditions>
</calculation>

Weergavecontrole​

Verbergt een veld volledig voor gebruikers die niet aan de voorwaarde voldoen. In dit voorbeeld kunnen alleen beheerders het veld zien:

<calculation>
<fieldConditions>
<displayCheck>
<condition>
<admincheck/>
</condition>
</displayCheck>
</fieldConditions>
</calculation>

Voorbeeld: Weergavecontrole met meerdere voorwaarden:

<fieldConditions>
<displayCheck>
<conditions type="or">
<condition>
<cmp value="XXX" condition="in">
<var>CustomXX</var>
</cmp>
</condition>
<condition>
<pagefoldertype condition="in">21,23,5000,5041,5100,6021,6020</pagefoldertype>
</condition>
</conditions>
</displayCheck>
</fieldConditions>

Het <pagefoldertype>-filter bepaalt op welke objecttypes het veld zichtbaar is:

  • 5000 = Project
  • 5100 = Map
  • 6021 = Kwaliteitsbeoordeling
  • enz.

Best practices​

  • Gebruik altijd commentaar in je XML om het doel van elk calculatieblok uit te leggen.
  • Gebruik inspringing consistent om calculaties leesbaar te houden.
  • Gebruik break='true' bij meerdere voorwaardelijke calculaties om onnodige verwerking te voorkomen.
  • Test calculaties op één object voordat je ze breed toepast.
  • Documenteer calculatie-opties: noteer de relatie- of referentieconfiguratie naast de XML.
  • Houd calculaties eenvoudig: splits complexe logica op in meerdere customvelden in plaats van één omvangrijke calculatie te maken.

Veelgestelde vragen​

Waar maak ik calculaties aan? In het onderdeel Configuratie van FCC. Navigeer naar het objecttype (bijvoorbeeld Project), open of maak een customveld en voer de calculatie-XML in bij het veld Calculatie onder Advanced.

Zijn calculaties hoofdlettergevoelig? Ja. De XML-tags (<calculation>, </calculation>, <field>, enz.) zijn hoofdlettergevoelig en moeten exact worden geschreven zoals gedocumenteerd.

Wanneer worden calculaties getriggerd? Calculaties op hetzelfde object worden automatisch getriggerd wanneer een veld verandert. Voor triggers tussen objecten moet je een calculatie-optie configureren.

Wat gebeurt er als ik door nul deel? De calculatie geeft een lege waarde of de waarde nul terug. Er wordt geen foutmelding gegenereerd.

Kan ik calculatieblokken nesten? Ja. Je kunt blokken zoals <mul> binnen <div> nesten, of <add> binnen <div>, om complexe expressies te maken zoals gewogen gemiddelden of percentages.

Wat is het verschil tussen <add> en <sum>? <add> telt velden op binnen hetzelfde object. <sum> aggregeert een veld over onderliggende objecten (met een <folderFilter>).