0

SPFieldText から継承するカスタム フィールドの作成に成功し、入力フォームでのコントロールとしてのレンダリングを完全に制御できるようになりました。

問題:

GetFieldValueAsHtml() を使用してフィールドをレンダリングするときに、クエリ文字列に ListId と ListitemID を含むポップアップへのリンクを作成する必要があります。

このようなもの:

public class CustomField : SPFieldText
{
    public CustomField (SPFieldCollection fields, string fieldName)
        : base(fields, fieldName)
    {
    }

    public CustomField (SPFieldCollection fields, string typeName, string displayName)
        : base(fields, typeName, displayName)
    {
    }

    public override string GetFieldValueAsHtml(object value)
    {
        return string.Format(
            "javascript:window.open('{0}/_layouts/Popup.aspx?ListId={1}&ItemId={2}','Popup','status=0,scrollbars=0,titlebar=0,resizable=1,toolbar=0,location=0,width=600,height=500');return false;",
            SPContext.Current.Web.ServerRelativeUrl.TrimEnd('/'), 
            LISTID, LISTITEM.ID
            );
     }

明らかに、SPContext はリストまたはアイテムへの参照を保持しておらず、どのプロパティも現在のアイテムを公開していないようです。コントロールでプロパティをオーバーロードしようとしましたが、フィールドをレンダリングするときに呼び出されないようです。

// None of these properties are invoked when rendering the field as above    
public class CustomFieldControl : TextField
{
     public override object ItemFieldValue
     public override object ListItemFieldValue
     public override string Text
     public override object Value
}

fldtypes_Custom.xml で RenderPattern を試してみましたが、これも GetFieldValueAsHtml(); を使用してフィールドをレンダリングするときに無視されます。

私は単純に不可能なことを期待していますか? 私は、Web パーツの書き換えを回避するアプローチを受け入れます... または、それはできないとだけ言ってください。

(既存の Web パーツはグリッドをレンダリングし、GetFieldValueAsHtml() を呼び出します。これを実現するために Web パーツを変更できることはわかっていますが、それは他の理由から理想的なソリューションではありません)。

4

2 に答える 2

0

これに出くわした人のために、私が目指していたことが不可能であることを確認しました.

このレベルのカスタマイズを実現するには、Web パーツに変更を加える必要がありました。質問で概説したように、既存の Web パーツはグリッドをレンダリングし、GetFieldValueAsHtml() を呼び出します。

于 2012-12-12T22:22:27.177 に答える
0

これが SharePoint 2007 で機能するかどうかはわかりませんが、SharePoint 2010 では、SPContext.Current.ListItem を使用して、現在表示されている ListItem を簡単に取得できます。

于 2010-11-14T00:12:51.053 に答える