概要
Formsのファイルアップロード機能を用いてオンプレサイドのアプリにPower automate Desktopでデータ入力します。
FormsでアップロードされたファイルはOneDriveに格納されるのでこれを利用します。
テストの前提条件
Windows10pro 20H2
オンプレミスデータゲートウェイ 3000.68.15 December2020(R3)
Power Automate Desktop 2.2.20339.22608
M365
2020年12月の情報です。
#注意事項
複数人でFormsを共有しPADでの処理を無人運用する場合はM365とpower Automate Per user plan with attended RPAに加え両方のUnattended Licenseが必要になると思われます。
詳細については最新の公式ドキュメントを参照してください。
少し古いですが日本語版はこちら
#フローイメージ
1.UserはSwayサイトのFormsに必要事項とExcelデータをアップロード。
2.ExcelはOne Driveに保存されます。
3.PowerautomateがForms入力をトリガーにして起動。
4.必要な情報をオンプレミスデータゲートウェイを介してPower Automate Desktopに伝達します。
5.Power automate DeskTopはOne DriveのExcelデータを取得してオンプレのアプリケーションに処理をかけます。
本来は処理結果を入力をUserに返すようにしたほうがよいと思いますがそこまではやりません。
またオンプレのアプリケーションはレガシーな基幹システムなどが考えられますが今回は電卓(;'∀')で代用です。
#Formsで入力フォームをつくる
1.ダミーの取引先コード入力欄
2.ファイルアップロード欄
ファイルの種類をExcelを選択します。
プレビューするとこのような感じです。
適当に入力して適当なデータをアップロードして一度だけテストしてください。
Power automate desktopフローをつくる
「Forms Cal Demo」という名前でフローを作成しています。
フローの細かな内容については解説しません。
コード空のフローにコピペで張り付けて内容確認が可能です。
ただし少し設定が必要です。
Excel.LaunchAndOpen Path: `` Visible: True ReadOnly: False LoadAddInsAndMacros: False Instance=> ExcelInstance
Excel.GetFirstFreeColumnRow Instance: ExcelInstance FirstFreeColumn=> FirstFreeColumn FirstFreeRow=> FirstFreeRow
Excel.ReadCells Instance: ExcelInstance StartColumn: 1 StartRow: 1 EndColumn: FirstFreeColumn - 1 EndRow: FirstFreeRow - 1 ReadAsText: False FirstLineIsHeader: True RangeValue=> ExcelData
Excel.Close Instance: ExcelInstance
System.RunApplication ApplicationPath: $'''calc''' WindowStyle: System.ProcessWindowStyle.Normal ProcessId=> AppProcessId
UIAutomation.Windows.GetForegroundWindow WindowTitle=> WindowTitle WindowInstance=> AutomationWindow
SET rowcount TO 0
LOOP WHILE (rowcount) <= (FirstFreeRow - 3)
SET columncount TO 0
LOOP WHILE (columncount) <= (FirstFreeColumn - 2)
SET NewVar TO ExcelData[rowcount][columncount]
IF NewVar = $'''%''%''' THEN
SET NewVar TO 0
END
UIAutomation.Windows.FocusByInstanceOrHandle WindowInstance: AutomationWindow
MouseAndKeyboard.SendKeys TextToSend: $'''%NewVar%+''' DelayBetweenKeystrokes: 5 SendTextAsHardwareKeys: False
Variables.IncreaseVariable Value: columncount IncrementValue: 1 IncreasedValue=> columncount
END
Variables.IncreaseVariable Value: rowcount IncrementValue: 1 IncreasedValue=> rowcount
END
MouseAndKeyboard.BlockInput BlockIt: False
UIAutomation.DataExtraction.ExtractData Control: appmask['Window \'電卓\'']['Text \'表示は 0 です\''] ExtractedData=> DataFromWindow
UIAutomation.Windows.CloseByInstanceOrHandle WindowInstance: AutomationWindow
Text.RegexParse Text: DataFromWindow TextToFind: $'''\\d''' StartingPosition: 0 IgnoreCase: False OccurrencePositions=> Positions Matches=> Matches
Text.Join List: Matches Result=> JoinedText
Text.ToNumber Text: JoinedText Number=> TextAsNumber
Display.ShowMessage Title: $'''Forms to calc Demo''' Message: $'''取引先コード:%Tocode%
合計:%TextAsNumber%
受信データ:%filename%''' Icon: Display.Icon.None Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: False ButtonPressed=> ButtonPressed
コードを貼り付けると次ようなエラーが出ますので、
入力変数とOneDriveのExcelファイルへのパス設定、電卓ウインドウのUI要素取を行ってください。
入出力変数を作成
filename
Tocode の2つの変数を作成します。
「Excelの起動」にOneDriveに保存されるExcelパスを登録します。
Formsで一度テストするとOneDriveにExcelファイルがはいっているのでとりあえず指定します。
ファイル名を入力変数%filename%で置き換えます
UI要素の追加
電卓を起動しておいて、この部分のUI要素をCtrl+左クリックして追加します。
このように出来ればOKです。
#Power automateフローをつくる
1.自動化したクラウドフロー
新しい応答が送信されたとき
2.アクション追加
Formsで作った入力フォームを指定
{
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"link": {
"type": "string"
},
"id": {
"type": "string"
},
"type": {},
"size": {
"type": "integer"
},
"referenceId": {
"type": "string"
},
"driveId": {
"type": "string"
},
"status": {
"type": "integer"
},
"uploadSessionUrl": {}
},
"required": [
"name",
"link",
"id",
"type",
"size",
"referenceId",
"driveId",
"status",
"uploadSessionUrl"
]
}
}
デスクトップフローからPower Automate Desktop で構築したフローを実行するを選択。
各項目を以下のように設定するとApply to Eachに勝手になりますが気にしません。
完成です
#テスト
以下のテーブルをエクセルに貼って適当な名前で保存しておきます。(testdata.xlsxにしてます)
a | b | c | d | e | f | g |
---|---|---|---|---|---|---|
2628 | 2250 | 1841 | 2936 | 637 | 2889 | 439 |
769 | 512 | 59 | 380 | 2637 | ||
2267 | 270 | 1396 | 1871 | 2431 | ||
1228 | 1816 | 1507 | 1798 | 1984 | ||
2561 | 2411 | 930 | 2791 | 1434 | ||
2351 | 261 | 129 | 2434 | 2887 | ||
1162 | 408 | 698 | 2290 | |||
2631 | 1207 | 311 | 103 | 2317 | 2873 | 913 |
2906 | 500 | 1780 | 2890 | 603 | ||
1798 | 1615 | 2297 | 2110 | 1198 | 2050 |
Formsに適当に入力して先に保存したExcelデータをアップロードしてみます
電卓起動して動けば成功です。
#まとめ
Formsにファイルのアップロード機能があることすら知らなかったのでPADとの連携を試してみました。
発展の可能性は色々感じました。
フロー自体は30分程度でできたのですが、ライセンスが事務のオッサンには理解するまでしんどかったです。
出来ちゃうからといって、やっていいかとは別ですし。
M365のUnattended Licenseとか存在すら知らなかったぞ。
Formsを共有すると複数人から入力作業ができそうですが、費用的には10人以内であればPower Automate Per user plan with attended RPAをそれぞれに買った方がよさそうです。
それぞれに買うならクラウドを経由する必要はなさそうですが、入力データをログを絡めて保存できるのでFrorms経由もありかもしれません。
人数が増えたり他の共有フローもあるということであればUnattended Licenseに移ればいいのかな。