鍋綿ブログ

C#・SharePoint・SharePoint Framework・Office365を中心に扱うブログです。

SharePoint FrameworkでWebパーツ同士を結合するやり方

SharePoint Framework でWebパーツを作る際、自作のWebパーツ同士を結合して相互作用させたい場面があり、その実現に苦労したので備忘を残しておきます。

 

【2019年5月追記】

この記事はSPFx v1.6 時点の情報で、グローバル変数を利用したデータ共有を行っています。SPFx v1.8 から「動的データ」が利用できるようになりましたので、今後は動的データの利用を推奨します。

www.micknabewata.com

 

 

動作イメージ

Webパーツを2つ以上開発し、それぞれが相互作用するようにします。
今回は2つのWebパーツを用意しました。

 

1.テキストボックスWebパーツ

接続する側のWebパーツです。入力された値を接続先Webパーツに送ります。接続先Webパーツはプロパティ画面で選択できるようにします。

 

2.カードWebパーツ

接続される側のWebパーツです。接続元から送信された値を表示します。

 

テキストボックスからカードに送信した値は、即座にカードに表示されます。画面全体のリロードや表示の遅れは確認した限りありません。

f:id:micknabewata:20180909203245j:plain

値が送信された様子

接続先Webパーツの選択肢は、カードWebパーツを配置したりタイトルを変更したりすると自動で作成されます。選択肢のテキストは、Webパーツのタイトルプロパティを採用しています。

f:id:micknabewata:20180909203242j:plain

接続先Webパーツを選択する様子

仕組みの概要

Webパーツのインスタンスをグローバル変数に保管し、インスタンスが公開するパブリックメソッドを介してタイトルの取得やテキストの送信&再描画を行っています。

以下の記事を参考にしましたが、記事にも記載のとおりグローバル変数は他のJavaScriptコードから影響を受けるため良い方法とは言えません。

クライアント側の Web パーツ間でデータを共有する | Microsoft Docs

 

将来的には、動的データ機能を利用してコンポーネント間の接続を行うことができるようです。現在はプレビュー中のため本番環境では利用できません。

動的データを使用して、SharePoint Frameworkコンポーネントを接続する | Microsoft Docs

サンプルコード

GitHubに公開しました。

GitHub - MickNabewata/connect-webpart: SPFx sample code that connect a webpart to anothor webpart

 

テストコードがほとんどないのはサボったから・・もとい、BaseClientSideWebPartクラスが@microsoft/sp-httpモジュールをインポートするからです。解決策、ないんですかね。。。

SharePoint Frameworkでユニットテスト - 鍋綿ブログ