/// <summary> /// Заполнение данных объекта PLM в таблице Ресурсы закладки "Расчёт" /// </summary> /// <param name="gtTask"></param>группа или задача Gantt /// <returns></returns> private void FillTabResources(GanttItem gtTask) { // Обновляем ресурсы только у задач (не у групп) if (gtTask.ItemType != GanttItemType.TaskItem) return; InfoObject Obj; clTask curSt = new clTask(); // Поиск структуры stTask для текущей задачи dictTasks.TryGetValue(gtTask.Key, out curSt); Obj = curSt.Obj; var attr = Obj.GetAttribute("Resources"); attr.CollectionElements.Clear(); // Поиск контейнера, содержащего ресурсы DataContainer ResourceCont = null; foreach (var resource in curSt.lResourceTask) if (resource.objResurce != null) { ResourceCont = resource.objResurce.Container; break; } foreach (var resource in curSt.lResourceTask) { var objResurce = resource.objResurce; if (objResurce == null && ResourceCont != null) { objResurce = new InfoObject(ResourceCont, @"InfoObjects\WORKORG\Resources\Resource\WorkingResource"); objResurce["ResourceName"] = resource.GetResourceNameGantt(); objResurce["ShortResourceName"] = resource.GetResourceNameGantt(); objResurce["BasicCalendar"] = Obj.GetValue<InfoObject>("Calendar"); objResurce.Save(); } if (objResurce != null) { var item = attr.CreateCollectionElement(); item["ResourceLink"] = objResurce; attr.CollectionElements.Add(item); } } }
public bool SavePlm() { GanttItem gt; var noObj = mainList.Where(o => o.Obj == null).ToArray(); InfoObject parentObj = this.GanttParent; if (noObj.Count() > 0) { #region Определение алгоритма сохранения новых задач // Новая задача будет создаваться в контейнере родительского объекта. // Далее надо анализировать состав родительского объекта. // Если составе что-то есть - то это группа и надо новую задачу добавлять в состав родительского объекта. // Если нет атрибута Состав, либо он пустой, то ничего добавлять не нужно. DataContainer homecont = parentObj.Container; var SubTaskList = parentObj.GetAttribute("SubTaskList"); bool add2Group = (SubTaskList != null && SubTaskList.CollectionElements.Count() > 0); #endregion #region Cохранение новых задач using (Service.EnterNewGroupOperation()) { foreach (clTask stObj in noObj) { // stObj - структура добавленной задачи int index = mainList.IndexOf(stObj); /*/TODO Остатки кода Ромы. Наверное, можно будет удалить * Новая задача созданная в Ганте // Определение родительского ИО в PLM для созданной задачи stParentTask rabStPar = stObj.lParentTask[0]; // Данные родительской задачи if (rabStPar.Obj == null) // Не указан ИО родительской задачи { // Поиск данных родительской задачи clTask rabSt; dictTasks.TryGetValue(stObj.lParentTask[0].keyGantt, out rabSt); if (rabSt != null && rabSt.Obj != null) { // Найден ИО родительской задачи rabStPar.Obj = rabSt.Obj; stObj.lParentTask[0] = rabStPar; } } parentObj = stObj.lParentTask[0].Obj; */ // Создание новой задачи InfoObject newObj = new InfoObject(homecont, @"InfoObjects\WORKORG\Projects\TaskOfProject"); // Задание "Вид" - - обязательный newObj["KindOfTask"] = GetTaskTypePlm(stObj); // Задание "Наименование" - обязательный newObj["TaskName"] = stObj.TaskName; // Задание "Статус" - Новая - обязательный newObj["State"] = Service.GetNamedValue(@"WORKORG\TaskStatus\ts01"); newObj.Save(); if (add2Group) { var item = SubTaskList.CreateCollectionElement(); item["ProjectTask"] = newObj; SubTaskList.CollectionElements.Add(item); } stObj.Obj = newObj; stObj.idPlm = newObj.Id; mainList[index] = stObj; dictTasks[stObj.keyGantt] = stObj; } Service.SaveChanges(); } #endregion } foreach (var st in mainList) { if (st.externalTask == false) // false - задача внутри выбранного проекта { if (st.bGroup == true) // true - текущая структура для группы gt = this.GanttDiag.Groups.FindItemByKey(st.keyGantt); else // false - текущая структура для задачи gt = this.GanttDiag.Tasks.FindItemByKey(st.keyGantt); try { SaveGroupPlm(st, gt); } catch (Exception ex) { st.Obj.CancelChanges(); string mess = ex.Message + @"/n"; if (ex.InnerException != null) mess += ex.InnerException.Message; Program.ErrMsgBox(mess); return false; } } } return true; }