public void OnDataViewForTemporaryViewShown(ChildRelationshipInfo childRelationshipInfo) { if (DataViewForTemporaryViewShown != null) { DataViewForTemporaryViewShown(this, childRelationshipInfo); } }
/// <summary> /// /////////////////////////مشترک /// </summary> /// <param name="relationshipID"></param> /// <param name="editEntityArea"></param> /// <param name="parentRelationData"></param> /// <returns></returns> public ChildRelationshipInfo SerachDataFromParentRelationForChildDataView(RelationshipDTO relationship, I_EditEntityAreaOneData sourceEditEntityArea, I_EditEntityArea targetEditEntityArea, DP_DataRepository parentRelationData) { var requester = AgentUICoreMediator.GetAgentUICoreMediator.GetRequester(); ChildRelationshipInfo childRelationshipInfo = null; childRelationshipInfo = parentRelationData.ChildRelationshipInfos.FirstOrDefault(x => x.Relationship.ID == relationship.ID); if (childRelationshipInfo == null) { childRelationshipInfo = parentRelationData.AddChildRelationshipInfo(relationship); } else { throw new Exception("Asd"); } //سکوریتی داده اعمال میشود var searchDataItem = relationshipManager.GetSecondSideSearchDataItemByRelationship(parentRelationData, relationship.ID); if (searchDataItem != null) { // DR_SearchEditRequest request = new DR_SearchEditRequest(requester, searchDataItem, targetEditEntityArea.AreaInitializer.SecurityReadOnly, true); DR_SearchEditRequest request = new DR_SearchEditRequest(requester, searchDataItem); var childFullData = AgentUICoreMediator.GetAgentUICoreMediator.requestRegistration.SendSearchEditRequest(request).ResultDataItems; var countRequest = new DR_SearchCountRequest(requester); countRequest.SearchDataItems = searchDataItem; countRequest.Requester.SkipSecurity = true; var count = AgentUICoreMediator.GetAgentUICoreMediator.requestRegistration.SendSearchCountRequest(countRequest); bool secutrityImposed = false; if (count.ResultCount != childFullData.Count) { secutrityImposed = true; } if (!secutrityImposed) { foreach (var data in childFullData) { data.IsDBRelationship = true; data.DataView = GetDataView(data); childRelationshipInfo.AddDataToChildRelationshipInfo(data, true); } } else { childRelationshipInfo.SecurityIssue = true; } } return(childRelationshipInfo); //foreach (var item in childFullData) // searchedData.Add(new Tuple<DP_DataRepository, DP_DataView>(item, null)); //return AddEditSearchData(searchedData, editEntityArea); }
private void AddTreeItem(ItemCollection items, ChildRelationshipInfo child) { RadTreeViewItem node = new RadTreeViewItem(); node.Header = child.Relationship.Alias; items.Add(node); foreach (var data in child.RelatedData) { AddTreeItem(node.Items, data); } }
private void ValidateRelationshipColumn(DP_DataRepository dataItem, ChildRelationshipInfo childRelationshipInfo, RelationshipColumnControl relationshipControl) { if (!childRelationshipInfo.IsHidden) { if (relationshipControl.Relationship.IsOtherSideMandatory == true) { if (!childRelationshipInfo.RealData.Any()) { AddColumnControlValidationMessage(relationshipControl, "مقدار دهی این رابطه اجباری می باشد", dataItem); } } } //یک ولیدشن دیگه انجام شود.اینکه اگر رابطه فیلتر داشت و یک بار جستجو با داده انتخاب شده وفیلتر انجام شود تا جلوی رکوردهای غیر مجاز گرفته شود.مثل اداره مربوطه در تشکیل پرونده که آیتم سورس آنها تغییر میکند }
private List <DP_DataRepository> GetParentDataItems(ChildRelationshipInfo childRelationshipInfo, List <DP_DataRepository> items = null) { if (items == null) { items = new List <DP_DataRepository>(); } if (childRelationshipInfo != null) { items.Add(childRelationshipInfo.SourceData); return(GetParentDataItems(childRelationshipInfo.SourceData.ParantChildRelationshipInfo, items)); } else { return(items); } }
private void SetFKProperties(ChildRelationshipInfo parentChildRelationshipInfo = null) { List <ProxyLibrary.DP_DataRepository> sourceList = null; if (parentChildRelationshipInfo == null) { sourceList = EditArea.GetDataList().ToList(); } else { sourceList = parentChildRelationshipInfo.RelatedData.ToList(); } foreach (var dataItem in sourceList) { foreach (var childRel in dataItem.ChildRelationshipInfos.Where(x => x.Relationship.MastertTypeEnum == Enum_MasterRelationshipType.FromForeignToPrimary)) { foreach (var fkprop in childRel.Relationship.RelationshipColumns.Select(x => x.FirstSideColumnID)) { var prop = dataItem.GetProperty(fkprop); if (prop != null) { prop.ISFK = true; } } } if (parentChildRelationshipInfo != null && parentChildRelationshipInfo.Relationship.MastertTypeEnum == Enum_MasterRelationshipType.FromPrimartyToForeign) { foreach (var fkprop in parentChildRelationshipInfo.Relationship.RelationshipColumns.Select(x => x.SecondSideColumnID)) { var prop = dataItem.GetProperty(fkprop); if (prop != null) { prop.ISFK = true; } } } foreach (var child in dataItem.ChildRelationshipInfos) { SetFKProperties(child); } } }
private QueryItem SetSortedTree(DR_Requester requester, List <QueryItem> result, DP_DataRepository item, QueryItem parentQueryItem = null, ChildRelationshipInfo parentChildRelationshipInfo = null) { List <EntityInstanceProperty> editingProperties = new List <EntityInstanceProperty>(); foreach (var child in item.ChildRelationshipInfos.Where(x => x.Relationship.MastertTypeEnum == Enum_MasterRelationshipType.FromForeignToPrimary)) { List <EntityInstanceProperty> foreignKeyProperties = new List <EntityInstanceProperty>(); //foreach (var relCol in child.Relationship.RelationshipColumns) //{ // var prop = item.GetProperty(relCol.FirstSideColumnID); // foreignKeyProperties.Add(prop); //} bool isSelfTable = false; if (child.Relationship.RelationshipColumns.All(x => x.FirstSideColumnID == x.SecondSideColumnID)) { isSelfTable = true; //foreach (var prop in item.GetProperties()) // childItem.AddProperty(prop.Column, prop.Value); } if (child.RelatedData.Any()) { foreach (var pkData in child.RelatedData) { var pkQueryItem = SetSortedTree(requester, result, pkData); //int pkIdentityColumnID = 0; //if (pkData.IsNewItem) // if (pkData.KeyProperties.Any(x => x.IsIdentity)) // { // pkIdentityColumnID = pkData.KeyProperties.First(x => x.IsIdentity).ColumnID; // } // queryItem.FKSources.Add(new FKToPK(child.Relationship, pkQueryItem, pkIdentityColumnID, isSelfTable)); if (child.RelationshipIsChangedForUpdate) { foreach (var relCol in child.Relationship.RelationshipColumns) { var fkprop = item.GetProperty(relCol.FirstSideColumnID); if (fkprop == null) { fkprop = new EntityInstanceProperty(relCol.FirstSideColumn); } var pkprop = pkData.GetProperty(relCol.SecondSideColumnID); if (pkData.IsNewItem && (pkprop.Column.IsIdentity || pkprop.PKIdentityColumn != null)) { fkprop.Value = "{" + fkprop.ColumnID + "}"; fkprop.PKIdentityColumn = pkprop; } else { fkprop.Value = pkData.GetProperty(relCol.SecondSideColumnID).Value; } //fkprop.IsHidden = child.IsHidden; foreignKeyProperties.Add(fkprop); } } } } else { if (item.IsNewItem || (child.RelationshipIsChangedForUpdate && child.RemovedDataForUpdate.Any())) { foreach (var relCol in child.Relationship.RelationshipColumns) { var fkprop = item.GetProperty(relCol.FirstSideColumnID); if (fkprop == null) { fkprop = new EntityInstanceProperty(relCol.FirstSideColumn); } fkprop.Value = null; //prop.IsHidden = child.IsHidden; foreignKeyProperties.Add(fkprop); } } } foreach (var fkProp in foreignKeyProperties) { fkProp.HasForeignKeyData = true; editingProperties.Add(fkProp); } } if (parentChildRelationshipInfo != null && parentChildRelationshipInfo.Relationship.MastertTypeEnum == Enum_MasterRelationshipType.FromPrimartyToForeign) { bool isSelfTable = false; if (parentChildRelationshipInfo.Relationship.RelationshipColumns.All(x => x.FirstSideColumnID == x.SecondSideColumnID)) { isSelfTable = true; //foreach (var prop in item.GetProperties()) // childItem.AddProperty(prop.Column, prop.Value); } //int pkIdentityColumnID = 0; //if (parentItem.IsNewItem) // if (parentItem.KeyProperties.Any(x => x.IsIdentity)) // { // pkIdentityColumnID = parentItem.KeyProperties.First(x => x.IsIdentity).ColumnID; // } //parentQueryItem همون طرف pk هست //var relationship = bizRelationship.GetRelationship(parentChildRelationshipInfo.Relationship.PairRelationshipID); //queryItem.FKSources.Add(new FKToPK(relationship, parentQueryItem, pkIdentityColumnID, isSelfTable)); if (parentChildRelationshipInfo.RelationshipIsChangedForUpdate && item.IsEdited) //اینجا edited اضافه شد چون ممکنه یک به چند باشه و فقط یک داده فرزند اضافه شده باشد { foreach (var relCol in parentChildRelationshipInfo.Relationship.RelationshipColumns) { var fkprop = item.GetProperty(relCol.SecondSideColumnID); if (fkprop == null) { fkprop = new EntityInstanceProperty(relCol.SecondSideColumn); } var pkprop = parentQueryItem.DataItem.GetProperty(relCol.FirstSideColumnID); if (parentQueryItem.DataItem.IsNewItem && (pkprop.Column.IsIdentity || pkprop.PKIdentityColumn != null)) { fkprop.Value = "{" + fkprop.ColumnID + "}"; fkprop.PKIdentityColumn = pkprop; } else { fkprop.Value = pkprop.Value; } fkprop.HasForeignKeyData = true; //fkprop.IsHidden = parentChildRelationshipInfo.IsHidden; editingProperties.Add(fkprop); } } } QueryItem queryItem = new QueryItem(GetTableDrivedDTO(requester, item.TargetEntityID), item.IsNewItem ? Enum_QueryItemType.Insert : Enum_QueryItemType.Update, editingProperties, item); result.Add(queryItem); foreach (var child in item.ChildRelationshipInfos.Where(x => x.Relationship.MastertTypeEnum == Enum_MasterRelationshipType.FromPrimartyToForeign)) { foreach (var childItem in child.RelatedData) { SetSortedTree(requester, result, childItem, queryItem, child); } } return(queryItem); }
private List <DP_DataRepository> GetRelatedDataItems(DP_DataRepository dataItem, RelationshipDTO relationship, List <EntityInstanceProperty> relationshipProperties) { List <DP_DataRepository> result = new List <DP_DataRepository>(); var childRelationshipInfo = dataItem.ChildRelationshipInfos.FirstOrDefault(x => x.Relationship.ID == relationship.ID); if (childRelationshipInfo != null) { result = childRelationshipInfo.RelatedData.ToList(); } else { bool gotFromParant = false; if (dataItem.ParantChildRelationshipInfo != null) { //اگر داده پرنت بصورت بازگشتی صدا زده شده باشد از پایگاه داده نمی خواند و سعی میکند از همان داده پرنت هر چه که هست استفاده کند if (dataItem.ParantChildRelationshipInfo.Relationship.TypeEnum != Enum_RelationshipType.ManyToOne) { if (dataItem.ParantChildRelationshipInfo.Relationship.ID == relationship.PairRelationshipID) { result.Add(dataItem.ParantChildRelationshipInfo.SourceData); gotFromParant = true; } } } if (!gotFromParant) { result = new List <DP_DataRepository>(); if (!relationshipProperties.Any(x => x.Value == null || string.IsNullOrEmpty(x.Value.ToString()))) { SearchRequestManager searchProcessor = new SearchRequestManager(); DP_SearchRepository searchItem = new DP_SearchRepository(relationship.EntityID2); foreach (var col in relationshipProperties) { searchItem.Phrases.Add(new SearchProperty() { ColumnID = col.ColumnID, Value = col.Value }); } //سکوریتی داده اعمال میشود DR_SearchFullDataRequest request = new DR_SearchFullDataRequest(Requester, searchItem); var searchResult = searchProcessor.Process(request); if (searchResult.Result == Enum_DR_ResultType.SeccessfullyDone) { result = searchResult.ResultDataItems; // searchProcessor.GetDataItemsByListOFSearchProperties(Requester, searchDataItem).FirstOrDefault(); } else if (searchResult.Result == Enum_DR_ResultType.ExceptionThrown) { throw (new Exception(searchResult.Message)); } //result = searchProcessor.GetDataItemsByListOFSearchProperties(Requester, searchItem); //nullدرست شود childRelationshipInfo = new ChildRelationshipInfo(); childRelationshipInfo.SourceData = dataItem; childRelationshipInfo.Relationship = relationship; foreach (var item in result) { childRelationshipInfo.RelatedData.Add(item); } } } } return(result); }
//صدا زده میشود RelationData تنها بوسیله ShowData برای نمایش داده های اضافه شده در آن صدا زده میشود.در مابقی موارد ShowData که AddData فقط یکجا مشخص میشود و آنهم در specificDate public override bool ShowDataInDataView(DP_DataRepository specificDate) { if (!specificDate.IsFullData) { throw new Exception("asdasd"); } foreach (var propertyControl in SimpleColumnControls) { var property = specificDate.GetProperty(propertyControl.Column.ID); if (property != null) { //////ShowTypePropertyControlValue(specificDate, propertyControl, property.Value); //if (propertyControl.Column.ColumnValueRange != null && propertyControl.Column.ColumnValueRange.Details.Any()) //{ // var columnKeyValue = propertyControl.Column.ColumnValueRange; // CheckItemsSourceAndPropertyValue(propertyControl, specificDate); //} SetBinding(specificDate, propertyControl, property); } else { //???? } } bool result = true; //جدید--دقت شود که اگر نمایش مستقیم نیست داخل فرم رابطه ای نباید همه کنترلها مقداردهی شوند foreach (var relationshipControl in RelationshipColumnControls) { bool relationshipFirstSideHasValue = relationshipControl.Relationship.RelationshipColumns.Any() && relationshipControl.Relationship.RelationshipColumns.All(x => specificDate.GetProperties().Any(y => !AgentHelper.ValueIsEmpty(y) && y.ColumnID == x.FirstSideColumnID)); //relationshipControl.EditNdTypeArea.AreaInitializer.SourceRelationColumnControl.RelatedData = specificDate; //اینجا یکارایی بشه دسترسی موقت bool childLoadedBefore = specificDate.ChildRelationshipInfos.Any(x => x.Relationship.ID == relationshipControl.Relationship.ID); ChildRelationshipInfo childData = null; if (childLoadedBefore) { childData = specificDate.ChildRelationshipInfos.First(x => x.Relationship.ID == relationshipControl.Relationship.ID); } else { if (!relationshipFirstSideHasValue) { childData = specificDate.AddChildRelationshipInfo(relationshipControl.Relationship); } else { bool childIsDataView = (relationshipControl.EditNdTypeArea.AreaInitializer.IntracionMode == IntracionMode.CreateDirect || relationshipControl.EditNdTypeArea.AreaInitializer.IntracionMode == IntracionMode.CreateSelectDirect); if (childIsDataView) { childData = AreaInitializer.EditAreaDataManager.SerachDataFromParentRelationForChildDataView(relationshipControl.Relationship, this, relationshipControl.EditNdTypeArea, specificDate); } else { childData = AreaInitializer.EditAreaDataManager.SerachDataFromParentRelationForChildTempView(relationshipControl.Relationship, this, relationshipControl.EditNdTypeArea, specificDate); } } } if (childData.SecurityIssue == false) { // if (relationshipControl.EditNdTypeArea.AreaInitializer.IntracionMode == IntracionMode.CreateInDirect || //relationshipControl.EditNdTypeArea.AreaInitializer.IntracionMode == IntracionMode.CreateSelectInDirect) // { // if (relationshipControl.EditNdTypeArea.TemporaryDisplayView != null) // relationshipControl.EditNdTypeArea.TemporaryDisplayView.DisableEnable(TemporaryLinkType.DataView, true); // if (relationshipControl.EditNdTypeArea.TemporaryDisplayView != null) // { // if (relationshipControl.EditNdTypeArea.SecurityReadOnlyByParent|| relationshipControl.EditNdTypeArea.AreaInitializer.SecurityReadOnly ) // { // if (!childData.RelatedData.Any()) // { // //اگر مستقیم بود چی..اصن نباید دیتای دیفالت تولید بشه .درست شود // relationshipControl.EditNdTypeArea.TemporaryDisplayView.DisableEnable(TemporaryLinkType.DataView, false); // } // } // } // } var childResult = relationshipControl.EditNdTypeArea.SetChildRelationshipInfoAndShow(childData); if (!childResult) { result = false; } } else { result = false; } } if (result) { OnDataItemShown(new EditAreaDataItemLoadedArg() { DataItem = specificDate, InEditMode = true }); } // CheckRelationshipReadonlyEnablity(); DecideDataSectionEnablity(); return(result); //else }
//بعدا بررسی شود private bool InternalShowDataInDataView(DP_DataRepository specificDate) { if (!specificDate.IsFullData) { throw new Exception("asdasd"); } foreach (var propertyControl in SimpleColumnControls) { var property = specificDate.GetProperty(propertyControl.Column.ID); if (property != null) { //if (AreaInitializer.IntracionMode == IntracionMode.Create // || AreaInitializer.IntracionMode == IntracionMode.CreateSelect) //{ //if (propertyControl.Column.ColumnValueRange != null && propertyControl.Column.ColumnValueRange.Details.Any()) //{ // var columnKeyValue = propertyControl.Column.ColumnValueRange; // if (!string.IsNullOrEmpty(property.Value)) // { // if (columnKeyValue.ValueFromTitleOrValue) // { // if (!columnKeyValue.Details.Any(x => x.KeyTitle == property.Value)) // property.Value = ""; // } // else // { // if (!columnKeyValue.Details.Any(x => x.Value == property.Value)) // property.Value = ""; // } // } //} SetBinding(specificDate, propertyControl, property); //ShowTypePropertyControlValue(specificDate, propertyControl, property.Value); //} } else { //???? } } bool result = true; foreach (var relationshipControl in RelationshipColumnControls) { bool relationshipFirstSideHasValue = relationshipControl.Relationship.RelationshipColumns.Any() && relationshipControl.Relationship.RelationshipColumns.All(x => specificDate.GetProperties().Any(y => y.Value != null && !string.IsNullOrEmpty(y.Value.ToString()) && y.ColumnID == x.FirstSideColumnID)); bool childLoadedBefore = specificDate.ChildRelationshipInfos.Any(x => x.Relationship.ID == relationshipControl.Relationship.ID); ChildRelationshipInfo childData = null; if (childLoadedBefore) { childData = specificDate.ChildRelationshipInfos.First(x => x.Relationship.ID == relationshipControl.Relationship.ID); } else { if (!relationshipFirstSideHasValue) { childData = specificDate.AddChildRelationshipInfo(relationshipControl.Relationship); } else { childData = AreaInitializer.EditAreaDataManager.SerachDataFromParentRelationForChildTempView(relationshipControl.Relationship, this, relationshipControl.EditNdTypeArea, specificDate); } } if (childData.SecurityIssue == false) { relationshipControl.EditNdTypeArea.SetChildRelationshipInfoAndShow(childData); //if (relationshipControl.EditNdTypeArea.SecurityReadOnlyByParent || relationshipControl.EditNdTypeArea.AreaInitializer.SecurityReadOnly) // if (!childData.RelatedData.Any()) // { // relationshipControl.View.DisableEnable(specificDate, TemporaryLinkType.DataView, false); // } } else { result = false; } } if (result) { OnDataItemShown(new EditAreaDataItemLoadedArg() { DataItem = specificDate, InEditMode = true }); } // OnDataItemLoaded(new EditAreaDataItemLoadedArg() { DataItem = specificDate, InEditMode = true }); return(result); }
public ChildRelationshipInfo SerachDataFromParentRelationForChildTempView(RelationshipDTO relationship, I_EditEntityArea sourceEditEntityArea, I_EditEntityArea targetEditEntityArea, DP_DataRepository parentRelationData) { //List<DP_DataRepository> re = null; //if (parentRelationData.ChildRelationshipInfos.Any(x => x.Relationship.ID == relationshipID)) //{ // childViewData = new List<DP_DataView>(); // foreach (var child in parentRelationData.ChildRelationshipInfos.First(x => x.Relationship.ID == relationshipID).RelatedData) // childViewData.Add(child.DataView); //} //else //{ ChildRelationshipInfo childRelationshipInfo = null; childRelationshipInfo = parentRelationData.ChildRelationshipInfos.FirstOrDefault(x => x.Relationship.ID == relationship.ID); if (childRelationshipInfo == null) { childRelationshipInfo = parentRelationData.AddChildRelationshipInfo(relationship); } else { throw new Exception("Asd"); } List <DP_DataRepository> result = new List <DP_DataRepository>(); var searchDataItem = relationshipManager.GetSecondSideSearchDataItemByRelationship(parentRelationData, relationship.ID); if (searchDataItem != null) { var requester = AgentUICoreMediator.GetAgentUICoreMediator.GetRequester(); DR_SearchViewRequest request = new DR_SearchViewRequest(requester, searchDataItem); if (targetEditEntityArea.DefaultEntityListViewDTO != null) { request.EntityViewID = targetEditEntityArea.DefaultEntityListViewDTO.ID; } var childViewData = AgentUICoreMediator.GetAgentUICoreMediator.requestRegistration.SendSearchViewRequest(request).ResultDataItems; var countRequest = new DR_SearchCountRequest(requester); countRequest.SearchDataItems = searchDataItem; countRequest.Requester.SkipSecurity = true; var count = AgentUICoreMediator.GetAgentUICoreMediator.requestRegistration.SendSearchCountRequest(countRequest); bool secutrityImposed = false; if (count.ResultCount != childViewData.Count) { secutrityImposed = true; } if (!secutrityImposed) { foreach (var item in childViewData) { var dpItem = ConvertDP_DataViewToDP_DataRepository(item, targetEditEntityArea); result.Add(dpItem); dpItem.IsDBRelationship = true; childRelationshipInfo.AddDataToChildRelationshipInfo(dpItem, true); } } else { childRelationshipInfo.SecurityIssue = true; } } //} return(childRelationshipInfo); }
public bool GetTreeItems(DR_Requester requester, DP_DataRepository deleteDataItem, DP_DataRepository rootDeleteItem) { List <ChildRelationshipInfo> result = new List <ChildRelationshipInfo>(); bool loop = false; // DP_DataRepository resultItem = item; var entity = bizTableDrivedEntity.GetTableDrivedEntity(requester, deleteDataItem.TargetEntityID, EntityColumnInfoType.WithSimpleColumns, EntityRelationshipInfoType.WithRelationships); foreach (var relationship in entity.Relationships.Where(x => x.MastertTypeEnum == Enum_MasterRelationshipType.FromPrimartyToForeign)) { if (!loop) { var searchRepository = RelationshipDataManager.GetSecondSideSearchDataItemByRelationship(deleteDataItem, relationship.ID); var newrequester = new DR_Requester(); newrequester.SkipSecurity = true; DR_SearchViewRequest searchViewRequest = new DR_SearchViewRequest(newrequester, searchRepository); var searchViewResult = SearchRequestManager.Process(searchViewRequest); if (searchViewResult.ResultDataItems.Any()) { var childRelationshipInfo = new ChildRelationshipInfo(); childRelationshipInfo.SourceData = deleteDataItem; childRelationshipInfo.Relationship = relationship; result.Add(childRelationshipInfo); childRelationshipInfo.RelationshipDeleteOption = relationship.DeleteOption; deleteDataItem.ChildRelationshipInfos.Add(childRelationshipInfo); if (childRelationshipInfo.RelationshipDeleteOption == RelationshipDeleteOption.SetNull) { foreach (var childItem in searchViewResult.ResultDataItems) { DP_DataRepository dataItem = new DP_DataRepository(childItem.TargetEntityID, childItem.TargetEntityAlias); dataItem.DataView = childItem; dataItem.ParantChildRelationshipInfo = childRelationshipInfo; childRelationshipInfo.RelatedData.Add(dataItem); } } else { bool repeatedInParents = false; foreach (var childItem in searchViewResult.ResultDataItems) {//هردفعه پرنتها برای هر ایتم گرفته نشود List <DP_DataRepository> parents = GetParentDataItems(childRelationshipInfo); if (parents.Any(z => z.TargetEntityID == childItem.TargetEntityID && z.KeyProperties.All(x => childItem.Properties.Any(y => y.IsKey && x.ColumnID == y.ColumnID && x.Value == y.Value)))) { var parentRepeted = parents.First(z => z.TargetEntityID == childItem.TargetEntityID && z.KeyProperties.All(x => childItem.Properties.Any(y => y.IsKey && x.ColumnID == y.ColumnID && x.Value == y.Value))); loop = true; repeatedInParents = true; DP_DataRepository dataItem = new DP_DataRepository(childItem.TargetEntityID, childItem.TargetEntityAlias); dataItem.DataView = childItem; dataItem.ParantChildRelationshipInfo = childRelationshipInfo; dataItem.Error = "وابستگی تکراری با " + parentRepeted.ViewInfo; childRelationshipInfo.RelatedData.Add(dataItem); } } if (!repeatedInParents) { foreach (var childItem in searchViewResult.ResultDataItems) { if (ChildItemExistInTree(rootDeleteItem, childItem)) { } else { DP_DataRepository dataItem = new DP_DataRepository(childItem.TargetEntityID, childItem.TargetEntityAlias); dataItem.DataView = childItem; dataItem.ParantChildRelationshipInfo = childRelationshipInfo; childRelationshipInfo.RelatedData.Add(dataItem); var innerloop = GetTreeItems(requester, dataItem, rootDeleteItem); if (innerloop) { loop = true; return(loop); } } } } } } } } return(loop); }
private Tuple <Enum_QueryItemType, List <EntityInstanceProperty> > GetQueryDeleteOrUpdateNull(DP_DataRepository item, ChildRelationshipInfo parentChildRelatoinshipInfo) { Enum_QueryItemType queryItemType; List <EntityInstanceProperty> listEditProperties = new List <EntityInstanceProperty>(); if (parentChildRelatoinshipInfo == null) { queryItemType = Enum_QueryItemType.Delete; } else { if (parentChildRelatoinshipInfo.RelationshipDeleteOption == RelationshipDeleteOption.DeleteCascade) { queryItemType = Enum_QueryItemType.Delete; } else { queryItemType = Enum_QueryItemType.Update; foreach (var col in parentChildRelatoinshipInfo.Relationship.RelationshipColumns) { var prop = item.GetProperty(col.SecondSideColumnID); if (prop == null) { prop = new EntityInstanceProperty(col.SecondSideColumn); } prop.Value = null; listEditProperties.Add(prop); } } } return(new Tuple <Enum_QueryItemType, List <EntityInstanceProperty> >(queryItemType, listEditProperties)); }
private List <QueryItem> GetDeleteQueryQueue(DR_Requester requester, DP_DataRepository item, ChildRelationshipInfo parentChildRelatoinshipInfo = null, List <QueryItem> result = null) { //اینجا کوئری آیتمها بصورت درختی ست نمیشوند چون لازم نیست همینکه بترتیب می آیند کافی است if (result == null) { result = new List <QueryItem>(); } if (item.ChildRelationshipInfos.Any(x => x.RelatedData.Any())) { foreach (var child in item.ChildRelationshipInfos) { //اول زیر مجموعه ها حذف شوند foreach (var cItem in child.RelatedData) { GetDeleteQueryQueue(requester, cItem, child, result); } } } var query = GetQueryDeleteOrUpdateNull(item, parentChildRelatoinshipInfo); result.Add(new QueryItem(GetTableDrivedDTO(requester, item.TargetEntityID), query.Item1, query.Item2, item)); return(result); }
private void RemoveAllUnchangedDatas(ObservableCollection <DP_DataRepository> result, ChildRelationshipInfo parentChildRelationshipInfo) { List <DP_DataRepository> removeItems = new List <DP_DataRepository>(); foreach (var data in result) { //بعدا بررسی شود ////if (!item.HasDirectData) //// removeItems.Add(item); if (data.DataOrRelatedDataIsChanged == null) { throw new Exception("xbxcvxcv"); } if (data.DataOrRelatedDataIsChanged == false) { if (parentChildRelationshipInfo == null || !parentChildRelationshipInfo.DataItemIsAdded(data)) { removeItems.Add(data); //این بیخوده فکر کنم if (parentChildRelationshipInfo != null) { parentChildRelationshipInfo.RemovedDataForUpdate.Remove(parentChildRelationshipInfo.GetOroginalDataOfOriginalData(data)); } } } foreach (var child in data.ChildRelationshipInfos) { RemoveAllUnchangedDatas(child.RelatedData, child); } } foreach (var item in removeItems) { result.Remove(item); } }
private DP_DataRepository GetData(DP_DataRepository item) { DP_DataRepository newItem = new DP_DataRepository(item.TargetEntityID, item.TargetEntityAlias); foreach (var property in item.GetProperties()) { if (!property.IsHidden && (property.IsKey || !property.ISFK)) { var originalProperty = item.OriginalProperties.First(x => x.ColumnID == property.ColumnID); var newProperty = newItem.AddCopyProperty(property); newItem.OriginalProperties.Add(originalProperty); if (property.IsReadonly) { newProperty.Value = originalProperty.Value; } } } newItem.IsFullData = item.IsFullData; newItem.DataView = item.DataView; // newItem.HasDirectData = item.HasDirectData; newItem.IsDBRelationship = item.IsDBRelationship; //newItem.IsHiddenBecauseOfCreatorRelationshipOnShow = item.IsHiddenBecauseOfCreatorRelationshipOnShow; newItem.IsHiddenBecauseOfCreatorRelationshipOnState = item.IsHiddenBecauseOfCreatorRelationshipOnState; newItem.IsReadonlyBecauseOfCreatorRelationshipOnShow = item.IsReadonlyBecauseOfCreatorRelationshipOnShow; newItem.IsReadonlyBecauseOfCreatorRelationshipOnState = item.IsReadonlyBecauseOfCreatorRelationshipOnState; newItem.IsReadonlyBecauseOfState = item.IsReadonlyBecauseOfState; newItem.EntityListView = item.EntityListView; newItem.IsNewItem = item.IsNewItem; // newItem.ParantChildRelationshipInfo = newParentChildRelationshipInfo; foreach (var childItem in item.ChildRelationshipInfos) { //مطمئنن رابطه فارن به پرایمری هست وقتی که هیدن یا ریدونلی ترو باشه // bool skipChildRel = false; //if (childItem.Relationship.MastertTypeEnum == Enum_MasterRelationshipType.FromForeignToPrimary) //{ // if (childItem.IsHidden) // skipChildRel = true; //////else if ((childItem.Relationship.IsReadonly || childItem.IsReadonly) && childItem.CheckRelationshipIsChanged()) ////// skipChildRel = true; //} if (!childItem.IsHidden) { var newChildItems = new ChildRelationshipInfo(); newChildItems.Relationship = childItem.Relationship; newChildItems.RelationshipDeleteOption = childItem.RelationshipDeleteOption; foreach (var orginalData in childItem.OriginalRelatedData) { //if (childItem.Relationship.MastertTypeEnum == Enum_MasterRelationshipType.FromPrimartyToForeign) //{ newChildItems.OriginalRelatedData.Add(orginalData); } foreach (var orginalData in childItem.RemovedOriginalDatas) { //bool skipOriginalData = false; //برای وقتی که شرط داده اجازه حذف میداده و داده حذف شده اما قبل از آپد یت دیگه شرط اجازه حذف را به علت هیدن یا ریدونلی بودن نمیده if (orginalData.IsHiddenBecauseOfCreatorRelationshipOnState || childItem.IsReadonly || orginalData.IsReadonlySomeHow ) { } else { newChildItems.RemovedDataForUpdate.Add(orginalData); } //else //{ // var relatedDataToOriginalData = childItem.GetRelatedDataOfOriginalData(orginalData); // if (relatedDataToOriginalData.IsHiddenBecauseOfCreatorRelationshipOnState) // skipOriginalData = true; //} //if (!skipOriginalData) // newChildItems.RemovedDataForUpdate.Add(orginalData); //} //else //{ // newChildItems.OriginalRelatedData.Add(orginalData); //} } var relatedData = childItem.RelatedData.ToList(); foreach (var ritem in relatedData) { if (ritem.ShoudBeCounted) { newChildItems.RelatedData.Add(GetData(ritem)); } } //var childDataItems = GetData(childItem, newChildItems); //foreach (var cItem in childDataItems) // newChildItems.RelatedData.Add(cItem); // newChildItems.CheckAddedRemovedRelationships(); newItem.ChildRelationshipInfos.Add(newChildItems); } // } } return(newItem); }