Пример #1
0
		/// <summary>
		/// 	Adds the specified process.
		/// </summary>
		/// <param name="process"> The process. </param>
		/// <remarks>
		/// </remarks>
		public void Add(Process process) {
			if (Index.ContainsKey(process.Code)) {
				Errors.Add(
					new EcoProcessException("Структура процессов включет в себя дублирующийся код процесса :" + process.Code,
					                        process.Xml));
				return;
			}
			Index[process.Code] = process;
		}
		/// <summary>
		/// 	Finds the depend.
		/// </summary>
		/// <param name="current"> The current. </param>
		/// <param name="whatToFind"> The what to find. </param>
		/// <returns> </returns>
		/// <remarks>
		/// </remarks>
		private static bool FindDepend(Process current, Process whatToFind) {
			return current.InDepends.Any(d => d.Process == whatToFind || FindDepend(d.Process, whatToFind));
		}
Пример #3
0
		/// <summary>
		/// 	Adds the element from XML.
		/// </summary>
		/// <param name="e"> The e. </param>
		/// <remarks>
		/// </remarks>
		private void AddElementFromXml(XElement e) {
			var process = new Process();
			e.Apply(process);
			process.Xml = e;
			if (process.Code.IsEmpty()) {
				Errors.Add(
					new EcoProcessException("Процессу " + e.Describe().ToWhereString() + " не сопоставлен исполнительный узел",
					                        process.Xml));
				return;
			}
			process.OrgNodeCode = e.Attr("orgnode");
			if (e.Parent != null && e.Parent.Name.LocalName == "orgnode") {
				process.OrgNodeCode = e.Parent.Id();
			}
			if (process.OrgNodeCode.IsEmpty()) {
				Errors.Add(
					new EcoProcessException("Процессу " + process.Code + " не сопоставлен исполнительный узел", process.Xml));
				return;
			}
			foreach (var t in e.Elements("thema")) {
				var themaref = new ProcessThemaRef();
				t.Apply(themaref);
				if (themaref.Code.IsEmpty()) {
					Errors.Add(
						new EcoProcessException("Процесс " + process.Code + " имеет путсую ссылку на тему ", process.Xml)
						);
					continue;
				}
				if (null != process.ThemaRefs.FirstOrDefault(x => x.Code == themaref.Code)) {
					Errors.Add(
						new EcoProcessException("Процесс " + process.Code + " имеет двойную ссылку на тему " + themaref.Code, process.Xml));
					continue;
				}
				if (themaref.OutLock && !themaref.OutView) {
					Errors.Add(
						new EcoProcessException("Процесс " + process.Code + " имеет неверную ссылку на тему " + themaref.Code +
						                        " - тема помечена к блокировке, но к экспорту", process.Xml));
					continue;
				}
				process.ThemaRefs.Add(themaref);
			}
			foreach (var p in e.Elements("in")) {
				var processin = new ProcessInRef();
				p.Apply(processin);
				processin.Xml = p;
				if (processin.Code.IsEmpty()) {
					Errors.Add(
						new EcoProcessException("Процесс " + process.Code + " имеет путсую ссылку процесс", process.Xml));
					continue;
				}
				if (null != process.InDepends.FirstOrDefault(x => x.Code == processin.Code)) {
					Errors.Add(
						new EcoProcessException("Процесс " + process.Code + " имеет двойную ссылку на процесс " + processin.Code,
						                        process.Xml));
					continue;
				}
				process.InDepends.Add(processin);
			}
			Add(process);
		}