3月はPower Automate Desktop単体のお話をしましたが、今回はクラウド上のPower Automateからフローを呼び出す方法についてお話させていただきました。

 

 .NETラボ5月度勉強会

 

 Power Automateから呼び出すことで、手動実行しかできなかったPower Automate Desktopのフローを定期実行または、その他トリガー(メールを受け取る、Teamsでメンションが来たなど)を引き金とした実行が可能になります。

 Power Automateのトリガーもフローで、Power Automate Desktopの方の処理もフローと呼ぶのは少し紛らわしいですよね。

 

Power Automateを使ってみた from Makoto Nishimura

 2021年3月度の.NETラボ勉強会でPower Automate Desktopについてお話しました。

 

.NETラボ 勉強会 2021年3月

 

 ちなみに.NETラボはコロナ禍の2020年初めから、いち早くオンラインでの開催を行い、ほぼ毎月開催している素晴らしい勉強会です。

 スタッフの皆様に感謝!!

 

 その時に使用したスライドが以下です。

Power Automate Desktop入門 from Makoto Nishimura
 
 時間が無くて話しきれなかった部分もありますので、主にデモ周りについてブログに補足しておきます。
 

使用したPower Automate Desktopのバージョン

 
 デモのサンプルはバージョン2.6.00158.21069で動作確認済みです。
 
 

フローはコピペできる

 
 フローの編集画面で、フローを選択してコピーすると、そのフローを文字のコードとしてコピーできます。
 そのままPower Automate Desktopのフロー編集画面に張り付けるとフローとして追加することができます。
 
 例えば「3秒待つ」というフローは以下のコードになります。
 
WAIT 3 
 
 このコードを張り付けると以下のようにフローが追加されます。
 デモ解説で掲載したコードはこのように使用してください。
 

デモ00:パワーポイントを起動してスライドを開始する

 
 デモという形ではありませんが、初めにパワポをPower Automate Desktopのフローで起動してセッションを始めました・・・始める予定でした。
 実際は、最後のF5キーの入力が上手くいかず、手動で開始することになりました。
 
 その際に作成したフローが以下。
 
 
・アプリケーションの実行
・Wait(2秒)
・キーの送信(F5)
 
 ノートPCの性能の問題でアプリケーションの起動に2秒以上かかったのが原因でF5キーの送信が早すぎたのだ予想。
 フローのコードは以下。
 
System.RunApplication ApplicationPath: $'''C:\\Program Files (x86)\\Microsoft Office\\root\\Office16\\POWERPNT.EXE''' CommandLineArguments: $'''/C \"C:\\Users\\macni\\Desktop\\202103251826_Power Automate Desktop入門.pptx\"''' WindowStyle: System.ProcessWindowStyle.Normal ProcessId=> AppProcessId
WAIT 2 
MouseAndKeyboard.SendKeys TextToSend: $'''{F5}''' DelayBetweenKeystrokes: 10 SendTextAsHardwareKeys: True
 
 1行目はパワーポイントを/Cのオプション付きで起動しています。/Cはファイルを指定してパワーポイントを起動するオプションです。
 パワーポイントのパスや、実行するパワポのファイルパスは書き換えて使用してください、
 
 3行目はF5キーを送信しています。F5キーは特殊なキーなのでフローを作成する際には「マウスとキーボード > キーの送信」の設定で「特殊キーの挿入 > ファンクションキー」から選択してください、
 

DEMO : 03 変数を用意してプラグラミングっぽく扱う

 
 
 
 変数を作成して、foreachでリストを処理したり、テキストに書き込んだりします。
 
・変数の設定
・新しいリストの作成
・項目をリストに追加
・項目をリストに追加
・For each
・テキストをファイルに書き込みます
・For each(End)
 
  ファイルの書き込みがサクッとできるのは良いですね。
 
 コードは以下です。6行目のファイルの書き込み先は適宜書き換えてください。
SET StringValue TO $'''サンプル'''
Variables.CreateNewList List=> ListValue
Variables.AddItemToList Item: StringValue List: ListValue NewList=> ListValue
Variables.AddItemToList Item: $'''テスト''' List: ListValue NewList=> ListValue
LOOP FOREACH CurrentItem IN ListValue
    File.WriteText File: $'''C:\\Users\\macni\\Documents\\hoge-%CurrentItem%.txt''' TextToWrite: CurrentItem AppendNewLine: True IfFileExists: File.IfFileExists.Append Encoding: File.FileEncoding.Unicode
END
 5行目のLOOP FOREACHで取得したリストの要素を、6行目のファイル名で利用しています。

 このフローを実行するとhoge-サンプル.txtとhoge-テスト.txtというファイルがドキュメントフォルダーに作成されます。
 

DEMO04 : エラー処理

 
 開発する際にエラーの処理方法をまず把握するのが大事、ということでエラー処理について簡単なサンプルを作成しました。
 「エラーの補足」「エラー情報のファイル書き込み」「エラーをポップアップメッセージで表示」この辺の処理が試せるサンプルです。
 
 フローは以下の画像の通り。
 
 
 エラーは4行目で、1行1列から始まるExcelの存在しない0行0列に書き込みを行い、発生させています。
 
 3行目の「ブロック エラー発生時」はオプションでエラー発生時に「フロー実行を続行する」を指定しています。ブロック以降でエラー内容をファイルに書き込んだり、メッセージを表示するために処理を続行します。
 
 
 ちなみにブレークポイントを使って処理を途中で停止、変数の中身を確認することもできます。なかなか多機能。
 
 コードは以下。
 
# 操作できない行を操作してエラーを出す
Excel.Launch Visible: True LoadAddInsAndMacros: False Instance=> ExcelInstance
BLOCK sample
ON BLOCK ERROR
    NEXT ACTION
END
    Excel.WriteCell Instance: ExcelInstance Value: $'''throw error''' Column: 0 Row: 0
    ERROR => LastError
END
File.WriteText File: $'''C:\\Users\\macni\\Documents\\PowerAutomateDesktopErrorSample.txt''' TextToWrite: LastError AppendNewLine: True IfFileExists: File.IfFileExists.Append Encoding: File.FileEncoding.Unicode
Display.ShowMessage Title: $'''エラー発生''' Message: LastError Icon: Display.Icon.None Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: False ButtonPressed=> ButtonPressed
 

DEMO05 : Excelを操作

 
 業務ということでExcelファイルを操作してみました。
 
 
 Excelを起動し新規ワークシートに値を書き込み、別のExcelにその値をコピーするというサンプルです。
 フローを見てもらえれば処理は理解できると思います。
 「Excelワークシートから読み取り」でデータを変数に読み取る際には開始行列、終了行列を指定する必要がありますが、書き込みは開始行列だけでOKです。
 
Excel.Launch Visible: True LoadAddInsAndMacros: False Instance=> ExcelInstance1
SET i TO 0
LOOP WHILE (i) < (6)
    Excel.WriteCell Instance: ExcelInstance1 Value: i Column: 1 Row: i + 1
    Variables.IncreaseVariable Value: i IncrementValue: 1 IncreasedValue=> i
END
SET i TO 0
Excel.Launch Visible: True LoadAddInsAndMacros: False Instance=> ExcelInstance2
Excel.ReadCells Instance: ExcelInstance1 StartColumn: 1 StartRow: 1 EndColumn: 1 EndRow: 10 ReadAsText: False FirstLineIsHeader: False RangeValue=> ExcelData
Excel.WriteCell Instance: ExcelInstance2 Value: ExcelData Column: 2 Row: 1
 
DEMO06 : サブフローの実行
 
 Power Automate Desktopではメインのフロー以外にサブフローを作成してメインフローから呼び出すことができます。
 長いフローをサブフローに分けておけば可読性が良くなります。
 
 サブフローを呼び出すコードは以下。
 
CALL Subflow_1
 

次はPower Automateと連携させたい

 
 今回はそこまで解説できなかった&Power Automateのトライアルが1か月(延長でプラス1ヵ月)しかないので、別の機会を貰って.NETラボ勉強会で「Power AutomateからPower Automate Desktopのフローを呼び出してみた」というお話をしたいと思います。
 

 「改訂2版 基礎からわかるC#」ということで、おかげさまを持ちまして改定版を出すことができました。

 表紙も新しく青色中心のデザインに代わりました。ありがとうございます。

 

 C#9に対応ということで、色々書き直したのですが、その中で書き間違いが見つかったりと、恥ずかしい思いをしながら作業にあたりました。

 

 ページ数は増えましたが、もともとの、少ないページ数でサラッとC#の機能を一覧できるというコンセプトは保たれていると思います。

 C#は初版で扱った6以降のバージョンで、大きな機能追加は少ないながらも、痒いところに手が届く機能追加が多数行われています。nullチェックの書き方や、式の拡張などC#らしい書き方はドンドン進化しているので、楽しい半分、大変半分です。


 タイトルの通りですが、.NETラボ2月勉強会でお話をしました。

 

 色々紹介する予定でしたが、今年は.NET 5 and 6が大きく、そぼその話題になってしまいました。

 .NET Framework、.NET Core、monoと色々派生が生まれていたアプリケーション開発の下地にようやくOne .NETの光明が差し始めた気がします。

 .NET 6でXamarinなどが取り込まれて晴れて開発・実況環境が統一されれば、様子見していた人も手を出しやすくなるんじゃないでしょうか。


 8はちょっと待ってねというお話。

 以下のページに記載されているようにPHPの対応バージョンは7.1 〜 7.4です(2021/01/21現在)。

 

EC-CUBE 4.0 開発者向けドキュメントサイト::EC-CUBEについて

 

 XAMPPの最新版を落としてくるとPHP8がインストールされるので、ご注意ということで。

 


 久しぶりにXamarinを触ろうとしたが、Macのバージョンが古く(High Sierra)、iOS開発ができない・・・というわけで、Macをバージョンアップしようとしたところ、バージョンアップに失敗してしまった。

 コマンド∔Rのメニューもセーブモードも起動せず、診断モードもダメ・・・何をやってもアップデートに失敗画面になってします。残すはUSBからインストールして復旧かなぁと思ったが、USBを作成するのにMacが必要・・・嫁のiMacがあるが手間をかけるのも忍びないのでM1 Mac miniを新調することにしました。

 アップルストアが対応したので、Amazonを使って翌日配達。便利な世の中になったものだ。

 

System.AggregateException

 

 新しいM1 Mac miniが到着したので接続テスト。Windows上のVisual Stduioからペアリングはできたが、デザイナーをプレビュー表示しようとしたらSystem.AggregateExceptionエラーが発生してしまった・・・。

 Mac上のVisual Stduio for Macでも同じエラーが出るからWindows側の問題ではなさそうだが、Macは最新の状態(購入後一度アップデートがあり最新になった)だし、XCodeもVisual Stduio for Macも入れたてで最新・・・ちょっと解決の道は遠そう。

 

 プレビューはあきらめて、Windows上でシミュレーターで表示できればOKとしよう。

 

シミュレーターが真っ黒

 

 というわけで、シミュレーターでデバッグしてみたら、画面が真っ黒で何も表示されない。

 Windows側でシミュレーターの機能をオフにしてMac上でシミュレーターを起動したらちゃんと表示された・・・。

 他にも必ず出るわけではないエラーが出たりクラッシュしたり・・・。

 

 よし、他のことをしよう(諦観)。

 


 サーバー移行が終わったのか、終わってないのかよくわからない(IPアドレスは変わった気がするけど、PHPのバージョンが上がっていない?)ので、ブログに凝った記事などを残すと痛い目を見そうなので、軽い備忘録を残しておく。

 

 .NET Framework、.NET Core、.NET 5と実行環境が色々混在する過渡期の今「プロジェクトのC#のバージョンは何だっけ?」となることも多いと思うので確認する方法。

 

#error version

 

 と記述するとプログラムはエラーになるけど、エラーメッセージでコンパイラのバージョンと言語バージョンが確認できる。

 たまに確認したくなるんですよね。

 

 追伸:Unityで試してみたらlatestと表示されて確認できないケースがあることを知った・・・latest指定でもその最新バージョンを表示すると思い込んでいました。

 

 ちなみに普段使うことはあまりないと思うけど、バージョンを指定したい場合は.csprojに以下のようなタグを記述。どの辺に挿入するかなど仔細は省略。

 

    <LangVersion>5.0</LangVersion>

 

 


 このブログはhetemlというレンタルサーバー上で動いている。

 もともとFlash Media Serverが遊べるレンタルサーバーとして選択したのだが、現在はFlash Media Serverの機能は無くなり、お値段据え置きという微妙なコスパになっている。

 

 このhetemlが2020年から2021年にかけて、古いサーバーを強制的に新しいサーバーに移行させることになった。

 PHPのバージョンは上がるし、古いサーバーだとセキュリティ上の問題もあるだろう、サーバーのスペックもたぶん上がるからメリットも大きいが、強制的に移行というのは中々にリスキーな気もする。

 

 移行用のドキュメントを見た感じ、

 

・DBはそのまま

・ファイルはコピー

・DNSはムームーなら自動で変わるよ

・動作確認はhostsを変えてみてね

 

 という感じだ。現状、アクティブなのはWordPressで動いているブログぐらいなので、放置していても問題なく移行が終わる気もする。

 むしろトラブった際の訓練用に半分放置しておこうと思う。

 

 というわけで、対応は以下のようにする予定。

 

・WordPressのuploadsフォルダーだけバックアップ

・DBは触らないみたいなので信じてノータッチ

・DNSはムームーなので自動で変わるのだろう

・hosts書き換えて一応見てみる

・あとはトラブったらその時対応。復旧不能でも、まぁ、いいや。

 

 というわけで、FTP(厳密にはSFTP)でuploadsフォルダーだけバックアップしておいた。

 あとは移行時にトラブルがあったらその備忘録を残そう。

 

追記:

 2020年11月5日現在の状態を確認してみたら、新サーバーで10月12日以降にアップロードした画像が404になっていました。

 旧サーバーから新サーバーへのファイルのバックアップは10月12日に取られて終わりってことかもしれません。DBは変わらないので記事がなくなることはないでしょうが、この辺をあまり考えずに旧サーバーにメディアファイルをアップロードしていると移行時に苦労するかもしれません。移行完了してもしばらくは旧サーバーからファイルを落とせるなら良いのですが、もし旧サーバーにアクセスできなくなってしまうと、復旧が面倒そう。

 

 hostsを新サーバーに設定しても「PHPのバージョンが古い」という警告がWordPress側で消えないので、何か理解できてないポイントがある気もするけど、前にも書いたとおり、トラブルになったら対応方針で様子見。