public virtual ActionResult <string> PartialUpdateContext([FromBody] RequestAppletModel model) { // Получение всех необходимых сущностей Applet applet = viewInfo.ViewApplets.FirstOrDefault(n => n.Name == model.AppletName); BusinessObjectComponent component = viewInfo.BOComponents.FirstOrDefault(bcId => bcId.BusCompId == applet.BusCompId); // Получение списка с апплетами, необходимыми для обновления. Если есть флаг обновления текущего апплета, то он добавляется в выходной список List <Applet> appletsToUpdate = new List <Applet>(); if (model.RefreshCurrentApplet) { appletsToUpdate.Add(applet); } // Добавление всех апплетов, основанных на той же компоненте и не являющихся попапами в список для обновления viewInfo.ViewApplets.ForEach(viewApplet => { if (viewApplet.BusCompId == applet.BusCompId && viewApplet.Id != applet.Id && viewApplet.Type != "Popup") { appletsToUpdate.Add(viewApplet); } }); AppletListBuilding(new List <BusinessObjectComponent>(), component, component, appletsToUpdate); appletsToUpdate = appletsToUpdate.Where(i => i.Initflag == false).ToList(); //viewInfo.AppletsSortedByLinks.AddRange(appletsToUpdate); // Result return(JsonConvert.SerializeObject(appletsToUpdate.Select(n => n.Name), Formatting.Indented, new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore })); }
public ActionResult <object> DeleteRecord([FromBody] RequestAppletModel model) { // Получение всех необходимых сущностей List <BusinessObjectComponent> boComponents = viewInfo.BOComponents; Applet applet = viewInfo.ViewApplets.FirstOrDefault(n => n.Name == model.AppletName); BusinessComponent busComp = viewInfo.ViewBCs.FirstOrDefault(i => i.Id == applet.BusCompId); BusinessObjectComponent objectComponent = boComponents.FirstOrDefault(bcId => bcId.BusCompId == busComp.Id); object[] searchSpecArgs = (object[])GetSearchSpecification(objectComponent.Name, SearchSpecTypes.SearchSpecArgs); string searchSpecification = GetSearchSpecification(objectComponent.Name, SearchSpecTypes.SearchSpecification); string searchSpecificationByParent = GetSearchSpecification(objectComponent.Name, SearchSpecTypes.SearchSpecificationByParent); // Получение контекста IEnumerable <TTable> dataEntities = orderedEntities; // Ограничение списка сущностей if (searchSpecification != null) { dataEntities = dataEntities.AsQueryable().Where(searchSpecification, searchSpecArgs).ToList(); } if (searchSpecificationByParent != null) { dataEntities = dataEntities.AsQueryable().Where(searchSpecificationByParent).ToList(); } // Получение записи предназначенной для удаления TTable recordToDelete = dataEntities.FirstOrDefault(i => i.Id == model.Id); if (recordToDelete == null) { return(NotFound()); } else { // Удаление записи из списка отоброжаемых List <string> displayRecords = GetDisplayedRecords(busComp.Name); displayRecords.Remove(recordToDelete.Id.ToString()); SetDisplayedRecords(busComp.Name, displayRecords); // Получение следующей за этой записи TTable nextEntity = dataEntities.SkipWhile(item => !item.Equals(recordToDelete)).Skip(1).FirstOrDefault(); // Если ее не найдено, получение предыдущей if (nextEntity == null) { nextEntity = dataEntities.TakeWhile(item => !item.Equals(recordToDelete)).LastOrDefault(); } // Удаление выбранной записи TDataBUSFactory dataBUSFactory = new TDataBUSFactory(); TBUSUIFactory busUIFactory = new TBUSUIFactory(); dataBUSFactory.OnRecordDelete(recordToDelete, entityDBSet, context); // Обязательно необходимо перекверить данные после удаления dataEntities = orderedEntities; // Ограничение списка сущностей if (searchSpecArgs != null) { dataEntities = dataEntities.AsQueryable().Where(searchSpecification, searchSpecArgs).ToList(); } if (searchSpecificationByParent != null) { dataEntities = dataEntities.AsQueryable().Where(searchSpecificationByParent).ToList(); } // Если запись для фокуса найдена, то она добавляется в список отоброжаемых и возвращается if (nextEntity != null) { // Пропуск текущих отоброжаемых записей и взятие слеующей var record = dataEntities .SkipWhile(i => i.Id.ToString() != displayRecords.LastOrDefault()) .Skip(1).FirstOrDefault(); // Если следущая запись есть и она не является удаляемой, то она добавляется в список отоброжаемых и возвращается if (record != null && record.Id != recordToDelete.Id) { displayRecords.Add(record.Id.ToString()); } SetDisplayedRecords(busComp.Name, displayRecords); return(Ok(new JsonResult(busUIFactory.BusinessToUI(dataBUSFactory.DataToBusiness(nextEntity, context))).Value)); } else { return(Ok(new JsonResult(null).Value)); } } }