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);
                    }
                }
            }
        }
Example #3
0
        public DR_ResultSearchExists SendSearchExistsRequest(DR_SearchExistsRequest request)
        {
            SearchRequestManager editProcessor = new SearchRequestManager();

            return(editProcessor.Process(request as DR_SearchExistsRequest));
        }