はじめに
Microsoft To-Do (Business)コネクタを使ったフローを他のアカウントにインポートして実行する場合という限定された条件での気づきです。
Microsoft To-Do (Business)コネクタを使ったフローを他のアカウントにインポートするとそのままでは動作しない
例えばMicrosoft To-Do (Business)コネクタの「フォルダー別にTo Doを一覧表示する(V2)」アクションで、デフォルトのタスクリストに登録されているタスクを取得しているフローを作ったとします。
フローを作成したアカウントで実行するだけであれば問題ありませんが、このフローを他のアカウントにインポートして使うと、実行するとエラーになります。
「item not found」エラーです。これはリストが見つからない状態です。エクスポートしたアカウントにも「タスク」リストはもちろん存在します。
どうして…?
では、アクションをコードビューで見てみましょう。
To Do リストは内部的にはfolderIdという形でidで識別されていることがわかります。
インポートしたフローに同じアクションを追加して「タスク」リストを選択しコードビューで確認すると、インポートしたままのアクションとは内部的なidが異なっていることがわかります。
Microsoft To Doのデフォルト「タスク」は各アカウントに存在します。しかし内部的には異なるidで管理されているため、フローをインポートしただけではidが異なるためエラーとなってしまうわけです。
対策を考える
[対策1]フローをインポートした後で使用しているTo Doコネクタのアクションでリストを選択しなおす
シンプルです。ただ、多数のアクションを使用しているフローではそれなりの手間となったり、修正漏れの可能性が出てきます。
[対策2]デフォルトの「タスク」リストを動的に取得するフローにしておく
考え方
アクションでリストを指定するのではなく、あらかじめタスクリストのidを取得して、アクションのパラメータでタスクリストを指定するところにカスタム値で設定することで、他のアカウントでもそのまま動作させられるようになります。
フロー解説
1.すべての To do リストを一覧表示する(V2)
まずすべてのリストを取得します。
2.[Data Operation]アレイのフィルター処理
デフォルトのタスクリストをフィルターします。
- From
- @{body('すべての_To_do_リストを一覧表示する_(V2)')}
- Filter Query
- @{item()?['Name']}
- is equal to
- タスク
※デフォルトのタスクリストは既知の名前(wellknownListName)を使用してフィルタすることもおすすめです。
この既知の名前(wellknownListName)は、デフォルトで存在するタスク(defaultList)・フラグを設定するメール(flaggedEmails)の2つのリストに設定されているようです。
デフォルトのタスクリストは、メールボックスの設定次第で異なる言語の名前になっている場合があります。そのような可能性があるテナントでは既知の名前(wellknownListName)でフィルターすれば、メールボックスの設定に依存せずフィルターすることができます。
3.[Microsoft To Do (Business] フォルダー別にTo Doを一覧表示する
- To Do リスト
- カスタム値で式として設定
-
body('アレイのフィルター処理-タスク')[0]?['id']