初期データの投入
次に、データベースのテーブルにデータを登録するフローを作成します。
[1]新しいフローを作成する
Power Automate for Desktopのトップ画面より[+新しいフロー]をクリックして、適切な名前で新規のフローを[作成]します。
[2]メール受信のフローを貼り付ける
メール受信のフローは、前回の記事冒頭からダウンロードできます。ダウンロードした.zipファイルを展開して、「第8回 2.受信メールメッセージを取得する.txt」をエディター上で開き、全選択してコピーします。フローデザイナーでワークスペースをクリックして、ペーストします。
また、フローから読み込む「メールアクセス情報.txt」をドキュメントフォルダーに保存しておきましょう。
[3][メールメッセージの取得]アクションから後のアクションを削除する
[メールメッセージの取得]アクションまでを残して、以降の[変数の設定]アクションを削除します。
この時点でフローを実行すると、変数RetrievedEmailsには未読のメールメッセージオブジェクトのリストが入った状態になります(未読メールを取得するフローであったため、未読のメールがないと何も取得されません)。実行した場合、すべて既読になってしまうので、改めて未読として取得したい場合は、Gmailサイトの受信メール一覧で選択して「未読」に戻しておく必要があります。
[4]データベースに接続する
[データベース]アクショングループの[SQL接続を開く]アクションを配置すると、設定ダイアログが開きます。データベース/テーブル作成時と異なるのは、既にデータベースMAILDBがあるためそれを指定するところです。
[接続文字列]テキストボックスの右側の[接続文字列の作成]ボタンをクリックすると、[データリンクプロパティ]ウィンドウが表示されるので、以下の表のように設定を追加します。
| タブ | 項目 | 設定値 |
|---|---|---|
| プロバイダー | 接続するデータを選択します | SQL Server Native Client 11.0 |
| 接続 | サーバー名を選択または入力 | (localdb)\MSSQLLocalDB |
| サーバーへのログオン情報 | 「Windows NTの統合セキュリティを使用する」を選択 | |
| データベースの選択 | MAILDB |
[接続]タブでは、[接続テスト]ボタンをクリックし、「接続テストに成功しました。」と表示されることを確認してください。その後、[OK]ボタンをクリックすると、元のウィンドウに戻るので、接続文字列が以下のように反映されていることを確認した上で、[保存]ボタンをクリックします(「Initial Catalog=MAILDB」の指定があることに注意)。
Provider=SQLNCLI11.1;Integrated Security=SSPI;Persist Security Info=False;User ID="";Initial Catalog=MAILDB;Data Source=(localdb)\MSSQLLocalDB;Initial File Name="";Server SPN=""
データリンクプロパティウィンドウで指定しなくても、接続文字列を直接入力することもできます。その場合も、データリンクプロパティウィンドウの[接続テスト]ボタンで正しく接続できるか確認できます。空文字設定になっている個所は、設定ごと削除しても問題ありません。
[5]For eachループを置く
[ループ]アクショングループの[For each]アクションを配置すると、設定ダイアログが開きます。
[反復処理を行う]欄から「%RetrievedEmails%」を入力し、保存します。
[6]宛先リストを結合する
メールメッセージ型のToとCcは複数の値を持つリスト型なので1つのテキストにまとめます。[テキスト]アクショングループの[テキストの結合]アクションを[For each]と[End]の間に配置します。
以下の設定を入力し、保存します。
- 結合するリストを指定:%CurrentItem['To']%
- リスト項目を区切る区切り記号:カスタム
- カスタム区切り記号:,
- 生成された変数:%ToUsers%
[7]カーボンコピーのリストを結合する
同じく、[テキスト]アクショングループの[テキストの結合]アクションを[End]の上に配置します。設定ダイアログが表示されるので、以下の設定を入力し、保存します。
- 結合するリストを指定:%CurrentItem['Cc']%
- リスト項目を区切る区切り記号:カスタム
- カスタム区切り記号:,
- 生成された変数:%CcUsers%
[8]テーブルにメールメッセージを登録する
[データベース]アクショングループの[SQLステートメントの実行]アクションを配置すると、設定ダイアログが開きます。
[SQLステートメント]に以下の設定を入力し、保存します。MAIL_TABLEに登録されていないメールメッセージをMAIL_TABLEテーブルに登録するコマンドです。
IF NOT EXISTS (SELECT 1 FROM MAIL_TABLE WHERE Uid = %CurrentItem.Uid% )
BEGIN
INSERT INTO MAIL_TABLE
(Uid
,FromUser
,ToUsers
,CcUsers
,Subject
,BodyText
,Date)
VALUES
(%CurrentItem.Uid%
,'%CurrentItem['From']%'
,'%ToUsers%'
,'%CcUsers%'
,'%CurrentItem.Subject%'
,'%CurrentItem.BodyText%'
,'%CurrentItem.Date%')
END
[9]接続を閉じる
[データベース]アクショングループの[SQL接続を閉じる]アクションを配置すると、設定ダイアログが開きます。既定の設定のまま保存します。
[10]このフローを実行する
フローを保存して、実行します。未読のメールがある場合、MAIL_TABLEテーブルにデータが登録されます。このテーブルに未登録の未読メールが1つ以上ある状態で行わないと、何も登録されません。また、同じUidを持つメッセージは登録しません。
まとめ
Power Automate for Desktopのフローから、DBMSに接続して、データを登録するアクションを説明しました。データが大量になる場合や、他のシステムとのデータを共有・交換する場合などに、データベースが活用できます。データを繰り返し登録するような業務は、フローを作成しておくとことで効率的にミスなく作業を進められます。データベースから、データを抽出する部分は、次回説明します。
