VI.Projector.Database/VI.Projector.Database/StartSequenceInstance.cs
Decompiler Source FileVI.Projector.Database.StartSequenceInstanceSandbox DB
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
StartSequenceInstanceMethods
DB/Dialog object references
OIM key/entity markers
UID_DPRStartSequence UID_DPRStartSequenceTemplateAPI/entity calls
GetValue PutValue PutValue MarkForDeletion FromRegistrations / handlers
None extracted.
Complete Source
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