#Region "Includes" Imports System.Data.SqlClient Imports Common.Common #End Region Public Class Job #Region "Members" Private m_JobId As Integer Private m_Description As String Private m_ProgrammId As Integer Private m_JobType As JobType Private m_JobStartType As JobStartType Private m_Common As Common.Common #End Region #Region "Constructor" Public Sub New(ByVal common As Common.Common, ByVal jobId As Integer, ByVal description As String, ByVal programmId As Integer, ByVal jobType As JobType, ByVal jobStartType As JobStartType) m_Common = common m_JobId = jobId m_Description = description m_ProgrammId = programmId m_JobType = jobType m_JobStartType = jobStartType End Sub #End Region #Region "Properties" Public ReadOnly Property JobId() As Integer Get Return m_JobId End Get End Property Public ReadOnly Property Description() As String Get Return m_Description End Get End Property Public ReadOnly Property ProgrammId() As Integer Get Return m_ProgrammId End Get End Property Public ReadOnly Property JobType() As JobType Get Return m_JobType End Get End Property Public ReadOnly Property JobStartType() As JobStartType Get Return m_JobStartType End Get End Property #End Region #Region "Public Methods" 'Launches a start or a watch job Public Sub Launch(ByVal isRunJob As Boolean, ByVal isNachLetzterAusfuerung As Boolean) Try 'insert start datetime into db, used to check, if the job really started 'batch has to call bmsDll.Start() method... DataAccess.Job.SetJobLastRun(m_Common.DSN, m_JobId, LastRun.Start) 'log some infos into eventlog m_Common.Log(SERVICE_DISPLAY_NAME, "Starter launched Job " + m_JobId.ToString() + " (" + m_Description + ")") 'reset calculated bit DataAccess.Job.SetNextStartDateCalculated(m_Common.DSN, m_JobId, True) If Not isRunJob And Not isNachLetzterAusfuerung Then 'just calculate next start time if its not a runjob (job that has to execute as fast as possible) DataAccess.Job.SetNextExecDateTime(m_Common.DSN, m_JobId) End If Select Case m_JobType Case JobType.StartJob Select Case m_JobStartType Case JobStartType.Executable StartExe() Case JobStartType.SqlQuery StartSqlQuery() Case JobStartType.WindowsService StartService() Case Else Throw New Exception("Unbekannter Job Start Typ """ & m_JobStartType.ToString() & """ ist unbekannt") End Select Case Else Throw New Exception("Unbekannter Job Typ """ & m_JobType.ToString() & """") End Select Catch ex As Exception Dim exModified As New Exception("Der Job JobId: " + m_JobId.ToString() + " (" + m_Description + ") konnte nicht gestartet werden." + Environment.NewLine + ex.Message, ex) Throw exModified End Try End Sub #End Region #Region "private Methods" 'Starts an executable. But before, it gets all start parameters from db it needs Private Sub StartExe() Try Dim programmPath As String Dim process As New Process DataAccess.Job.GetStartParameter(m_Common.DSN, m_JobId, StartParameterType.FilePath, programmPath) process.Start(programmPath) Catch ex As Exception Throw ex End Try End Sub 'Starts a service. But before, it gets all start parameters from db it needs Private Sub StartService() Try Dim serviceName As String, machineName As String DataAccess.Job.GetStartParameter(m_Common.DSN, m_JobId, StartParameterType.ServiceName, serviceName) DataAccess.Job.GetStartParameter(m_Common.DSN, m_JobId, StartParameterType.ServerName, machineName) Dim serviceController As New System.ServiceProcess.ServiceController(serviceName, machineName) If Not serviceController.Status = ServiceProcess.ServiceControllerStatus.Running Then serviceController.Start() End If Catch ex As Exception Throw ex End Try End Sub 'Starts a sql query. But before, it gets all start parameters from db it needs Private Sub StartSqlQuery() Dim sqlConn As New SqlConnection Try Dim connectionString As String, sqlQuery As String DataAccess.Job.GetStartParameter(m_Common.DSN, m_JobId, StartParameterType.ConnectionString, connectionString) DataAccess.Job.GetStartParameter(m_Common.DSN, m_JobId, StartParameterType.SQLQuery, sqlQuery) Dim sqlCom As New SqlCommand sqlConn.ConnectionString = connectionString sqlConn.Open() sqlCom.CommandType = CommandType.Text sqlCom.Connection = sqlConn sqlCom.CommandText = sqlQuery sqlCom.ExecuteNonQuery() sqlConn.Close() Catch ex As Exception If sqlConn.State = ConnectionState.Open Then sqlConn.Close() End If Throw ex End Try End Sub #End Region End Class