InvokeIONAPIMethodWithToken ION API method

This method calls an ION API endpoint using a provided bearer token instead of an SSO. It also implements a recursive retry, if the HTTP code is not 200, 201, or 202. This method also provides a detailed exception or error logging.

Example

Parameter pattern:
  • 0 BearerToken
  • 1 IonApiUrl
  • 2 SuiteContext
  • 3 HttpMethod
  • 4 MethodName
  • 5 Parameters (URL parameters or body)
  • 6 ContentType
  • 7 Timeout
  • 8 ResponseCode(out)
  • 9 ResponseContent(out)
  • 10 ResponseHeaders(out)
  • 11 ResponseInfobar(out)
private InvokeResponseData callIonApiWithToken(string httpMethod, string methodName, string parameters, string contentType, string timeout, int recursionCount) {
            if (bearerToken.Equals(String.Empty)) {
                try {  
                    bearerToken = getToken();  
                    //LogMessage(bearerToken);  
                } catch (Exception e) {
                    throw new Exception("Could not get token\n" + e.Message);  
                }  
            }
 
            if (ionapiUrl.Equals(String.Empty)) {
                try {  
                    ionapiUrl = getIonApiInfo();    
                    //LogMessage(ionapiUrl);    
                } catch (Exception e) {
                    throw new Exception("Could not get ionapiInfo\n" + e.Message);  
                }  
            }
           
            InvokeRequestData IDORequest = new InvokeRequestData();
            IDORequest.IDOName = "IONAPIMethods";
            IDORequest.MethodName = "InvokeIONAPIMethodWithToken";
            IDORequest.Parameters.Add(bearerToken);
            IDORequest.Parameters.Add(ionapiUrl);
            IDORequest.Parameters.Add(suiteContext);
            IDORequest.Parameters.Add(httpMethod);
            IDORequest.Parameters.Add(methodName);
            IDORequest.Parameters.Add(parameters);
            IDORequest.Parameters.Add(contentType);
            IDORequest.Parameters.Add(timeout);
            IDORequest.Parameters.Add(IDONull.Value); //ResponseCode 8
            IDORequest.Parameters.Add(IDONull.Value); //ResponseContent 9
            IDORequest.Parameters.Add(IDONull.Value); //ResponseHeaders 10
            IDORequest.Parameters.Add(IDONull.Value); //ResponseInfobar 11
 
            InvokeResponseData response = null;
            try {
                response = Context.Commands.Invoke(IDORequest);
            } catch (Exception e) {
                throw new Exception("callIonApiWithToken Error: " + methodName + "\nResponseCode: " + response.Parameters[8].Value + "\nResponseContent: " + response.Parameters[9].Value +
                    "\nResponseHeaders: " + response.Parameters[10].Value + "\nInfobar " + response.Parameters[11].Value + "\n" + ionapiUrl + suiteContext + methodName);
            }
 
            if (!successfulHttpCode(response.Parameters[8].Value) && recursionCount == 0) {
                recursionCount++;
                string oldBearerToken = bearerToken;
                bearerToken = getToken();
                LogMessage(mongooseTableName + "\n" + ionapiUrl + suiteContext + methodName + "\nResponseCode: " + response.Parameters[8].Value + "\nResponseContent: " + response.Parameters[9].Value +
                    "\nResponseHeaders: " + response.Parameters[10].Value + "\nInfobar " + response.Parameters[11].Value + "\n" + oldBearerToken + "\n\n" + bearerToken);
                return callIonApiWithToken(httpMethod, methodName, parameters, contentType, timeout, 1);
            } else if (!successfulHttpCode(response.Parameters[8].Value) && recursionCount != 0) {
                throw new Exception("callIonApiWithToken ION API Response not successful after refreshing token " + recursionCount + " time\nResponseCode: " +
                    response.Parameters[8].Value + "\nResponseContent: " + response.Parameters[9].Value +
                    "\nResponseHeaders: " + response.Parameters[10].Value + "\nInfobar " + response.Parameters[11].Value + "\nToken: " + bearerToken + "\nIonApiUrl: " + ionapiUrl);
            }
 
            //LogMessage(methodName + "\n " + response.Parameters[8].Value + "\n " + response.Parameters[9].Value + "\n " + response.Parameters[11].Value);
            return response;
        }