This is an old revision of the document!


The CFL Formula Builder is a powerful visual aide that helps complete and verify expressions. While typing a formula, the CFL checks the entry to assess the completeness, color-codes the information input, and offers suggestions as needed.

The default formatting scheme for the formula editor is:

Category Color Attributes
CommentsGrayItalics
FunctionsGreenBold
Global ConstantsBlueBold
Global VariablesBlueBold
KeywordsBlackBold
NumberBlueRegular
OperatorsBlackBold
Quoted StringBlueRegular
Temporary VariablesGreenRegular
UnitsMaroonBold
Unknown ItemsGreenBold


Adding and multiplying are useful, but most users want to do more than basic math inside of CFL. To access the full power of CFL, one should make themselves familiar with the Language's built-in functions for complex math, manipulating strings, looking up information, and more.
The built-in formulas are divided into the following categories:

  • Company Functions
  • Contact Functions
  • DateTime Function
  • Math Functions
  • Part and Cost Lookup
  • Price Information Lookup
  • SQL Functions
  • String Functions
  • Table Lookup
  • Transaction Functions
  • Variable Lookup

There is a last category, Obsolete Functions, which users should attempt to avoid. These deprecated functions are maintained for a limited period for backwards compatibility purposes, but are likely to be removed in subsequent versions of CFL.


Cyrious has functions and keywords that return info about pricing and products.


Price Information Lookup

Function Parameters Returns…
BaseMinimumNoneMinimum base price specified in product setup
BasePriceNoneActual base price. If the base price is not overridden, this is the larger of the calculated price, the base minimum, and the per piece minimum times the quantity. If the user overrode this price manually, this value is returned
BuiltInDiscountNoneBuilt-in discounts included in the BasePrice. Usually used for Volume Discounts included in the purchase price
CalcBasePriceNoneCalculated BasePrice, which will equal the PreDiscountPrice less any BuiltInDiscount. This is the BasePrice used for the line item unless it is overridden
CalcModifierPriceNoneCalculated modifier price In modifier calculations
DefaultDiscountNoneCalculated default amount of the discount. Unlike the BuiltInDiscount, the DefaultDiscount is normally displayed for the customer to see
DiscountPriceNoneActual discount amount for the product (excluding the BuiltInDiscount). If the discount has been overridden, this manually entered value is used. Otherwise, the DefaultDiscount is used
ModifierPriceNoneSum of the actual prices for all modifiers in product calculations
PerPieceMinimumNoneMinimum base price per piece specified in the product setup
PreDiscountPriceNoneCalculated price of a line item before any built-in discounts
ProductErrors Errors from product
ProductWarnings Warnings from product
SubtotalMinimumNoneMinimum subtotal price specified in product setup
SubTotalPriceNoneLarger of the subtotal minimum price and the BasePrice + ModifierPrice – DiscountPrice adjusted for rounding
UnitVariableNoneString containing the name of the variable used for computing the unit pricing (usually Quantity)

Error Checking

Function Parameters Returns…
ProductWarningsNoneEvaluates and Returns the User Defined Warning Message associated with the product. If no user defined error message is present, an empty string is returned. Orders may be saved even with warnings.
ProductErrorsNoneEvaluates and Returns the User Defined Error Message associated with the product. If no user defined error message is present, an empty string is returned. Orders can only be saved until no errors are returned

Table Lookup

Function Parameters Returns…
DiscountValue“TableName”Value of the DiscountTable “TableName”. The product's variables' values are automatically passed to the discount table for lookup.
LookupTableValue“TableName” [ , Row1Value [,ColumnValue [,Row2 ]]Value of the Lookup (Pricing) Table. The product's variables' values are automatically passed to the lookup table unless overridden by Row1, Column, and Row2. Row1, Column, and Row2 are each optional but must be used in order if specified.

Variable Information Lookup

Function Parameters Returns…
FamilyVariableTotalVariableNameTotal value (sum) of the variable in all line items in the same Pricing Family in the current variation
IsAssignedToParent“VariableName”True if the Parameter is assigned to the product, otherwise returns False. Note: Using this function without quotes around the variable name will not generate an error, however, the variable will be automatically added to the product
IsAssigned“VariableName”True if the Parameter is assigned to the product, otherwise returns False. Note: Using this function without quotes around the variable name will not generate an error, however, the variable will be automatically added to the product
ParentVariableValue“VariableName”, DefaultValueValue of the parents' variable name ParameterName if the Parameter is assigned to the parent product. If the product is not a child product or the parameter is not defined in the parent, the function returns the DefaultValue. Note: This function works without quotes around the variable name, however, the variable will be automatically added to the product
VariableTotalVariableNameTotal value (sum) of the variable in all line items in the current variation

Variable Setting Functions

Function Parameters Function…
SetVariablesJSONThis function sets the Variables with the values indicated in the JSON array. For example, SetVariables(' { “Quantity”:5, “Description”: “This is cool stuff!” } ') or
SetVariables(' Quantity5') will set the quantity and description property accordingly.

List Lookup

Function Parameters Returns…
ListCostValueVariableNameValue of the CostFx property for the selected value of the list item specified by “Parameter”
ListPriceValueVariableNameValue of the PriceFx property for the selected value of the list item specified by “Parameter”
ListPropertyTextVariableName, “PropertyName” [, DefaultValue]Same value as in the ListPropertyValue function as a string
ListPropertyValueVariableName, “PropertyName” [, DefaultValue]Value of the PropertyName property for the selected value of the list item specified by Parameter. If ParameterName does not contain a list or PropertyName is not found, the value of DefaultValue is returned

Line Item Lookup

Function Parameters Returns…
ActualActivityTotalNoneActual total time of the associated scheduled product activity. If there is no corresponding activity or the activity is not complete, Zero is returned
BillableActivityTotalNoneBillable total time of the associated scheduled product activity. If there is no corresponding activity or the activity is not complete, Zero is returned
IsChildItemNoneTrue if this line item is a child item, False if this a top-level line item
WorkAssignmentEndDateNoneEnd date of the associated scheduled product activity. If there is no corresponding activity, the constant NoDate is returned
WorkAssignmentStartDateNoneStart date of the associated scheduled product activity. If there is no corresponding activity, the constant NoDate is returned

Parts and Cost Lookup

Function Parameters Returns sum of the (Estimated) costs of all parts that are of the type…
EquipmentCostNoneEquipment
FreightCostNoneFreight
LaborCostNoneLabor
MaterialCostNoneMaterial
OtherCostNoneOther
OutsourceCostNoneOutsource
OverheadCostNoneOverhead
PartBasedPriceNoneDetermined by adding up the price specified in the part itself
TotalCostNoneAll
Function Parameters Returns sum of the (Actual) costs of all parts that are of the type…
ActualEquipmentCostNoneEquipment
ActualFreightCostNoneFreight
ActualLaborCostNoneLabor
ActualMaterialCostNoneMaterial
ActualOtherCostNoneOther
ActualOutsourceCostNoneOutsource
ActualOverheadCostNoneOverhead
ActualTotalCostNoneAll

User Defined Field Lookup Functions


UDF Values for the current Transaction (Order or Estimate), Customer, Contact, and Product can be retrieved in any CFL function. The UDF Value for a Part may be retrieved through the Part Name or the name of the variable that linked to the part.
A default value should always be given. If the UDF is not defined or the associated information not present, and no default value is given, an error message will result. For example, if you use a Customer UDF but attempt to read the value before the customer is assigned to the order you will receive an error message.

To read the value of a UDF use the following functions:

Function Parameters
GetCompanyUDFValue“UDF Name”[Company ID[, Default Value]]
GetProductUDFValue“UDF Name”[, “Product Name”[, Default Value]]
GetPartUDFValue“UDF Name”, “Part Name”[, Default Value]
CompanyUDF“UDF Name”[, Default Value]
ContactUDF“UDF Name”[, Default Value]
TransactionUDF“UDF Name”[, Default Value]
ProductUDF“UDF Name” [, Default Value]
PartUDFByVariableNameVariable name, “UDF Name” [, Default Value]
PartUDFByPartName“Part Name”, “UDF Name” [, Default Value]

Returns the value of the UDF name. The Default value is returned if the Company is not assigned or no UDF/Variable/Part with that name exists.


To set the value of a UDF, use the following procedure:

Function Parameters
SetCompanyUDF“UDF Name”, New Value[, Company ID]
SetContactUDF“UDF Name”, New Value
SetTransactionUDF“UDF Name” , New Value
SetProductUDF“UDF Name”, New Value[, “Product Name”]
SetPartUDF“UDF Name”, New Value, “Part Name”

To clear the value of a UDF, use the following procedure:

Function Parameters
ResetCompanyUDF“UDF Name”[, Company ID]
ResetProductUDF“UDF Name”[, “Product Name”]
ResetPartUDF“UDF Name”, “Part Name”
ResetTransactionUDF“UDF Name”

To increment the value of a Number UDF, use the following procedure:

Function Parameters
IncrementTransactionUDF“UDF Name”[, Amount]
IncrementCompanyUDF“UDF Name”[, Amount]
IncrementContactUDF“UDF Name”[, Amount]

If the Amount isn't specified, the value is incremented by one (1).
To decrement the value of a Number UDF, use the following procedure:

Function Parameters
DecrementTransactionUDF“UDF Name”[, Amount]
DecrementCompanyUDF“UDF Name”[, Amount]
DecrementContactUDF“UDF Name”[, Amount]

If the Amount isn't specified, the value is decremented by one (1).
To check if a UDF is assigned:

Function Parameters
CompanyUDFIsAssigned“UDF Name”[, Company ID]
ContactUDFIsAssigned“UDF Name”
TransactionUDFIsAssigned“UDF Name”
PartUDFIsAssigned“UDF Name”, “Part Name”
ProductUDFIsAssigned“UDF Name”[, “Product Name”]

For Boolean values, returns true if the UDF exists and false otherwise. For Non-Boolean values, returns true if the UDF exists and is assigned, and false if it does not exist or is not assigned.
To check if a UDF is overridden:

Function Parameters
TransactionUDFIsOverridden“UDF Name”

Returns true if the UDF overridden and false if not overridden.
To retrieve the parent object of a UDF:

Function Parameters
CompanyUDFObject“UDF Name”[, Company ID]
ContactUDFObject“UDF Name”
TransactionUDFObject“UDF Name”

Returns the object assigned to the specified UDF Name. If the UDF does not exist, or no object is assigned to it, a “Null” value is returned.
To set the ID of a UDF's parent object:

Function Parameters
SetCompanyUDFObjectID“UDF Name”, ID[, Company ID]
SetContactUDFObjectID“UDF Name”, ID
SetTransactionUDFObjectID“UDF Name”, ID
SetProdcutUDFObjectID“UDF Name”, ID[, “Product Name”]
SetPartUDFObjectID“UDF Name”, ID, “Part Name”

Sets the value used by an object UDF to the ID specified. If the UDF does not exist a warning is logged. If the ID does not exist a message is displayed and the UDF not set. Passing an ID of zero (0) or negative one (-1) will clear the UDF.


Company Functions
With these functions, you can modify and save a Company record:

Function Parameters Notes
CanEditCompany[Company ID[, PlaceLock]]Returns TRUE if the user has the rights to edit the Company and the Company is not being edited by another user. If a Company ID is not supplied, the order's Company will be checked. If TRUE is passed for PlaceLock, a lock will be placed on the Company. Preventing anyone else from locking it.
SaveCompanyChanges[Company ID[, ReleaseLock]]Will save any changes made to a Company. If Company ID is supplied, only that Company will be saved. Otherwise all companies with changes will be saved. If TRUE is passed for ReleaseLock or no value is supplied, the lock will be release on the Company. Allowing other users to lock it.
CancelCompanyChanges[Company ID]Will cancel any changes made to a Company. If Company ID is supplied, only that Company will be canceled. Otherwise all companies with changes will be canceled. The lock will be release on the Company. Allowing other users to lock it.
SetCompanyProperty“Property Name”, Value[, Company ID]Will set a property for a Company to the specified value. If Company ID is supplied, only that Company's property will be set. Otherwise the Order's Company's property will be set. If there isn't a lock placed on the Company, one will be placed.

Other procedures that will automatically place a lock on a Company include:

  • SetCompanyUDF
  • SetCompanyUDFObjectID
  • ResetCompanyUDF
  • IncrementCompanyUDF
  • DecrementCompanyUDF

Product Functions
With these functions, you can modify and save a Product record:

Function Parameters Notes
CanEditProduct[“Product Name”[, PlaceLock]]Returns TRUE if the user has the rights to edit the Product and the Product is not being edited by another user. If a Product Name is not supplied, the order's Product will be checked. If TRUE is passed for PlaceLock, a lock will be placed on the Product. Preventing anyone else from locking it.
SaveProductChanges[“Product Name”[, ReleaseLock]]Will save any changes made to a Product. If Product Name is supplied, only that Product will be saved. Otherwise all companies with changes will be saved. If TRUE is passed for ReleaseLock or no value is supplied, the lock will be release on the Product. Allowing other users to lock it.
CancelProductChanges[“Product Name”]Will cancel any changes made to a Product. If Product Name is supplied, only that Product will be canceled. Otherwise all companies with changes will be canceled. The lock will be release on the Product. Allowing other users to lock it.
SetProductProperty“Property Name”, Value[, “Product Name”]Will set a property for a Product to the specified value. If Product Name is supplied, only that Product's property will be set. Otherwise the Item's Product's property will be set. If there isn't a lock placed on the Product, one will be placed.

Other procedures that will automatically place a lock on a Product include:

  • SetProductUDF
  • SetProductUDFObjectID
  • ResetProductUDF

Part Functions
With these functions, you can modify and save a Part record:

Function Parameters Notes
CanEditPart“Part Name”[, PlaceLock]Returns TRUE if the user has the rights to edit the Part and the Part is not being edited by another user. If TRUE is passed for PlaceLock, a lock will be placed on the Part. Preventing anyone else from locking it.
SavePartChanges[“Part Name”[, ReleaseLock]]Will save any changes made to a Part. If Part Name is supplied, only that Part will be saved. Otherwise all companies with changes will be saved. If TRUE is passed for ReleaseLock or no value is supplied, the lock will be release on the Part. Allowing other users to lock it.
CancelPartChanges[“Part Name”]Will cancel any changes made to a Part. If Part Name is supplied, only that Part will be canceled. Otherwise all companies with changes will be canceled. The lock will be release on the Part. Allowing other users to lock it.
SetPartProperty“Property Name”, Value, “Part Name”Will set a property for a Part to the specified value. Otherwise the Item's Part's property will be set. If there isn't a lock placed on the Part, one will be placed.
GetInventoryItem“Part Name”[, WarehouseName]Returns the Inventory Item for the specified Part. If the WarehouseName is not specified, the Production Warehouse is returned.
ClonePart“SourcePartName”, “NewPartName”[, UnitCost]Clones the part with the named “SourcePartName” and names it “NewPartName”. If the part is tracking costs and a UnitCost is passed in, the new part's Unit Cost will be set to the UnitCost.

Other procedures that will automatically place a lock on a Part include:

  • SetPartUDF
  • SetPartUDFObjectID
  • ResetPartUDF


Cyrious generates a number of functions to evaluate mathematical expressions, manipulate strings, work with dates and times, and format information for display.


Numeric Functions

Function Parameters Description
ABSXAbsolute value of X
ACOSXArccosine
ACOSHXHyperbolic Arccosine
ASINXArcsine
ASINHXHyperbolic Arcsine
ATANXArctangent
ATANHXHyperbolic Arctangent
BINOMN, KBinomial Coefficient BINOM(N, K)N!/(K!*(N-K)!)
COSXCosine
COSHXHyperbolic Cosine
COTANXCotangent
EXPXe\X. Same as POWER( LN2, X )
FACTXFactorial Function X!X*(X-1)*(X-2)*…*1
FRACXExtract Fractional Part
INTXExtract Integer Part
LGXBase 10 Logarithm
LNXNatural Logarithm
LN2 Natural log constant
LoadFromURLURL, RaiseErrorOnFailure(Optional),
TimeOutInMS(Optional)

Primary purpose is to trigger external events, though it could be used to load data from an API.

S := LoadFromURL( string: URL, boolean: RaiseErrorOnFailure = true, int: TimeOutInMS = 1000 )
MAXX, Y, ..Maximum value of arguments. UNLIMITED arguments
MINX, Y, ..Minimum value of arguments. UNLIMITED arguments
PI PI number (3.14159… – constant)
ROUNDX [, Y]If Y is omitted, rounds argument to the nearest integer. If Y is present, round to Y places of precision.
ROUNDUPXRounds any fraction to the next higher integer number INT( X + 0.99999999 )
SIGNX


You could leave a comment if you were logged in.