public ActionResult EOM040Edit(string id) { var viewMode = "update"; EO_MenuPermRow row = null; if (id.isNullOrEmpty()) { row = EoDataService.Instance.EoMenuPerm_create().FirstRow; row.EOMP_MenuId = "EOM_MAINMENU"; viewMode = "create"; } else { row = EoDataService.Instance.EoMenuPerm_getById(id).FirstRow; viewMode = "update"; } ViewBag.ViewMode = viewMode; return(View(row)); }
public ActionResult Edit(FormCollection collection) { var token = collection["__RequestVerificationToken"]; var mode = collection["ViewMode"]; var id = collection[AppDataName.EOMP_MenuPermId]; var msgOK = "OK"; EO_MenuPermDataTable dt = null; EO_MenuPermRow row = null; try { if (mode.equalIgnoreCase("create")) { dt = EoDataService.Instance.EoMenuPerm_create(); msgOK = FtdStatus.InsertSuccess.ToString(); } else { //找出該筆資料 dt = EoDataService.Instance.EoMenuPerm_getById(id); if (dt == null || dt.Count == 0) { return(Json(new { Result = jTable_ERROR_CODE, Message = "資料不存在" })); } msgOK = FtdStatus.UpdateSuccess.ToString(); } //將Form sumit的資料更新至DataRow row = dt.FirstRow; var isOK = this.TryUpdateModel(row); //若驗證失敗-->回傳錯誤訊息 if (!ModelState.IsValid) { return(Json(new { Result = jTable_ERROR_CODE, Message = string.Join("<br/>", ModelState.Values) })); } #region //驗證欄位 List <string> lstError = new List <string>(); if (row.EOMP_MenuPermId.isNullOrEmpty()) { lstError.Add("授權ID不能為空"); } if (row.EOMP_MenuId.isNullOrEmpty()) { lstError.Add("功能表ID不能為空"); } if (row.EOMP_TargetId.isNullOrEmpty()) { lstError.Add("授權對象ID不能為空"); } if (row.EOMP_TargetKind.isNullOrEmpty()) { lstError.Add("授權類型不能為空"); } if (row.EOMP_ViewKind.isNullOrEmpty()) { lstError.Add("檢視權限不能為空"); } //回傳錯誤訊息 if (lstError.Count > 0) { return(Json(new { Result = jTable_ERROR_CODE, Message = string.Join("<br/>", lstError.ToArray()) })); } //檢查鍵值是否重覆 if (EoDataService.Instance.EoMenuPerm_checkDuplicate(row.EOMP_MenuPermId, row.EOMP_MenuId, row.EOMP_TargetId, row.EOMP_ViewKind)) { return(Json(new { Result = jTable_ERROR_CODE, Message = "相同鍵值的資料已存在" })); } #endregion #region // CheckBox 有勾選者,才會 post 到後端 List <string> lstItemNos = new List <string>(); Dictionary <string, List <string> > dicFuns = new Dictionary <string, List <string> >(); foreach (var key in collection.AllKeys) { if (key.StartsWith("chk_menu_")) { //程式 lstItemNos.Add(collection[key.ToString()]); } else if (key.StartsWith("chk_fun_")) { //功能(動作) var ids = key.ToString().Split('_'); if (ids.Length >= 3) { dicFuns.Add(ids[2], collection[key.ToString()].Split(',').ToList()); } } } #endregion dt.ns_update(); dt.AcceptChanges(); //設定權限 var result = EoDataService.Instance.EoMenuPerm_updatePermSet(row, lstItemNos, dicFuns); return(Json(new { Result = msgOK })); } catch (Exception ex) { return(Json(new { Result = jTable_ERROR_CODE, Message = ex.Message })); } }
public string EoMenuPerm_updatePermSet(EO_MenuPermRow row, List <string> lstItemNos, Dictionary <string, List <string> > dicFuns) { //程式功能清單 var dtMenuFun = NsDmHelper.EO_MenuFun .selectAll() .query(); //程式授權 var dtMenuPermSet = NsDmHelper.EO_MenuPermSet .selectAll() .where (t => t.EOMPS_MenuPermId == row.EOMP_MenuPermId) .query(); var menuPermSetIds = dtMenuPermSet.Select(x => x.EOMPS_MenuPermSetId).ToArray(); //程式功能授權 var dtFunPermSet = NsDmHelper.EO_FunPermSet .selectAll(t => t.AllExt) .where (t => t.EOFPS_MenuPermSetId.batchin(menuPermSetIds.toConstReq1())) .query(); List <string> cmds = null; foreach (var itemNo in lstItemNos) { var menuPermSet = dtMenuPermSet.Where(x => x.EOMPS_MenuItemNo == itemNo).FirstOrDefault(); if (menuPermSet == null) { menuPermSet = dtMenuPermSet.newTypedRow(); menuPermSet.ns_AssignNewId(); menuPermSet.EOMPS_MenuItemNo = itemNo; menuPermSet.EOMPS_MenuPermId = row.EOMP_MenuPermId; dtMenuPermSet.addTypedRow(menuPermSet); } //程式功能 if (!dicFuns.Keys.Contains(itemNo)) { continue; } cmds = dicFuns[itemNo]; foreach (var cmd in cmds) { var menuFun = dtMenuFun.Where(x => x.EOMF_ItemNo == itemNo & x.EOMF_FunctionCode == cmd).FirstOrDefault(); if (menuFun == null) { continue; } var funPermSet = dtFunPermSet.Where(x => x.EOFPS_MenuPermSetId == menuPermSet.EOMPS_MenuPermSetId & x.EOFPS_FunctionCode_XX == cmd ).FirstOrDefault(); if (funPermSet == null) { funPermSet = dtFunPermSet.newTypedRow(); funPermSet.ns_AssignNewId(); funPermSet.EOFPS_MenuFunId = menuFun.EOMF_MenuFunId; funPermSet.EOFPS_MenuPermSetId = menuPermSet.EOMPS_MenuPermSetId; funPermSet.EOFPS_MenuItemNo_XX = itemNo; funPermSet.EOFPS_FunctionCode_XX = menuFun.EOMF_FunctionCode; funPermSet.EOFPS_FunctionName_XX = menuFun.EOMF_FunctionName; dtFunPermSet.addTypedRow(funPermSet); } } } //刪除不存在者 var keyMenus = lstItemNos.Select(x => row.EOMP_MenuPermId + "#" + x).ToArray(); var delMenus = dtMenuPermSet.Where(x => !(x.EOMPS_MenuPermId + "#" + x.EOMPS_MenuItemNo).inAny(keyMenus)).ToArray(); delMenus.forEach(x => x.Delete()); var keyFuns = new List <string>(); foreach (var key in dicFuns.Keys) { var funs = dicFuns[key].Select(x => key + "#" + x).ToArray(); keyFuns.AddRange(funs); } var delFuns = dtFunPermSet.Where(x => !(x.EOFPS_MenuItemNo_XX + "#" + x.EOFPS_FunctionCode_XX).inAny(keyFuns)).ToArray(); delFuns.forEach(x => x.Delete()); var scope = new FdbTransScope(FdbTransScopeOption.RequiresNew); using (scope.Use) { dtMenuPermSet.ns_update(); dtFunPermSet.ns_update(); scope.complete(); } return("OK"); }