Back to OIM Explorer

VI.Projector.Database/VI.Projector.Database/StartSequenceInstance.cs

Decompiler Source FileVI.Projector.Database.StartSequenceInstanceSandbox DB

2 extracted method/event/call references in StartSequenceInstance.

Source: F:\Claude\.tmp\oim-decompiled-full\1214_One_Identity_Manager_VI.Projector.Database.dll\VI.Projector.Database\StartSequenceInstance.cs

Source size: 11.118 characters

Interpretation

  • Decompiled source file. Use method/event registrations and call-site extraction to connect back to DialogMethod, QBMEvent, and API layers.

Relations

  • Generate: Run at line 305
  • UnitOfWork.Generate: Run at line 305

Typed Edges

  • No typed edges extracted for this source.

References

  • No direct source references extracted.

Referenced By

  • No direct source references extracted.

C# source-derived context

Generated by pattern extraction from the decompiled C# source and decompile index. This is factual source evidence, not inferred behavior.

reads entity values writes entity values references DB/Dialog objects

Summary: classes StartSequenceInstance; methods _Save, Delete, StartWork, Start, Finished, _HandleProcessingError; references DPRStartSequence, DPRStartSequenceHasProjection, ESet; markers reads entity values, writes entity values, references DB/Dialog objects

Classes

StartSequenceInstance

OIM key/entity markers

UID_DPRStartSequence UID_DPRStartSequenceTemplate

API/entity calls

GetValue PutValue PutValue MarkForDeletion From

Registrations / handlers

None extracted.

Complete Source

C#328 lines
1using System;2using System.Collections;3using System.Collections.Generic;4using System.Linq;5using System.Runtime.CompilerServices;6using System.Threading;7using VI.Base;8using VI.DB;9using VI.DB.Entities;10using VI.DB.Sync;1112namespace VI.Projector.Database;1314public class StartSequenceInstance15{16	public const string ConstStartSequenceStartEventUid = "DPR-823B0011F4A53C4EB6B74AF6640A1B42";1718	private readonly ISession m_Session;1920	private readonly ResetLazy<List<StartInfoLinkInstance>> m_StartInfos;2122	private IEntity m_Entity;2324	[field: CompilerGenerated]25	public string Uid26	{27		[CompilerGenerated]28		get;29	}3031	[field: CompilerGenerated]32	public string Name33	{34		[CompilerGenerated]35		get;36	}3738	[field: CompilerGenerated]39	public string Description40	{41		[CompilerGenerated]42		get;43	}4445	[field: CompilerGenerated]46	public StartSequenceExecutionState State47	{48		[CompilerGenerated]49		get;50		[CompilerGenerated]51		private set;52	}5354	[field: CompilerGenerated]55	public string ExecutionError56	{57		[CompilerGenerated]58		get;59		[CompilerGenerated]60		private set;61	}6263	[field: CompilerGenerated]64	public object Tag65	{66		[CompilerGenerated]67		get;68		[CompilerGenerated]69		set;70	}7172	public System.Collections.Generic.IReadOnlyList<StartInfoLinkInstance> StartInfos => (System.Collections.Generic.IReadOnlyList<StartInfoLinkInstance>)m_StartInfos.Value;7374	[field: CompilerGenerated]75	public System.DateTime CreationTime76	{77		[CompilerGenerated]78		get;79	} = System.DateTime.MinValue;8081	public StartSequenceInstance(ISession session, string uidStartSequenceInstance)82		: this(session, session?.Source().Get("DPRStartSequence", uidStartSequenceInstance))83	{84	}8586	public StartSequenceInstance(ISession session, IEntity entity)87	{88		//IL_0019: Unknown result type (might be due to invalid IL or missing references)89		//IL_0027: Unknown result type (might be due to invalid IL or missing references)90		if (session == null)91		{92			throw new ArgumentNullException("session");93		}94		if (entity == null)95		{96			throw new ArgumentNullException("entity");97		}98		m_Entity = entity;99		m_Session = session;100		Uid = m_Entity.GetRaw("UID_DPRStartSequence").ToString();101		Name = m_Entity.GetRaw("SequenceName").ToString();102		Description = m_Entity.GetRaw("Description").ToString();103		ExecutionError = m_Entity.GetValue<string>("ExecutionError");104		CreationTime = m_Entity.GetValue<System.DateTime>("XDateInserted");105		StartSequenceExecutionState state = default(StartSequenceExecutionState);106		if (!System.Enum.TryParse<StartSequenceExecutionState>(m_Entity.GetValue<string>("ExecutionState"), ref state))107		{108			state = StartSequenceExecutionState.Created;109		}110		State = state;111		m_StartInfos = new ResetLazy<List<StartInfoLinkInstance>>(_LoadStartInfos, (LazyThreadSafetyMode)1);112		if (m_Entity.GetRaw("UID_DPRStartSequenceTemplate").ToString().Length == 0)113		{114			throw new ViException(1779025, Name);115		}116	}117118	private void _Save(IUnitOfWork unit)119	{120		//IL_0008: Unknown result type (might be due to invalid IL or missing references)121		if (unit == null)122		{123			throw new ArgumentNullException("unit");124		}125		IEntity entity = StartSequence.EnsureWritableEntity(m_Session, m_Entity);126		entity.PutValue("ExecutionState", State);127		entity.PutValue("ExecutionError", ExecutionError);128		m_Entity = entity;129		unit.Put(m_Entity);130	}131132	public void Delete()133	{134		if (m_Entity.IsLoaded)135		{136			IEntity entity = StartSequence.EnsureWritableEntity(m_Session, m_Entity);137			using (IUnitOfWork unitOfWork = m_Session.StartUnitOfWork())138			{139				entity.MarkForDeletion();140				unitOfWork.Put(entity);141				unitOfWork.Commit();142			}143			m_Entity = entity;144		}145	}146147	public void StartWork(string uidStartInfo, string jobReference)148	{149		StartInfoLinkInstance startInfoLinkInstance = Enumerable.FirstOrDefault<StartInfoLinkInstance>((System.Collections.Generic.IEnumerable<StartInfoLinkInstance>)m_StartInfos.Value, (Func<StartInfoLinkInstance, bool>)((StartInfoLinkInstance s) => s.StartInfo.Uid == uidStartInfo));150		if (startInfoLinkInstance == null)151		{152			throw new ViException(1779030, uidStartInfo, Name);153		}154		using IUnitOfWork unitOfWork = m_Session.StartUnitOfWork();155		startInfoLinkInstance.JobReference = jobReference;156		startInfoLinkInstance.Save(unitOfWork);157		unitOfWork.Commit();158	}159160	public void Start()161	{162		if (State == StartSequenceExecutionState.Running)163		{164			throw new ViException(1779026, Name);165		}166		try167		{168			using IUnitOfWork unitOfWork = m_Session.StartUnitOfWork();169			State = StartSequenceExecutionState.Running;170			ExecutionError = null;171			try172			{173				if (_ActivateNextLinks(null, unitOfWork))174				{175					State = StartSequenceExecutionState.Processed;176				}177			}178			catch179			{180				unitOfWork.Commit();181				throw;182			}183			_Save(unitOfWork);184			unitOfWork.Commit();185		}186		catch (System.Exception ex)187		{188			_HandleProcessingError(ex);189			throw;190		}191	}192193	public void Finished(string uidStartInfo, System.Exception exception = null)194	{195		switch (State)196		{197		case StartSequenceExecutionState.Created:198			throw new ViException(1779027, Name);199		case StartSequenceExecutionState.Error:200			return;201		case StartSequenceExecutionState.Processed:202			throw new ViException(1779028, Name);203		}204		_EnsureEntityLoaded();205		try206		{207			StartInfoLinkInstance startInfoLinkInstance = Enumerable.FirstOrDefault<StartInfoLinkInstance>((System.Collections.Generic.IEnumerable<StartInfoLinkInstance>)m_StartInfos.Value, (Func<StartInfoLinkInstance, bool>)((StartInfoLinkInstance s) => s.StartInfo.Uid == uidStartInfo));208			if (startInfoLinkInstance == null)209			{210				throw new ViException(1779030, uidStartInfo, Name);211			}212			using (IUnitOfWork unitOfWork = m_Session.StartUnitOfWork())213			{214				if (exception == null)215				{216					startInfoLinkInstance.State = StartSequenceExecutionState.Processed;217				}218				else219				{220					startInfoLinkInstance.State = StartSequenceExecutionState.Error;221					startInfoLinkInstance.ExecutionError = ViException.ErrorString(exception);222				}223				startInfoLinkInstance.Save(unitOfWork);224				unitOfWork.Commit();225			}226			if (exception != null && startInfoLinkInstance.BreakOnError)227			{228				throw new ViException(1779029, exception);229			}230			try231			{232				using IUnitOfWork unitOfWork2 = m_Session.StartUnitOfWork();233				try234				{235					if (_ActivateNextLinks(startInfoLinkInstance, unitOfWork2))236					{237						State = StartSequenceExecutionState.Processed;238					}239					_Save(unitOfWork2);240				}241				finally242				{243					unitOfWork2.Commit();244				}245			}246			catch (System.Exception baseObject)247			{248				if (Enumerable.Any<ChangedByAnotherUserException>(Enumerable.OfType<ChangedByAnotherUserException>((System.Collections.IEnumerable)baseObject.EnumerateChain((System.Exception e) => e.InnerException))))249				{250					Thread.Sleep(2000);251					Finished(uidStartInfo, exception);252				}253			}254		}255		catch (System.Exception ex)256		{257			_HandleProcessingError(ex);258			throw;259		}260	}261262	private void _HandleProcessingError(System.Exception ex)263	{264		State = StartSequenceExecutionState.Error;265		ExecutionError = ViException.ErrorString(ex);266		using IUnitOfWork unitOfWork = m_Session.StartUnitOfWork();267		_Save(unitOfWork);268		unitOfWork.Commit();269	}270271	private bool _ActivateNextLinks(StartInfoLinkInstance refLink, IUnitOfWork unit)272	{273		StartInfoLinkInstance[] array = ((!string.IsNullOrEmpty(refLink?.ExecutionGroup)) ? Enumerable.ToArray<StartInfoLinkInstance>(Enumerable.Where<StartInfoLinkInstance>((System.Collections.Generic.IEnumerable<StartInfoLinkInstance>)m_StartInfos.Value, (Func<StartInfoLinkInstance, bool>)((StartInfoLinkInstance i) => i.ExecutionGroup.EqualsOIC(refLink.ExecutionGroup)))) : null);274		if (array != null && array.Length > 1)275		{276			m_StartInfos.Reset();277			array = Enumerable.ToArray<StartInfoLinkInstance>(Enumerable.Where<StartInfoLinkInstance>((System.Collections.Generic.IEnumerable<StartInfoLinkInstance>)m_StartInfos.Value, (Func<StartInfoLinkInstance, bool>)((StartInfoLinkInstance i) => i.ExecutionGroup.EqualsOIC(refLink.ExecutionGroup))));278		}279		if (Enumerable.Any<StartInfoLinkInstance>(array.AvoidNull(), (Func<StartInfoLinkInstance, bool>)((StartInfoLinkInstance i) => i.State == StartSequenceExecutionState.Running)))280		{281			return false;282		}283		StartInfoLinkInstance[] array2 = ((refLink == null) ? ((System.Collections.Generic.IEnumerable<StartInfoLinkInstance>)m_StartInfos.Value).ToArraySmart() : Enumerable.SkipWhile<StartInfoLinkInstance>(Enumerable.SkipWhile<StartInfoLinkInstance>((System.Collections.Generic.IEnumerable<StartInfoLinkInstance>)m_StartInfos.Value, (Func<StartInfoLinkInstance, bool>)((StartInfoLinkInstance lnk) => lnk.Key != refLink.Key)), (Func<StartInfoLinkInstance, bool>)((StartInfoLinkInstance lnk) => !string.IsNullOrEmpty(lnk.ExecutionGroup) && lnk.ExecutionGroup.EqualsOIC(refLink.ExecutionGroup))).ToArraySmart());284		if (array2.Length == 0)285		{286			return true;287		}288		string exeGroup = array2[0].ExecutionGroup;289		array2 = ((!string.IsNullOrEmpty(exeGroup)) ? Enumerable.Where<StartInfoLinkInstance>((System.Collections.Generic.IEnumerable<StartInfoLinkInstance>)array2, (Func<StartInfoLinkInstance, bool>)((StartInfoLinkInstance l) => l.ExecutionGroup.EqualsOIC(exeGroup))).ToArraySmart() : new StartInfoLinkInstance[1] { Enumerable.First<StartInfoLinkInstance>((System.Collections.Generic.IEnumerable<StartInfoLinkInstance>)array2) });290		StartInfoLinkInstance[] array3 = array2;291		foreach (StartInfoLinkInstance link in array3)292		{293			_ActivateLink(link, unit);294		}295		return false;296	}297298	private void _ActivateLink(StartInfoLinkInstance link, IUnitOfWork unit)299	{300		try301		{302			link.State = StartSequenceExecutionState.Running;303			link.ExecutionError = null;304			link.Save(unit);305			unit.Generate(link.StartInfo.Entity, "Run", (IDictionary<string, object>)(object)new Dictionary<string, object>((IEqualityComparer<string>)(object)StringComparer.OrdinalIgnoreCase) { ["UIDStartSequence"] = Uid });306		}307		catch (System.Exception ex)308		{309			link.State = StartSequenceExecutionState.Error;310			link.ExecutionError = ViException.ErrorString(ex);311			link.Save(unit);312			throw new ViException(1779031, ex, link.StartInfo.ShellDisplay, link.StartInfo.Display);313		}314	}315316	private List<StartInfoLinkInstance> _LoadStartInfos()317	{318		return Enumerable.ToList<StartInfoLinkInstance>(Enumerable.Select<IEntity, StartInfoLinkInstance>((System.Collections.Generic.IEnumerable<IEntity>)m_Session.Source().GetCollection((from c in Query.From("DPRStartSequenceHasProjection")319			where c.Column("UID_DPRStartSequence").IsEqualTo(Uid)320			select c).OrderBy("SortOrder").SelectAll(), EntityCollectionLoadType.Bulk), (Func<IEntity, StartInfoLinkInstance>)([CompilerGenerated] (IEntity e) => new StartInfoLinkInstance(this, m_Session, e))));321	}322323	private void _EnsureEntityLoaded()324	{325		m_Entity = StartSequence.EnsureWritableEntity(m_Session, m_Entity);326	}327}328