Miscellaneous Functions

Miscellaneous Functions

The following api. functions are available:

Name and Link to API Doc

Code Example

Name and Link to API Doc

Code Example

abortSyntaxCheck

Enables to skip input generation if the user knows that there are no inputs to be evaluated in the subsequent elements of the logic. It helps to save computation time for more complex logics if all the inputs are created in the first elements of the logic.

addWarning



api.addWarning("Folders added!")

Available for both header logic (warning displayed in the Messages section) and line item logic (warnings displayed next to the line item).

boundCall



Product extensions
// Get records from 'LocalMaterialData' PX table by a certain attribute9 value def request = """ { "operationType" : "fetch", "startRow" : 0, "endRow" : 300, "textMatchStyle" : "exact", "data" : { "operator" : "and", "_constructor" : "AdvancedCriteria", "criteria" : [ { "fieldName" : "attribute9", "operator" : "iEquals", "value" : "${material13}" } ] }, "oldValues" : null }""" def response = api.boundCall("aasecP", "productmanager.fetch/*/PX/LocalMaterialData", request).responseBody.response



How to revoke a quote
if (api.isInputGenerationExecution()) { return } def response = api.boundCall("ad-brazil", "quotemanager.revoke/241.Q", "").responseBody.response

Important: The partition must be configured as a bound partition in the configuration.

 Please read also the Avoid api.boundCall article in Knowledge Base.

 isInputGenerationExecution is supported from version 10.0. In older versions use isSyntaxCheck.

contextByLabel



contextName

Note: Does not work for Rebate Agreements line items and Rebate Records.

contextType

Note: Does not work for Rebate Agreements line items and Rebate Records.

currentPartitionName



emitPersistedObject



emitRebateRecords



entityRef



evalExpression



filterFromMap



findCustomersInGroup



findWorkflowInfo



getBinding



getBoundPartitionNames



getCalculationContext



getCustomerIdsFromCustomerGroup

Returns a list of customer IDs based on the definition of the customer group.

def custg = api.customerGroupEntry() def list = api.getCustomerIdsFromCustomerGrou(custg) return list



getElement

Gets the result of a previous logic element.

  1. Given that you have a calculation logic with elements

    • Total_Sales

    • Margin

  2. When the logic of element "Margin" contains code

    def totalSales = api.getElement("Total_Sales")



    Then the variable totalSales contains result of element "Total_Sales".

Important: When saving the logic (during the input generation mode), this function will always behave as if it returned BigDecimal, even if the element returns a completely different data type. This can cause a problem during the "save" operation, if you are using the result as a Map, for example.

 To simplify your code, you can use out.<element name> or output.<element name> instead of api.getElement. Example:

def totalSales = out.Total_Sales



getId



getSkusFromProductGroup

Returns a list of SKUs based on the definition of the product group.

def prodg = api.productGroupEntry() def list = api.getSkusFromProductGroup(prodg) return list



isDebugMode

Returns true if logic is called via UI debug/test exec mode.

@return true if executed in debug mode

When testing/debugging your code in the Test Drive, sometimes your code runs in a different context, than when it is executed in the real environment. In such a situation, it could be handy to identify that it runs in the Test Drive and make a manual input instead of taking data from the context, which is different than expected.

if (api.isDebugMode()) { customerId = "40101610" } else { customerId = api.currentItem("customerId") }



isDistributedMode



isSecondPass



isInputGenerationExecution

(formerly isSyntaxCheck)

Returns true if the logic is executed in the input generation (or parameter determination) mode (i.e., typically when you are trying to save the logic).

This function is mainly used to fix problems when saving a calculation logic in the logic editor. The trouble is, that  the validator, which runs before saving, executes your code to identify possible run-time issues. If it detects an error, it does NOT save the logic.

For example, when your logic element returns something else than BigDecimal (a Map, for instance), you have a problem, because the validator expects the function api.getElement() to return a BigDecimal.

The workaround could be using the following construction:

def pli = api.isInputGenerationExecution()? [:] : api.getElement("TargetPricePLI")

Important: Some users tend to block checking the code of the whole element (using if (api.isInputGenerationExecution()) return as the first line), but that is NOT advisable. There can be a real problem somewhere else in the code, which you will find out only in the runtime.

 For an example of use, see the Knowledge Base article How to Show customerId Value from customerGroupEntry Picker in Outputs.

 isInputGenerationExecution is supported from version 10.0. In older versions use isSyntaxCheck.

jsonDecode



jsonDecodeList



jsonEncode



logInfo

Writes a message into the log file of the server node, on which the code is executed.

The log file can be accessed via the menu Administration > Logs.

api.logInfo("Adding LPG " + counter + " of " + size + " with label", lpg)

Note: Ensure that the logging from logic is enabled – see the menu: Administration > Configuration > General Settings > Allow Groovy logging into system log.

logWarn

Writes a message into the log file of the server node, on which the code is executed.

The log file can be accessed via the menu Administration > Logs.

api.logWarn("LI.Discount maximum discount",max)

Note: Ensure that the logging from logic is enabled – see the menu: Administration > Configuration > General Settings > Allow Groovy logging into system log.

multiKey



newController



putGlobal



random



removeSharedCache



resetSKUContextSwitch



sendEmail



setSharedCache



switchSKUContext



throwException



trace

Generates a trace message that can be used in the logic test drive.

  1. Given you have a calculation logic with a Groovy element containing the following code:

    api.trace("competitorName", null, competitorName) api.trace("competitorName", "", competitorName) api.trace("Current month - Last month", currentMonth, lastMonth)



  2. When you run the calculation logic using the Test Logic (Debugger), then you get:

uuid



walkFilter





Found an issue in documentation? Write to us.