/// <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(); }
/// <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); } }