VI.Controls/VI.Controls.Data/MemberRelationDataStore.cs
Decompiler Source FileVI.Controls.MemberRelationDataStoreDecompiled Source
Interpretation
- Decompiled source file. Use method/event registrations and call-site extraction to connect back to DialogMethod, QBMEvent, and API layers.
Relations
- CallMethod: AssignDirect at line 403
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 MemberRelationDataStore; methods OnLoadDeferredOperationDictionary, OnSetState, OnSaveChanges, OnGetSettings, OnGetHistoryChangeInfos, OnGetOriginInformation; references DialogDeferredOperation, DynamicGroup, ESet; markers reads entity values, writes entity values, references DB/Dialog objects
Classes
MemberRelationDataStoreMethods
DB/Dialog object references
OIM key/entity markers
ObjectKeyAPI/entity calls
GetValue CreateNew PutValue From Source CreateCol SqlFormatter StartUnitOfWork MarkForDeletion PutValue CallMethodRegistrations / handlers
None extracted.
Complete Source
1using System;2using System.Collections;3using System.Collections.Generic;4using System.Linq;5using VI.Base;6using VI.Controls.Base;7using VI.DB;8using VI.DB.Entities;9using VI.DB.History;10using VI.DB.MetaData;11using VI.DB.Sync;12using VI.MVC.TimeTraceSupport;1314namespace VI.Controls.Data;1516public class MemberRelationDataStore : MemberRelationDataStoreBase17{18 private readonly IMemberRelation m_MemberRelation;1920 private readonly IColDef m_MembersColumn;2122 private readonly IColDef m_BaseColumn;2324 public override string RelationCaption25 {26 get27 {28 if (!string.IsNullOrEmpty(base.RelationCaption))29 {30 return base.RelationCaption;31 }32 ITableDef tableDef = m_MemberRelation.MembersRelation[0].ParentColumn.TableDef;33 return GetOrCreateContextSensitiveRelationCaption(tableDef.Tablename) ?? tableDef.DisplaySingular;34 }35 set36 {37 base.RelationCaption = value;38 }39 }4041 public override bool HasDeletionInformation => m_BaseColumn.TableDef.Columns.Contains("xmarkedfordeletion");4243 protected override string EffectiveMemberClause => m_MemberRelation.EffectiveMemberClause;4445 protected override string EffectiveNotMemberClause => m_MemberRelation.EffectiveNotMemberClause;4647 protected override SupportedObjectType SupportedObjectType48 {49 get50 {51 if (!base.IsHistoryMode)52 {53 return base.SupportedObjectType;54 }55 return SupportedObjectType.Single;56 }57 }5859 protected override string MNTableName => m_MemberRelation.BaseRelation.ChildTable.Tablename;6061 protected override bool RelationNeedsSavedBaseObject => true;6263 public MemberRelationDataStore(IConnection connection, IRelationImageStore imageStore, IListLimitFilter listLimitFilter, IMemberRelation memberRelation, HierarchyHistoryLoadOption historyLoadOption = null)64 : base(connection, memberRelation?.MembersRelation.ParentTable.Tablename ?? "", imageStore, listLimitFilter, historyLoadOption)65 {66 //IL_0038: Unknown result type (might be due to invalid IL or missing references)67 m_MemberRelation = memberRelation ?? throw new ArgumentNullException("memberRelation");68 m_MembersColumn = m_MemberRelation.MembersRelation[0].ChildColumn;69 m_BaseColumn = m_MemberRelation.BaseRelation[0].ChildColumn;70 }7172 protected override void OnLoadDeferredOperationDictionary(IMetaTable mnTableDef, string sourcePkColumn, string sourcePk)73 {74 if (!mnTableDef.IsMNTable)75 {76 return;77 }78 Query query = Query.From("DialogDeferredOperation").WhereLimitedSql("Ctrl_MR_DeferredMemberOperations").Select("ObjectKey", "Operation", "TargetDate")79 .WithParameter("MNTableName")80 .AsString()81 .HasValue(mnTableDef.Tablename)82 .WithParameter("SourcePk")83 .AsString()84 .HasValue(sourcePk);85 System.Collections.Generic.IEnumerator<IEntity> enumerator = ((System.Collections.Generic.IEnumerable<IEntity>)base.Connection.Session.Source().GetCollection(query, EntityCollectionLoadType.Slim)).GetEnumerator();86 try87 {88 while (((System.Collections.IEnumerator)enumerator).MoveNext())89 {90 IEntity current = enumerator.Current;91 string text = Enumerable.FirstOrDefault<string>((System.Collections.Generic.IEnumerable<string>)new DbObjectKey(current.GetValue<string>("ObjectKey")).Keys, (Func<string, bool>)((string k) => !string.Equals(k, sourcePk, (StringComparison)5)));92 if (text != null)93 {94 base.DeferredOperationsDict[text] = current;95 }96 }97 }98 finally99 {100 ((System.IDisposable)enumerator)?.Dispose();101 }102 }103104 protected override void OnSetState()105 {106 //IL_03d0: Unknown result type (might be due to invalid IL or missing references)107 //IL_03d5: Unknown result type (might be due to invalid IL or missing references)108 //IL_03de: Unknown result type (might be due to invalid IL or missing references)109 //IL_03e3: Unknown result type (might be due to invalid IL or missing references)110 if (base.DbObject == null)111 {112 return;113 }114 List<string> val = new List<string>();115 System.Collections.Generic.IEnumerator<ISingleDbObject> enumerator = GetDbObjects().GetEnumerator();116 try117 {118 while (((System.Collections.IEnumerator)enumerator).MoveNext())119 {120 ISingleDbObject current = enumerator.Current;121 val.Add(current[((System.Collections.Generic.IReadOnlyList<IColDef>)current.TableDef.PrimaryKeyColumns)[0].Columnname].New.String);122 }123 }124 finally125 {126 ((System.IDisposable)enumerator)?.Dispose();127 }128 string[] array = val.ToArray();129 ISqlFormatter sqlFormatter = base.DbObject.Connection.SqlFormatter;130 Dictionary<string, MNLoadMemberInfo> val2 = new Dictionary<string, MNLoadMemberInfo>((IEqualityComparer<string>)(object)StringComparer.OrdinalIgnoreCase);131 IColDbObject colDbObject2;132 if (base.IsHistoryMode)133 {134 IColDbObject colDbObject = new HistoryColDbObject(base.Connection, m_BaseColumn.TableDef.Tablename, DbVal.ToUniversalTime(base.HistoryLoadOption.Date, TimeZoneInfo.Local));135 colDbObject2 = colDbObject;136 }137 else138 {139 colDbObject2 = base.Connection.CreateCol(m_BaseColumn.TableDef.Tablename);140 }141 IColDbObject colDbObject3 = colDbObject2;142 bool flag = colDbObject3.Prototype.Columns.Contains("xorigin");143 bool flag2 = colDbObject3.Prototype.Columns.Contains("xisineffect");144 bool flag3 = colDbObject3.Prototype.Columns.Contains("xmarkedfordeletion");145 if (base.IsHistoryMode)146 {147 colDbObject3.Prototype[m_BaseColumn.Columnname].NewValue = array[0];148 }149 else150 {151 string text;152 if (array.Length <= 1)153 {154 text = sqlFormatter.Comparison(m_BaseColumn.Columnname, array[0], ValType.String, CompareOperator.Equal, FormatterOptions.NonUnicodeLiterals);155 }156 else157 {158 string columnname = m_BaseColumn.Columnname;159 object[] values = array;160 text = sqlFormatter.InClause(columnname, ValType.String, values);161 }162 string text2 = text;163 colDbObject3.Prototype.WhereClause = sqlFormatter.AndRelation(text2);164 }165 colDbObject3.Prototype[m_BaseColumn.Columnname].IsDisplayItem = true;166 colDbObject3.Prototype[m_MembersColumn.Columnname].IsDisplayItem = true;167 if (flag)168 {169 colDbObject3.Prototype["xorigin"].IsDisplayItem = true;170 }171 if (flag2)172 {173 colDbObject3.Prototype["xisineffect"].IsDisplayItem = true;174 }175 if (flag3)176 {177 colDbObject3.Prototype["xmarkedfordeletion"].IsDisplayItem = true;178 }179 colDbObject3.Load(CollectionLoadType.Slim);180 if (base.IsHistoryMode)181 {182 LoadHistoryData(colDbObject3 as HistoryColDbObject, base.HistoryLoadOption);183 }184 if (((System.Collections.Generic.IReadOnlyCollection<IColElem>)colDbObject3).Count == 0)185 {186 return;187 }188 int column = colDbObject3.ColumnIndex(m_MembersColumn.Columnname);189 System.Collections.Generic.IEnumerator<IColElem> enumerator2 = ((System.Collections.Generic.IEnumerable<IColElem>)colDbObject3).GetEnumerator();190 try191 {192 MNLoadMemberInfo mNLoadMemberInfo = default(MNLoadMemberInfo);193 while (((System.Collections.IEnumerator)enumerator2).MoveNext())194 {195 IColElem current2 = enumerator2.Current;196 string text3 = current2[column].ToString();197 if (!val2.TryGetValue(text3, ref mNLoadMemberInfo))198 {199 mNLoadMemberInfo = (val2[text3] = new MNLoadMemberInfo());200 }201 int num = ((!flag) ? 1 : DbVal.ConvertTo<int>(current2["xorigin"]));202 if (num == 0 && base.IsHistoryMode)203 {204 num = 1;205 }206 if ((num & 1) > 0)207 {208 mNLoadMemberInfo.DirectAssignmentCounter++;209 }210 if ((num & 2) > 0)211 {212 mNLoadMemberInfo.IndirectAssignmentCounter++;213 }214 if ((num & 4) > 0)215 {216 mNLoadMemberInfo.DynamicGroupAssignmentCounter++;217 }218 if (base.IsHistoryMode || !flag2 || DbVal.ConvertTo<int>(current2["xisineffect"]) > 0)219 {220 mNLoadMemberInfo.EffectiveAssignmentCounter++;221 }222 if (flag3)223 {224 int num2 = DbVal.ConvertTo<int>(current2["xmarkedfordeletion"]);225 if ((num2 & 2) > 0)226 {227 mNLoadMemberInfo.OutstandingCounter++;228 }229 if ((num2 & 1) > 0)230 {231 mNLoadMemberInfo.MarkedForDeletionCounter++;232 }233 }234 }235 }236 finally237 {238 ((System.IDisposable)enumerator2)?.Dispose();239 }240 int num3 = array.Length;241 Enumerator<string, MNLoadMemberInfo> enumerator3 = val2.GetEnumerator();242 try243 {244 while (enumerator3.MoveNext())245 {246 KeyValuePair<string, MNLoadMemberInfo> current3 = enumerator3.Current;247 DataEntry dataEntry = base.BaseDictionary[current3.Key];248 if (dataEntry != null)249 {250 MNLoadMemberInfo value = current3.Value;251 int directAssignmentCounter = value.DirectAssignmentCounter;252 if (directAssignmentCounter == num3)253 {254 dataEntry.SetState(2, DataEntryState.Set);255 }256 else257 {258 dataEntry.SetState(2, (directAssignmentCounter > 0) ? DataEntryState.TriState : DataEntryState.None);259 }260 directAssignmentCounter = value.IndirectAssignmentCounter;261 if (directAssignmentCounter == num3)262 {263 dataEntry.SetState(4, DataEntryState.Set);264 }265 else266 {267 dataEntry.SetState(4, (directAssignmentCounter > 0) ? DataEntryState.TriState : DataEntryState.None);268 }269 directAssignmentCounter = value.DynamicGroupAssignmentCounter;270 if (directAssignmentCounter == num3)271 {272 dataEntry.SetState(8, DataEntryState.Set);273 }274 else275 {276 dataEntry.SetState(8, (directAssignmentCounter > 0) ? DataEntryState.TriState : DataEntryState.None);277 }278 directAssignmentCounter = value.EffectiveAssignmentCounter;279 if (directAssignmentCounter == num3)280 {281 dataEntry.SetState(16, DataEntryState.Set);282 }283 else284 {285 dataEntry.SetState(16, (directAssignmentCounter > 0) ? DataEntryState.TriState : DataEntryState.None);286 }287 directAssignmentCounter = value.OutstandingCounter;288 if (directAssignmentCounter == num3)289 {290 dataEntry.SetState(32, DataEntryState.Set);291 }292 else293 {294 dataEntry.SetState(32, (directAssignmentCounter > 0) ? DataEntryState.TriState : DataEntryState.None);295 }296 directAssignmentCounter = value.MarkedForDeletionCounter;297 if (directAssignmentCounter == num3)298 {299 dataEntry.SetState(64, DataEntryState.Set);300 }301 else302 {303 dataEntry.SetState(64, (directAssignmentCounter > 0) ? DataEntryState.TriState : DataEntryState.None);304 }305 if (value.OutstandingCounter > 0 || value.MarkedForDeletionCounter > 0)306 {307 dataEntry.Enabled = false;308 }309 }310 }311 }312 finally313 {314 ((System.IDisposable)enumerator3/*cast due to .constrained prefix*/).Dispose();315 }316 if (!base.HandleCutNode)317 {318 return;319 }320 System.Collections.Generic.IEnumerator<DataEntry> enumerator4 = base.BaseDictionary.GetEnumerator();321 try322 {323 while (((System.Collections.IEnumerator)enumerator4).MoveNext())324 {325 DataEntry current4 = enumerator4.Current;326 if ((bool)current4.GetRaw("IsCutNode", DataEntryValueKind.Raw))327 {328 current4.SetState(1, DataEntryState.Set);329 }330 }331 }332 finally333 {334 ((System.IDisposable)enumerator4)?.Dispose();335 }336 }337338 protected override void OnSaveChanges(DataEntry[] entriesToSave, IProcessContext processContext)339 {340 ITableDef childTable = m_MemberRelation.BaseRelation.ChildTable;341 ISession session = base.Connection.Session;342 ISqlFormatter sqlFormatter = session.SqlFormatter();343 using IUnitOfWork unitOfWork = session.StartUnitOfWork(processContext?.ID);344 foreach (DataEntry dataEntry in entriesToSave)345 {346 DataEntryState curMemberState = MemberRelationDataStoreBase.GetCurMemberState(dataEntry);347 bool flag = false;348 switch (dataEntry.GetState(2))349 {350 case DataEntryState.None:351 if (curMemberState != DataEntryState.Set)352 {353 continue;354 }355 break;356 case DataEntryState.Set:357 if (curMemberState != DataEntryState.None)358 {359 continue;360 }361 flag = true;362 break;363 case DataEntryState.TriState:364 if (curMemberState != DataEntryState.None)365 {366 if (curMemberState != DataEntryState.Set)367 {368 continue;369 }370 }371 else372 {373 flag = true;374 }375 break;376 }377 System.Collections.Generic.IEnumerator<ISingleDbObject> enumerator = GetDbObjects().GetEnumerator();378 try379 {380 while (((System.Collections.IEnumerator)enumerator).MoveNext())381 {382 ISingleDbObject current = enumerator.Current;383 IEntityCollection collection = session.Source().GetCollection(Query.From(childTable.Tablename).Where(sqlFormatter.AndRelation(sqlFormatter.UidComparison(m_BaseColumn.Columnname, current[((System.Collections.Generic.IReadOnlyList<IColDef>)current.TableDef.PrimaryKeyColumns)[0].Columnname].NewValue.ToString()), sqlFormatter.UidComparison(m_MembersColumn.Columnname, dataEntry.Key))).SelectNone(), EntityCollectionLoadType.Bulk);384 IEntity entity = null;385 if (flag && ((System.Collections.Generic.IReadOnlyCollection<IEntity>)collection).Count == 1)386 {387 entity = ((System.Collections.Generic.IReadOnlyList<IEntity>)collection)[0].Create(session);388 entity.MarkForDeletion();389 }390 else if (!flag)391 {392 if (((System.Collections.Generic.IReadOnlyCollection<IEntity>)collection).Count == 0)393 {394 entity = session.Source().CreateNew(childTable.Tablename);395 entity.PutValue(m_BaseColumn.Columnname, current[((System.Collections.Generic.IReadOnlyList<IColDef>)current.TableDef.PrimaryKeyColumns)[0].Columnname].NewValue);396 entity.PutValue(m_MembersColumn.Columnname, dataEntry.Key);397 }398 else399 {400 entity = ((System.Collections.Generic.IReadOnlyList<IEntity>)collection)[0].Create(session);401 if (childTable.Columns.IsAvailable("xorigin"))402 {403 entity.CallMethod("AssignDirect");404 }405 }406 }407 if (entity != null)408 {409 unitOfWork.Put(entity);410 }411 }412 }413 finally414 {415 ((System.IDisposable)enumerator)?.Dispose();416 }417 if (flag)418 {419 dataEntry.SetState(18, DataEntryState.None, resetChangeLevel: true);420 }421 else422 {423 dataEntry.SetState(2, DataEntryState.Set, resetChangeLevel: true);424 }425 }426 unitOfWork.Commit();427 }428429 protected override void OnGetSettings(System.Collections.Generic.IList<KeyValuePair<string, string>> settings)430 {431 //IL_0020: Unknown result type (might be due to invalid IL or missing references)432 //IL_004f: Unknown result type (might be due to invalid IL or missing references)433 //IL_0074: Unknown result type (might be due to invalid IL or missing references)434 ((System.Collections.Generic.ICollection<KeyValuePair<string, string>>)settings).Add(new KeyValuePair<string, string>(LanguageManager.Instance["Ctrl_RelationControl_DefMode_MNTable"], m_MembersColumn.TableDef.Tablename));435 ((System.Collections.Generic.ICollection<KeyValuePair<string, string>>)settings).Add(new KeyValuePair<string, string>(LanguageManager.Instance["Ctrl_RelationControl_DefMode_MNMemberTable"], m_MemberRelation.MembersRelation.ParentTable.Tablename));436 ((System.Collections.Generic.ICollection<KeyValuePair<string, string>>)settings).Add(new KeyValuePair<string, string>(LanguageManager.Instance["Ctrl_RelationControl_DefMode_MNMemberColumn"], m_MembersColumn.Columnname));437 }438439 protected override DocumentHistoryInfo[] OnGetHistoryChangeInfos(System.DateTime startTime, System.DateTime endTime)440 {441 if (base.DbObject == null)442 {443 return null;444 }445 string newValue = base.DbObject[((System.Collections.Generic.IReadOnlyList<IColDef>)base.DbObject.TableDef.PrimaryKeyColumns)[0].Columnname].New.String;446 HistoryColDbObject historyColDbObject = new HistoryColDbObject(base.Connection, m_MemberRelation.BaseRelation.ChildTable.Tablename, startTime);447 historyColDbObject.Prototype[m_BaseColumn.Columnname].NewValue = newValue;448 historyColDbObject.Load();449 List<DocumentHistoryInfo> val = new List<DocumentHistoryInfo>();450 System.Collections.Generic.IEnumerator<IObjectChangeInfo> enumerator = historyColDbObject.GetChangeInfos().GetEnumerator();451 try452 {453 while (((System.Collections.IEnumerator)enumerator).MoveNext())454 {455 IObjectChangeInfo current = enumerator.Current;456 val.Add((DocumentHistoryInfo)new ColDbObjectDocumentHistoryInfo(historyColDbObject, current));457 }458 }459 finally460 {461 ((System.IDisposable)enumerator)?.Dispose();462 }463 return val.ToArray();464 }465466 protected override OriginInformation OnGetOriginInformation()467 {468 return new OriginInformation(m_BaseColumn.MetaColumn.Table);469 }470}471