1

設計時にアイテムを動作させることに興味がありますが、達成したいことを達成できるかどうかはわかりません。新しい 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>
4

0 に答える 0