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);
        }
示例#3
0
        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);
             }
         }
     }
     //یک ولیدشن دیگه انجام شود.اینکه اگر رابطه فیلتر داشت و یک بار جستجو با داده انتخاب شده وفیلتر انجام شود تا جلوی رکوردهای غیر مجاز گرفته شود.مثل اداره مربوطه در تشکیل پرونده که آیتم سورس آنها تغییر میکند
 }
示例#5
0
 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);
                }
            }
        }
示例#7
0
        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);
        }
示例#8
0
        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);
        }
示例#9
0
        //صدا زده میشود 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
        }
示例#10
0
        //بعدا بررسی شود
        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);
        }
示例#12
0
        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);
        }
示例#13
0
        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));
        }
示例#14
0
        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);
        }