系統代碼是平臺內置的、通用的、統一的數據描述。代碼管理(數據字典)是整個平臺中數據描述的有效機制。通過界面進行可視化的操作和維護,能快速錄入和修改平臺上統一的字典數據。有效提高了數據的重覆利用率和產品、項目的開發效率。整個數據字典數據為框架平臺所共用,用戶可以更好地對系統進行自定義管理,以滿足自己的... ...
4.5 代碼(字典)管理
系統代碼是平臺內置的、通用的、統一的數據描述。
代碼管理(數據字典)是整個平臺中數據描述的有效機制。通過界面進行可視化的操作和維護,能快速錄入和修改平臺上統一的字典數據。有效提高了數據的重覆利用率和產品、項目的開發效率。整個數據字典數據為框架平臺所共用,用戶可以更好地對系統進行自定義管理,以滿足自己的個性化需求。
代碼管理的功能作業區(用戶操作)界面如下圖4.5-1所示,通過主要的操作按鈕和信息內容可知其功能有:
① 新增代碼組、代碼,編輯代碼組、代碼,
② 刪除代碼組、代碼,移動代碼,
③ 代碼組、代碼的唯一標識,排序功能和備註信息等。
其中功能操作按鈕的狀態會根據選擇的左側樹型中不同節點和不同登錄用戶的動作許可權而改變。
平臺在目前僅支持二級深度的樹型代碼結構,可根據實際需要進行添加、修改、刪除或移動等對平臺代碼進行分類和調整。
圖4.5-1 代碼管理界面
#region LoadCodeTypes, LoadCodes private void LoadCodeTypes(TreeNode currentNode, DMESYS_SYSCODE_TYPE currentCodeType) { List<DMESYS_SYSCODE_TYPE> subCodeTypes = null; if (currentCodeType != null) subCodeTypes = DBOSYS_SYSCODE_TYPE.GetSubCodeTypes(currentCodeType); else subCodeTypes = DBOSYS_SYSCODE_TYPE.GetSYS_SYSCODE_TYPEEntities(); foreach (DMESYS_SYSCODE_TYPE rt in subCodeTypes) { TreeNode node = currentNode.ChildNodes.Add(); node.Tag = rt; node.Text = rt.Name; node.CollapsedImageIndex = 1; node.ExpandedImageIndex = 2; LoadCodeTypes(node, rt); } } private void LoadCodes() { codes.Clear(); codes = DBOSYS_SYSCODE.GetSYS_SYSCODEEntities(); foreach (DMESYS_SYSCODE r in codes) { TreeNode tn = CallFindNode(r.Syscode_Type_Id, tvCodes); if (tn != null) { TreeNode node = tn.ChildNodes.Add(); node.Tag = r; node.Text = r.Name; node.CollapsedImageIndex = 3; node.ExpandedImageIndex = 3; } } } private TreeNode FindTreeNode(string codeTypeId, TreeNode tnParent) { if (tnParent == null || tnParent.Tag is DMESYS_SYSCODE) return null; if ((tnParent.Tag as DMESYS_SYSCODE_TYPE).Id == codeTypeId) return tnParent; TreeNode tnRet = null; foreach (TreeNode tn in tnParent.ChildNodes) { tnRet = FindTreeNode(codeTypeId, tn); if (tnRet != null) break; } return tnRet; } private TreeNode CallFindNode(string codeTypeId, TreeControl treeView) { TreeNodeCollection nodes = treeView.RootNodes[0].ChildNodes; foreach (TreeNode n in nodes) { TreeNode temp = FindTreeNode(codeTypeId, n); if (temp != null) return temp; } return null; } #endregion
4.5.1 新增、編輯和刪除
新增代碼組和代碼:點擊展開樹形菜單“系統代碼”,可以看到平臺內置的一部分代碼組和代碼。選擇“系統代碼”後點擊“新增分類”按鈕,可以添加代碼組;選擇已有的代碼組,點擊“新增代碼”按鈕,可以添加具體的代碼。
在新增代碼組或代碼的過程中,其中帶紅色星號標記“*”的條目,標識、名稱和排序ID是必須要填寫的內容。平臺會檢測該代碼組或代碼的標識、名稱在平臺上的合法性,確保代碼組或代碼的標識、名稱的唯一性和可用性。
具體添加代碼組、代碼的操作界面如下圖4.5.1-1所示:
圖4.5.1-1 新增代碼組、代碼
private void InfoUpdatedADD() { if (dmeObj == null) { lbInfo.Text = "在“系統代碼”下新增如下代碼分類"; return; } if (dmeObj != null && dmeObj is DMESYS_SYSCODE_TYPE) { dmeCodeType = dmeObj as DMESYS_SYSCODE_TYPE; lbInfo.Text = "在代碼分類“" + dmeCodeType.Name + "”下新增如下代碼"; return; } } private bool InfoUpdatedEDIT() { if (dmeObj == null) { lbInfo.Text = "載入代碼類型信息時出錯!"; lbInfo.ForeColor = Color.Red; ucCodes.IsEnabled(false); return false; } if (dmeObj != null && dmeObj is DMESYS_SYSCODE_TYPE) { dmeCodeType = dmeObj as DMESYS_SYSCODE_TYPE; lbInfo.Text = "編輯代碼分類“" + dmeCodeType.Name + "”"; return true; } if (dmeObj != null && dmeObj is DMESYS_SYSCODE) { dmeCode = dmeObj as DMESYS_SYSCODE; lbInfo.Text = "編輯代碼“" + dmeCode.Name + "”"; return true; } return false; } private bool InsertorUpdateCodes() { if (dmeCode == null) { dmeCode = new DMESYS_SYSCODE(); } if (dmeCodeType == null) { dmeCodeType = new DMESYS_SYSCODE_TYPE(); } if (action == Action.ADD) { if (dmeObj == null && DoValidatedCodes()) { dmeCodeType.Id = FeiQing.DBO.DBOService.GetID(); DBOSYS_SYSCODE_TYPE.InsertDMESYS_SYSCODE_TYPE(dmeCodeType); return true; } if (dmeObj is DMESYS_SYSCODE_TYPE && DoValidatedCodes()) { dmeCode.Syscode_Type_Id = dmeCodeType.Id; dmeCode.Id = FeiQing.DBO.DBOService.GetID(); DBOSYS_SYSCODE.InsertDMESYS_SYSCODE(dmeCode); return true; } return false; } if (action == Action.EDIT) { if (dmeObj is DMESYS_SYSCODE_TYPE && DoValidatedCodes()) { dmeCodeType.Id = (dmeObj as DMESYS_SYSCODE_TYPE).Id; DBOSYS_SYSCODE_TYPE.UpdateDMESYS_SYSCODE_TYPE(dmeCodeType); return true; } if (dmeObj is DMESYS_SYSCODE && DoValidatedCodes()) { dmeCode.Id = (dmeCode as DMESYS_SYSCODE).Id; DBOSYS_SYSCODE.UpdateDMESYS_SYSCODE(dmeCode); return true; } return false; } return false; } private bool DoValidatedCodes() { if (String.IsNullOrEmpty(ucCodes.LbTxtTag)) { lbTip.Text = "“標識”不能為空。"; lbTip.ForeColor = Color.Red; return false; } if (String.IsNullOrEmpty(ucCodes.LbTxtName)) { lbTip.Text = "“名稱”不能為空。"; lbTip.ForeColor = Color.Red; return false; } if (String.IsNullOrEmpty(ucCodes.LbTxtOrder)) { lbTip.Text = "“排序ID”不能為空。"; lbTip.ForeColor = Color.Red; return false; } if (!FeiQing.Util.DataValidator2.IsNumber(ucCodes.LbTxtOrder)) { lbTip.Text = "“排序ID”必須為數值。"; lbTip.ForeColor = Color.Red; return false; } if (dmeObj == null && dmeCodeType != null && action == Action.ADD) { dmeCodeType.Tag = ucCodes.LbTxtTag; dmeCodeType.Name = ucCodes.LbTxtName; dmeCodeType.Order_Id = Int32.Parse(ucCodes.LbTxtOrder); dmeCodeType.Remark = ucCodes.LbTxtRemark; } if (dmeObj is DMESYS_SYSCODE_TYPE && dmeCode != null && action == Action.ADD) { dmeCode.Tag = ucCodes.LbTxtTag; dmeCode.Name = ucCodes.LbTxtName; dmeCode.Order_Id = Int32.Parse(ucCodes.LbTxtOrder); dmeCode.Remark = ucCodes.LbTxtRemark; } if (dmeObj is DMESYS_SYSCODE_TYPE && dmeCodeType != null && action == Action.EDIT) { dmeCodeType.Tag = ucCodes.LbTxtTag; dmeCodeType.Name = ucCodes.LbTxtName; dmeCodeType.Order_Id = Int32.Parse(ucCodes.LbTxtOrder); dmeCodeType.Remark = ucCodes.LbTxtRemark; } if (dmeObj is DMESYS_SYSCODE && dmeCode != null && action == Action.EDIT) { dmeCode.Tag = ucCodes.LbTxtTag; dmeCode.Name = ucCodes.LbTxtName; dmeCode.Order_Id = Int32.Parse(ucCodes.LbTxtOrder); dmeCode.Remark = ucCodes.LbTxtRemark; } return true; }
編輯代碼組和代碼:主要是在代碼組或代碼的標識,名稱,排序,備註等信息發生變更的情況時進行的編輯操作。點擊展開樹形菜單“系統代碼”,在樹型目錄下選擇一個代碼組或者代碼後點擊“編輯”按鈕,即完成對應代碼組或代碼信息的修改。具體編輯代碼組、代碼的操作界面如下圖4.5.1-2中所示:
圖4.5.1-2 編輯代碼組、代碼
刪除代碼組和代碼:點擊展開樹形菜單“系統代碼”,在樹型目錄下選擇一個代碼組或代碼後點擊“刪除”按鈕,圖4.5.1-3顯示了刪除操作的提示對話框界面。
備註:對於擁有代碼的代碼組是無法直接刪除的,首先需要刪除其下屬的代碼。
圖4.5.1-3 刪除代碼組或代碼提示
private void btnDelete_Click(object sender, System.EventArgs e) { if (IsCodeType()) { if (selectedNode.ChildNodes.Count > 0) { GUIHelper.MessageToUserInfo("提示:該代碼分類包含代碼,無法直接刪除!"); return; } if (GUIHelper.MessageQuestion("確定要刪除代碼分類“" + (selectedObj as DMESYS_SYSCODE_TYPE).Name + "”嗎?", "刪除代碼分類")) { DBOSYS_SYSCODE_TYPE.DeleteDMESYS_SYSCODE_TYPE(selectedObj as DMESYS_SYSCODE_TYPE); btnRefresh_Click(sender, e); return; } } if (IsCode()) { if (GUIHelper.MessageQuestion("確定要刪除代碼“" + (selectedObj as DMESYS_SYSCODE).Name + "”嗎?", "刪除代碼")) { DBOSYS_SYSCODE.DeleteDMESYS_SYSCODE(selectedObj as DMESYS_SYSCODE); btnRefresh_Click(sender, e); return; } } }
4.5.2 移動代碼
點擊展開樹形菜單“系統代碼”,選擇一個代碼後點擊“移動”按鈕,如下圖4.5.2-1中所示,選擇需要移動到的目標代碼組,點擊確認,即可完成代碼的調動。目前平臺上只支持代碼移動,代碼組暫時不支持移動。
圖4.5.2-1 移動代碼
#region LoadCodeTypes private void LoadCodeTypes(TreeNode currentNode, DMESYS_SYSCODE_TYPE currentCodeType) { List<DMESYS_SYSCODE_TYPE> subCodeTypes = null; if (currentCodeType != null) subCodeTypes = DBOSYS_SYSCODE_TYPE.GetSubCodeTypes(currentCodeType); else subCodeTypes = DBOSYS_SYSCODE_TYPE.GetSYS_SYSCODE_TYPEEntities(); foreach (DMESYS_SYSCODE_TYPE rt in subCodeTypes) { TreeNode node = currentNode.ChildNodes.Add(); node.Tag = rt; node.Text = rt.Name; node.CollapsedImageIndex = 1; node.ExpandedImageIndex = 2; LoadCodeTypes(node, rt); } } #endregion private bool MoveCode() { if (destObj == null) { lbTip.Visible = true; return false; } if (destObj is DMESYS_SYSCODE_TYPE) { target.Syscode_Type_Id = (destObj as DMESYS_SYSCODE_TYPE).Id; DBOSYS_SYSCODE.UpdateDMESYS_SYSCODE(target); return true; } return false; }