Ejemplo n.º 1
0
        /// <summary>
        /// Удалить удаленные пользвателем компоненты
        /// </summary>
        /// <param name="package"></param>
        /// <returns></returns>
        public ResponsePackage DeleteOldControls(RequestObjectPackage<SaveControlModel> package)
        {
            // все контролы формы
            List<ControlListEntity> oldControls = new ControlsLogic().GetControlsByFormID(new RequestPackage() { requestID = package.requestID }).GetDataOrExceptionIfError();
            // список свежих ID контролов
            List<int> newIDs = new List<int>();
            Action<SaveControlModel> action = null;
            action = delegate(SaveControlModel current)
            {
                if (current.control.ID > 0)
                {
                    newIDs.Add(current.control.ID);
                }
                if (current.items != null && current.items.Count > 0)
                {
                    foreach (SaveControlModel ctrl in current.items)
                    {
                        action(ctrl);
                    }
                }
            };
            action(package.requestData);
            // Для контролов удалить все евенты
            RequestPackage delEvents = new RequestPackage() { requestID = package.requestID };
            ResponsePackage responseDelEvents = new DBUtils().RunSqlAction(new EventEditorDataCRUD().DeleteAllEvents, delEvents);
            responseDelEvents.ThrowExceptionIfError();
            // ID контролов для удаления
            List<int> IDsToDelete = oldControls.FindAll(x => newIDs.Contains(x.ID) == false).OrderByDescending(x => x.orderNumber).Select(x => x.ID).ToList();
            if (IDsToDelete != null && IDsToDelete.Count > 0)
            {
                foreach (int id in IDsToDelete)
                {
                    RequestPackage req = new RequestPackage() { requestID = id };
                    // Проверить возможность удаления
                    ResponsePackage responseCheck = new DBUtils(new FireBirdConnectionFactory()).RunSqlAction(new ControlsRepository().CheckDeleteControl, req);
                    responseCheck.ThrowExceptionIfError();
                    // Удалить свойства контрола
                    ResponsePackage responseDelProperty = new DBUtils(new FireBirdConnectionFactory()).RunSqlAction(new ControlPropertiesRepository().DeletePropertiesByControlID, req);
                    responseDelProperty.ThrowExceptionIfError();
                    // Удалить контрол
                    ResponsePackage responseDelControl = new DBUtils(new FireBirdConnectionFactory()).RunSqlAction(new ControlsRepository().DeleteControlByID, req);
                    responseDelControl.ThrowExceptionIfError();
                }
            }

            return new ResponsePackage();
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Функция, получающая древовидную структуру формы по ее ID
        /// </summary>
        /// <param name="package">Объект-оболочка RequestPackage, содержащая в поле requestID ID формы</param>
        /// <returns>Объект-оболочка RequestPackage ResponseObjectPackagе, содержащая в поле resultData древовидную структуру формы</returns>
        public ResponseObjectPackage<OpenFormModel> GetFormByID(RequestPackage package)
        {
            int formID = package.requestID;
            OpenFormModel result = new OpenFormModel();
            // форма
            result.form = new DBUtils().RunSqlAction(new FormsRepository().GetFormByID, package).GetDataOrExceptionIfError();
            // все контролы формы
            List<ControlListEntity> controls = new ControlsLogic().GetControlsByFormID(package).GetDataOrExceptionIfError();
            // все свойства формы
            List<ControlPropertyViewModel> properties = new ControlPropertyLogic().GetPropertiesByFormID(package).GetDataOrExceptionIfError();
            // задаем каждому контролу его свойства
            List<OpenControlModel> openControls = new List<OpenControlModel>();
            foreach (ControlListEntity ctrl in controls)
            {
                OpenControlModel o = new OpenControlModel();
                o.control = ctrl;
                // получить для контрола события
                RequestPackage eventRequest = new RequestPackage(){ requestID =ctrl.ID };
                o.events = new DBUtils().RunSqlAction(new EventEditorDataCRUD().GetEventsByControlID, eventRequest).GetDataOrExceptionIfError();
                foreach (ControlPropertyViewModel prop in properties)
                {
                    if (prop.controlID == ctrl.ID)
                    {
                        o.properties.Add(prop);
                        if (prop.property.ToLower() == "name")
                        {
                            o.name = prop.value;
                        }
                    }
                }
                RequestPackage controlPack = new RequestPackage() { requestID = o.control.ID };
                o.data = new DBUtils().RunSqlAction(new QueryEditorDataCRUD().GetQueryDataByControlID, controlPack).GetDataOrExceptionIfError();
                openControls.Add(o);
            }

            // рекурсивная обработка свойств для определения отношений parent-child
            OpenControlModel root = null;
            foreach (OpenControlModel ctrl in openControls)
            {
                if (ctrl.control.controlIDParent == null)
                {
                    root = ctrl;
                }
                else
                {
                    foreach (OpenControlModel subCtrl in openControls)
                    {
                        if (ctrl.control.controlIDParent == subCtrl.control.ID)
                        {
                            subCtrl.items.Add(ctrl);
                        }
                    }
                }
            }

            result.root = root;
            result.queries = new DBUtils().RunSqlAction(new QueryEditorDataCRUD().GetQueriesByFormID, package).GetDataOrExceptionIfError();

            return new ResponseObjectPackage<OpenFormModel>() { resultData = result };
        }
 public JsonResult SaveControl(ControlModel control)
 {
     try
     {
         RequestObjectPackage<ControlModel> request = new RequestObjectPackage<ControlModel>()
         {
             requestData = control
         };
         ResponsePackage response = new ControlsLogic().SaveControl(request).GetSelfOrExceptionIfError();
         return Json(response);
     }
     catch (Exception ex)
     {
         return this.HandleException(ex);
     }
 }