private ActionResult _Edit(DataProviderModel model = null, int settingId = 0)
        {
            ViewBag.StrategyInfoList = ModelHelper.GetStrategyInfoList(strategyInfoRepository);
            ViewBag.ConnectorInfoList = ModelHelper.GetConnectorInfoList(connectorInfoRepository);

            if (model != null) //повторно пришло
            {
                //IEntityInfo entityInfo = SettingHelper.GetEntityInfo(model.SettingType, model.EntityInfoId);
                //!!!Восстановить model.EntityInfo
                model.EntityParams = StrategyHelper.GetEntityParams(model.ConnectorInfo, model.EntityParams).ToList();
            }
            else if (settingId != 0)
            {
                model = settingService.GetById(settingId);
                if (model == null)
                {
                    TempData["error"] = String.Format("Экземпляр настройки \"{0}\"  не найден!", settingId);
                    return RedirectToAction("Index");
                }

            }
            else //Запрос без параметров
                model = new DataProviderModel();

            return View("Edit", model);
        }
        public ActionResult Edit(DataProviderModel model, IEnumerable<ParamEntity> entityParams)
        {
            model.EntityParams = entityParams.ToList();

            if (ModelState.IsValid)
            {
                //Сохранение
                settingService.Save(model);

                TempData["message"] = String.Format("Сохранены изменения в экземпляре: {0}", model.Name);
                return RedirectToAction("Index");
            }

            else
            {
                return _Edit(model: model);
            }
        }
示例#3
0
        ///// <summary>
        ///// Находит провайдер по умолчанию для стратегии
        ///// </summary>
        ///// <param name="strategyInfo"></param>
        ///// <returns></returns>
        //public static IDataProvider CreateDataProvider(StrategyInfo strategyInfo)
        //{
        //    //Найдем актуальную настройку для стратегии
        //    Setting setting = settingRepository.Get(T=>T.Where(s => s.SettingType == SettingType.ConnectorInfo && s.StrategyInfoId == strategyInfo.Id).OrderByDescending(s => s.Priority)).FirstOrDefault();

        //    return CreateDataProvider(setting);
        //}

        /// <summary>
        /// Находит провайдер по умолчанию для стратегии
        /// </summary>
        /// <param name="connectorInfo"></param>
        /// <returns></returns>
        public IDataProvider CreateDataProvider(DataProviderModel setting)
        {
            if (setting.ConnectorInfo == null)
                throw new CustomException($"settingId={setting.Id}. EntityInfo is null!");

            IDataProvider dataProvider = (IDataProvider)ReflectionHelper.CreateEntity(setting.ConnectorInfo);

            IEnumerable<ParamEntity> strategyParams = StrategyHelper.GetEntityParams<ParamEntity>(setting.ConnectorInfo, setting.EntityParams);

            //Применяем сохраненные параметры
            IEnumerable<PropertyInfo> arrayProp = ReflectionHelper.GetEntityAttributes(dataProvider);
            foreach (PropertyInfo prop in arrayProp)
            {
                ParamEntity savedParam = strategyParams.FirstOrDefault(p => p.FieldName == prop.Name);

                if (savedParam != null)
                {
                    prop.SetValue(dataProvider, savedParam.FieldValue);
                }
            }

            return dataProvider;
        }