The below code takes the following parameters:
- The type of request (i.e. Get or Set)
- Host Name in the pcHost parameter
- Port Number in the pcPort parameter(optional)
- Instance name in the pcInstance parameter
- Agent Id for a specific PASOE agent
- Whether to turn tracking On or Off
Then calls the appropriate REST API to get or set object tracking.
Note that a Set also calls a Get to verify it properly set the Property.
USING OpenEdge.Net.HTTP.RequestBuilder.
USING openedge.net.http.IHttpRequest.
USING openedge.net.http.IHttpResponse.
USING Progress.Json.ObjectModel.*.
USING OpenEdge.Net.HTTP.ClientBuilder.
USING OpenEdge.Net.HTTP.ResponseBuilder.
USING OpenEdge.Net.HTTP.IHttpClientLibrary.
USING OpenEdge.Net.HTTP.Lib.ClientLibraryBuilder.
USING OpenEdge.Net.HTTP.Credentials.
DEFINE INPUT PARAMETER pcRequest AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER pcHost AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER pcPort AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER pcInstance AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER pcAgentId AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER plTracking AS LOGICAL NO-UNDO.
DEFINE VARIABLE cMessage AS CHARACTER NO-UNDO.
DEFINE VARIABLE lStatus AS LOGICAL NO-UNDO.
IF pcRequest EQ "Get" THEN
RUN getObjectTracking ( INPUT pcHost,
INPUT pcPort,
INPUT pcInstance,
INPUT pcAgentId,
OUTPUT lStatus,
OUTPUT cMessage ).
ELSE
RUN setObjectTracking ( INPUT pcHost,
INPUT pcPort,
INPUT pcInstance,
INPUT pcAgentId,
INPUT plTracking,
OUTPUT lStatus,
OUTPUT cMessage ).
IF (cMessage GT "") EQ TRUE THEN DO:
MESSAGE "Request failed with the below error:" SKIP(1)
cMessage
VIEW-AS ALERT-BOX INFORMATION BUTTONS OK.
RETURN.
END.
MESSAGE "Object tracking for agent " pcAgentId " in instance " pcInstance
" is: " (IF lStatus THEN "on" ELSE "off")
VIEW-AS ALERT-BOX INFORMATION BUTTONS OK.
PROCEDURE getObjectTracking:
DEFINE INPUT PARAMETER pcHost AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER pcPort AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER pcInstance AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER pcAgentId AS CHARACTER NO-UNDO.
DEFINE OUTPUT PARAMETER plStatus AS LOGICAL NO-UNDO.
DEFINE OUTPUT PARAMETER pcMessage AS CHARACTER NO-UNDO.
DEFINE VARIABLE cUrl AS CHARACTER NO-UNDO.
DEFINE VARIABLE oEntity AS JsonObject NO-UNDO.
DEFINE VARIABLE oRequest AS IHttpRequest NO-UNDO.
DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
DEFINE VARIABLE oLib AS IHttpClientLibrary NO-UNDO.
DEFINE VARIABLE oCredentials AS Credentials NO-UNDO.
cUrl = "http://" + pcHost + (IF (pcPort GT "") EQ TRUE THEN ":" + pcPort ELSE "") +
"/oemanager/applications/" + pcInstance + "/agents/" +
pcAgentId + "/ABLObjects/status".
// You have to login with admin rights to the tomcat manager. If you've changed
// the password you'll need to use the modified password
oCredentials = NEW Credentials("http://localhost","tomcat","tomcat").
ASSIGN oRequest = RequestBuilder:Get(cUrl)
:UsingBasicAuthentication(oCredentials)
:Request
oResponse = ResponseBuilder:Build():Response
oLib = ClientLibraryBuilder:Build():sslVerifyHost(NO):Library
NO-ERROR.
ClientBuilder:Build()
:UsingLibrary(oLib)
:Client:Execute(oRequest,oResponse).
// Cast the result of the call into a JsonObject.
oEntity = CAST(oResponse:Entity,JsonObject).
// Check for error messages and return if one is encountered
pcMessage = oEntity:GetCharacter("errmsg").
IF (pcMessage GT "") EQ TRUE THEN
RETURN.
// For a 'get' request the result field is LOGICAL and indicates whether or
// not the agent is running.
plStatus = oEntity:GetLogical("result").
END PROCEDURE.
PROCEDURE setObjectTracking:
DEFINE INPUT PARAMETER pcHost AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER pcPort AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER pcInstance AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER pcAgentId AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER plTracking AS LOGICAL NO-UNDO.
DEFINE OUTPUT PARAMETER plStatus AS LOGICAL NO-UNDO.
DEFINE OUTPUT PARAMETER pcMessage AS CHARACTER NO-UNDO.
DEFINE VARIABLE cUrl AS CHARACTER NO-UNDO.
DEFINE VARIABLE oPayload AS JsonObject NO-UNDO.
DEFINE VARIABLE oEntity AS JsonObject NO-UNDO.
DEFINE VARIABLE oRequest AS IHttpRequest NO-UNDO.
DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
DEFINE VARIABLE oLib AS IHttpClientLibrary NO-UNDO.
DEFINE VARIABLE oCredentials AS Credentials NO-UNDO.
// Create a JSON string to either enable or disable object tracking
oPayload = NEW JsonObject().
oPayload:Add('enable',(IF plTracking THEN 'true' ELSE 'false')).
cUrl = "http://" + pcHost + (IF (pcPort GT "") EQ TRUE THEN ":" + pcPort ELSE "") +
"/oemanager/applications/" + pcInstance +
"/agents/" + pcAgentId + "/ABLObjects/status".
// You have to login with admin rights to the tomcat manager. If you've changed
// the password you'll need to use the modified password
oCredentials = NEW Credentials("http://localhost","tomcat","tomcat").
ASSIGN oRequest = RequestBuilder:Put(cUrl,oPayload)
:ContentType("application/vnd.progress+json")
:UsingBasicAuthentication(oCredentials)
:Request
oResponse = ResponseBuilder:Build():Response
oLib = ClientLibraryBuilder:Build():sslVerifyHost(NO):Library.
ClientBuilder:Build()
:UsingLibrary(oLib)
:Client:Execute(oRequest,oResponse).
// Cast the result of the call into a JsonObject.
oEntity = CAST(oResponse:Entity,JsonObject).
// Check for error messages and return if one is encountered
pcMessage = oEntity:GetCharacter("errmsg").
IF (pcMessage GT "") EQ TRUE THEN
RETURN.
// Call a GET to confirm whether the SET was successful
RUN getObjectTracking ( INPUT pcHost,
INPUT pcPort,
INPUT pcInstance,
INPUT pcAgentId,
OUTPUT plStatus,
OUTPUT pcMessage ).
END PROCEDURE.
The RAW JSON Response String generated by the "Get AblObjects" request is below:
{
"result":true,
"versionNo":1,
"outcome":"SUCCESS",
"versionStr":"v11.7.4 ( 2018-10-10 )",
"errmsg":"",
"operation":"TRACKING ABL OBJECTS"
}
The RAW JSON Response String generated by the "Set AblObjects" request is below:
{
"result":true,
"versionNo":1,
"outcome":"SUCCESS",
"versionStr":"v11.7.4 ( 2018-10-10 )",
"errmsg":"",
"operation":"TRACK ABL OBJECTS"
}