質問

実行時にWebパーツを動的に接続する最良の方法をプロトタイピングしています。 Essentaillyでは、いくつかの異なるアプリケーショングループがSharePointのフロントエンド内で消費されるWebパーツを作成できるようになります。すべてのWebパーツは、消費者とプロバイダーを自動的に検出して、実行時に接続を作成する必要があります。

私たちがやりたいのは、Webパートに他の互換性のあるWebパートに自動的に接続することです。ユーザーが2つの互換性のあるパーツをページに追加すると、パーツが適切な接続を作成できる必要があります。パーツ間でデータを渡すための明確に定義されたインターフェイスがあるため、唯一の問題は接続を管理する方法です。明確にするために、ユーザーが自分で接続を作成する必要があることを心配したくありません。

私たちの目的のために、「最良の方法」とは、最も効率的で、エレガントで、標準的なことを意味します。確立されたSharePointデザインパターンを可能な限りフォローしたいと思いますが、コード効率は多少重要です。

各サブクラス化されたWebパートのオニニットイベント中に、ベースWebパーツクラスを使用してこれを行う概念実証を起草することができました。 OnInitイベントは、現在のページのSPWebPartManagerをつかみ、各パートを介して反復し、基本クラスから継承するすべてのWebパートの消費者とプロバイダーの接続を作成します。

SPWebPartManager spManager = SPWebPartManager.GetCurrentWebPartManager(Page) as SPWebPartManager;
foreach (BaseWebPart provider in parts)
{
    foreach (BaseWebPart consumer in parts)
    {
        if (provider != consumer)
        {
            string connectionId = string.Format("WebPartConnection{0}{1}", consumer.ID, provider.ID);
            SPWebPartConnection conn = spManager.SPWebPartConnections[connectionId];
            if (conn == null)
            {
                conn = new SPWebPartConnection()
                {
                    ID = connectionId,
                    ConsumerID = consumer.ID,
                    ConsumerConnectionPointID = "WebPartConnectableConsumer",
                    ProviderID = provider.ID,
                    ProviderConnectionPointID = "WebPartConnectableProvider"
                };
                spManager.SPWebPartConnections.Add(conn);
            }
            connectionCreated = true;
        }
    }
}
役に立ちましたか?

解決

WPSCには、おそらく役立つ公開/購読イベントモデルがあります。 (このモデルでは、サブスクライバーがページにいない場合でも、プロバイダーは常にイベントを提起します。)

特に、登録前およびraiseeventメソッドを参照してください。

http://msdn.microsoft.com/en-us/library/ms414515.aspx

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