Esempio n. 1
0
		void ValidateProcedure()
		{
			var nameList = new List<string>();
			foreach (var procedure in ClientManager.SystemConfiguration.AutomationConfiguration.Procedures)
			{
				Procedure = procedure;
				foreach (var procedureStep in procedure.Steps)
					ValidateStep(procedure, procedureStep);

				if (nameList.Contains(procedure.Name))
					Errors.Add(new ProcedureValidationError(procedure, "Процедура с таким именем уже существует " + procedure.Name, ValidationErrorLevel.CannotSave));
				nameList.Add(procedure.Name);

				var varList = new List<string>();
				foreach (var variable in procedure.Variables)
				{
					if (varList.Contains(variable.Name))
						Errors.Add(new VariableValidationError(variable, "Переменная с таким именем уже существует " + variable.Name, ValidationErrorLevel.CannotSave));
					varList.Add(variable.Name);
				}

				var argList = new List<string>();
				foreach (var argument in procedure.Arguments)
				{
					if (argList.Contains(argument.Name))
						Errors.Add(new VariableValidationError(argument, "Аргумент с таким именем уже существует " + argument.Name, ValidationErrorLevel.CannotSave));
					argList.Add(argument.Name);
				}
			}
		}
		public FilterSelectionViewModel(Procedure procedure)
		{
			Title = "Выбор фильтра";
			Procedure = procedure;
			InitializeFilters();
			CreateFilterCommand = new RelayCommand(OnCreateFilter);
		}
		public ProcedureDetailsViewModel(Procedure procedure = null)
		{
			if (procedure == null)
			{
				Procedure = new Procedure { ContextType = ContextType.Server };
				var i = 0;
				do { i++; } while (ClientManager.SystemConfiguration.AutomationConfiguration.Procedures.Any(x => x.Name == Procedure.Name + i));
				Procedure.Name += i;
				Title = "Создание процедуры";
			}
			else
			{
				Procedure = procedure;
				Title = "Редактирование процедуры";
			}
			Name = Procedure.Name;
			Description = Procedure.Description;
			IsActive = Procedure.IsActive;
			StartWithApplication = Procedure.StartWithApplication;
			IsSync = Procedure.IsSync;
			TimeOut = Procedure.TimeOut;
			SelectedTimeType = Procedure.TimeType;
			SelectedContextType = Procedure.ContextType;
			TimeTypes = AutomationHelper.GetEnumObs<TimeType>();
			ContextTypes = AutomationHelper.GetEnumObs<ContextType>();
		}
		public ScheduleProcedureViewModel(ScheduleProcedure scheduleProcedure, Procedure callingProcedure = null)
		{
			CallingProcedure = callingProcedure;
			ScheduleProcedure = scheduleProcedure;
			Procedure = ClientManager.SystemConfiguration.AutomationConfiguration.Procedures.FirstOrDefault(x => x.Uid == scheduleProcedure.ProcedureUid);
			if (Procedure != null)
				UpdateArguments();
		}
Esempio n. 5
0
		public void Update(Procedure procedure)
		{
			Procedure = procedure;
			if (StepsViewModel.SelectedStep != null)
				StepsViewModel.SelectedStep.UpdateContent();
			OnPropertyChanged(() => Name);
			OnPropertyChanged(() => IsActive);
			OnPropertyChanged(() => ContextType);
		}
		public OpcDaTagFileterSectionViewModel(Procedure procedure)
		{
			Title = "Выбор фильтра";
			Procedure = procedure;
			InitializeFilters();
			CreateFilterCommand = new RelayCommand(OnCreateFilter);

			ServiceFactory.Events.GetEvent<CreateOpcDaTagFilterEvent>().Subscribe(ListWasChanged);
		}
Esempio n. 7
0
		public ConditionsViewModel(Procedure procedure)
		{
			Procedure = procedure;
			AddCommand = new RelayCommand(OnAdd);
			DeleteCommand = new RelayCommand(OnDelete, CanDelete);
			AddOpcTagFilterCommand = new RelayCommand(OnAddOpcTagFilter);
			RemoveOpcTagFilterCommand = new RelayCommand(OnRemoveOpcTagFilter, CanDeleteOpcTagFilter);
			Initialize();

			ServiceFactory.Events.GetEvent<DeleteOpcDaTagFilterEvent>().Subscribe(FilterWasDeleted);
		}
Esempio n. 8
0
		public ArgumentsViewModel(Procedure procedure) : base(procedure)
		{
			AddCommand = new RelayCommand(OnAdd);
			DeleteCommand = new RelayCommand(OnDelete, CanDelete);
			EditCommand = new RelayCommand(OnEdit, CanEdit);
			Variables = new ObservableCollection<VariableViewModel>();
			foreach (var variable in procedure.Arguments)
			{
				var argumentViewModel = new VariableViewModel(variable);
				Variables.Add(argumentViewModel);
			}
		}
Esempio n. 9
0
		public ProcedurePainter(PresenterItem presenterItem)
			: base(presenterItem.DesignerCanvas, presenterItem.Element)
		{
			PresenterItem = presenterItem;
			Item = CreateItem(presenterItem);

			PresenterItem.IsPoint = false;
			PresenterItem.ShowBorderOnMouseOver = true;
			PresenterItem.Cursor = Cursors.Hand;
			PresenterItem.ClickEvent += (s, e) =>
				ProcedureArgumentsViewModel.Run(Item);
			_tooltip = new ProcedureTooltipViewModel(Item);
		}
		public static void Run(Procedure procedure)
		{
			List<Argument> args = null;
			if (procedure.Arguments.Count > 0)
			{
				var viewModel = new ProcedureArgumentsViewModel(procedure);
				if (DialogService.ShowModalWindow(viewModel)) ;
				args = viewModel.ArgumentViewModels.Arguments.Select(x =>
					new Argument
					{
						VariableScope = VariableScope.ExplicitValue,
						Value = x.Argument.Value,
						ExplicitType = x.Argument.ExplicitType,
						EnumType = x.Argument.EnumType,
						ObjectType = x.Argument.ObjectType,
						IsList = x.Argument.IsList
					}).ToList();
			}
			ProcedureHelper.Run(procedure, args, ClientManager.CurrentUser);
		}
Esempio n. 11
0
		public static void Run(Procedure procedure, List<Argument> args = null, User user = null)
		{
			if (args == null)
				args = new List<Argument>();
			using (new WaitWrapper())
			{
				var thread = new Thread(() =>
					{
						if (procedure.ContextType == ContextType.Client)
							AutomationProcessor.RunProcedure(procedure, args, null, user, null, RubezhServiceFactory.UID);
						else
							ClientManager.RubezhService.RunProcedure(procedure.Uid, args);
					}
					)
				{
					Name = "Run Procedure",
				};
				thread.Start();
				while (!thread.Join(50))
					ApplicationService.DoEvents();
			}
		}
Esempio n. 12
0
		public ProcedureViewModel(Procedure procedure)
		{
			ShowStepsCommand = new RelayCommand(OnShowSteps);
			ShowVariablesCommand = new RelayCommand(OnShowVariables);
			ShowArgumentsCommand = new RelayCommand(OnShowArguments);
			ShowConditionsCommand = new RelayCommand(OnShowConditions);

			Procedure = procedure;
			procedure.PlanElementUIDsChanged += UpdateVisualizationState;
			StepsViewModel = new StepsViewModel(procedure);
			VariablesViewModel = new VariablesViewModel(procedure);
			ArgumentsViewModel = new ArgumentsViewModel(procedure);
			ConditionsViewModel = new ConditionsViewModel(procedure);

			MenuTypes = new ObservableRangeCollection<MenuType>
			{
				MenuType.IsSteps,
				MenuType.IsVariables,
				MenuType.IsArguments,
				MenuType.IsConditions
			};
			SelectedMenuType = MenuTypes.FirstOrDefault();
		}
Esempio n. 13
0
		public ProcedureThread(Procedure procedure, List<Argument> arguments, List<Variable> callingProcedureVariables, JournalItem journalItem = null, User user = null, Guid? clientUID = null)
		{
			UID = Guid.NewGuid();
			ClientUID = clientUID.HasValue ? clientUID.Value : Guid.Empty;
			ContextType = procedure.ContextType;
			User = user;
			IsAlive = true;
			JournalItem = journalItem;
			TimeOut = procedure.TimeOut;
			TimeType = procedure.TimeType;
			AutoResetEvent = new AutoResetEvent(false);
			Steps = procedure.Steps;
			AllVariables = Utils.Clone(procedure.Variables);
			var procedureArguments = Utils.Clone(procedure.Arguments);
			InitializeArguments(procedureArguments, arguments, callingProcedureVariables);
			AllVariables.AddRange(procedureArguments);
			AllVariables.AddRange(ProcedureExecutionContext.GlobalVariables);
			Thread = new Thread(() => RunInThread(arguments))
			{
				Name = string.Format("ProcedureThread [{0}]", UID),
			};
			IsSync = procedure.IsSync;
		}
		public ProcedureArgumentsViewModel(Procedure procedure)
		{
			Title = procedure.Name;
			SaveCaption = "Выполнить";
			ArgumentViewModels = new ArgumentsViewModel(procedure);
		}
Esempio n. 15
0
		void ValidateStep(Procedure procedure, ProcedureStep step)
		{
			switch (step.ProcedureStepType)
			{
				case ProcedureStepType.PlaySound:
					var soundStep = (SoundStep)step;
					if (ClientManager.SystemConfiguration.AutomationConfiguration.AutomationSounds.All(x => x.Uid != soundStep.SoundUid))
						Errors.Add(new ProcedureStepValidationError(step, "Необходимо выбрать звук", ValidationErrorLevel.CannotSave));
					break;

				case ProcedureStepType.ShowMessage:
					var showMessageStep = (ShowMessageStep)step;
					ValidateArgument(procedure, step, showMessageStep.MessageArgument);
					if (showMessageStep.WithConfirmation)
						ValidateArgument(procedure, step, showMessageStep.ConfirmationValueArgument);
					break;

				case ProcedureStepType.Arithmetics:
					var arithmeticStep = (ArithmeticStep)step;
					if (!ValidateArgument(procedure, step, arithmeticStep.Argument1))
						break;
					if (!ValidateArgument(procedure, step, arithmeticStep.Argument2))
						break;
					ValidateArgument(procedure, step, arithmeticStep.ResultArgument);
					break;

				case ProcedureStepType.CreateColor:
					var createColorStep = (CreateColorStep)step;
					if (!ValidateArgument(procedure, step, createColorStep.AArgument))
						break;
					if (!ValidateArgument(procedure, step, createColorStep.RArgument))
						break;
					if (!ValidateArgument(procedure, step, createColorStep.GArgument))
						break;
					if (!ValidateArgument(procedure, step, createColorStep.BArgument))
						break;
					ValidateArgument(procedure, step, createColorStep.ResultArgument);
					break;

				case ProcedureStepType.If:
				case ProcedureStepType.While:
					var conditionStep = (ConditionStep)step;
					foreach (var condition in conditionStep.Conditions)
					{
						if (!ValidateArgument(procedure, step, condition.Argument1))
							break;
						ValidateArgument(procedure, step, condition.Argument2);
					}
					break;

				case ProcedureStepType.AddJournalItem:
					var journalStep = (JournalStep)step;
					ValidateArgument(procedure, step, journalStep.MessageArgument);
					break;

				case ProcedureStepType.FindObjects:
					var findObjectStep = (FindObjectStep)step;
					if (!ValidateArgument(procedure, step, findObjectStep.ResultArgument))
						break;
					foreach (var findObjectCondition in findObjectStep.FindObjectConditions)
					{
						if (!ValidateArgument(procedure, step, findObjectCondition.SourceArgument))
							break;
					}
					break;

				case ProcedureStepType.Foreach:
					var foreachStep = (ForeachStep)step;
					if (!ValidateArgument(procedure, step, foreachStep.ItemArgument))
						break;
					ValidateArgument(procedure, step, foreachStep.ListArgument);
					break;

				case ProcedureStepType.For:
					var forStep = (ForStep)step;
					if (!ValidateArgument(procedure, step, forStep.IndexerArgument))
						break;
					if (!ValidateArgument(procedure, step, forStep.InitialValueArgument))
						break;
					if (!ValidateArgument(procedure, step, forStep.ValueArgument))
						break;
					ValidateArgument(procedure, step, forStep.IteratorArgument);
					break;

				case ProcedureStepType.Pause:
					var pauseStep = (PauseStep)step;
					ValidateArgument(procedure, step, pauseStep.PauseArgument);
					break;

				case ProcedureStepType.ProcedureSelection:
					var procedureSelectionStep = (ProcedureSelectionStep)step;
					if (ClientManager.SystemConfiguration.AutomationConfiguration.Procedures.All(x => x.Uid != procedureSelectionStep.ScheduleProcedure.ProcedureUid))
						Errors.Add(new ProcedureStepValidationError(step, "Необходимо выбрать процедуру", ValidationErrorLevel.CannotSave));
					foreach (var argument in procedureSelectionStep.ScheduleProcedure.Arguments)
						ValidateArgument(procedure, step, argument);
					break;

				case ProcedureStepType.SetValue:
					var setValueStep = (SetValueStep)step;
					if (!ValidateArgument(procedure, step, setValueStep.SourceArgument))
						break;
					ValidateArgument(procedure, step, setValueStep.TargetArgument);
					break;

				case ProcedureStepType.IncrementValue:
					var incrementValueStep = (IncrementValueStep)step;
					ValidateArgument(procedure, step, incrementValueStep.ResultArgument);
					break;

				case ProcedureStepType.ControlGKDevice:
					if (!GlobalSettingsHelper.GlobalSettings.IgnoredErrors.Contains(ValidationErrorType.DeviceHaveSelfLogik))
					{
						var controlGKDeviceStep = (ControlGKDeviceStep)step;
						var gkDevice = GKManager.DeviceConfiguration.Devices.FirstOrDefault(x => x.UID == controlGKDeviceStep.GKDeviceArgument.UidValue);
						if (gkDevice != null && gkDevice.Logic.OnClausesGroup.Clauses.Count > 0)
							Errors.Add(new ProcedureStepValidationError(step, "Исполнительное устройство содержит собственную логику", ValidationErrorLevel.Warning));
						ValidateArgument(procedure, step, controlGKDeviceStep.GKDeviceArgument);
					}
					break;

				case ProcedureStepType.ControlGKFireZone:
					if (!LicenseManager.CurrentLicenseInfo.HasFirefighting)
						Errors.Add(new ProcedureStepValidationError(step, "Отсутствует лицензия для выполнения шага", ValidationErrorLevel.Warning));
					var controlGKFireZoneStep = (ControlGKFireZoneStep)step;
					ValidateArgument(procedure, step, controlGKFireZoneStep.GKFireZoneArgument);
					break;

				case ProcedureStepType.ControlGKGuardZone:
					if (!LicenseManager.CurrentLicenseInfo.HasGuard)
						Errors.Add(new ProcedureStepValidationError(step, "Отсутствует лицензия для выполнения шага", ValidationErrorLevel.Warning));
					var controlGKGuardZoneStep = (ControlGKGuardZoneStep)step;
					ValidateArgument(procedure, step, controlGKGuardZoneStep.GKGuardZoneArgument);
					break;

				case ProcedureStepType.ControlDirection:
					var controlDirectionStep = (ControlDirectionStep)step;
					ValidateArgument(procedure, step, controlDirectionStep.DirectionArgument);
					break;

				case ProcedureStepType.ControlGKDoor:
					if (!LicenseManager.CurrentLicenseInfo.HasSKD)
						Errors.Add(new ProcedureStepValidationError(step, "Отсутствует лицензия для выполнения шага", ValidationErrorLevel.Warning));
					var controlGKDoorStep = (ControlGKDoorStep)step;
					ValidateArgument(procedure, step, controlGKDoorStep.DoorArgument);
					break;

				case ProcedureStepType.ControlDelay:
					var controlDelayStep = (ControlDelayStep)step;
					ValidateArgument(procedure, step, controlDelayStep.DelayArgument);
					break;

				case ProcedureStepType.GetObjectProperty:
					var getObjectPropertyStep = (GetObjectPropertyStep)step;
					if (!ValidateArgument(procedure, step, getObjectPropertyStep.ObjectArgument))
						break;
					ValidateArgument(procedure, step, getObjectPropertyStep.ResultArgument);
					break;

				case ProcedureStepType.SendEmail:
					var sendEmailStep = (SendEmailStep)step;
					if (!ValidateArgument(procedure, step, sendEmailStep.EMailAddressFromArgument))
						break;
					if (!ValidateArgument(procedure, step, sendEmailStep.EMailAddressToArgument))
						break;
					if (!ValidateArgument(procedure, step, sendEmailStep.EMailContentArgument))
						break;
					if (!ValidateArgument(procedure, step, sendEmailStep.EMailTitleArgument))
						break;
					if (!ValidateArgument(procedure, step, sendEmailStep.SmtpArgument))
						break;
					if (!ValidateArgument(procedure, step, sendEmailStep.LoginArgument))
						break;
					if (!ValidateArgument(procedure, step, sendEmailStep.PasswordArgument))
						break;
					ValidateArgument(procedure, step, sendEmailStep.PortArgument);
					break;

				case ProcedureStepType.RunProgram:
					var RunProgramStep = (RunProgramStep)step;
					if (!ValidateArgument(procedure, step, RunProgramStep.ParametersArgument))
						break;
					ValidateArgument(procedure, step, RunProgramStep.PathArgument);
					break;

				case ProcedureStepType.Random:
					var randomStep = (RandomStep)step;
					ValidateArgument(procedure, step, randomStep.MaxValueArgument);
					break;

				case ProcedureStepType.ChangeList:
					var changeListStep = (ChangeListStep)step;
					if (!ValidateArgument(procedure, step, changeListStep.ItemArgument))
						break;
					ValidateArgument(procedure, step, changeListStep.ListArgument);
					break;

				case ProcedureStepType.CheckPermission:
					var checkPermissionStep = (CheckPermissionStep)step;
					if (!ValidateArgument(procedure, step, checkPermissionStep.PermissionArgument))
						break;
					ValidateArgument(procedure, step, checkPermissionStep.ResultArgument);
					break;

				case ProcedureStepType.GetJournalItem:
					var getJournalItemStep = (GetJournalItemStep)step;
					ValidateArgument(procedure, step, getJournalItemStep.ResultArgument);
					break;

				case ProcedureStepType.GetListCount:
					var getListCountStep = (GetListCountStep)step;
					if (!ValidateArgument(procedure, step, getListCountStep.ListArgument))
						break;
					ValidateArgument(procedure, step, getListCountStep.CountArgument);
					break;

				case ProcedureStepType.GetListItem:
					var getListItemStep = (GetListItemStep)step;
					if (!ValidateArgument(procedure, step, getListItemStep.ListArgument))
						break;
					if (!ValidateArgument(procedure, step, getListItemStep.ItemArgument))
						break;
					if (getListItemStep.PositionType == PositionType.ByIndex)
						ValidateArgument(procedure, step, getListItemStep.IndexArgument);
					break;

				case ProcedureStepType.ControlVisualGet:
				case ProcedureStepType.ControlVisualSet:
					var controlVisualStep = (ControlVisualStep)step;
					if (!ValidateArgument(procedure, step, controlVisualStep.Argument))
						break;
					if (controlVisualStep.Layout == Guid.Empty)
						Errors.Add(new ProcedureStepValidationError(step, "Не выбран макет", ValidationErrorLevel.CannotSave));
					else if (controlVisualStep.LayoutPart == Guid.Empty)
						Errors.Add(new ProcedureStepValidationError(step, "Не выбран элемент макета", ValidationErrorLevel.CannotSave));
					else if (!controlVisualStep.Property.HasValue)
						Errors.Add(new ProcedureStepValidationError(step, "Не выбрано свойство", ValidationErrorLevel.CannotSave));
					break;

				case ProcedureStepType.ControlPlanGet:
				case ProcedureStepType.ControlPlanSet:
					var controlPlanStep = (ControlPlanStep)step;
					ValidateArgument(procedure, step, controlPlanStep.ValueArgument);
					if (controlPlanStep.PlanUid == Guid.Empty)
						Errors.Add(new ProcedureStepValidationError(step, "Не выбран план", ValidationErrorLevel.CannotSave));
					else if (controlPlanStep.ElementUid == Guid.Empty)
						Errors.Add(new ProcedureStepValidationError(step, "Не выбран элемент плана", ValidationErrorLevel.CannotSave));
					break;

				case ProcedureStepType.ControlOpcDaTagGet:
				case ProcedureStepType.ControlOpcDaTagSet:
					var controlOpcDaTagStep = (ControlOpcDaTagStep)step;
					if (controlOpcDaTagStep.OpcDaServerUID == Guid.Empty)
						Errors.Add(new ProcedureStepValidationError(step, "Не выбран OPC DA Сервер", ValidationErrorLevel.CannotSave));
					else if (controlOpcDaTagStep.OpcDaTagUID == Guid.Empty)
						Errors.Add(new ProcedureStepValidationError(step, "Не выбран OPC DA Тэг", ValidationErrorLevel.CannotSave));
					else
						ValidateArgument(procedure, step, controlOpcDaTagStep.ValueArgument);
					break;

				case ProcedureStepType.ShowDialog:
					var showDialogStep = (ShowDialogStep)step;
					if (showDialogStep.Layout == Guid.Empty)
						Errors.Add(new ProcedureStepValidationError(step, "Не выбран макет", ValidationErrorLevel.CannotSave));
					break;

				case ProcedureStepType.CloseDialog:
					var closeDialogStep = (CloseDialogStep)step;
					ValidateArgument(procedure, step, closeDialogStep.WindowIDArgument);
					break;

				case ProcedureStepType.GenerateGuid:
					var generateGuidStep = (GenerateGuidStep)step;
					ValidateArgument(procedure, step, generateGuidStep.ResultArgument);
					break;

				case ProcedureStepType.SetJournalItemGuid:
					var setJournalItemGuidStep = (SetJournalItemGuidStep)step;
					ValidateArgument(procedure, step, setJournalItemGuidStep.ValueArgument);
					break;

				case ProcedureStepType.ExportJournal:
					var exportJournalStep = (ExportJournalStep)step;
					if (!ValidateArgument(procedure, step, exportJournalStep.IsExportJournalArgument))
						break;
					if (!ValidateArgument(procedure, step, exportJournalStep.IsExportPassJournalArgument))
						break;
					if (!ValidateArgument(procedure, step, exportJournalStep.MaxDateArgument))
						break;
					if (!ValidateArgument(procedure, step, exportJournalStep.MinDateArgument))
						break;
					ValidateArgument(procedure, step, exportJournalStep.PathArgument);
					break;

				case ProcedureStepType.ExportConfiguration:
					var exportConfigurationStep = (ExportConfigurationStep)step;
					if (!ValidateArgument(procedure, step, exportConfigurationStep.IsExportDevices))
						break;
					if (!ValidateArgument(procedure, step, exportConfigurationStep.IsExportDoors))
						break;
					if (!ValidateArgument(procedure, step, exportConfigurationStep.IsExportZones))
						break;
					ValidateArgument(procedure, step, exportConfigurationStep.PathArgument);
					break;

				case ProcedureStepType.ExportOrganisation:
					var exportOrganisationStep = (ExportOrganisationStep)step;
					if (!ValidateArgument(procedure, step, exportOrganisationStep.IsWithDeleted))
						break;
					if (!ValidateArgument(procedure, step, exportOrganisationStep.Organisation))
						break;
					ValidateArgument(procedure, step, exportOrganisationStep.PathArgument);
					break;

				case ProcedureStepType.ExportOrganisationList:
					var exportOrganisationListStep = (ExportOrganisationListStep)step;
					if (!ValidateArgument(procedure, step, exportOrganisationListStep.IsWithDeleted))
						break;
					ValidateArgument(procedure, step, exportOrganisationListStep.PathArgument);
					break;

				case ProcedureStepType.ImportOrganisationList:
					var importOrganisationListStep = (ImportOrganisationListStep)step;
					if (!ValidateArgument(procedure, step, importOrganisationListStep.IsWithDeleted))
						break;
					ValidateArgument(procedure, step, importOrganisationListStep.PathArgument);
					break;

				case ProcedureStepType.ImportOrganisation:
					var importOrganisationStep = (ImportOrganisationStep)step;
					if (!ValidateArgument(procedure, step, importOrganisationStep.IsWithDeleted))
						break;
					ValidateArgument(procedure, step, importOrganisationStep.PathArgument);
					break;

				case ProcedureStepType.Ptz:
					if (!LicenseManager.CurrentLicenseInfo.HasVideo)
						Errors.Add(new ProcedureStepValidationError(step, "Отсутствует лицензия для выполнения шага", ValidationErrorLevel.Warning));
					var ptzStep = (PtzStep)step;
					if (!ValidateArgument(procedure, step, ptzStep.CameraArgument))
						break;
					ValidateArgument(procedure, step, ptzStep.PtzNumberArgument);
					break;

				case ProcedureStepType.StartRecord:
					if (!LicenseManager.CurrentLicenseInfo.HasVideo)
						Errors.Add(new ProcedureStepValidationError(step, "Отсутствует лицензия для выполнения шага", ValidationErrorLevel.Warning));
					var startRecordStep = (StartRecordStep)step;
					if (!ValidateArgument(procedure, step, startRecordStep.CameraArgument))
						break;
					if (!ValidateArgument(procedure, step, startRecordStep.EventUIDArgument))
						break;
					ValidateArgument(procedure, step, startRecordStep.TimeoutArgument);
					break;

				case ProcedureStepType.StopRecord:
					if (!LicenseManager.CurrentLicenseInfo.HasVideo)
						Errors.Add(new ProcedureStepValidationError(step, "Отсутствует лицензия для выполнения шага", ValidationErrorLevel.Warning));
					var stopRecordStep = (StopRecordStep)step;
					if (!ValidateArgument(procedure, step, stopRecordStep.CameraArgument))
						break;
					ValidateArgument(procedure, step, stopRecordStep.EventUIDArgument);
					break;

				case ProcedureStepType.RviAlarm:
					if (!LicenseManager.CurrentLicenseInfo.HasVideo)
						Errors.Add(new ProcedureStepValidationError(step, "Отсутствует лицензия для выполнения шага", ValidationErrorLevel.Warning));
					var rviAlarmStep = (RviAlarmStep)step;
					ValidateArgument(procedure, step, rviAlarmStep.NameArgument);
					break;

				case ProcedureStepType.RviOpenWindow:
					if (!LicenseManager.CurrentLicenseInfo.HasVideo)
						Errors.Add(new ProcedureStepValidationError(step, "Отсутствует лицензия для выполнения шага", ValidationErrorLevel.Warning));
					var rviOpenWindowStep = (RviOpenWindowStep)step;
					ValidateArgument(procedure, step, rviOpenWindowStep.NameArgument);
					break;

				case ProcedureStepType.Now:
					var nowStep = (NowStep)step;
					ValidateArgument(procedure, step, nowStep.ResultArgument);
					break;

				case ProcedureStepType.HttpRequest:
					var httpRequestStep = (HttpRequestStep)step;
					ValidateArgument(procedure, step, httpRequestStep.UrlArgument);
					if (httpRequestStep.HttpMethod == HttpMethod.Post)
						ValidateArgument(procedure, step, httpRequestStep.ContentArgument);
					ValidateArgument(procedure, step, httpRequestStep.ResponseArgument);
					break;
			}

			if (step is UIStep && ((UIStep)step).LayoutFilter.Count == 0)
				Errors.Add(new ProcedureStepValidationError(step, "Необходимо выбрать как минимум один макет в фильтре макетов", ValidationErrorLevel.CannotSave));

			foreach (var childStep in step.Children)
				ValidateStep(procedure, childStep);
		}
Esempio n. 16
0
		bool ValidateArgument(Procedure procedure, ProcedureStep step, Argument argument)
		{
			var localVariables = new List<Variable>(Procedure.Variables);
			localVariables.AddRange(new List<Variable>(Procedure.Arguments));
			if (argument.VariableScope == VariableScope.GlobalVariable)
			{
				var variable = ClientManager.SystemConfiguration.AutomationConfiguration.GlobalVariables.FirstOrDefault(x => x.Uid == argument.VariableUid);
				if (variable == null)
				{
					Errors.Add(new ProcedureStepValidationError(step, "Все переменные должны быть инициализированы", ValidationErrorLevel.CannotSave));
					return false;
				}
				else if (variable.ContextType == ContextType.Client && procedure.ContextType == ContextType.Server)
				{
					Errors.Add(new ProcedureStepValidationError(step, "Глобальная переменная \"" + variable.Name + "\" будет определена на сервере, т.к. контекст исполнения процедуры - сервер", ValidationErrorLevel.Warning));
					return false;
				}
			}
			if (argument.VariableScope == VariableScope.LocalVariable)
				if (localVariables.All(x => x.Uid != argument.VariableUid))
				{
					Errors.Add(new ProcedureStepValidationError(step, "Все переменные должны быть инициализированы", ValidationErrorLevel.CannotSave));
					return false;
				}
			return true;
		}
Esempio n. 17
0
		void InvalidateArgument(Procedure procedure, Argument argument)
		{
			var localVariables = new List<Variable>(procedure.Variables);
			localVariables.AddRange(new List<Variable>(procedure.Arguments));
			if (argument.VariableScope == VariableScope.GlobalVariable)
				if (GlobalVariables.All(x => x.Uid != argument.VariableUid))
					argument.VariableUid = Guid.Empty;
			if (argument.VariableScope == VariableScope.LocalVariable)
				if (localVariables.All(x => x.Uid != argument.VariableUid))
					argument.VariableUid = Guid.Empty;
		}
Esempio n. 18
0
		public void InvalidateStep(ProcedureStep step, Procedure procedure)
		{
			InvalidateArguments(step, procedure);

			switch (step.ProcedureStepType)
			{
				case ProcedureStepType.PlaySound:
					var soundStep = (SoundStep)step;
					if (AutomationSounds.All(x => x.Uid != soundStep.SoundUid))
						soundStep.SoundUid = Guid.Empty;
					break;

				case ProcedureStepType.If:
				case ProcedureStepType.While:
					var conditionStep = (ConditionStep)step;
					foreach (var condition in conditionStep.Conditions)
					{
						InvalidateArgument(procedure, condition.Argument1);
						InvalidateArgument(procedure, condition.Argument2);
					}
					break;

				case ProcedureStepType.FindObjects:
					var findObjectStep = (FindObjectStep)step;
					foreach (var findObjectCondition in findObjectStep.FindObjectConditions)
						InvalidateArgument(procedure, findObjectCondition.SourceArgument);
					break;

				case ProcedureStepType.ProcedureSelection:
					var procedureSelectionStep = (ProcedureSelectionStep)step;
					if (Procedures.All(x => x.Uid != procedureSelectionStep.ScheduleProcedure.ProcedureUid))
						procedureSelectionStep.ScheduleProcedure.ProcedureUid = Guid.Empty;
					foreach (var argument in procedureSelectionStep.ScheduleProcedure.Arguments)
						InvalidateArgument(procedure, argument);
					break;

				case ProcedureStepType.ControlPlanGet:
				case ProcedureStepType.ControlPlanSet:
					var controlPlanStep = (ControlPlanStep)step;
					if (ConfigurationCash.PlansConfiguration == null || ConfigurationCash.PlansConfiguration.AllPlans == null)
						return;
					var plan = ConfigurationCash.PlansConfiguration.AllPlans.FirstOrDefault(x => x.UID == controlPlanStep.PlanUid);
					if (plan == null)
					{
						controlPlanStep.PlanUid = Guid.Empty;
						controlPlanStep.ElementUid = Guid.Empty;
					}
					else
					{
						if (plan.AllElements.All(x => x.UID != controlPlanStep.ElementUid))
							controlPlanStep.ElementUid = Guid.Empty;
					}
					break;
				case ProcedureStepType.ControlOpcDaTagGet:
				case ProcedureStepType.ControlOpcDaTagSet:
					var controlOpcDaTagStep = (ControlOpcDaTagStep)step;
					var server = OpcDaTsServers.FirstOrDefault(x => x.Uid == controlOpcDaTagStep.OpcDaServerUID);
					if (server == null)
					{
						controlOpcDaTagStep.OpcDaServerUID = Guid.Empty;
						controlOpcDaTagStep.OpcDaTagUID = Guid.Empty;
					}
					else if (server.Tags.All(x => x.Uid != controlOpcDaTagStep.OpcDaTagUID))
						controlOpcDaTagStep.OpcDaTagUID = Guid.Empty;
					break;

			}
		}
Esempio n. 19
0
		void InvalidateArguments(ProcedureStep step, Procedure procedure)
		{
			foreach (var argument in step.GetType().GetProperties().Where(x => x.PropertyType == typeof(Argument)))
			{
				var value = (Argument)argument.GetValue(step, null);
				InvalidateArgument(procedure, value);
			}
		}
Esempio n. 20
0
		public ArgumentsViewModel(Procedure procedure)
		{
			Procedure = procedure;
			UpdateArguments();
		}
Esempio n. 21
0
		public ProcedureViewModel(Procedure procedure)
		{
			Procedure = procedure;
			ArgumentsViewModel = new ArgumentsViewModel(procedure);
			RunCommand = new RelayCommand(OnRun);
		}
Esempio n. 22
0
		public static void RunProcedure(Procedure procedure, List<Argument> arguments, List<Variable> callingProcedureVariables, User user = null, JournalItem journalItem = null, Guid? clientUID = null)
		{
			if (procedure.IsActive && _procedureThreads != null)
			{
				var procedureThread = new ProcedureThread(procedure, arguments, callingProcedureVariables, journalItem, user, clientUID);
				_procedureThreads.TryAdd(procedureThread.UID, procedureThread);
				procedureThread.Start();
			}
		}
Esempio n. 23
0
		public ProcedureTooltipViewModel(Procedure procedure)
		{
			Procedure = procedure;
		}