3

Sharepoint に接続する Web サービスに次のコードがあります。

string response = string.Empty;

SPSecurity.RunWithElevatedPrivileges(new SPSecurity.CodeToRunElevated(delegate()
{
    using (SPSite spsite = new SPSite("http://sharepoint/"))
    {
        using (SPWeb spweb = spsite.OpenWeb("sites/" + site))
        {
            spweb.AllowUnsafeUpdates = true;

            SPFolder spfolder = spweb.GetFolder(path);

            /* The following value will always be set to FALSE
             * but the next time spfolder.Exists is called, the
             * returned value will be true.
             */
            //bool exists = spfolder.Exists;

            if (spfolder == null || !spfolder.Exists)
                response = "Folder Does Not Exist!";
            else
                response = "Folder Exists!";
        }
    }
}

return response;

上記のコードは、最初から段階的にデバッグすると完全に正常に動作します。デバッグせずに実行した場合、またはコードの後半にブレークポイントを配置した場合、SPFolder.Exists 値は常に false に設定されますが、実際には true である必要があります。上記の行のコメントを外すと、正常にbool exists動作します。

ここで私が間違っていることはありますか?

4

2 に答える 2

1

さて、私は問題が何であるかを理解しました。どうやら、SPSite オブジェクトのサイト コレクションと SPWeb のサイト/サブサイトのみを指定できるようです。私がしようとしていたのは、別のサイト コレクションのルート Web である Web を開くことでした。

この記事は、それを理解するのに役立ちました。

コードを次のように変更すると、問題が修正されます。

// Specify ONLY the site collection here
using (SPSite spsitecollection = new SPSite("http://sharepoint/sites/" + srcSiteCollection))
{
    // Specify the site/subsite
    using (SPWeb spweb = spsitecollection.OpenWeb(srcSite))
    {

        spweb.AllowUnsafeUpdates = true;

        SPFolder spfolder = spweb.GetFolder(path);

        // No errors anymore!
        if (spfolder == null || !spfolder.Exists)
            response = "Folder Does Not Exist!";
        else
            response = "Folder Exists!";
    }
}
于 2013-08-29T20:28:00.800 に答える