private void View_DataLinkConfirmed(object sender, EventArgs e) { if (SelectedDataLink == null || FirstSideEditEntityArea.AreaInitializer.Datas.Count == 0 || SecondSideEditEntityArea.AreaInitializer.Datas.Count == 0) { return; } FirstData = FirstSideEditEntityArea.AreaInitializer.Datas[0].DataView; OtherData = SecondSideEditEntityArea.AreaInitializer.Datas[0].DataView; List <DataLinkItem> dataLinkItems = new List <DataLinkItem>(); var fItems = new List <DataLinkItemGroup>(); //البته از هر دو طرف میشه به طرف دیگر رسید //بهتره همین طور باشه چون برای لینک سرورها کافیه سرورهای طرف اول به طرف دوم لینک داشته باشد //اینطوری مفهوم تر است foreach (var tail in SelectedDataLink.RelationshipsTails) { // tail.EntityRelationshipTailDataMenu var searchDataTuple = AgentUICoreMediator.GetAgentUICoreMediator.RelationshipTailDataManager.GetTargetSearchItemFromRelationshipTail(OtherData, tail.RelationshipTail.ReverseRelationshipTail); foreach (var item in FirstData.KeyProperties) { searchDataTuple.Phrases.Add(new SearchProperty() { ColumnID = item.ColumnID, Value = item.Value }); } var requester = AgentUICoreMediator.GetAgentUICoreMediator.GetRequester(); //سکوریتی داده اعمال میشود var existsRequest = new DR_SearchExistsRequest(requester); existsRequest.EntityID = SecondSideEditEntityArea.AreaInitializer.EntityID; existsRequest.SearchDataItems = searchDataTuple; var exists = AgentUICoreMediator.GetAgentUICoreMediator.requestRegistration.SendSearchExistsRequest(existsRequest); if (exists.Result == Enum_DR_ResultType.SeccessfullyDone) { if (exists.ExistsResult) { //البته از هر دو طرف میشه به طرف دیگر رسید //بهتره همین طور باشه چون برای لینک سرورها کافیه در تیل سرورهای طرف اول هر رابطه به طرف دوم رابطه لینک داشته باشد //اینطوری مفهوم تر است fItems.Add(GetIncludedDataLinkItems(tail.RelationshipTail, SelectedDataLink, FirstData, OtherData, 0, tail.EntityRelationshipTailDataMenu)); } } else { AgentUICoreMediator.GetAgentUICoreMediator.UIManager.ShowInfo(exists.Message, exists.Details, MyUILibrary.Temp.InfoColor.Red); } } var tail1 = SelectedDataLink.RelationshipsTails.First(); // tail1.EntityRelationshipTailListView.FirstSideListViewID var firstSidelinkItem = new MyUILibrary.DataLinkArea.DataLinkItem(); firstSidelinkItem.DataItem = FirstData; firstSidelinkItem.View = GetDataViewItem(firstSidelinkItem.DataItem, SelectedDataLink.FirstSideDataMenuID); firstSidelinkItem.View.IsRoot = true; firstSidelinkItem.IsFixed = true; var secondSidelinkItem = new MyUILibrary.DataLinkArea.DataLinkItem(); secondSidelinkItem.DataItem = OtherData; secondSidelinkItem.View = GetDataViewItem(secondSidelinkItem.DataItem, SelectedDataLink.SecondSideDataMenuID); secondSidelinkItem.View.IsRoot = true; secondSidelinkItem.IsFixed = true; foreach (var pitem in fItems) { foreach (var item in pitem.Items) { item.View = GetDataViewItem(item.DataItem, item.DataMenuID); } } //////List<DataLinkRelation> allRelations = new List<DataLinkRelation>(); //////List<DataLinkItem> allItems = new List<DataLinkItem>(); //////allItems.Add(firstSidelinkItem); //////allItems.Add(secondSidelinkItem); //////foreach (var pitem in fItems) //////{ ////// allRelations.AddRange(pitem.Relations); ////// allItems.AddRange(pitem.Items); //////} //////foreach (var item in allItems.Where(x => x.IsFixed == false && x.Level == 0)) //////{ ////// allRelations.Add(new DataLinkRelation(firstSidelinkItem, item)); //////} //////var maxLevel = allItems.Where(x => x.IsFixed == false).Max(x => x.Level); //////foreach (var item in allItems.Where(x => x.IsFixed == false && x.Level == maxLevel)) //////{ ////// allRelations.Add(new DataLinkRelation(item, secondSidelinkItem)); //////} ///////// //////var result = RemoveRepeatedItems(allItems, allRelations); //بعدا تست شود ظاهر فرم Diagram.ClearItems(); //////foreach (var item in result.Item1) //////{ ////// Diagram.AddView(item.View); //////} //////foreach (var item in result.Item2) //////{ ////// if (!result.Item1.Any(x => x == item.Item1)) ////// { ////// } ////// if (!result.Item1.Any(x => x == item.Item2)) ////// { ////// } ////// Diagram.AddRelation(item.Item1.View, item.Item2.View); //////} Diagram.AddView(firstSidelinkItem.View); Diagram.AddView(secondSidelinkItem.View); foreach (var pitem in fItems) { foreach (var item in pitem.Items) { Diagram.AddView(item.View); } foreach (var item in pitem.Relations) { Diagram.AddRelation(item.Item1.View, item.Item2.View); } foreach (var item in pitem.Items.Where(x => x.Level == 0)) { Diagram.AddRelation(firstSidelinkItem.View, item.View); } var maxLevel = pitem.Items.Max(x => x.Level); foreach (var item in pitem.Items.Where(x => x.Level == maxLevel)) { Diagram.AddRelation(item.View, secondSidelinkItem.View); } } Diagram.RefreshDiagram(); //foreach (var item in fItems.Where(x => x != secondSidelinkItem && !fItems.Any(y => y.ParentDataLinkItem == x))) //{ // // View.AddLink(item.View, secondSidelinkItem.View); //} //var groupedList = fItems.GroupBy(x => x.RelationshipTail); //foreach (var tail in groupedList) //{ // //object panel = View.GenerateTailPanel(); // foreach (var item in tail.Where(x => x.Level == 0)) // { // View.AddFirstLevelDataLinkItem(item.View); // CheckDependentItems(tail, item); // } //} //List<DataLinkItemViewGroups> viewGroups = new List<DataLinkItemViewGroups>(); ////var listViewGroups = fItems.Select(x => x.Items.Select(y => y.View).ToList()).ToList(); ////var listViewRelations = fItems.Select(x => x.Relations.Select(y => new Tuple<I_DataViewItem, I_DataViewItem>(y.Item1.View, y.Item2.View)).ToList()).ToList(); //foreach (var pitem in fItems) //{ // DataLinkItemViewGroups viewGroup = new DataLinkItemViewGroups(); // viewGroup.Views.AddRange(pitem.Items.Select(x => x.View).ToList()); // viewGroup.ViewRelations.AddRange(pitem.Relations.Select(x => new Tuple<I_DataViewItem, I_DataViewItem>(x.Item1.View, x.Item2.View)).ToList()); // viewGroups.Add(viewGroup); //} // View.ShowDiagram(viewGroups, firstSidelinkItem.View, secondSidelinkItem.View); }
private void SetRelationshipMenus(List <DataReportMenu> result, MyDataObject DataReportItem) {//با فرم ویو یک فانکشن شود List <RelationshipMenu> listRelationships = new List <RelationshipMenu>(); if (EntityDataView != null && EntityDataView.EntityDataViewRelationships.Any()) { foreach (var rel in EntityDataView.EntityDataViewRelationships) { //if (rel.RelationshipID != 0) //{ // var relationship = AgentUICoreMediator.GetAgentUICoreMediator.RelationshipManager.GetRelationship(rel.RelationshipID); // var relationshipMenu = new RelationshipMenu(relationship, relationship.EntityID2 // , relationship.Entity2, relationship.Alias, rel.Group1, rel.Group2); // listRelationships.Add(relationshipMenu); //} if (rel.RelationshipTailID != 0) { var relationshipTail = AgentUICoreMediator.GetAgentUICoreMediator.RelationshipManager.GetRelationshipTail(rel.RelationshipTailID, false); var relationshipMenu = new RelationshipMenu(relationshipTail, relationshipTail.TargetEntityID , relationshipTail.TargetEntityAlias, relationshipTail.EntityPath, rel.Group1, rel.Group2); listRelationships.Add(relationshipMenu); } } } else { //var allRelationships = AgentUICoreMediator.GetAgentUICoreMediator.RelationshipManager.GetRelationshipsByEntityID(DataReportItem.DataItem.TargetEntityID); var allRelationships = Entity.Relationships; foreach (var relationship in allRelationships) { var relationshipMenu = new RelationshipMenu(relationship, relationship.EntityID2 , relationship.Entity2, relationship.Alias, "", ""); listRelationships.Add(relationshipMenu); } var allRelationshipTails = AgentUICoreMediator.GetAgentUICoreMediator.RelationshipManager.GetRelationshipTails(DataReportItem.DataItem.TargetEntityID); foreach (var relationshipTail in allRelationshipTails) { var relationshipMenu = new RelationshipMenu(relationshipTail, relationshipTail.TargetEntityID , relationshipTail.TargetEntityAlias, relationshipTail.EntityPath, "", ""); listRelationships.Add(relationshipMenu); } } foreach (var rel in listRelationships) { if (rel.RelType == DataReportRelationshipType.Relationship) { if (AreaInitializer.CausingRelationship == null || AreaInitializer.CausingRelationship.PairRelationshipID != rel.Relationship.ID) { var searchRepository = AgentUICoreMediator.GetAgentUICoreMediator.RelationshipDataManager.GetSearchDataItemByRelationship(RelationshipSreachType.SecondSideBasedOnFirstRelationshhipColumn, DataReportItem.DataItem, rel.Relationship.ID); if (searchRepository != null) { var requester = AgentUICoreMediator.GetAgentUICoreMediator.GetRequester(); //سکوریتی داده اعمال میشود var existsRequest = new DR_SearchExistsRequest(requester); existsRequest.EntityID = rel.EntityID; existsRequest.SearchDataItems = searchRepository; var exists = AgentUICoreMediator.GetAgentUICoreMediator.requestRegistration.SendSearchExistsRequest(existsRequest); if (exists.ExistsResult) { rel.SearchRepository = searchRepository; rel.IsValid = true; } } } } } var validRelationships = listRelationships.Where(x => x.IsValid); if (validRelationships.Any()) { var relationshipMenu = new DataReportMenu(); relationshipMenu.Title = "روابط"; relationshipMenu.Type = DataReportMenuType.Relationship; result.Add(relationshipMenu); if (EntityDataView == null || !EntityDataView.EntityDataViewRelationships.Any()) { if (validRelationships.Count() > 8) { int index = 1; foreach (var item in validRelationships) { var cIndex = index / 5; item.Group1 = "Group" + (cIndex + 1); index++; } } } foreach (var item in validRelationships.GroupBy(x => new { x.Group1, x.Group2 })) { List <DataReportMenu> parentCollection = null; if (string.IsNullOrEmpty(item.Key.Group1)) { parentCollection = relationshipMenu.SubMenus; } else { DataReportMenu menuLevel1 = GetOrCreateMenu1(relationshipMenu.SubMenus, item.Key.Group1); parentCollection = menuLevel1.SubMenus; } if (string.IsNullOrEmpty(item.Key.Group2)) { // parentCollection = parentCollection; } else { DataReportMenu menuLevel2 = GetOrCreateMenu1(parentCollection, item.Key.Group2); parentCollection = menuLevel2.SubMenus; } foreach (var rel in item) { var relationshipSubMenu = new DataReportMenu(); relationshipSubMenu.Title = rel.EntityName; relationshipSubMenu.Tooltip = rel.Tooltip; relationshipSubMenu.MenuClicked += (sender, e) => RelationshipSubMenu_MenuClicked(sender, e, rel, DataReportItem, rel.SearchRepository); parentCollection.Add(relationshipSubMenu); } } } }
public DR_ResultSearchExists SendSearchExistsRequest(DR_SearchExistsRequest request) { SearchRequestManager editProcessor = new SearchRequestManager(); return(editProcessor.Process(request as DR_SearchExistsRequest)); }