困りごと
PowerAppsでのカメラの操作、クラウドへの保存、閲覧方法
設計
- カメラアプリでできそうな事は実装(撮影、撮り直し、カメラ切り替え)
- クラウドは当初Onedriveを想定したが、Onedriveのファイル取得がかなり厄介そうだったので、SharePointのドキュメントライブラリへ保存、閲覧を行う
- SharePointとの繋ぎはPowerAutomateを用いる
実装
アプリは3画面で構成。
カメラ(撮影画面)
PowerApps [挿入]->[メディア]->[カメラ]で
カメラが使える。基本的に主のカメラの映像が映るが
カメラを変えたい場合は、ドロップダウンを挿入し
Itemsに「カメラ」.AvailableDevicesと設定すれば
現在使えるカメラの一覧が得られる。
「カメラ」.Cameraに「ドロップダウン」.Selected.Id
で、カメラの切り替えができる。
画面タップ(onSelect)で撮影、
Collect(「コレクション」,{Date: Now(), Photo:「変数」}と渡し、保存確認画面へ。
カメラ(保存確認画面)
「撮り直し」:Clear(「コレクション」)して撮影画面へ
「保存する」:
後述のPowerAutomateフローを実行し、
SharePointドキュメントライブラリに画像を保存した後
「撮り直し」と同様にClear(「コレクション」)して撮影画面へ
1枚1アップロードの仕様にしているので、都度コレクションは削除しているが、複数同時アップロードにするなら残しておいても良い。
写真一覧確認画面
撮影画面のフォルダアイコンクリックで遷移。
ギャラリーコントロールのItemsにSharePointドキュメントライブラリを追加する。
撮った写真が常に表示されるように、
遷移時にReflesh(「データソース」)を行う。
SharePointドキュメントライブラリの中身の指定は、
画像:ThisItem.サムネイル.(大きさ)
日時:ThisItem.更新日時
とする。
今回は閲覧のみで、削除等の処理は行なっていない。
PowerAutomateフロー
SharePointのドキュメントライブラリを作成した後行う。
「インスタントクラウドフロー」からPowerAppsをトリガーに。
追加するステップは1つのみで、
「SharePoint」ー「ファイルの作成」
サイトのアドレス:SharePointアドレス
フォルダーのパス:ドキュメントライブラリの場所
ファイル名:「動的なコンテンツ」→「ファイルの作成_ファイル名」
ファイルコンテンツ:「式」→decodeDataUriを打った後に、「動的なコンテンツ」→「ファイルの作成_ファイルコンテンツ」を選択。最終的な形は、
decodeDataUri(triggerBody()[‘ファイルの作成_ファイルコンテンツ’])となっていればOK。
テスト
カメラ機能のテスト。
モデルは当方マスコット。
1枚目はキャンセルし、2〜4枚目を保存。
閲覧機能のテスト。
ちゃんとSharePointに上がったものが
閲覧できていることを確認。
気づき
- ハードスペックでカメラの挙動が異様に重い状態あり、検証必要か。
- 当初、SharePointの「画像ライブラリ」で試したところ、環境によってサムネイルが表示されない状態になってしまった為、ドキュメントライブラリに変更した。
- Onedrive for Businessでファイルパス取得しようとすると、フルパスと言いながら変なパスを渡され四苦八苦。プレミアムコネクタが無いとかなり厄介そうだったので導入見送り。
- カメラのCameraプロパティは直接入力しても変わらないのは何故だろうか。
コメント