Back to Collection Items
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls.
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
DECLARE @hr int
-- Important: Do not use nvarchar(max). See the warning about using nvarchar(max).
DECLARE @sTmp0 nvarchar(4000)
-- This example assumes the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.
DECLARE @http int
EXEC @hr = sp_OACreate 'Chilkat_9_5_0.Http', @http OUT
IF @hr <> 0
BEGIN
PRINT 'Failed to create ActiveX component'
RETURN
END
DECLARE @success int
-- Adds the "Authorization: Bearer <access_token>" header.
EXEC sp_OASetProperty @http, 'AuthToken', '<access_token>'
DECLARE @sbResponseBody int
EXEC @hr = sp_OACreate 'Chilkat_9_5_0.StringBuilder', @sbResponseBody OUT
EXEC sp_OAMethod @http, 'QuickGetSb', @success OUT, 'https://domain.com/services/data/v{{version}}/ui-api/records/:RECORD_ID/child-relationships/:RELATIONSHIP_NAME', @sbResponseBody
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @http, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @http
EXEC @hr = sp_OADestroy @sbResponseBody
RETURN
END
DECLARE @jResp int
EXEC @hr = sp_OACreate 'Chilkat_9_5_0.JsonObject', @jResp OUT
EXEC sp_OAMethod @jResp, 'LoadSb', @success OUT, @sbResponseBody
EXEC sp_OASetProperty @jResp, 'EmitCompact', 0
PRINT 'Response Body:'
EXEC sp_OAMethod @jResp, 'Emit', @sTmp0 OUT
PRINT @sTmp0
DECLARE @respStatusCode int
EXEC sp_OAGetProperty @http, 'LastStatus', @respStatusCode OUT
PRINT 'Response Status Code = ' + @respStatusCode
IF @respStatusCode >= 400
BEGIN
PRINT 'Response Header:'
EXEC sp_OAGetProperty @http, 'LastHeader', @sTmp0 OUT
PRINT @sTmp0
PRINT 'Failed.'
EXEC @hr = sp_OADestroy @http
EXEC @hr = sp_OADestroy @sbResponseBody
EXEC @hr = sp_OADestroy @jResp
RETURN
END
-- Sample JSON response:
-- (Sample code for parsing the JSON response is shown below)
-- {
-- "count": 1,
-- "currentPageToken": "1;5;001B000000UnQ2wIAF;Contacts;Contact.Id,Contact.Name;",
-- "currentPageUrl": "/services/data/v58.0/ui-api/records/001B000000UnQ2wIAF/child-relationships/Contacts?fields=Contact.Id%2CContact.Name&page=1&pageSize=5",
-- "nextPageToken": null,
-- "nextPageUrl": null,
-- "previousPageToken": null,
-- "previousPageUrl": null,
-- "records": [
-- {
-- "apiName": "Contact",
-- "childRelationships": {},
-- "eTag": "c3d33add9008aed557a1efa68173aa9b",
-- "fields": {
-- "AccountId": {
-- "displayValue": null,
-- "value": "001B000000UnQ2wIAF"
-- },
-- "Id": {
-- "displayValue": null,
-- "value": "003B00000097MToIAM"
-- },
-- "Name": {
-- "displayValue": null,
-- "value": "Jack Rogers"
-- }
-- },
-- "id": "003B00000097MToIAM",
-- "lastModifiedById": "005B0000003TOI6IAO",
-- "lastModifiedDate": "2017-08-18T14:46:22.000Z",
-- "recordTypeId": "012000000000000AAA",
-- "recordTypeInfo": null,
-- "systemModstamp": "2017-08-18T14:46:22.000Z",
-- "weakEtag": 1503067582000
-- }
-- ]
-- }
-- Sample code for parsing the JSON response...
-- Use this online tool to generate parsing code from sample JSON: Generate JSON Parsing Code
DECLARE @apiName nvarchar(4000)
DECLARE @eTag nvarchar(4000)
DECLARE @DisplayValue nvarchar(4000)
DECLARE @Value nvarchar(4000)
DECLARE @IdDisplayValue nvarchar(4000)
DECLARE @IdValue nvarchar(4000)
DECLARE @NameDisplayValue nvarchar(4000)
DECLARE @NameValue nvarchar(4000)
DECLARE @id nvarchar(4000)
DECLARE @lastModifiedById nvarchar(4000)
DECLARE @lastModifiedDate nvarchar(4000)
DECLARE @recordTypeId nvarchar(4000)
DECLARE @recordTypeInfo nvarchar(4000)
DECLARE @systemModstamp nvarchar(4000)
DECLARE @weakEtag int
DECLARE @count int
EXEC sp_OAMethod @jResp, 'IntOf', @count OUT, 'count'
DECLARE @currentPageToken nvarchar(4000)
EXEC sp_OAMethod @jResp, 'StringOf', @currentPageToken OUT, 'currentPageToken'
DECLARE @currentPageUrl nvarchar(4000)
EXEC sp_OAMethod @jResp, 'StringOf', @currentPageUrl OUT, 'currentPageUrl'
DECLARE @nextPageToken nvarchar(4000)
EXEC sp_OAMethod @jResp, 'StringOf', @nextPageToken OUT, 'nextPageToken'
DECLARE @nextPageUrl nvarchar(4000)
EXEC sp_OAMethod @jResp, 'StringOf', @nextPageUrl OUT, 'nextPageUrl'
DECLARE @previousPageToken nvarchar(4000)
EXEC sp_OAMethod @jResp, 'StringOf', @previousPageToken OUT, 'previousPageToken'
DECLARE @previousPageUrl nvarchar(4000)
EXEC sp_OAMethod @jResp, 'StringOf', @previousPageUrl OUT, 'previousPageUrl'
DECLARE @i int
SELECT @i = 0
DECLARE @count_i int
EXEC sp_OAMethod @jResp, 'SizeOfArray', @count_i OUT, 'records'
WHILE @i < @count_i
BEGIN
EXEC sp_OASetProperty @jResp, 'I', @i
EXEC sp_OAMethod @jResp, 'StringOf', @apiName OUT, 'records[i].apiName'
EXEC sp_OAMethod @jResp, 'StringOf', @eTag OUT, 'records[i].eTag'
EXEC sp_OAMethod @jResp, 'StringOf', @DisplayValue OUT, 'records[i].fields.AccountId.displayValue'
EXEC sp_OAMethod @jResp, 'StringOf', @Value OUT, 'records[i].fields.AccountId.value'
EXEC sp_OAMethod @jResp, 'StringOf', @IdDisplayValue OUT, 'records[i].fields.Id.displayValue'
EXEC sp_OAMethod @jResp, 'StringOf', @IdValue OUT, 'records[i].fields.Id.value'
EXEC sp_OAMethod @jResp, 'StringOf', @NameDisplayValue OUT, 'records[i].fields.Name.displayValue'
EXEC sp_OAMethod @jResp, 'StringOf', @NameValue OUT, 'records[i].fields.Name.value'
EXEC sp_OAMethod @jResp, 'StringOf', @id OUT, 'records[i].id'
EXEC sp_OAMethod @jResp, 'StringOf', @lastModifiedById OUT, 'records[i].lastModifiedById'
EXEC sp_OAMethod @jResp, 'StringOf', @lastModifiedDate OUT, 'records[i].lastModifiedDate'
EXEC sp_OAMethod @jResp, 'StringOf', @recordTypeId OUT, 'records[i].recordTypeId'
EXEC sp_OAMethod @jResp, 'StringOf', @recordTypeInfo OUT, 'records[i].recordTypeInfo'
EXEC sp_OAMethod @jResp, 'StringOf', @systemModstamp OUT, 'records[i].systemModstamp'
EXEC sp_OAMethod @jResp, 'IntOf', @weakEtag OUT, 'records[i].weakEtag'
SELECT @i = @i + 1
END
EXEC @hr = sp_OADestroy @http
EXEC @hr = sp_OADestroy @sbResponseBody
EXEC @hr = sp_OADestroy @jResp
END
GO
Curl Command
curl -X GET
-H "Authorization: Bearer <access_token>"
https://domain.com/services/data/v{{version}}/ui-api/records/:RECORD_ID/child-relationships/:RELATIONSHIP_NAME
Postman Collection Item JSON
{
"name": "Get Child Records",
"request": {
"method": "GET",
"header": [
],
"url": {
"raw": "{{_endpoint}}/services/data/v{{version}}/ui-api/records/:RECORD_ID/child-relationships/:RELATIONSHIP_NAME\n",
"host": [
"{{_endpoint}}"
],
"path": [
"services",
"data",
"v{{version}}",
"ui-api",
"records",
":RECORD_ID",
"child-relationships",
":RELATIONSHIP_NAME\n"
],
"query": [
{
"key": "fields",
"value": "",
"description": "Specifies the fields to return. If this property is specified, the response is a union of fields and optionalFields.\nIf the context user doesn’t have access to a field, an error is returned.\n\nIf you’re not sure whether the context user has access to a field and you don’t want the request to fail if they don’t, use the optionalFields parameter.\n\nSpecify names in the format ObjectApiName.FieldName. You can get any field that has a named relationship to this record. There is no limit to the number of fields you can specify.",
"disabled": true
},
{
"key": "optionalFields",
"value": "",
"description": "A collection of optional field names. If a field is accessible to the context user, it’s included in the response. If a field isn’t accessible to the context user, it isn’t included in the response, but it doesn’t cause an error.\nSpecify names in the format ObjectApiName.FieldName. You can get any field that has a named relationship to this record. There is no limit to the number of fields you can specify.",
"disabled": true
},
{
"key": "page",
"value": "",
"description": "The page offset from which to begin returning records. The default value is 0, which returns records from the first page. For example, for page=2 and pageSize=10, the first record returned is the 21st record in the list.",
"disabled": true
},
{
"key": "pageSize",
"value": "",
"description": "The maximum number of child records to return on a page. The default value is 5.",
"disabled": true
},
{
"key": "pageToken",
"value": "",
"description": "A token that represents the page offset.",
"disabled": true
}
],
"variable": [
{
"key": "RECORD_ID",
"value": "",
"description": "Record ID"
},
{
"key": "RELATIONSHIP_NAME\n",
"value": "",
"description": "API name of the relationship"
}
]
},
"description": "Get child records for a specified record and child relationship name. Relationships are connections between records. On a record detail page, each record in a related list has a child relationship to the parent record."
},
"response": [
{
"name": "Get Child Records",
"originalRequest": {
"method": "GET",
"header": [
],
"url": {
"raw": "{{_endpoint}}/services/data/v{{version}}/ui-api/records/:RECORD_ID/child-relationships/:RELATIONSHIP_NAME\n",
"host": [
"{{_endpoint}}"
],
"path": [
"services",
"data",
"v{{version}}",
"ui-api",
"records",
":RECORD_ID",
"child-relationships",
":RELATIONSHIP_NAME\n"
],
"query": [
{
"key": "fields",
"value": "",
"description": "Specifies the fields to return. If this property is specified, the response is a union of fields and optionalFields.\nIf the context user doesn’t have access to a field, an error is returned.\n\nIf you’re not sure whether the context user has access to a field and you don’t want the request to fail if they don’t, use the optionalFields parameter.\n\nSpecify names in the format ObjectApiName.FieldName. You can get any field that has a named relationship to this record. There is no limit to the number of fields you can specify.",
"disabled": true
},
{
"key": "optionalFields",
"value": "",
"description": "A collection of optional field names. If a field is accessible to the context user, it’s included in the response. If a field isn’t accessible to the context user, it isn’t included in the response, but it doesn’t cause an error.\nSpecify names in the format ObjectApiName.FieldName. You can get any field that has a named relationship to this record. There is no limit to the number of fields you can specify.",
"disabled": true
},
{
"key": "page",
"value": "",
"description": "The page offset from which to begin returning records. The default value is 0, which returns records from the first page. For example, for page=2 and pageSize=10, the first record returned is the 21st record in the list.",
"disabled": true
},
{
"key": "pageSize",
"value": "",
"description": "The maximum number of child records to return on a page. The default value is 5.",
"disabled": true
},
{
"key": "pageToken",
"value": "",
"description": "A token that represents the page offset.",
"disabled": true
}
],
"variable": [
{
"key": "RECORD_ID",
"value": "001B000000UnQ2wIAF",
"description": "Record ID"
},
{
"key": "RELATIONSHIP_NAME\n",
"value": "Contacts",
"description": "API name of the relationship"
}
]
}
},
"status": "OK",
"code": 200,
"_postman_previewlanguage": "json",
"header": [
{
"key": "Date",
"value": "Wed, 27 Sep 2023 15:57:35 GMT"
},
{
"key": "Strict-Transport-Security",
"value": "max-age=63072000; includeSubDomains"
},
{
"key": "X-Content-Type-Options",
"value": "nosniff"
},
{
"key": "X-XSS-Protection",
"value": "1; mode=block"
},
{
"key": "X-Robots-Tag",
"value": "none"
},
{
"key": "Cache-Control",
"value": "no-cache,must-revalidate,max-age=0,no-store,private"
},
{
"key": "Content-Type",
"value": "application/json;charset=UTF-8"
},
{
"key": "Vary",
"value": "Accept-Encoding"
},
{
"key": "Content-Encoding",
"value": "gzip"
},
{
"key": "Transfer-Encoding",
"value": "chunked"
}
],
"cookie": [
],
"body": "{\n \"count\": 1,\n \"currentPageToken\": \"1;5;001B000000UnQ2wIAF;Contacts;Contact.Id,Contact.Name;\",\n \"currentPageUrl\": \"/services/data/v58.0/ui-api/records/001B000000UnQ2wIAF/child-relationships/Contacts?fields=Contact.Id%2CContact.Name&page=1&pageSize=5\",\n \"nextPageToken\": null,\n \"nextPageUrl\": null,\n \"previousPageToken\": null,\n \"previousPageUrl\": null,\n \"records\": [\n {\n \"apiName\": \"Contact\",\n \"childRelationships\": {},\n \"eTag\": \"c3d33add9008aed557a1efa68173aa9b\",\n \"fields\": {\n \"AccountId\": {\n \"displayValue\": null,\n \"value\": \"001B000000UnQ2wIAF\"\n },\n \"Id\": {\n \"displayValue\": null,\n \"value\": \"003B00000097MToIAM\"\n },\n \"Name\": {\n \"displayValue\": null,\n \"value\": \"Jack Rogers\"\n }\n },\n \"id\": \"003B00000097MToIAM\",\n \"lastModifiedById\": \"005B0000003TOI6IAO\",\n \"lastModifiedDate\": \"2017-08-18T14:46:22.000Z\",\n \"recordTypeId\": \"012000000000000AAA\",\n \"recordTypeInfo\": null,\n \"systemModstamp\": \"2017-08-18T14:46:22.000Z\",\n \"weakEtag\": 1503067582000\n }\n ]\n}"
}
]
}