許可權管理系統之字典(代碼)管理

来源:http://www.cnblogs.com/iPragmatic/archive/2016/09/02/5829971.html
-Advertisement-
Play Games

系統代碼是平臺內置的、通用的、統一的數據描述。代碼管理(數據字典)是整個平臺中數據描述的有效機制。通過界面進行可視化的操作和維護,能快速錄入和修改平臺上統一的字典數據。有效提高了數據的重覆利用率和產品、項目的開發效率。整個數據字典數據為框架平臺所共用,用戶可以更好地對系統進行自定義管理,以滿足自己的... ...


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;
        }

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • There are commonly three types of memories in a PIC Microcontroller, Flash Program Memory, Data Memory (RAM) and EEPROM Data Memory. We write Programs... ...
  • Ubuntu 16.04系統在一開始安裝完成時是無法切換到 root 用戶的,普通用戶需要使用 root 許可權的時候通常需要在執行命令前加 "sudo",需要經常使用root許可權的伙伴可能會覺得這會讓我們的蛋蛋同學很憂傷...... 其實,要解決蛋蛋同學的問題很簡單,只要給 root 配一個密碼即可 ...
  • 整理Apache+Mysql+PHP+PHPWind(Apache+PHP集成環境) 一、情況簡述: 1、虛擬機VM上面CentOS 2、全部yum安裝(yum安裝與源碼安裝的安裝路徑不同) 二、操作步驟簡述 安裝Apache(httpd) 安裝Mysql(mysqld) 安裝PHP(phpd-fd ...
  • 使用HttpListener實現簡單的Http服務 HttpListener提供一個簡單的、可通過編程方式控制的 HTTP 協議偵聽器.使用它可以很容易的提供一些Http服務,而無需啟動IIS這類大型服務程式。使用HttpListener的方法流程很簡單:主要分為以下幾步 創建一個HTTP偵聽器對象 ...
  • 頁面設計需求,做了一個氣泡形狀的彈出框,效果如下: 設計思路如下: 1. 使用Path繪製氣泡的尖尖,將這個放到頂層; 2. 在用border繪製長方形框,將這個放到底層,並且設置Margin值,使得Path圖層和border看起來銜接在一起。 代碼如下: 後臺代碼,很簡單,就是控制pupup顯示或 ...
  • 開始使用 LINQ 在此之前曾發表過三篇關於 LINQ 的隨筆: 進階:《LINQ 標準查詢操作概述》(強烈推薦) 技巧:《Linq To Objects - 如何操作字元串》 和 《Linq To Objects - 如何操作文件目錄》 現在,自己打算再整理一篇關於 LINQ 入門的隨筆。 序 語 ...
  • 第一次在博客園發表文章,不多說,先上系統截圖。此系統是自己全程參與項目過程,從前期的技術方案整理到整個項目驗收,具體功能代碼實現,後續發表。 1、登錄: 2、客戶端主頁面 3、系統-切換機組伺服器 4、系統-配置伺服器 5、系統-數據下載 6、系統-更換皮膚 7、基礎數據-承包商檢驗人員 8、基礎數 ...
  • 字元串必須是數字,不要超過轉換成目標數字類型的範圍。超過的話系統也會報錯(溢出)。 static void Main(string[] args) { string s; int i; Console.WriteLine("please enter a number"); s = Console.R ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...