GetRemoteGatewayJobStatus

This BRAPI returns the status or the results of a previously remotely queued job invoked against a specified Smart Integration Connector Local Gateway host.

NOTE: Requires allowRemoteCodeExec = true on Smart Integration Service.

Parameter details:

  • si: SessionInfo object used to create connection objects

  • JobID: GUID of remote job ID returned upon successful call to ExecRemoteGatewayJob

  • remoteHost: Name of remote host to invoke operation (Smart Integration Connector Name)

The sample below invokes a job as part of a data management job inside a OneStream extender rule. The example demonstrates a simple Smart Integration Function that sleeps 2 seconds 1000 times in a loop simulating a long running task. The corresponding extender rule illustrates how this long running function can be invoked as a job, returning a job ID and subsequently polled until it's completed.

It would be typical to invoke long running jobs as part of a Data management/Extender Rule and the code below is an example on how this could be accomplished in C#:

Copy
[6:53 PM] Connor Shields
// Invoke long running job as part of a Data management/Extender rule
public object Main(SessionInfo si, BRGlobals globals, object api, ExtenderArgs args)
{
 Guid jobID;
 RemoteRequestResultDto objRemoteRequestResultDto = BRApi.Utilities.ExecRemoteGatewayJob(si, "LongRunningTest", null/* TODO Change to default(_) if this is not a reference type */, "testConnection", string.Empty);
 
 if ((objRemoteRequestResultDto.RemoteResultStatus == RemoteMessageResultType.JobRunning))
 {
 jobID = objRemoteRequestResultDto.RequestJobID;
 BRApi.ErrorLog.LogMessage(si, "Remote Job Queued and Running - JobID: " + jobID.ToString());
 
 for (var loopControl = 0; loopControl <= 10; loopControl++)
 {
 System.Threading.Thread.Sleep(2000);
 RemoteJobStatusResultDto objJobStatus = BRApi.Utilities.GetRemoteGatewayJobStatus(si, jobID, "testconnection2");
 if ((objJobStatus.RemoteJobState == RemoteJobState.Running))
 BRApi.ErrorLog.LogMessage(si, "Remote Job Still running - JobID: " + jobID.ToString());
 else if ((objJobStatus.RemoteJobState == RemoteJobState.Completed)
 )
 {
 // Checking the return type from the remote job
 if (!(objJobStatus.RemoteJobResult.ResultSet == null))
 {
 var xfDT = new XFDataTable(si, objJobStatus.RemoteJobResult.ResultSet, null, 1000);
 BRApi.ErrorLog.LogMessage(si, "Remote Job Completed - Datatable Returned - JobID: " + jobID.ToString());
 return null;
 }
 else if (!(objJobStatus.RemoteJobResult.ResultDataSet == null))
 {
 var xfDT = new XFDataTable(si, objJobStatus.RemoteJobResult.ResultDataSet.Tables[0], null, 1000);
 BRApi.ErrorLog.LogMessage(si, "Remote Job Completed - Dataset Returned - JobID: " + jobID.ToString());
 }
 else if (!(objJobStatus.RemoteJobResult.ObjectResultValue == null))
 {
 BRApi.ErrorLog.LogMessage(si, "Remote Job Completed - Object Returned - JobID: " + jobID.ToString());
 return null;
 }
 }
 else if ((objJobStatus.RemoteJobState == RemoteJobState.JobNotFound))
 {
 BRApi.ErrorLog.LogMessage(si, "Remote Job Not Found - JobID: " + jobID.ToString());
 return null;
 }
 else if ((objJobStatus.RemoteJobState == RemoteJobState.RequestTimeOut))
 {
 BRApi.ErrorLog.LogMessage(si, "Remote Job Timed Out - JobID: " + jobID.ToString());
 return null;
 }
 else if ((objRemoteRequestResultDto.RemoteResultStatus == RemoteMessageResultType.Exception))
 BRApi.ErrorLog.LogMessage(si, "Exception During Exeuction of Job: " + objRemoteRequestResultDto.RemoteException.ToString());
 }
 }
 else if ((objRemoteRequestResultDto.RemoteResultStatus == RemoteMessageResultType.Exception))
 BRApi.ErrorLog.LogMessage(si, "Exception Executing Job: " + objRemoteRequestResultDto.RemoteException.ToString());
 else
 BRApi.ErrorLog.LogMessage(si, "General Job Execution Error - State: " + objRemoteRequestResultDto.RemoteResultStatus.ToString());
 return null;
}
 

Here is the example in VB:

Copy
' Invoke long running job as part of a Data management/Extender rule
Public Function Main(ByVal si As SessionInfo, ByVal globals As BRGlobals, ByVal api As Object, ByVal args As ExtenderArgs) As Object
 Dim jobID As Guid
 Dim objRemoteRequestResultDto As RemoteRequestResultDto = BRApi.Utilities.ExecRemoteGatewayJob(si, "LongRunningTest", Nothing, "testConnection",String.Empty)
 
 If (objRemoteRequestResultDto.RemoteResultStatus = RemoteMessageResultType.JobRunning) Then
 jobID = objRemoteRequestResultDto.RequestJobID
 BRApi.ErrorLog.LogMessage(si, "Remote Job Queued and Running - JobID: " & jobID.ToString())
 'Example waiting 20 seconds for job to complete
 For loopControl = 0 To 10
 System.Threading.Thread.Sleep(2000)
 Dim objJobStatus As RemoteJobStatusResultDto = BRApi.Utilities.GetRemoteGatewayJobStatus(si, JobID, "testconnection2")
 If (objJobStatus.RemoteJobState = RemoteJobState.Running)
 BRApi.ErrorLog.LogMessage(si, "Remote Job Still running - JobID: " & jobID.ToString())
 Else If (objJobStatus.RemoteJobState = RemoteJobState.Completed)
 ' Checking the return type from the remote job
 If (Not objJobStatus.RemoteJobResult.ResultSet Is Nothing) Then
 Dim xfDT = New XFDataTable(si,objJobStatus.RemoteJobResult.ResultSet,Nothing,1000)
 BRApi.ErrorLog.LogMessage(si, "Remote Job Completed - Datatable Returned - JobID: " & jobID.ToString())
 Return Nothing
 Else If (Not objJobStatus.RemoteJobResult.ResultDataSet Is Nothing) Then
 Dim xfDT = New XFDataTable(si,objJobStatus.RemoteJobResult.ResultDataSet.Tables(0),Nothing,1000)
 BRApi.ErrorLog.LogMessage(si, "Remote Job Completed - Dataset Returned - JobID: " & jobID.ToString())
 Return Nothing
 Else If (Not objJobStatus.RemoteJobResult.ObjectResultValue Is Nothing) Then
 BRApi.ErrorLog.LogMessage(si, "Remote Job Completed - Object Returned - JobID: " & jobID.ToString())
 Return Nothing
 End If
 Else If (objJobStatus.RemoteJobState = RemoteJobState.JobNotFound)
 BRApi.ErrorLog.LogMessage(si, "Remote Job Not Found - JobID: " & jobID.ToString())
 Return Nothing
 Else If (objJobStatus.RemoteJobState = RemoteJobState.RequestTimeOut)
 BRApi.ErrorLog.LogMessage(si, "Remote Job Timed Out - JobID: " & jobID.ToString())
 Return Nothing
 Else If (objRemoteRequestResultDto.RemoteResultStatus = RemoteMessageResultType.Exception)
 BRApi.ErrorLog.LogMessage(si, "Exception During Exeuction of Job: " & objRemoteRequestResultDto.RemoteException.ToString())
 End If
 Next
 Else ' Exception occuring immediately during compile/initial run
 If (objRemoteRequestResultDto.RemoteResultStatus = RemoteMessageResultType.Exception)
 BRApi.ErrorLog.LogMessage(si, "Exception Executing Job: " & objRemoteRequestResultDto.RemoteException.ToString())
 Else
 BRApi.ErrorLog.LogMessage(si, "General Job Execution Error - State: " & objRemoteRequestResultDto.RemoteResultStatus.ToString())
 End If
 End If
 Return Nothing
End Function