Beispiel #1
0
        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
            }));
        }
Beispiel #2
0
        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));
                }
            }
        }