Skip to main contentCarbon Design System

Testing a script

The scripting application now has a Test button to help test the script that you authored. You can use Test to prepare the test data and execute the script right from the test dialog. All the logs would be printed out in the Process Log text area without enabling any logging as long as the service variable was used for the log. In cases where the script needs an MBO for the test, the dialog provides a way (Object Path) to select the MBO for testing the script. The following sample way shows how to set the object path.

ASSET[assetnum='SPFN0001']

Note that if you had set the path value to just ASSET, it would have created a new MBO for the Asset and used that for this script.

This selects an asset with assetnum SPFN0001 and uses the MBO for the mbo variable in the script context. This can be leveraged for testing Object or Attribute or Action or Condition Launch point scripts. The dialog allows you to set attribute or value pairs to prepare the MBO for the test using the `Set Attribute Value’ table. The process makes a best attempt to not commit the modified MBO, but in certain cases this is unavoidable. For example, in cases where the event is after a commit, the MBO is already committed. For other cases, the script code itself might initiate a commit. The following screen shot showcases some of the test functionalities.

For tesing object init event:

Object Init Event

Note that the resulting MBO is serialized and presented in the Data field of the dialog. This helps you to validate when the the script execution resulted in the right state of the MBO.

For testing “On Add” object events:

Object on add Event

As apparent you set values: ASSETNUM TESTADD10 ASSETTYPE FLEET

This results in an error because ASSETNUM and ASSETTYPE mismatch - as shown in the screen shot.

The following screenshot is when there is no error thrown:

Object on add Event

The following example is from app validate event:

app validate event

Object path: ASSET Set values: ASSETNUM TESTVAL1 ASSETTYPE FLEET Result: Error is thrown because ASSETNUM and ASSETTYPE mismatch

Can Add Event

The following screen shot shows the Can Add Event in which you select a PO which does not have a vendor and attempt to add a POLINE, using the object path notation to invoke the script.

Can Add Event

Object path: PO[ponum=‘1056’]/POLINE Result: Error is thrown because PO do not have vendor

Can Delete

The following screenshot shows the Can Delete Event test:

Can Delete Event

Object path format: ASSET[assetnum=‘7500’] Result: Error is thrown of ASSETTYPE is FLEET

Adding setup logic for virtual (aka Nonpersistent) MBOs on setup:

Setup Event

Object path format: ASSET[assetnum=‘ASSET1’ and siteid = ‘BEDFORD’]/ASCHANGESTATUS Result: Status set BROKEN and MEMO set to Test Broken Note: property mxe.script.callsetuponinit need to be set to 1

Testing OBJECTNAME.NEW script:

Object new Event

Object path format: ASSET Result: EQ1 set to TEST EQ1

Testing OBJECTNAME.DUPLICATE script:

Object dup Event

Object path format: ASSET[assetnum=‘1001’ and siteid=‘BEDFORD’] Result: ASSETNUM set to null

Testing Attribute validate event:

Attribute validate Event

Object path format: ASSET Attribute values: ASSETNUM ATTRTEST1 PURCHASEPRICE 300 Result: Some error is thrown because PURCHASEPRICE > 200

Testing Attribute action event:

Attribute action Event

Object path format: ASSET Attribute values: ASSETNUM ATTRAC1 PURCHASEPRICE 100 Result: EQ7 set to 50

Testing Attribute init event:

Attribute init Event

Object path format: ASSET[assetnum=‘1001’] Result: EQ2 set to ASSETNUM (1001)

Testing lookup scripts:

lookup Event

Object: ASSET Attribute: EQ11 Object path format: ASSET[assetnum=’ASSET1’] Result: Values for lookup will be from ALNDOMAIN PHONETYPE

Object Structure Script Processing - Inbound:

Function: beforeProcess(ctx)

before process os Event

Use the “select file” option to select a xml or json file:

Test XML: MXITEM1.XML Test JSON: MXITEM1.JSON Result: Transaction is skipped for LOTTYPE=NOLOT

Object Structure Script Processing - Inbound:

Function: mboRules(ctx)

os mbo rules

Test XML: MXINVISSUE1.XML Test JSON: MXINVISSUE1.JSON Result: Transaction is skipped for ISSUETYPE=RETURN

Testing object structure inbound:-Functions: beforeMboData(ctx) and afterMboData(ctx)

beforembodata

Test XML: MXITEM2.XML Test JSON: MXITEM2.JSON Result: Set COMMODITYGROUP based on HIERARCHYPATH

Testing Object structure inbound function: changeStatus(ctx)

changestatus

Test XML: MXITEM3.XML Test JSON: MXITEM3.JSON Result: Change Status with MEMO

Object Structure Script Processing - Outbound

os out

Object path format: PO[ponum=‘1002’] Result: Set description Skip POLINE without ITEMNUM Skip TAX fields if TEXED is false

Object Structure Query:

os query

Name: OSQUERY.MXAPIWO.EMXWOFILTER Object path format: WORKORDER Parameters: ASSETNUM 11200 STATUS WAPPR Result: Where clause applied to MboSet (assetnum=‘11200’ and status = ‘WAPPR’)

Object Structure Actions:

os actions

Name: OSACTION.MXAPIASSET.SETPRIORITY Object path format: ASSET Parameters: ASSETNUM 11200 STATUS IT Result: Sets priority based on the ASSETTYPE

Event Filters For Publish Channel:

Event Filter

Name: PUBLISH.MXASSETINTERFACE.EVENTFILTER Object path format: ASSET Parameters: ASSETNUM 11200 STATUS IT Result: Sets priority based on the ASSETTYPE

Exits for Publish Channels External Exit:

Publish Exits

Name: PUBLISH.MXASSETINTERFACE.EXTEXIT.OUT Object path format: ASSET[assetnum=‘1008’]

Result: Set description to status if status is OPERATION

Exits for Publish Channels User Exit Before:

Publish Exits

Name: PUBLISH.MXASSETINTERFACE.USEREXIT.OUT.BEFORE

Test XML: MXASSET1.XML Test JSON: MXASSET1.JSON Result: Skip transaction if STATUS=BROKEN

Exits for Publish Channels User Exit After:

Publish Exits

Name: PUBLISH.MXASSETINTERFACE.USEREXIT.OUT.AFTER

Test XML: MXASSET1.XML Test JSON: MXASSET1.JSON Result: Display STATUS from IR record and EQ3 (set in before exit) from ER record

Enterprise service External Exit script:

Ent Ext Exit Exits Ent Ext All Exit Exits

Name: SYNC.MXITEMINTERFACE.EXTEXITIN

External System: EXTSYS1 Test XML: MXITEM1.XML Test JSON: MXITEM1.JSON Result: Skip transaction if LOTYPE = NOLOT Skip transaction if ITEMNUM is null Set description to ITEMNUM

Invoke Channel Scripting

Invoke Channel Exit

Name: INVOKE.ZIPCHANNEL.USEREXIT.OUT.AFTER Language: js New/Existing: New Object path format: PERSON Complete process: TRUE Attribute values: PERSONID TEST5 CITY BOSTON Result: Set STATEPROVINCE and POSTALCODE

Endpoint Scripting

Endpoint Script

Name: TESTENDPOINT Language: Python Test Script Type: ENDPOINT Test XML: MXITEM1.XML Test JSON: MXITEM1.JSON Result: Display payload Display script name from metadata

Condition Launch Point

Condition Script

Name: SUMCOST Language: Python Where clause: assetnum = ‘11200’ Result: Return True of sum of SPAREPART QTY > 10 Return False of sum of SPAREPART QTY < 10

Action Launch Point

Action LP Script

Name: CACLMETER Language: Python Object path: ASSET[assetnum = ‘11430’] Result: Set EQ7 to ASSETMETER.OLDREADING

REST api

REST Script

Name: INVOKEREST Language: Python Query parameters: personid = ‘LIBERI siteid = ‘FLEET’ Result: Throw exception if site is invalid SET LOCATIONSITE to siteid

Role Scripting

Role Test

Name: MAXROLE.EMXROLE Language: Python Where clause: assetnum = ‘11430’ Result: Check for PERSONGROUP TIER1 and TIER2

MXException script

MXException Test

Result: Display original and additional message

Formula script

Formula Test

Name: STANDARDDEV Language: Python New/Existing: Existing Object path format: ASSET[assetnum=’11430’] Properties: param[0] = “ALLWO” param[1] = “estlabcost” Result: Display standard deviation