SDAPI Variables, Objects and Object Members 2.0
The Script Debugger API (SDAPI) enables you to interact with halted script threads. When a script thread is halted, you can fetch the list of objects in the context of a script thread and call stack frame. You can also fetch objects inside an object.
To
access objects and object members, you use the
variables
and
members
actions and you specify a thread identifier and call stack frame index.
When requesting members, you can optionally include the
object_path
query parameter. If you do not use the
object_path
query parameter, the Script Debugger
will return all objects in the context of the specified thread and frame
index.
When you specify an
object_path
query parameter, the value of the parameter is a dot-delimited
string representing a path. For exampole, if the query parameter is
basket
the Script Debugger returns the members of
the
basket
object. If the query parameter is
basket.productLineItems
, the Script Debugger
returns all members of the productLineItems member of the
basket object.
members
action is a collection of JSON objects
containing four properties: - name: the name of the object.
- parent: the parent of the object.
- type: the type of the object.
-
value: the value of the object. The value is obtained by
calling
toString()
on the object.
"name":"[0]"
represents the first element in the
collection.
By default, the Script Debugger will return up to
200
objects for the
members
action and the result set starts with
element
200
. If the object path has more than 200
elements, you can use the
start
and
count
query paramters to control the returned
objects.
- name: the name of the object.
- parent: the parent of the object.
- type: the type of the object.
-
value: the value of the object. The value is obtained by
calling
toString()
on the object. -
scope: the scope of the variable, where the value is one of
local
,closure
orglobal
.
In the vast majority of cases, you do not want to interact with a βrunningβ script thread, because there is no guarantee that the thread will be alive when your request is processed.
Examples
Example 1: Get all object members (no query paramter)
REQUEST:
GET /s/-/dw/debugger/v1_0/threads/1/frames/0/members
RESPONSE:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"_v":"2.0",
"object_members":
[
{
"name":"args",
"parent":"",
"type":"dw.system.PipelineDictionary",
"value":"[PipelineDictionary id=385366343]"
},
{
"name":"arguments",
"parent":"",
"type":"org.mozilla.javascript.Arguments",
"value":"[email protected]"
},
{
"name":"basket",
"parent":"",
"type":"dw.order.Basket",
"value":"[Basket uuid=bcqpfaOacb6QIaaado1BaeQDFh]"
}
]
}
Example 2: Get the members of the productLineItems collection in the basket object
REQUEST:
GET /s/-/dw/debugger/v1_0/threads/1/frames/0members?object_path=basket.productLineItems
RESPONSE:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"_v":"2.0",
"object_members":
[
{
"name":"[0]",
"parent":"basket",
"type":"dw.order.ProductLineItem",
"value":"[ProductLineItem uuid=bcDfLaOacbNVMaaadoDBceQDFh]"
},
{
"name":"[1]",
"parent":"basket",
"type":"dw.order.ProductLineItem",
"value":"[ProductLineItem uuid=bcLNbaOacbhiUaaadokBgeQDFh]"
}
]
}
Example 3: Get the members of an element inside the productLineItems collection
REQUEST:
GET /s/-/dw/debugger/v1_0/threads/1/frames/0/members?object_path=basket.productLineItems.%5B1%5D
RESPONSE:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"_v":"2.0",
"object_members":
[
{
"name":"adjustedGrossPrice",
"parent":"productLineItems",
"type":"dw.value.Money",
"value":"N/A"
},
{
"name":"adjustedNetPrice",
"parent":"productLineItems",
"type":"dw.value.Money",
"value":"N/A"
}
...
]
}
Example 4: Get the members of a object using
start
and
count
REQUEST:
GET /s/-/dw/debugger/v1_0/threads/1/frames/0/members?object_path=basket.productLineItems.%5B1%5D&start=50&count=10
RESPONSE:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"_v":"2.0",
"object_members":
[
{
"name":"optionModel",
"parent":"productLineItems",
"type":"String",
"value":"null"
},
{
"name":"optionProductLineItem",
"parent":"productLineItems",
"type":"String",
"value":"false"
},
{
"name":"optionProductLineItems",
"parent":"productLineItems",
"type":"dw.util.Collection",
"value":"[Collection id=865935255]"
},
{
"name":"optionValueID",
"parent":"productLineItems",
"type":"String",
"value":"null"
},
{
"name":"orderItem",
"parent":"productLineItems",
"type":"String",
"value":"null"
},
{
"name":"parent",
"parent":"productLineItems",
"type":"String",
"value":"null"
},
{
"name":"position",
"parent":"productLineItems",
"type":"String",
"value":"2"
},
{
"name":"price",
"parent":"productLineItems",
"type":"dw.value.Money",
"value":"N/A"
},
{
"name":"priceAdjustments",
"parent":"productLineItems",
"type":"dw.util.Collection",
"value":"[Collection id=1994121392]"
},
{
"name":"priceValue",
"parent":"productLineItems",
"type":"String",
"value":"null"
}
]
}
Example 5: Get the variables
start
and
count
REQUEST:
GET /s/-/dw/debugger/v1_0/threads/1/frames/0/variables
RESPONSE:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"_v": "2.0",
"count": 14,
"object_members": [
{
"name": "arguments",
"parent": "",
"scope": "local",
"type": "Object",
"value": "[object Arguments]"
},
{
"name": "arguments",
"parent": "",
"scope": "closure",
"type": "Object",
"value": "[object Arguments]"
},
{
"name": "requiredFunction",
"parent": "",
"scope": "global",
"type": "Function",
"value": "\nfunction requiredFunction() {\n var dwUtil = require(\"dw/util\");\n var CustomerMgr = require(\"dw/customer/CustomerMgr\");\n return true;\n}\n"
}
],
"start": 0,
"total": 4
}