Open topic with navigation

# Process a Response

There are two ways to execute the request, depending on how you want to process the response.

## Obtain and Process an Unparsed Response

The `aciObjectExecuteToString` function returns the server response as an unparsed data buffer:

    char *szResponse = NULL;
    int nResponseLen = 0;
    char *szContentType = NULL;

    aciObjectExecuteToString(pConnection, pCommand, &szResponse, &nResponseLen, &szContentType);

    // For most actions, szResponse now holds the raw xml and szContentType will be "application/xml"
    // Process the xml in whatever way you wish now (e.g. third-party XML processing API)

    // Remember to tidy up afterwards
    free(szResponse);
    free(szContentType);

## Obtain and Process a Parsed Response

The `aciObjectExecute` function returns a `t_aciObject` that holds a parsed representation of the XML, which you can manipulate by using the `acio` set of functions in the C IDOL SDK. For example if the XML returned was from the `UserReadAgentList` action and the following response was retrieved:

    <?xml version="1.0" encoding="UTF-8" ?>
    <autnresponse>
      <action>USERREADAGENTLIST</action>
      <response>SUCCESS</response>
      <responsedata>
      <maxagents>5</maxagents>
      <numagents>2</numagents>
      <agent>Housing</agent>
      <agent>Rock climbing</agent>
      </responsedata>
    </autnresponse>

Then you can obtain the list of agent names for the user as follows:

    t_aciObject *pResult = NULL;
    char **szAgentNames = NULL;
    aciObjectExecute(pConnection, pCommand, &pResult);

    if (aciObjectCheckforSuccess(pResult))
    {
      // Successful request so find out how many agents this user has
      t_aciObject* pNumAgent = NULL;
      pNumAgent = acioFindFirstOccurrence(pResult, "numagents");
      if(pNumAgent)
      {
        int nNumAgents = 0;
        acioParamGetInt(pNumAgent, ACI_DATA_NODE_VALUE, &nNumAgents);
        if(nNumAgents > 0)
        {
          // This user has agents, construct array to hold names and
          // retrieve agent names from response
          t_aciObject* pAgentName = NULL;
          int nAgent = 0;

          saAgentNames = (char**)malloc(sizeof(char*)*nNumAgents);

          // Find first agent entry
          pAgentName = acioFindFirstOccurrence(pResult, "agent");
          while(pAgentName)
          {
            acioParamGetString(pAgentName, ACI_DATA_NODE_VALUE,
            &saAgentNames[nAgent]);
            // Move to next agent entry
            pAgentName = aciObjectNextEntry(pAgentName);
            nAgent++
          }
        }
      }
    }

    // Remember to tidy up afterwards
    aciObjectDestroy(&pResult);

NOTE:

Although it is imperative to free the memory that is associated with an ACI structure in C, you must not free the structure returned by the `acioFindFirstOccurrence` function.

© 2018 Micro Focus or one of its affiliates | Send documentation feedback to Micro Focus Close Send documentation feedback To open the configured email client on this computer, open an email window. Otherwise, copy the information below to a web mail client, and send this email to swpdl.idoldocsfeedback@microfocus.com. We appreciate your feedback! Product: Topic Title: Help Topic: Feedback:

_FT_HTML5_bannerTitle.htm