Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Naming conventions make programs more understandable by making them easier to read. In addition to the Java naming conventions, Pricefx has its own set of recommended naming conventions for logics and metadata.

...

Logic names should be written in CamelCase. Examples: , with the first letter capitalized, for example:

  • DefaultLogic

  • Pricelist

  • Main

  • DefaultQuoteLogic

However, there are a few exceptions ; for the following logic types should be written with the following prefixestypes of logic:

Logic type

Formula Nature

Prefix

Suffix

Example

Calculation Flow

"calculationFlow"

CF_


CF_

DailyCalculation

RebateRecords

Calculated Field Set

null/(default)

CFS_


CFS_ProductEnrichment

Dataload

"paDataLoad"

DL_


DL_

LoadFromPX

ProductCost

Groovy Library

"library"


Lib

SharedLib

Element Names

Whenever an identifier is required (uniqueName, name, etc.), it is recommended to use identifiers in a ClassicalCamelCaseFormAsYouKnowItFromJava, e.g. SalesPrice. If there is a abbreviation used in the name, it is naturally useful to separate it with an underscore character "_", for example, ABC_Class (instead of ABCClass).

Labels are typically a copy of the uniqueName/name and the words are split using spaces, e. g. Sales Price.

Here are some commonly used conventions for the identifier suffixes:

...

The suffixes can be combined. 

Element Names

The general rule is to make the first letter uppercase. The reason is that the element is implemented as a Groovy class and therefore referring to the element's methods from Groovy is done as SomeElement.callSomeMethod(). For this syntax the auto-completion will work in Pricefx Studio, since IDEA will understand it as a static call of a method (even though it is not a static call but an instance call on a binded object). Another reason for the first capital letter is to have the possibility to refer to previous elements: 

Jira Legacy
serverSystem JIRA
serverId0e65890b-f559-36c3-b4f7-807e5b0df1a0
keyPM-284

In order to make the auto-completion work in Pricefx Studio or to be able to run the debugging functionality or execute TDD4C tests without marking the folders as a source in Studio, it is recommended to always use a different element name which is unique within the project. Also the element name "Filter" is not recommended, since the auto-completion collides with the standard Filter object used frequently by the logics.

The Groovy library element names should have a suffix "Utils" (e.g. RoundingUtils, CacheUtils, DatamartUtils).

Example: NewMargin, SalesPrice

Element Labels

Element labels make sense to set only if the element can be displayed to the user. Labels are not visible for elements with Display=Never or not selected in PL or LPG, so it doesn't make much sense to define the labels for those type of elements.

Element labels should ideally match the element name where just spaces are added and each word starts with a capital letter (commonly used pattern in UK or US).

The element label should not be identical to a different element name or field name, since functions accept both label and element.

The basic rule is that labels can be adjusted at any point in time and so you should not refer to labels in the logic, instead use the element name or attribute.

Groovy Variables

The general rule is to make the first letter lowercase. Even though Groovy, compared to Java, allows the first letter in uppercase, it is recommended to follow the Java convention.

Example: newMargin, salesPrice

If the variable stores a list of values, then the suffix "s" (English plural) can give a hint that it stores multiple values.

Code Block
languagegroovy
	def records = api.find(...)

    for (record in records) {
		//do something with with record.attribute1
		...
	}

Groovy Functions

The general rule is to make the first letter lowercase. Even though Groovy, compared to Java, allows the first letter in uppercase, it is recommended to follow the Java convention.

Example: getCostPrice()

Data gathering functions should use a common prefix. This will significantly help when identifying performance problems. Remember that each function should do only one thing at a time: either gather data or manipulate the data somehow; do not mix these two.

Proposal:

...

Element names should be written in CamelCase, with the first letter capitalized, for example:

  • NewMargin

  • SalesPrice

Info

During deployment, the Groovy logic element scripts get compiled into classes. During logic execution, the logic engine instantiates singleton objects from those classes. These objects then get bound to variables with the same name as the elements. Thus, to call a method callMethod()that is located inside an element ElementName:

ElementName.callMethod()

Pricefx Studio will make IntelliJ interpret this as a static call – even though it’s not – and that will make the auto-completion work.

Unique Element Names Within Projects

Element Names should also be unique within the entire project – across all logics. This is to enable the auto-completion and unit testing with TDD4C.

Info

When running the logic locally, the element classes will belong to the default pages. The JVM requires classes within the same packages to be unique, so this will make the local compilation fail.

Libary Elements

Groovy library element names should be suffixed with Utils, for example:

  • RoundingUtils

  • CacheUtils

  • DatamartUtils

Common Patterns

Across logics and entire projects, some patterns of element behavior tend to emerge. For these elements, here are some suggested naming conventions:

Suffix

For

Example Element Name

Example Label

Example Value

Diff

Elements that represent a difference, i.e. a result of a subtraction

VolumeDiff

Volume ∆

234 litres

Abs

Elements that represent an amount of money, in absolute terms.

MarginAbs

Margin $

€34

Pct

Elements that represent a quotient. These elements are typically formatted as percentages.

MarginPct

Margin %

0.45

Note

Despite the naming convention, the value should not be a percentage, i.e. it should not be multiplied by 100.

s

Elements that represent a collection.

pxRecords

Element Labels

Labels should be identical to the element names, but with the words separated by spaces. Some words can be replaced by symbols, for example:

  • SalesPrice – Sales Price

  • MarginPct – Margin %

  • Margin Abs – Margin €

Element labels are optional for those elements that are hidden for the end-users.