2013-08-06 43 views
0

該項目的基本概念是訪問SharePoint,驗證某個文件是否存在,驗證該文件未被另一個用戶鎖定,滿足兩個條件,excel打開文件並用它做一些事情,然後保存文件並再次關閉它。SharePoint聲明 - 身份驗證,Cookie,C#和Excel-DLL/tld

問題出在程序訪問SharePoint並運行驗證步驟的地步。最初,我第一次直接從VBA使用SOAP,直到微軟決定從2010年將SharePoint降級到2013年,它運行得非常好,現在意味着我使用Visual Studio和C#來完成同樣的事情SOAP在SP2010中做得很好。

我試圖實現在這裏找到的代碼:http://www.vrdmn.com/2013/01/authenticating-net-client-object-model.html,但是我無法讓它工作。我的做了設法得到工作是2010身份驗證模型彈出瀏覽器窗口,檢查有效的cookie,如果它發現它們,讀取cookie,否則提示用戶登錄到SharePoint,然後關閉瀏覽器並繼續。

public CookieCollection Show() 
    { 
     if (string.IsNullOrEmpty(this.LoginPageUrl)) throw new ApplicationException(Constants.MSG_NOT_CLAIM_SITE); 

     // navigate to the login page url. 
     this.webBrowser.Navigate(this.LoginPageUrl); 

     DisplayLoginForm = new Form(); 
     DisplayLoginForm.SuspendLayout(); 

     // size the login form 
     int dialogWidth = Constants.DEFAULT_POP_UP_WIDTH; 
     int dialogHeight = Constants.DEFAULT_POP_UP_HEIGHT; 

     if (PopUpHeight != 0 && PopUpWidth != 0) 
     { 
      dialogWidth = Convert.ToInt32(PopUpWidth); 
      dialogHeight = Convert.ToInt32(PopUpHeight); 
     } 

     DisplayLoginForm.Width = dialogWidth; 
     DisplayLoginForm.Height = dialogHeight; 
     DisplayLoginForm.Text = this.fldTargetSiteUrl; 

     DisplayLoginForm.Controls.Add(this.webBrowser); 
     DisplayLoginForm.ResumeLayout(false); 

     //DisplayLoginForm.Show(); 

     Application.Run(DisplayLoginForm); 

     // see ClaimsWebBrowser_Navigated event 
     //DisplayLoginForm.Dispose(); 
     return this.fldCookies; 
    } 

問題出現在Application.Run(DisplayLoginForm)中。如果我逐行執行代碼,那麼一切正常,我可以在我的VBA代碼中得到所需的結果。但是,如果我使用F5運行程序(通過在Debug模式或Release模式下構建它),Application.Run(DisplayLoginForm)會一次性清除應用程序(以及Excel)和Cookie jar(我的術語,不是計算機術語)已經過有效的cookies檢查。你可以在代碼中看到,我試圖使用DisplayLoginForm.Show();而不是Application.Run,​​但是我不斷收到我試圖找到的文件的空引用,所以這種方法也不起作用。

所以這裏的問題:

如何去彈出一個網頁瀏覽器(這顯然是設置爲窗口的形式),找餅乾,如果需要提示用戶,關閉網絡瀏覽器並保持足夠長的時間以返回適當的值(file.exists和file.islockedbyuser.email,這兩個函數都在VBA調用的函數中,兩者都可以正常工作),然後完成程序而不關閉Excel在這個過程中下降了嗎?

+0

我想我已經找到了一個可能的解決方案 - 在第二個線程中打開瀏覽器。我會通過它看看會發生什麼。同時,如果有人有建議,我很樂意閱讀。 –

回答

0

這個問題的答案是建立一個新的單獨的線程,在該線程上操作瀏覽器和登錄序列,返回主線程(和線程Excel運行)上下文與證書,憑據該文件可以被查詢。