/// <summary> /// Запуск метода содержащегося в атрибутах RuningTask /// </summary> /// <param name="inReader"></param> private void RunTask(Target inReader) { // Получить Type и MethodInfo // Diagnostics.Process.GetCurrentProcess.ProcessName дает в среде строку "Registration.vshost" // надо очистить //Dim MyType As Type = Type.GetType(Diagnostics.Process.GetCurrentProcess.ProcessName & "." & RuningTask.WhatModule) '("Registration.frmMain") try { //Dim processName As String = Process.GetCurrentProcess.ProcessName //processName = Left(processName, If(InStr(1, processName, ".") = 0, Len(processName), InStr(1, processName, ".") - 1)) //Dim MyType As Type = Type.GetType($"{processName}.{RuningTask.WhatModule}") '("Registration.frmMain") "Registration.FormSnapshotViewingDiagram" //Dim Mymethodinfo As MethodInfo = MyType.GetMethod(RuningTask.ProcedureName) //'RegistrationEventLog.EventLog_AUDIT_SUCCESS("RunTask " & RuningTask.ProcedureName) //'Dim parameters As Object() = {True, Модуль1.enuЗапросы.enuПоставитьМеткуКТ, "Пример"} 'ConfigReceive.GetValue(conПараметр)(0)} //If RuningTask.Parameters.Values.Count > 0 Then // Dim parameters(RuningTask.Parameters.Values.Count - 1) As Object // For Each itemParameter As TasksReceiveManager.TaskApplication.Parameter In RuningTask.Parameters.Values // parameters(itemParameter.Number - 1) = Convert.ChangeType(itemParameter.Value, Type.GetType("System." & itemParameter.Type)) // Next // Mymethodinfo.Invoke(mParentForm, parameters) //Else // Mymethodinfo.Invoke(mParentForm, Nothing) //End If string hostName = inReader.HostName; string indexResponse = inReader.ConfigReceive.GetRowValue(INDEX)[0]; ManagerTaskApplication.TaskApplication runingTask = inReader.ConfigReceive.GetTask(); // десериализация задачи с реальными параметрами Type myType2 = mParentForm.GetType(); MethodInfo myMethodinfo2 = myType2.GetMethod(runingTask.ProcedureName); if (runingTask.Parameters.Values.Count > 0) { object[] parameters = new object[runingTask.Parameters.Values.Count + 1]; foreach (ManagerTaskApplication.TaskApplication.Parameter itemParameter in runingTask.Parameters.Values) { parameters[itemParameter.Number - 1] = Convert.ChangeType(itemParameter.Value, Type.GetType("System." + itemParameter.Type.ToString())); } parameters[runingTask.Parameters.Values.Count] = new string[] { hostName, indexResponse }; myMethodinfo2.Invoke(mParentForm, parameters); } else { //Dim parameters As Object() = {inReader.HostName} myMethodinfo2.Invoke(mParentForm, new[] { new string[] { hostName, indexResponse } }); } } catch (Exception ex) { string caption = $"Процедура <{nameof(RunTask)}>"; string text = ex.ToString(); MessageBox.Show(text, caption, MessageBoxButtons.OK, MessageBoxIcon.Warning); //RegistrationEventLog.EventLog_MSG_EXCEPTION($"<{CAPTION}> {text}") } }
/// <summary> /// После установки желаемых значений параметров команды /// запись их в класс XMLConfigSend, а затем посылка на выполнение /// </summary> /// <remarks></remarks> private void SendQueryByHand() { if (ComboBoxTasks.SelectedIndex != -1) { //Dim runingTask As ManagerTaskApplication.TaskApplication = CType(ComboBoxTasks.SelectedItem, ManagerTaskApplication.TaskApplication).Clone ManagerTaskApplication.TaskApplication runingTask = (ManagerTaskApplication.TaskApplication)(((ManagerTaskApplication.TaskApplication)ComboBoxTasks.SelectedItem).Clone()); mTarget.ConfigSend.Clear(); mTarget.ConfigSend.AddRow(COMMAND_NAME, runingTask.Name, TypeParam.String); mTarget.ConfigSend.AddRow(COMMAND_DESCRIPTION, runingTask.Description, TypeParam.String); if (runingTask.Parameters.Values.Count > 0) { dgvParameters.Rows[0].Cells[0].Selected = true; foreach (ManagerTaskApplication.TaskApplication.Parameter itemParameter in runingTask.Parameters.Values) { //.AddRow($"{itemParameter.Number.ToString} {COMMAND_PARAMETER}", // dgvParameters.Rows(itemParameter.Number - 1).Cells(1).Value, itemParameter.Type) mTarget.ConfigSend.AddRow($"{itemParameter.Number} {COMMAND_PARAMETER}", Convert.ToString(dgvParameters.Rows[itemParameter.Number - 1].Cells[1].Value), itemParameter.Type); } } //Dim _random As Random = New Random(Convert.ToInt32((DateTime.Now.Millisecond >> 32))) mTarget.ConfigSend.AddRow(INDEX, Convert.ToInt32(RandomProvider.GetThreadRandom().NextDouble() * (Math.Pow(2, 31))).ToString(), TypeParam.String); mTarget.ConfigSend.AddRow(COMMAND_COMMANDER_ID, $"Компьютер:<{System.Environment.MachineName}> соединение:<{mTarget.HostName}> канал:<{mTarget.NamePiepSend}>", TypeParam.String); mTarget.ParrentManagerTargets.ParrentReaderWriterCommand.SendXMLCommand(mTarget); } }
/// <summary> /// Послать Запрос Программно /// Необходимо занести значения в параметры /// -> они заносятся в таблицу /// -> таблица сереализуется в XML (было) /// </summary> /// <param name="targetWriter"></param> /// <param name="inNetCommandForTask"></param> private void SendRequestProgrammed(Target targetWriter, NetCommandForTask inNetCommandForTask) { string procedureName = inNetCommandForTask.ProcedureName; var querytask = mTasksSendManager.Tasks.Where((task) => task.Value.ProcedureName == procedureName).First().Value; if (querytask == null) { throw new ArgumentNullException($"<{procedureName}> отсутствует в колекции <mTasksSendManager.Tasks> в процедуре <{nameof(SendRequestProgrammed)}>"); } ManagerTaskApplication.TaskApplication taskSend = (ManagerTaskApplication.TaskApplication)(mTasksSendManager.Tasks[querytask.Name].Clone()); // десериализация задачи if (targetWriter.IsControlCommadVisible) { targetWriter.UserControlCommandTarget.SetNothigDataSourceForDataGridSend(); } targetWriter.ConfigSend.Clear(); targetWriter.ConfigSend.AddRow(COMMAND_NAME, taskSend.Name, TypeParam.String); targetWriter.ConfigSend.AddRow(COMMAND_DESCRIPTION, taskSend.Description, TypeParam.String); if (!(inNetCommandForTask.Parameters == null)) { if (inNetCommandForTask.Parameters.Length == taskSend.Parameters.Values.Count) { // скопировать в itemParameter значение parameters(itemParameter.Number - 1) foreach (var itemParameter in taskSend.Parameters.Values) { targetWriter.ConfigSend.AddRow($"{itemParameter.Number} {COMMAND_PARAMETER}", inNetCommandForTask.Parameters[itemParameter.Number - 1], itemParameter.Type); } } else { MessageBox.Show($"Число переданных параметров для исполнения не соответствует{Environment.NewLine}числу параметров в конфигурационном описании задачи.", $"Процедура <{nameof(SendRequestProgrammed)}>", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); return; } } if (inNetCommandForTask.IsResponse) { targetWriter.ConfigSend.AddRow(INDEX, inNetCommandForTask.IndexResponse, TypeParam.String); } else { //Dim random As Random = RandomProvider.GetThreadRandom() //Dim random As Random = New Random(Convert.ToInt32((DateTime.Now.Millisecond >> 32))) targetWriter.ConfigSend.AddRow(INDEX, Convert.ToInt32(RandomProvider.GetThreadRandom().NextDouble() * (Math.Pow(2, 31))).ToString(), TypeParam.String); } targetWriter.ConfigSend.AddRow(COMMAND_COMMANDER_ID, $"Компьютер:<{System.Environment.MachineName}> соединение:<{targetWriter.HostName}> канал:<{targetWriter.NamePiepSend}>", TypeParam.String); SendXMLCommand(targetWriter); if (targetWriter.IsControlCommadVisible) { targetWriter.UserControlCommandTarget.UpdateDataGridSend(); } }
/// <summary> /// Выделенная из списка задача клонируется. /// Выведенные в таблице строки параметров позволяют установить желаемые значения. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> /// <remarks></remarks> private void ComboBoxTasks_SelectedIndexChanged(object sender, EventArgs e) { if (ComboBoxTasks.SelectedIndex != -1) { ManagerTaskApplication.TaskApplication selectedTask = (ManagerTaskApplication.TaskApplication)ComboBoxTasks.SelectedItem; ButtonSend.Select(); dgvParameters.Rows.Clear(); if (selectedTask.Parameters.Values.Count > 0) { dgvParameters.Rows.Add(selectedTask.Parameters.Count); foreach (ManagerTaskApplication.TaskApplication.Parameter itemParameter in selectedTask.Parameters.Values) { dgvParameters.Rows[itemParameter.Number - 1].Cells[0].Value = (object)itemParameter.Number; dgvParameters.Rows[itemParameter.Number - 1].Cells[1].Value = (object)itemParameter.Value; dgvParameters.Rows[itemParameter.Number - 1].Cells[2].Value = (object)itemParameter.Type; dgvParameters.Rows[itemParameter.Number - 1].Cells[3].Value = (object)itemParameter.Description; } } } }