該項目的基本概念是訪問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在這個過程中下降了嗎?
我想我已經找到了一個可能的解決方案 - 在第二個線程中打開瀏覽器。我會通過它看看會發生什麼。同時,如果有人有建議,我很樂意閱讀。 –