設計時にアイテムを動作させることに興味がありますが、達成したいことを達成できるかどうかはわかりません。新しい Web パーツであるchartを作成しました。この Web パーツには、EditorPart を介して構成可能な多数のプロパティを持つ単一のChartSettingsがあり、設定内には多数のSeriesSettingsがあります。
public class Chart : WebPart
{
[Personalizable(Shared)]
public ChartSettings Settings { get; set; }
}
public class ChartSettings
{
public String ConnectionString { get; set; }
public String QueryString { get; set; }
public List<SeriesSettings> { get; }
}
public class SeriesSettings
{
public ChartType Type { get; set; }
public String Theme { get; set; }
}
Chart には Personalizable としてマークされた ChartSettings があるため、シリアル化されます。これは Web 上で正常に機能し、設定は保持され、正しく変更および復元できます。ただし、SharePoint デザイナーなどの別のツール内でページを開くと、変換が原因でエラーが発生し始めます。出力 html は漠然と次のようになります。
<Chart myChartSettings="MyNamespace.ChartSettings"/>
MyNamespace.ChartSettings は、ChartSettings のインスタンスに変換できません。これは、プロパティの TypeConverters で回避でき、コンバーター内でシリアル化などを使用して、次のように生成できます。
<Chart myChartSettings="ConnectionString=A, QueryString=B, SeriesSettings={{Type=Bar, Theme=Daisy}, {Type=Line, Theme=Poppy}}" />
ただし、SharePoint デザイナーなどのツールの html で実際に達成したいことは次のとおりです。
<Chart>
<ChartSettings ConnectionString="A" QueryString="B">
<SeriesSettings Type="Bar" Theme="Daisy"/>
<SeriesSettings Type="Line" Theme="Poppy"/>
</ChartSettings>
</Chart>
これが可能かどうかは誰にもわかりますか? もしそうなら、これを達成する方法は次のとおりです。
- [TypeConverter(typeof(ExpandableObjectConverter))]
- [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
- [コンテンツ プロパティ]
編集
私はほとんどそこにたどり着きました:
public class Chart : WebPart
{
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
[PersistenceMode(PersistenceMode.InnerProperty)]
public ChartSettings Settings { get; set; }
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public class ChartSettings
{
public String ConnectionString { get; set; }
public String QueryString { get; set; }
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
[PersistenceMode(PersistenceMode.InnerProperty)]
public List<SeriesSettings> { get; }
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public class SeriesSettings
{
public ChartType Type { get; set; }
public String Theme { get; set; }
}
これは私に与えます:
<WpNs0:Chart>
<Settings ConnectionString="testConnectionString" SelectQuery="testQuery">
<Series Capacity="4"></Series>
</Settings>
</WpNs0:Chart>
それよりも
<WpNs0:Chart>
<Settings ConnectionString="testConnectionString" SelectQuery="testQuery">
<Series>
<SeriesSettings Theme="default" Type="Bar"/>
<SeriesSettings Theme="default" Type="Area"/>
<SeriesSettings Theme="default" Type="Spline"/>
</Series>
</Settings>
</WpNs0:Chart>