Back to OIM Explorer

VI.Controls/VI.Controls.Data/MemberRelationDataStore.cs

Decompiler Source FileVI.Controls.MemberRelationDataStoreDecompiled Source

1 extracted method/event/call references in MemberRelationDataStore.

Source: F:\Claude\.tmp\oim-decompiled-full\1170_One_Identity_Manager_VI.Controls.dll\VI.Controls.Data\MemberRelationDataStore.cs

Source size: 16.665 characters

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

MemberRelationDataStore

DB/Dialog object references

OIM key/entity markers

ObjectKey

API/entity calls

GetValue CreateNew PutValue From Source CreateCol SqlFormatter StartUnitOfWork MarkForDeletion PutValue CallMethod

Registrations / handlers

None extracted.

Complete Source

C#471 lines
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