Chilkat Online Tools

C++ / Salesforce Platform APIs / Get Child Records

Back to Collection Items

#include <CkHttp.h>
#include <CkStringBuilder.h>
#include <CkJsonObject.h>

void ChilkatSample(void)
    {
    // This example assumes the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    CkHttp http;
    bool success;

    // Adds the "Authorization: Bearer <access_token>" header.
    http.put_AuthToken("<access_token>");

    CkStringBuilder sbResponseBody;
    success = http.QuickGetSb("https://domain.com/services/data/v{{version}}/ui-api/records/:RECORD_ID/child-relationships/:RELATIONSHIP_NAME",sbResponseBody);
    if (success == false) {
        std::cout << http.lastErrorText() << "\r\n";
        return;
    }

    CkJsonObject jResp;
    jResp.LoadSb(sbResponseBody);
    jResp.put_EmitCompact(false);

    std::cout << "Response Body:" << "\r\n";
    std::cout << jResp.emit() << "\r\n";

    int respStatusCode = http.get_LastStatus();
    std::cout << "Response Status Code = " << respStatusCode << "\r\n";
    if (respStatusCode >= 400) {
        std::cout << "Response Header:" << "\r\n";
        std::cout << http.lastHeader() << "\r\n";
        std::cout << "Failed." << "\r\n";
        return;
    }

    // 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

    // Chilkat functions returning "const char *" return a pointer to temporary internal memory owned and managed by Chilkat.

    const char *apiName = 0;
    const char *eTag = 0;
    const char *DisplayValue = 0;
    const char *Value = 0;
    const char *IdDisplayValue = 0;
    const char *IdValue = 0;
    const char *NameDisplayValue = 0;
    const char *NameValue = 0;
    const char *id = 0;
    const char *lastModifiedById = 0;
    const char *lastModifiedDate = 0;
    const char *recordTypeId = 0;
    const char *recordTypeInfo = 0;
    const char *systemModstamp = 0;
    int weakEtag;

    int count = jResp.IntOf("count");
    const char *currentPageToken = jResp.stringOf("currentPageToken");
    const char *currentPageUrl = jResp.stringOf("currentPageUrl");
    const char *nextPageToken = jResp.stringOf("nextPageToken");
    const char *nextPageUrl = jResp.stringOf("nextPageUrl");
    const char *previousPageToken = jResp.stringOf("previousPageToken");
    const char *previousPageUrl = jResp.stringOf("previousPageUrl");
    int i = 0;
    int count_i = jResp.SizeOfArray("records");
    while (i < count_i) {
        jResp.put_I(i);
        apiName = jResp.stringOf("records[i].apiName");
        eTag = jResp.stringOf("records[i].eTag");
        DisplayValue = jResp.stringOf("records[i].fields.AccountId.displayValue");
        Value = jResp.stringOf("records[i].fields.AccountId.value");
        IdDisplayValue = jResp.stringOf("records[i].fields.Id.displayValue");
        IdValue = jResp.stringOf("records[i].fields.Id.value");
        NameDisplayValue = jResp.stringOf("records[i].fields.Name.displayValue");
        NameValue = jResp.stringOf("records[i].fields.Name.value");
        id = jResp.stringOf("records[i].id");
        lastModifiedById = jResp.stringOf("records[i].lastModifiedById");
        lastModifiedDate = jResp.stringOf("records[i].lastModifiedDate");
        recordTypeId = jResp.stringOf("records[i].recordTypeId");
        recordTypeInfo = jResp.stringOf("records[i].recordTypeInfo");
        systemModstamp = jResp.stringOf("records[i].systemModstamp");
        weakEtag = jResp.IntOf("records[i].weakEtag");
        i = i + 1;
    }
    }

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}"
    }
  ]
}