none
SP2適応後の不具合 RRS feed

  • 質問

  • お疲れ様です。

    WSS3.0基盤にGroupBoardを使用しています。
    かなりカスタマイズしているんですが、以下のコードがWSSのSP2を入れてから例外を出すようになりました。

    このような現象にあわれた方いますか?

    <br/>using System;
    
    using System.Web;
    
    using System.Collections;
    
    using System.Web.Services;
    
    using System.Web.Services.Protocols;
    
    using System.Collections.Generic;
    
    using Microsoft.SharePoint;
    
    using Microsoft.SharePoint.WebControls;
    
    using Microsoft.GroupBoard.Utilities;
    
    using System.Globalization;
    
    
    
    
    
    public class UtilWhereToGo
    
    {
    
        SPWeb myweb;
    
        SPSite mysite;
    
        SPList l_WhereToGoList;
    
    
    
        public UtilWhereToGo(HttpContext context)
    
        {
    
            mysite = SPControl.GetContextSite(context);
    
            myweb = mysite.RootWeb;
    
    
    
            l_WhereToGoList = Microsoft.GroupBoard.Utilities.GbwUtility.GetWhereAboutsList(myweb);
    
        }
    
    
    
    
    
        public void UpdateWhereToGo(int id, string whereabout, DateTime until, string comment)
    
        {
    
    
    
            myweb.AllowUnsafeUpdates = true;
    
            SPListItem var = l_WhereToGoList.GetItemById(id).ParentList.GetItemById(id);
    
    
    
            var["Whereabout"] = whereabout;
    
            var["From"] = null;
    
    
    
            if (until == DateTime.MinValue)
    
                var["Until"] = null;
    
            else
    
                var["Until"] = until;
    
            
    
            var["GoFromHome"] = 0;
    
            var["GoingHome"] = 0;
    
            var["コメント"] = comment;
    
    
    
    
    
            var.Update();
    
    
    
        }
    
    }
    
    

    例外メッセージ
    Message: Microsoft.SharePoint.SPException: この処理を完了できません。
    もう一度やり直してください。 ---> System.Runtime.InteropServices.COMException (0x80004005): この処理を完了できません。
    もう一度やり直してください。
       場所 Microsoft.SharePoint.Library.SPRequestInternalClass.OpenWebInternal(String bstrUrl, Guid& pguidID, String& pbstrRequestAccessEmail, UInt32& pwebVersion, String& pbstrServerRelativeUrl, UInt32& pnLanguage, UInt32& pnLocale, String& pbstrDefaultTheme, String& pbstrDefaultThemeCSSUrl, String& pbstrAlternateCSSUrl, String& pbstrCustomizedCssFileList, String& pbstrCustomJSUrl, String& pbstrAlternateHeaderUrl, String& pbstrMasterUrl, String& pbstrCustomMasterUrl, String& pbstrSiteLogoUrl, String& pbstrSiteLogoDescription, Object& pvarUser, Boolean& pvarIsAuditor, Int32& plSiteFlags)
       場所 Microsoft.SharePoint.Library.SPRequest.OpenWebInternal(String bstrUrl, Guid& pguidID, String& pbstrRequestAccessEmail, UInt32& pwebVersion, String& pbstrServerRelativeUrl, UInt32& pnLanguage, UInt32& pnLocale, String& pbstrDefaultTheme, String& pbstrDefaultThemeCSSUrl, String& pbstrAlternateCSSUrl, String& pbstrCustomizedCssFileList, String& pbstrCustomJSUrl, String& pbstrAlternateHeaderUrl, String& pbstrMasterUrl, String& pbstrCustomMasterUrl, String& pbstrSiteLogoUrl, String& pbstrSiteLogoDescription, Object& pvarUser, Boolean& pvarIsAuditor, Int32& plSiteFlags)
       --- 内部例外スタック トレースの終わり ---
       場所 Microsoft.SharePoint.Library.SPRequest.OpenWebInternal(String bstrUrl, Guid& pguidID, String& pbstrRequestAccessEmail, UInt32& pwebVersion, String& pbstrServerRelativeUrl, UInt32& pnLanguage, UInt32& pnLocale, String& pbstrDefaultTheme, String& pbstrDefaultThemeCSSUrl, String& pbstrAlternateCSSUrl, String& pbstrCustomizedCssFileList, String& pbstrCustomJSUrl, String& pbstrAlternateHeaderUrl, String& pbstrMasterUrl, String& pbstrCustomMasterUrl, String& pbstrSiteLogoUrl, String& pbstrSiteLogoDescription, Object& pvarUser, Boolean& pvarIsAuditor, Int32& plSiteFlags)
       場所 Microsoft.SharePoint.SPWeb.InitWebPublic()
       場所 Microsoft.SharePoint.SPWeb.get_ID()
       場所 Microsoft.SharePoint.SPContext.DefaultKey(HttpContext context, SPWeb web)
       場所 Microsoft.SharePoint.SPContext.GetContext(HttpContext context)
       場所 Microsoft.SharePoint.SPContext.get_Current()
       場所 Microsoft.SharePoint.SPFieldCollection.GetField(String strName, Boolean bThrowException)
       場所 Microsoft.SharePoint.SPFieldCollection.GetField(String strName)
       場所 Microsoft.SharePoint.SPListItem.SetValue(String strName, Object value, SPField field, Boolean protectFields)
       場所 Microsoft.SharePoint.SPListItem.SetValue(String strName, Object value, Boolean protectFields)
       場所 Microsoft.SharePoint.SPListItem.set_Item(String fieldName, Object value)
       場所 UtilWhereToGo.UpdateWhereToGo(Int32 id, String whereabout, DateTime until, String comment)
    2009年9月21日 13:50

すべての返信

  • LemonB さん、

    こんにちは!
    フォーラム オペレーターの服部 清次です。

    ご質問の件に関しまして、私の方で情報を探ってみましたところ、関連のありそうなサポート技術情報が公開されていました。
    ● 「Windows SharePoint Services SP2 をインストールした後、明示的な権限借用のないオブジェクト モデル コードを使用するドキュメント ライブラリ イベント ハンドラが失敗し、『この処理を完了できません』 というエラー メッセージが発生する」: http://support.microsoft.com/kb/909455/ja (機械翻訳)

    上記のリンク情報は機械翻訳で分かりづらくなっていますので、参考までに、[原因] と [回避策] の部分を和訳して紹介させていただきますね。 (^^)

    ↓↓↓↓ ここから ↓↓↓↓

    <原因>
    Windows SharePoint Services SP2 以前の Microsoft Windows SharePoint Services では、明示的な権限借用のないオブジェクト モデルを使用して Windows SharePoint Services にアクセスするドキュメント ライブラリ イベント ハンドラを書くことができました。 しかしながら、このような暗示的な呼び出しを使用できたのは、アプリケーション プール IDがオブジェクト モデルを呼び出す権限を持ったユーザーである場合だけでした。

    Windows SharePoint Services SP2 では、セキュリティが向上し、このような呼び出しはできなくなりました。 従って、このような呼び出しを試みた場合、エラー メッセージが発生します。

    <回避策>
    Windows SharePoint Services のオブジェクト モデルの呼び出しを使用するためには、すべてのドキュメント ライブラリ イベント ハンドラは、明示的に権限を借用しなければいけません。 アプリケーション プール ID  がWindows SharePoint Services のオブジェクト モデルを呼び出す権限を持っている場合は、現在のユーザーの権限を借用するコードを使用することができます。 以下のコードは、このようなコードの例です。

    (コード)

    ↑↑↑↑ ここまで ↑↑↑↑

    こちらの情報がお役に立てることを願っています。
    それでは、また! (^_^)/


    _______________________________________________
    マイクロソフト株式会社 フォーラム オペレーター 服部 清次

    2009年9月25日 8:15