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 BearerToken1 IonApiUrl2 SuiteContext3 HttpMethod4 MethodName5 Parameters(URL parameters or body)6 ContentType7 Timeout8 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;
}