PCB CS架構(工程系統)實現單點登入方法


社會的不斷進步發展,分工也越來越細了.而我們工作接觸的范圍也越來越狹小了,但這不是倒退了,而是分工之細讓人們在各個方面深耕細作。PCB企業軟件系統發展路線同樣也如此,隨着我們PCB企業發展不斷壯大,軟件系統也在不斷細分。目的只有一個,讓專業的事情交給專業的系統去做。回想當初起公司用必有德ERP,一個ERP能搞定PCB所有業務,從前端銷售管理(銷售訂單,合同評審,客戶資料管理),再到制前工程(MI資料,ECN,開料,鑽孔,排版) ,接着到生產管理(lot卡,投料,過數,MRB報廢),再到品質管理(來料檢查,入庫檢查,出庫檢查,提共大量統計報表,不良原因分析,IQC報表)等等。在當時確實是牛X的,但公司是向前不斷發展, 業務也變得越來越復雜多變,必有德ERP無法支撐企業發展步伐啊,最終選擇放棄了。必有德ERP的原功能模塊被分解到各個新系統中去了。目前PCB企業管理系統被細分為9個系統:

OMS訂單管理系統

EDS工程數據管理系統

APS高級計划排程系統

MES制造執行系統

文件網 標簽打印系統

WMS倉儲管理系統

TMS物流運輸管理系統

ERP 企業資源管理系統

HCM人力資源管理系統

有這么多系統 ,每套系統都有自己獨立的用戶與權限管理,那問題就來了。假如:一個人如果擁有4個系統用戶權限帳號,那么這個用戶需要來來回回在4個系統都輸入一次帳號密碼。這樣用戶體驗肯定是差的。 為了得到改善,OA系統發起單點登入項目,OA作為統一用戶數據源,用戶經過OA統一驗證 ,達到登入OA系統后,通過OA系統能直接啟動並進入其它系統主界面的目的。這里介紹CS架構(工程系統)實現單點登入方法,即用網頁啟對本地exe的方法。

 

一.在本機注冊URLProtocol協議

     1.手動注冊表增加URLProtocol協議

        可以運行regedit, 在HKEY_CLASSES_ROOT節點按下圖操作:(EDS名稱可以自己定)

        1.增加協放名:EDS           

        2.默認值改為:URL: EDS Protocol Handler

        3.增加名稱:URL Protocol   數據值為:啟動的exe路徑

            

         4.在command節點,默認數據改為:“啟動的exe路徑” + “%1”

         

     

       2.代碼方式增加URLProtocol協議

        /// <summary>
        /// 注冊協議
        /// </summary>
        /// <param name="Root_Key">根節點</param>
        /// <param name="file_application_path">應用程序路徑</param>
        /// <param name="file_application_ico">應用程序打開圖標,可選值</param>
        /// <returns></returns>
        public bool RegeditAdd(string Root_Key, string file_application_path, string file_application_ico)
        {
            RegistryKey reg_CurrentUser = Registry.CurrentUser;
            try
            {
                //獲取注冊表CurrentUser/SOFTWARE/Classes項
                RegistryKey reg_Classes = reg_CurrentUser.OpenSubKey("SOFTWARE", true).OpenSubKey("Classes", true);
                RegistryKey reg_key = reg_Classes.OpenSubKey(Root_Key, true);
                if (reg_key == null)
                {
                    RegistryKey reg_sjbs = reg_Classes.CreateSubKey(Root_Key);
                    //添加默認項
                    reg_sjbs.SetValue("", "URL: " + Root_Key + " Protocol Handler");
                    //協議別名
                    reg_sjbs.SetValue("URL Protocol", file_application_path);
                    RegistryKey reg_DefaultIcon = reg_sjbs.CreateSubKey("DefaultIcon");
                    if (!String.IsNullOrEmpty(file_application_ico) || file_application_ico == "")
                    {
                        //設置自定義圖標
                        reg_DefaultIcon.SetValue("", file_application_ico);
                    }
                    else
                    {
                        //設置系統定義圖標
                        reg_DefaultIcon.SetValue("", file_application_path + ",1");
                    }
                    //呼出處理程序
                    RegistryKey reg_command = reg_sjbs.CreateSubKey("shell").CreateSubKey("open").CreateSubKey("command");
                    //%1 表示傳遞的參數,再次%1表示調用處顯示鏈接文本
                    reg_command.SetValue("", "\"" + file_application_path + "\" \"%1\"");
                }
                return true;
            }
            catch { return false; }
            finally { reg_CurrentUser.Close(); }
        }

             界面:

              

 

二.exe客戶端代碼修改

         1.將Main入口args參數(帳號密碼)傳給login登入窗口,用於接受瀏覽器傳入工廠,帳號,密碼等參數

          2.更改環境變量的當前目錄按如下更改,

               Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;

        static void Main(string[] args)
        {
            Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;//通過反射打開form窗體,用瀏覽器打開,一定要加上此句(啟動程序路徑與本身程序路徑不同,需改為相同)
            Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Assembly assembly = Assembly.LoadFrom(ConfigurationManager.AppSettings["StartUpFormDll"]);
            Form frm = assembly.CreateInstance(ConfigurationManager.AppSettings["StartUpForm"]) as Form;
            Logger.Instance().Register();
            if (args.Length > 0)
                frm.Tag = args[0];//將參數傳給login窗口,  再到login窗口再將帳號密碼解密后再登入驗證
            Application.Run(frm);
        }

 

三.瀏覽器網頁打開

     本機網頁測試:參數改為登入系統的帳號密碼,即可點擊標簽地址實現啟動本機exe並登入主界面.

      在OA系統端使用:用戶登入到OA系統,可通過OA系統的用戶名與密碼,並加密后放在href地址中;用戶點擊標簽地址即可打開本地exe

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <meta name="author" content="name">
        <title>啟動EDS</title>
        <style>
            
        </style>
    </head>
    <body>
        <a href="eds://###Factory###Username###password###">啟動EDS</a>
        <script></script>
    </body>
</html>
 

 

四.在本機刪除URLProtocol協議

     1.注冊表方式刪除URLProtocol協議  

        運行regedit,如下HKEY_CLASSES_ROOT節點下,找到需要刪除協義名

 

     2.代碼方式刪除URLProtocol協議

       /// <summary>
        /// 刪除協議
        /// </summary>
        /// <param name="Root_Key">根節點</param>
        /// <returns></returns>
        public bool RegeditDelete(string Root_Key)
        {
            RegistryKey reg_CurrentUser = Registry.CurrentUser;
            try
            {
                //獲取注冊表CurrentUser/SOFTWARE/Classes項
                RegistryKey reg_Classes = reg_CurrentUser.OpenSubKey("SOFTWARE", true).OpenSubKey("Classes", true);
                RegistryKey reg_sjbs = reg_Classes.OpenSubKey(Root_Key, true);
                if (reg_sjbs != null)
                {
                    reg_Classes.DeleteSubKeyTree(Root_Key);
                    return true;
                }
                return false;
            }
            catch { return false; }
            finally { reg_CurrentUser.Close(); }
        }

            界面:

          

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM