コンポーネントでのCollectionの利用について(PowerAppsでHSLAカラーピッカーコンポーネントを作ってみました。 その3)
コンポーネント内でのコレクション利用はサポート外
コンポーネントでのコレクションの使用は、オフィシャルには、不可となっています。
https://docs.microsoft.com/ja-jp/powerapps/maker/canvas-apps/create-component#known-limitations
また、今回の話と逆の方向ですが、コンポーネントの設定にて、アクセスアプリスコープをONにするとコンポーネント内から、アプリのコレクションやグローバル変数にアクセスできるとなっていますが、これも現在の環境では設定が無いっぽい。
https://docs.microsoft.com/ja-jp/powerapps/maker/canvas-apps/create-component#scope
まだコンポーネントライブラリはプレビュー段階ですし、中には試験段階の機能もあるので、この辺りは致し方ないところでしょう。
いや、使えるっぽい
カラーピッカーのコンポーネントを作った際、なんとか作った色と、付随情報をレコードとして保存して利用したいと思ったのですが、情報をストアするとなったら、やっぱりコレクションが使いたくて(コレクションがサポート外だというのは知っていました)、ダメもとでやってみると、あれ?使える・・・?という感じでした。
ただ、警告は出ます。アプリにインポートした際、名前が競合する場合があるので、避けてください、とのことでした。非推奨ってことですね。
確かに、同じ名前つける、はありそうですし、同じコンポーネントを複数使用した時など、エラーが起きそうな気はします。
使用の際は、自己責任で、オフィシャルなアプリには使わないほうがよさそうです。
コンポーネント外へのデータの受渡し
これにはちょっとハマりました。コレクションに保存した色情報をコンポーネント内のギャラリーに表示して、カラーサンプルとして使用する目論見はうまくいったのですが、やはりコレクションなので、アプリを立ち上げている間だけしか情報が保存されません。アプリのコントロールなどに適用した色の情報を長期的に保持したいなら、コレクション内の情報をコンポーネント外に出力して保存する必要があります。
コンポーネントの出力には、テーブル型のデータを設定できるので、コレクションが使えるならコレクションをそのまま指定してやれば…と思いましたが、コンポーネント内ではエラーが出ないのに、コンポーネントをアプリにインポートしてやると、エラーが出て中身が読めません。(列情報は取得できる)
コレクションという形をとっているのがまずい(多分これが原因)のかと、コレクションの情報をコンポーネント内でテーブル化し、引き出そうとしたりしたのですが、結局のところ、コレクションからデータを引き出す関数のデータソースにコレクションを指定することになるので、エラーがでてしまい、どうにもうまくいきませんでした。
しかし、ありました。回避策!
コレクションからデータが引き出された形になっているものがコンポーネント内に存在していました。それも目の前に。そう、ギャラリーです。
ギャラリー内には、コレクションから吸い出されたデータがありますので、テーブル型のアウトプットに、『ギャラリー名.AllItems』と指定してやると、エラーを出さずにコレクション内の情報をテーブルとして出力できました。これでコンポーネント内のデータをコンポーネント外に出力できるようになりました。
かなり苦戦しましたが、発見した時は、おっしゃ~!と思わず声が出てしまいました。
まとめ(発見したこと)
- コンポーネントでのコレクションの利用はサポート外(オフィシャルには使用不可)だが、非推奨であるだけで、使用は可能(自己責任で)。
- コレクションの中身をコレクション外にエクスポートするときは、データ型をテーブルとし、ギャラリーのAllItemsプロパティを使うとうまくいく(コレクションをデータソースとして指定する記述はエラーが出る)。