1年半ほど前、まだPower AutomateのRPA機能がUI flowsだった頃、Power Appsからフローを実行してローカル端末で写真撮影、撮った写真をメール送信する、なんてことをやっていました。
UIフローを使ってスマホからPCのカメラを操作、撮った写真をメール送信する #PowerApps アプリが完成。もちろんノーコード! #PowerAutomate の実例として中々エモくない?😉
これが #UIflows の実力っ!もっと流行れ~😆✨ #PowerPlatform #PowerAddicts pic.twitter.com/sV04fw2HDO— きぬあさ (@kinuasa) December 29, 2019
Power Automate Desktop(PAD)が無償で利用できるようになってからしばらく経ち、ふと思い立ったので同じような事をPADでやってみることにしました。
事前準備
- OneDriveのフォルダをWebDAVでZドライブに割り当て
PADから扱いやすくするため、アップ対象となるOneDrive(今回はOneDrive for Business使用)のフォルダをWebDAVでZドライブとして割り当てておきます。
Docsには下記のように注意書きがあり、OneDriveアプリの方が良さそうなのですが、私自身アプリを使ったことがないので今回はWebDAV接続を使うことにしました。
Mapping a network drive uses WebDav, an older technology which is slower and less reliable than syncing SharePoint files with the new OneDrive sync client. The OneDrive sync client provides Files On-Demand, which allows you to access all your files in OneDrive without using local storage space.
Power Automate Desktopフロー
処理内容は単純で、Windows 10のカメラアプリで写真撮影を行い、撮った写真をマッピングしたフォルダ(Z:)にコピーするだけです。
1. アプリケーションの実行
アプリケーション パスを「microsoft.windows.camera:」とし、URIスキームでアプリを起動します。
2. Wait
カメラの準備ができるまで数秒待ちます。
3. ウィンドウの UI 要素をクリックする
事前に「UI要素の追加」でカメラアプリのウィンドウと「写真の撮影」ボタンを追加しておき、「写真の撮影」ボタンをクリックします。
4. ファイルの作成待ち
カメラロールフォルダに写真ファイルが作成されるまで適当に待ちます。
5. ファイルのコピー
カメラロールフォルダに作成された写真ファイルをZドライブにコピーします。
6. ウィンドウを閉じる
ウィンドウを閉じてカメラアプリを終了します。
7. ファイルの移動
コピーが終わったファイルを「コピー済み」フォルダに移動します。
以上でフローは終了です。
コード
System.RunApplication ApplicationPath: $'''microsoft.windows.camera:''' WindowStyle: System.ProcessWindowStyle.Normal ProcessId=> AppProcessId WAIT 2 UIAutomation.Click Element: appmask['Window \'カメラ\'']['Button \'写真 の撮影\''] ClickType: UIAutomation.ClickType.LeftClick MousePositionRelativeToElement: UIAutomation.RectangleEdgePoint.MiddleCenter OffsetX: 0 OffsetY: 0 LOOP WHILE (Files.Count) < (1) WAIT 1 Folder.GetFiles Folder: $'''C:\\Users\\***\\Pictures\\Camera Roll''' FileFilter: $'''*.jpg''' IncludeSubfolders: False FailOnAccessDenied: True SortBy1: Folder.SortBy.LastModified SortDescending1: True SortBy2: Folder.SortBy.NoSort SortDescending2: False SortBy3: Folder.SortBy.NoSort SortDescending3: False Files=> Files END File.Copy Files: Files[0] Destination: $'''Z:\\''' IfFileExists: File.IfExists.Overwrite CopiedFiles=> CopiedFiles UIAutomation.Windows.Close Window: appmask['Window \'カメラ\''] File.Move Files: Files[0] Destination: $'''C:\\Users\\***\\Pictures\\Camera Roll\\コピー済み''' IfFileExists: File.IfExists.Overwrite MovedFiles=> MovedFiles
実行画面
下図がフローの実行画面です。
カメラアプリによって写真撮影が行われ、撮った写真がOneDriveのフォルダにアップロードされていることが確認できます。
OneDriveへのアップロードができれば、クラウドフローで写真をTeamsに投稿することもできますし(下図参照)、アイデア次第で色々と活用できるのではないかと思います。
上の動画では、下図フローのようにTeamsへの投稿を「ファイルが作成されたとき」トリガー(OneDrive for Businessコネクタ)による処理として分けていますが、デスクトップフローが使える環境であれば一つのフロー内で処理を完結できるでしょう。
この記事へのコメントはありません。