/// <summary> /// Возвращает список синхронизированных работ из указанного пространства планирования /// </summary> /// <param name="work"></param> /// <param name="planningSpaceGuidString"></param> /// <param name="returnOnlyMasterWorks"> если true только укрупнения, если false только детализации</param> /// <returns></returns> public static List <ProjectManagementWork> GetSynchronizedWorksInProject(ProjectManagementWork work, ProjectManagementWork project, bool?returnOnlyMasterWorks = null) { string guidWorkForSearch = work.Guid.ToString(); string guidProjectForSearch = project.Guid.ToString(); Filter filter = new Filter(ProjectDependenciesReferenceInfo); AddTermByGuidParamPE(ref filter, SynchronizationParameterGuids.param_DependencyType_Guid, 5, (int)LogicalOperator.And); // Условие: в названии содержится "является укрупнением" //ReferenceObjectTerm termMasterWork = new ReferenceObjectTerm(LogicalOperator.Or); ReferenceObjectTerm termMasterWork = AddTermByGuidParamPE(ref filter, SynchronizationParameterGuids.param_MasterWork_Guid, guidWorkForSearch); ReferenceObjectTerm termSlaveProjectWork = AddTermByGuidParamPE(ref filter, SynchronizationParameterGuids.param_SlaveProject_Guid, guidProjectForSearch, (int)LogicalOperator.And); // Условие: в названии содержится "является детализацией" ReferenceObjectTerm termSlaveWork = AddTermByGuidParamPE(ref filter, SynchronizationParameterGuids.param_SlaveWork_Guid, guidWorkForSearch, (int)LogicalOperator.Or); ReferenceObjectTerm termMasterProjectWork = AddTermByGuidParamPE(ref filter, SynchronizationParameterGuids.param_MasterProject_Guid, guidProjectForSearch, (int)LogicalOperator.And); // Группируем условия в отдельную группу (другими словами добавляем скобки) TermGroup group1 = filter.Terms.GroupTerms(new Term[] { termMasterWork, termSlaveProjectWork }); TermGroup group2 = filter.Terms.GroupTerms(new Term[] { termSlaveWork, termMasterProjectWork }); //редактируем при необходимости if (returnOnlyMasterWorks != null) { if ((bool)returnOnlyMasterWorks) { group1.Clear(); } else { group2.Clear(); } } //Получаем список объектов, в качестве условия поиска – сформированный фильтр List <ReferenceObject> DependencyObjects = ProjectDependenciesReference.Find(filter); List <ProjectManagementWork> result = new List <ProjectManagementWork>(); foreach (var item in getListGuidObjectsByFilter(DependencyObjects, work)) { ProjectManagementWork tempWork = new ProjectManagementWork(item); result.Add(new ProjectManagementWork(item)); } return(result); }
/// <summary> /// Возвращает список синхронизированных работ из указанного пространства планирования /// </summary> /// <param name="work"></param> /// <param name="planningSpaceGuidString"></param> /// <param name="returnOnlyMasterWorks"> если true только укрупнения, если false только детализации</param> /// <returns></returns> public static List <ProjectManagementWork> GetSynchronizedWorksInProject(ProjectManagementWork work, ProjectManagementWork project, bool?returnOnlyMasterWorks = null) { string guidWorkForSearch = work.Guid.ToString(); string guidProjectForSearch = project.Guid.ToString(); Filter filter = new Filter(ProjectDependenciesReferenceInfo); // Условие: тип зависимости "синхронизация" ReferenceObjectTerm termSyncType = new ReferenceObjectTerm(filter.Terms, LogicalOperator.And); // устанавливаем параметр termSyncType.Path.AddParameter(ProjectDependenciesReference.ParameterGroup.OneToOneParameters.Find(SynchronizationParameterGuids.param_DependencyType_Guid)); // устанавливаем оператор сравнения termSyncType.Operator = ComparisonOperator.Equal; // устанавливаем значение для оператора сравнения termSyncType.Value = 5;// DependencyType.Synchronization; // Условие: в названии содержится "является укрупнением" //ReferenceObjectTerm termMasterWork = new ReferenceObjectTerm(LogicalOperator.Or); ReferenceObjectTerm termMasterWork = new ReferenceObjectTerm(filter.Terms); // устанавливаем параметр termMasterWork.Path.AddParameter(ProjectDependenciesReference.ParameterGroup.OneToOneParameters.Find(SynchronizationParameterGuids.param_MasterWork_Guid)); // устанавливаем оператор сравнения termMasterWork.Operator = ComparisonOperator.Equal; // устанавливаем значение для оператора сравнения termMasterWork.Value = guidWorkForSearch; ReferenceObjectTerm termSlaveProjectWork = new ReferenceObjectTerm(filter.Terms, LogicalOperator.And); // устанавливаем параметр termSlaveProjectWork.Path.AddParameter(ProjectDependenciesReference.ParameterGroup.OneToOneParameters.Find(SynchronizationParameterGuids.param_SlaveProject_Guid)); // устанавливаем оператор сравнения termSlaveProjectWork.Operator = ComparisonOperator.Equal; // устанавливаем значение для оператора сравнения termSlaveProjectWork.Value = guidProjectForSearch; // Условие: в названии содержится "является детализацией" ReferenceObjectTerm termSlaveWork = new ReferenceObjectTerm(filter.Terms, LogicalOperator.Or); //ReferenceObjectTerm term1 = new ReferenceObjectTerm(filter.Terms, LogicalOperator.Or); // устанавливаем параметр termSlaveWork.Path.AddParameter(ProjectDependenciesReference.ParameterGroup.OneToOneParameters.Find(SynchronizationParameterGuids.param_SlaveWork_Guid)); // устанавливаем оператор сравнения termSlaveWork.Operator = ComparisonOperator.Equal; // устанавливаем значение для оператора сравнения termSlaveWork.Value = guidWorkForSearch; ReferenceObjectTerm termMasterProjectWork = new ReferenceObjectTerm(filter.Terms, LogicalOperator.And); // устанавливаем параметр termMasterProjectWork.Path.AddParameter(ProjectDependenciesReference.ParameterGroup.OneToOneParameters.Find(SynchronizationParameterGuids.param_MasterProject_Guid)); // устанавливаем оператор сравнения termMasterProjectWork.Operator = ComparisonOperator.Equal; // устанавливаем значение для оператора сравнения termMasterProjectWork.Value = guidProjectForSearch; // Группируем условия в отдельную группу (другими словами добавляем скобки) TermGroup group1 = filter.Terms.GroupTerms(new Term[] { termMasterWork, termSlaveProjectWork }); TermGroup group2 = filter.Terms.GroupTerms(new Term[] { termSlaveWork, termMasterProjectWork }); //редактируем при необходимости if (returnOnlyMasterWorks != null) { if ((bool)returnOnlyMasterWorks) { group1.Clear(); } else { group2.Clear(); } } //Получаем список объектов, в качестве условия поиска – сформированный фильтр List <ReferenceObject> listObj = ProjectDependenciesReference.Find(filter); List <Guid> listSyncWorkGuids = new List <Guid>(); //#if test // System.Windows.Forms.MessageBox.Show(filter.ToString() + "\nlistObj.Count = " + listObj.Count.ToString()); //#endif foreach (var item in listObj) // выбираем все отличные от исходной работы guids { Guid slaveGuid = item[SynchronizationParameterGuids.param_SlaveWork_Guid].GetGuid(); Guid masterGuid = item[SynchronizationParameterGuids.param_MasterWork_Guid].GetGuid(); if (slaveGuid != work.Guid) { listSyncWorkGuids.Add(slaveGuid); } if (masterGuid != work.Guid) { listSyncWorkGuids.Add(masterGuid); } } listSyncWorkGuids = listSyncWorkGuids.Distinct().ToList(); List <ProjectManagementWork> result = new List <ProjectManagementWork>(); foreach (var item in listSyncWorkGuids) { ProjectManagementWork tempWork = new ProjectManagementWork(item); result.Add(new ProjectManagementWork(item)); } return(result); }