/// <summary> /// Update action core method. /// </summary> /// <param name="propertyDelegate">Get property delegate.</param> /// <param name="entity">Entity to edit or create.</param> /// <returns>True if success, otherwise is false.</returns> public async Task <bool> UpdateCore(UpdatePropertyDelegate propertyDelegate, TEntity entity) { var properties = Metadata.EditProperties.ToArray(); foreach (var property in properties) { await propertyDelegate(entity, property); } if (Controller.ViewBag.ErrorMessage != null) { return(false); } ValidationContext validationContext = new ValidationContext(entity, new EntityDescriptorContext(EntityBuilder), null); var validateResult = entity.Validate(validationContext); if (validateResult.Count() != 0) { Controller.ViewBag.ErrorMessage = string.Join("\r\n", validateResult.Select(t => t.ErrorMessage)); return(false); } bool result; if (entity.Index == Guid.Empty) { result = await EntityContext.AddAsync(entity); } else { result = await EntityContext.EditAsync(entity); } return(result); }
/// <summary>IPC通信.Model</summary> /// <param name="update">ViewModelプロパティ更新</param> /// <param name="updateResults">結果表示</param> public ClientModel(UpdatePropertyDelegate update, UpdateResultsDelegate updateResults) { _Update = update; _UpdateResults = updateResults; _Server = new ChannelFactory <IExecute>( new NetNamedPipeBinding(), new EndpointAddress(Service.GetAddress()) ).CreateChannel(); }
/// <summary> /// Get update action result. /// </summary> /// <param name="coreDelegate">Get update core delegate.</param> /// <param name="propertyDelegate">Get property delegate.</param> /// <param name="id">Entity id.</param> /// <returns></returns> public async Task <ActionResult> GetUpdateAction(UpdateCoreDelegate coreDelegate, UpdatePropertyDelegate propertyDelegate, Guid id) { TEntity entity; if (id == Guid.Empty) { if (!EntityContext.Addable()) { return(new HttpUnauthorizedResult()); } if (Metadata.AddRoles.Count() > 0 && !(Metadata.AuthenticationRequiredMode == AuthenticationRequiredMode.All ? Metadata.AddRoles.All(r => Controller.User.IsInRole(r)) : Metadata.AddRoles.Any(r => Controller.User.IsInRole(r)))) { return(new HttpUnauthorizedResult()); } entity = EntityContext.Create(); } else { if (!EntityContext.Editable()) { return(new HttpUnauthorizedResult()); } if (Metadata.EditRoles.Count() > 0 && !(Metadata.AuthenticationRequiredMode == AuthenticationRequiredMode.All ? Metadata.EditRoles.All(r => Controller.User.IsInRole(r)) : Metadata.EditRoles.Any(r => Controller.User.IsInRole(r)))) { return(new HttpUnauthorizedResult()); } entity = EntityContext.GetEntity(id); if (entity == null) { return(new HttpStatusCodeResult(404)); } } var properties = Metadata.Properties.Where(t => !t.IsHiddenOnEdit).ToArray(); if (!await coreDelegate(propertyDelegate, entity)) { Controller.Response.StatusCode = 400; //Important!!! Controller.Response.TrySkipIisCustomErrors = true; if (Controller.ViewBag.ErrorMessage == null) { return(GetContent("未知")); } else { return(GetContent(Controller.ViewBag.ErrorMessage)); } } return(GetContent(entity.Index.ToString())); }
/// <summary>解放処理</summary> public void Dispose() { _UpdateProperty = null; Close(); }
/// <summary>サーバModel</summary> /// <param name="updateProperty">プロパティ更新メソッド</param> /// <param name="updateEnabled">ボタン操作許可プロパティ更新デリゲート</param> public ServerModel(UpdatePropertyDelegate updateProperty, UpdateEnabledDelegate updateEnabled) { _UpdateProperty = updateProperty; _UpdateEnabled = updateEnabled; }