2014年9月29日 星期一

健保雲端藥歷系統-3(WatiN、webBrowser)

改寫了一版內嵌 webBrower 的版本。由於在同一個 process 上去取得 webBrower 的控制項會有問題,所以開另外一個 thread 搭配匿名函式(Anonymous Functions)去執行 ~

public partial class Form1 : Form
{
    ...

    delegate void UpdateDataGridViewDataSourceDelegate(DataGridView dgv, DataTable dt);
    private void UpdateDataGridViewDataSource(DataGridView dgv, DataTable dt)
    {
        ...
    }

    private void btnEmbed健保雲端藥歷系統_Click(object sender, EventArgs e)
    {
        try
        {
            btnEmbed健保雲端藥歷系統.Enabled = false;

            var thread = new Thread(() =>
            {
                baseTime = DateTime.Now;

                if (WatiN.Core.Settings.AutoStartDialogWatcher)
                {
                    WatiN.Core.Settings.AutoStartDialogWatcher = false;
                }

                WatiN.Core.IE __windowIE = new WatiN.Core.IE(webBrowser1.ActiveXInstance);
                if (webBrowser1.Url == null)
                {
                    __windowIE.GoTo("https://10.253.253.245/imme0000/IMME0002S01.aspx");
                }
                else
                {
                    WatiN.Core.Button ContentPlaceHolder1_btnReSrc = __windowIE.Button("ContentPlaceHolder1_btnReSrc");
                    if (ContentPlaceHolder1_btnReSrc.Exists)
                    {
                        ContentPlaceHolder1_btnReSrc.Click();
                    }
                }

                #region busy and timeout control
                while (((SHDocVw.InternetExplorer)(__windowIE.InternetExplorer)).Busy)
                {
                    Application.DoEvents();
                    System.Threading.Thread.Sleep(3000);

                    runTime = DateTime.Now - baseTime;
                    if (runTime > timeOut) break;
                }
                #endregion

                while (true)
                {
                    #region https://10.253.253.245/imme0000/IMME0002S01.aspx
                    if (__windowIE.Url == entryURL)
                    {
                        WatiN.Core.Span ContentPlaceHolder1_lblmsg = __windowIE.Span("ContentPlaceHolder1_lblmsg");
                        if (ContentPlaceHolder1_lblmsg.Exists)
                        {
                            MessageBox.Show(ContentPlaceHolder1_lblmsg.OuterText);
                            break;
                        }
                    }
                    #endregion

                    #region https://10.253.253.245/imme0000/IMME0002S02.aspx
                    if (__windowIE.Url == targetURL)
                    {
                        WatiN.Core.Table ContentPlaceHolder1_gvList = __windowIE.Table("ContentPlaceHolder1_gvList");
                        if (ContentPlaceHolder1_gvList.Exists)
                        {
                            DataTable dt = gvListHtml2DT(ContentPlaceHolder1_gvList);

                            if (dataGridView1.InvokeRequired)
                            {
                                dataGridView1.Invoke(new UpdateDataGridViewDataSourceDelegate(UpdateDataGridViewDataSource), new object[] { dataGridView1, dt });
                            }
                            else
                            {
                                UpdateDataGridViewDataSource(dataGridView1, dt);
                            }

                            break;
                        }

                        WatiN.Core.Span ContentPlaceHolder1_lblmsg = __windowIE.Span("ContentPlaceHolder1_lblmsg");
                        if (ContentPlaceHolder1_lblmsg.Exists && ContentPlaceHolder1_lblmsg.OuterText.Contains("查無資料"))
                        {
                            if (dataGridView1.InvokeRequired)
                            {
                                dataGridView1.Invoke(new UpdateDataGridViewDataSourceDelegate(UpdateDataGridViewDataSource), new object[] { dataGridView1, new DataTable() });
                            }
                            else
                            {
                                UpdateDataGridViewDataSource(dataGridView1, new DataTable());
                            }

                            MessageBox.Show(ContentPlaceHolder1_lblmsg.OuterText);
                            break;
                        }
                    }
                    #endregion

                    Application.DoEvents();
                    System.Threading.Thread.Sleep(1000);

                    runTime = DateTime.Now - baseTime;
                    if (runTime > timeOut) break;
                }
            });
            thread.SetApartmentState(ApartmentState.STA);
            thread.Start();
          
        }
        catch (Exception ex)
        {
            Debug.Print(ex.Message);
        }
        finally
        {
            btnEmbed健保雲端藥歷系統.Enabled = true;
        }
    }

    private DataTable gvListHtml2DT(WatiN.Core.Table table)
    {
        ...
    }

} 

沒有留言:

張貼留言