0

プロジェクトの基本的な概念は、SharePoint にアクセスし、特定のファイルが存在することを確認し、そのファイルが別のユーザーによってロックされていないことを確認し、これら 2 つの条件が満たされている場合、Excel がファイルを開いて何らかの処理を行うことです。ファイルを保存し、再度閉じます。

問題は、プログラムが SharePoint にアクセスし、検証手順を実行する時点にあります。当初、私の最初のクラックは SOAP を使用して VBA から直接取得したものでした。Microsoft が SharePoint を 2010 年から 2013 年にダウングレードすることを決定するまで、それは非常にうまく機能していました。つまり、今では Visual Studio と C# を使用して、 SOAPはSP2010でやっていました。

ここにあるコードを実装しようとしました: http://www.vrdmn.com/2013/01/authenticating-net-client-object-model.htmlですが、動作させることができません。私どうにかして機能させたのは、ブラウザー ウィンドウをポップアップし、有効な Cookie をチェックし、見つかった場合は Cookie を読み取り、そうでない場合はユーザーに SharePoint へのログインを促し、ブラウザーを閉じて続行する 2010 認証モデルでした。の上。

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) で発生します。コードを 1 行ずつ実行すると、すべて正常に動作し、VBA コード内で必要な結果が得られます。ただし、F5 キーを使用してプログラムを実行すると (デバッグ モードまたはリリース モードでビルドすることにより)、Application.Run(DisplayLoginForm) は、Cookie jar (私の用語であり、おそらくコンピューター用語ではありません) は、有効な Cookie について検査されています。

コードでわかるように、DisplayLoginForm.Show(); を使用しようとしました。Application.Run ではなく、検索しようとしているファイルへの null 参照を取得し続けたため、そのアプローチも機能しません。

だからここに質問があります:

Web ブラウザー (明らかに Windows フォームとして設定されています) をポップアップ表示し、Cookie を探し、必要に応じてユーザーにプロンプ​​トを表示し、Web ブラウザーを閉じて、適切な値 (ファイル.が存在し、file.islockedbyuser.email であり、どちらも VBA によって呼び出される関数内にあり、どちらも正常に動作します) を Excel に送信し、その過程で Excel をシャットダウンせずにプログラムを終了しますか?

4

1 に答える 1

0

この質問に対する答えは、ブラウザとログイン シーケンスを操作するための新しい別のスレッドをセットアップし、メイン スレッド (および Excel が実行されているスレッド) に資格情報を含むコンテキストを返すことです。尋ねた。

于 2013-08-11T22:05:23.917 に答える