質問

SharePointリストに接続できる接続可能なWebパーツを作成しようとしています。私はページに私のリストを追加しました、そして私は私のカスタムプロバイダーWebパーツを追加しました。私はIWebPartfieldを実装しましたが、私は必ずしも私が達成しようとしていることの正しいインターフェースです。

私の目標は、現在ログインしているユーザーのプロファイルプロパティの値でリストをフィルタリングすることです。最終的には、非エンタープライズ展開で使用する「現在のユーザーフィルタ」Webパーツの機能を置き換えたいと思います。しかし今のところ私はこの解決策の接続部分を見つけるまでベビーステップを取っているだけです。

カスタムWebパーツをリストに接続しようとすると、メッセージが表示されます。「...は、ページ上の他のWebパーツとは互換性がありません」です。プロバイダのWebパーツを標準のSharePointリストに接続するにはどうすればよいですか?

namespace Current_User_Filter.Current_User_Filter_Web_Part
{
[ToolboxItemAttribute(false)] 
public class Current_User_Filter_Web_Part : WebPart, IWebPartField
{
    [Personalizable()]
    public string CorpID
    {
        get
        {
            return _CorpID;
        }
        set
        {
            _CorpID = value;
        }
    }


    private String _CorpID = String.Empty;
    private string _myProperty = String.Empty;

    [Personalizable(PersonalizationScope.Shared)]
    [WebBrowsable(true)]
    [System.ComponentModel.Category("Select Filter")]
    [WebDisplayName("Filter")]
    [WebDescription("Filter by the selected property of the current user")]
    public string MyProperty
    {
        get
        {
            if (_myProperty == null)
            {
                _myProperty = "Hello SharePoint!";
            }
            return _myProperty;
        }
        set { _myProperty = value; }
    }

    protected override void CreateChildControls()
    {
        base.CreateChildControls();

        using (SPSite site = new SPSite("http://" + Page.Request.Url.Host.ToString()))
        {
            SPServiceContext context = SPServiceContext.GetContext(site);
            UserProfileManager upm = new UserProfileManager(context);

            string CurrentUserLoginName = SPContext.Current.Web.CurrentUser.LoginName;
            UserProfile CurrentUser = upm.GetUserProfile(CurrentUserLoginName);

            CorpID = CurrentUser["CorpID"].Value.ToString();
            _myProperty = CorpID;
        }
        this.Controls.Add(new LiteralControl(this.MyProperty));
    }

    [ConnectionProvider("Provider for User Profile Properties")]
    public IWebPartField GetWPConnectFieldProvider()
    {
        return this;
    }

    public void GetFieldValue(FieldCallback callback)
    {
        callback.Invoke(this.MyProperty);
    }

    public PropertyDescriptor Schema
    {
        get
        {
            return TypeDescriptor.GetProperties(this)["Provider for User Profile Properties"];
        }
    }
}
.

}

役に立ちましたか?

解決 2

ItransformableFilterValuesインタフェースを実装する必要がありました。

他のヒント

どのインターフェースを使用していますか?(ヒント:コードを投稿してください; - )

標準リストは、IWebPartField、IWebPartrow、IWebPartTable、およびIWebPartParametersをサポートしています。あなたが使用したいものはあなたが達成したいものに依存します。

データの行全体を転送したいので、IWebPartrowを使用します。

> http://msdn.microsoft.com/ja-us / library / MS494838%28office.12%29.aspx

ライセンス: CC-BY-SA帰属
所属していません sharepoint.stackexchange
scroll top