ブログ

Power Automate Desktopの「Webサービスを呼び出します」アクションを使ってDomoのAPIを使ってみる(Dataset情報の取得)

前回の「Power Automate Desktopの「Webサービスを呼び出します」アクションを使ってDomoのAPIを使ってみる(アクセストークンの取得)」の続きとなります。

今回はDomoのDataSet API(解説ページはhttps://developer.domo.com/docs/dataset-api-reference/dataset)からList DataSetsを用います。

下記のように前回取得したアクセストークンをAuthorization: bearer<your-valid-oauth-access-token>に指定し実行すると・・・

GET https://api.domo.com/v1/datasets?sort=name&offset=20&limit=10
Accept: application/json
Authorization: bearer <your-valid-oauth-access-token>

下記のようにJSON形式でDataSet管理情報であるid、名前、行数、列数、・・・が取得可能です

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 948

[{
"id": "a7b2ceee-367e-48bd-a9b8-4ed485fcb16",
"name": "dev受注残高照会01",
"rows": 502645,
"columns": 86,
"owner": { "id": 879743153, "name": "アルファー太郎" },
"dataCurrentAt": "2021-11-11T06:44:54Z",
"createdAt": "2021-02-05T08:56:22Z",
"updatedAt": "2021-11-11T06:44:55Z",
"pdpEnabled": false
},
{
"id": "aa4af506-7a3d-40ed-853d-7b30089535c",
"name": "Base Metrics",
"rows": 731,
"columns": 18,
"owner": { "id": 879743153, "name": "アルファー花子" },
"dataCurrentAt": "2021-11-11T06:41:17Z",
"createdAt": "2021-10-20T05:26:52Z",
"updatedAt": "2021-11-11T06:41:18Z",
"pdpEnabled": false
},
{
"id": "5223cbd2-e221-483d-876d-317a7796a2d",
"name": "Location Metrics",
"rows": 148,
"columns": 20,
"owner": { "id": 879743153, "name": "アルファー" },
"dataCurrentAt": "2021-11-11T06:40:15Z",
"createdAt": "2021-10-20T05:28:38Z",
"updatedAt": "2021-11-11T06:40:15Z",
"pdpEnabled": false
}]

今回は上記からid、name、rows、colums、ownerのnameと、このRPA定義を実行した日時を、取得年月日として列に追加し、さらに取得年月日時分をファイル名に付け加え、c:\tmpに保存する仕様にしました。

Power Automate Desktopでやっている事

以下のような流れで設定しています。

  • DomoのList DataSets APIの呼び出し
  • 返って来たjson形式のファイルを加工し易いようにオブジェクト変換
  • RPA定義実行日時をデータとして書き込み、保存ファイル名に付加するため現在日時を取得
  • EXCELを起動し1行目に項目名(ヘッダー)を書き込み
  • DomoのList DataSets APIで取得したデータを順番にEXCELへ転記
  • 取得年月日時分をファイル名に付け加えc:\tmpに保存

DomoのList DataSets APIの呼び出し

前回同様Domo APIで解説されている、下記のような表現を、どのようにPower Automate Desktopに設定するか?
になります。

GET https://api.domo.com/v1/datasets?sort=name&offset=20&limit=10
Accept: application/json
Authorization: bearer <your-valid-oauth-access-token>

下記のように設定すると稼働しました。あくまでも例ですので、もっと上手なやり方もあると思います。

  • URL:https://api.domo.com/v1/datasets
  • メソッド:GET
  • 受け入れる:application/json
  • コンテンツタイプ:application/json
  • カスタムヘッダー:Authorization: bearerに半角スペース後に前回取得したアクセストークン

カスタムヘッダーに指定するアクセストークンは60分程度で無効になるようですし、上記のように、いちいち指定していられないので、実際は前回画面に表示/ファイル保存しているアクセストークンを%accessToken%と言った変数を作成し、取得したアクセストークンを格納しAuthorization: bearer %accessToken%と指定すると良いでしょう。

返って来たjson形式のファイルを加工し易いようにオブジェクト変換

上記実行すると%WebServiceResponce%変数にListDatasets情報が入っているので%WebServiceResponce[0]['id']%等と指定すると一行目のid情報が取得できそうな気がしますが、ひと手間必要でした。下図のように「JSONをカスタムオブジェクトに変換」を用いRPAが処理し易い形式に変換が必要でした。変換した値は「生成された変数」としてJsonAsCustomObject変数に格納され、次工程の「DomoのList DataSets APIで取得したデータを順番にEXCELへ転記」ステップで用います。

RPA定義実行日時をデータとして書き込み、保存ファイル名に付加するため現在日時を取得

この「現在の日付を取得します」アクションは、本来は変数宣言のように、ド頭にしておくべきかもしれません。今回は「現在の日時」を取得しましたが、年月日しか使わないのであれば「現在の日付のみ」も指定が可能です。

EXCELを起動し1行目に項目名(ヘッダー)を書き込み

今回わざわざEXCEL1行目に項目(ヘッダー)を書いてますが、1行目にヘッダーが既に存在する転記専用のEXCELファイルを作った方が実際は得策です。今回は下図のように「EXCELの起動」アクションを「空のドキュメントを使用」を指定し用います。

デフォルトでは「インスタンスを表示する」がオンになっていますが、これをオフにすると画面にExcelが表示されず(開かず)、バックグラウンドで処理をしてくれます。本番運用ではExcel画面表示しない方が処理スピードが非常に早くなるので、Excelを表示しない方が良いかもしれません。

今後はこの起動したExcelを「生成された変数」である「ExcelInstance」で読み書きなどの操作が可能になります。

開いたEXCELシート1行目にヘッダーを書くには、文字通り「Excelワークシートに書き込み」アクションを用います。下図は1番左上である1列目の1行目にヘッダー項目「データセットID(id)」を指定しています。

ですので1行目にヘッダーを順に書き込むには列の指定を2,3,4・・・として、その列に対応した「書き込む値」を指定すると良さそうです。下図は2列目のヘッダー「データセット名(name)」をExcelに書き込む場合です。

結局、EXCELを起動し1行目に項目名(ヘッダー)を書き込みフローは下図のようになります。

ここで重要なのは最後の「変数の設定」で変数countを宣言し2を設定している事です。これは次工程での転記が2行目から始まりますので、転記開始行を表す2を設定しています。

DomoのList DataSets APIで取得したデータを順番にEXCELへ転記

APIで取得したデータは何行も存在しますので、転記は2行目へ転記、3行目へ転記・・と言った繰り返し処理になります。Power Automate Desktopには繰り返しを意味するループアクションにLoopとFor eachがあります。今回は For eachを用いました。Loopは自身で繰り返し数を指定し制御する(ように見えた)に対して For eachは存在する行数を自動で最後の行まで繰り返してくれるので楽に思えたからです。

下図のように「反復処理を行う値」に、前ステップの「返って来たjson形式のファイルを加工し易いようにオブジェクト変換」で変換し生成された変数「%JsonAsCustomObject%」を指定すると、繰り返し処理で1行毎に「生成された変数」CurrentItem変数に格納されます。

実際のExcelへの書き込みは下図のように1列目の2行目に書き込むので、前ステップで値を2で宣言したcount変数を「%count%」と指定しています。「書き込む値」はCurrentItem変数にキーを指定し、例えば「%CurrentItem['id']%」のように指定します。

ここ指定する['id']のようなキーは何かと言うと・・・下図のように冒頭でご説明したList DataSets APIの呼び出しで返って来た値のキー項目です。ですので2列目に書き込みたいnameは 「%CurrentItem['name']%」となります。

書き込みたい項目ごとに設定するとフローは下図のようになります。最後に書き込む行を下に一行づつ追加したいので、変数countを1大きくしています。

取得年月日時分をファイル名に付け加えc:\tmpに保存

最後にファイル保存です。
例えば2021年1月2日3時4分に実行するとc:\tmp\Dataset202101020304.xslxが作成されます。

下図はファイル名後半に付けたい取得年月日時分を数字で表した値の生成です。前ステップで取得済みの現在時刻を格納した変数%CurrentDateTime%はそのまま使えないので「datetimeをテキストに変換」アクション「のカスタム形式」を指定しています。変換後生成される変数「FormattedDateTime」をファイル保存時用います。

このカスタム形式での注意点はyyyyMMddhhmmのように時分の時を表すHHをhhにすると12時間表示となってしまう事です。つまり17:15を1715と表現するにはHHmmなのですが、hhmmとすると0515となります。

ファイルの保存は下図のように「Excelを閉じる」アクションで「Excelを閉じる前」に「名前を付けてドキュメントを保存」を指定しています。ファイル名指定は「ドキュメントパス」に「C:\tmp\Dataset%FormattedDateTime%.xlsx」と指定しています。 C:\tmp\ は保存先フォルダー名、Datasetはファイル名前半の固定値、 %FormattedDateTime% は上ステップで生成された 取得年月日時分を数字で表した値となります。

終わりに

本来であればAuthorization: bearerにアクセストークンを手動で指定するのではなく、前回記事と合体させ、変数渡しで一気通貫で処理させるべきです。また処理ブロックごと、サブフローにして見易くすべきです。そして何より今回は要所要所の解説でしたので、後ほど修正版をアルファー・コミュニケーションズ公式YouTubeチャンネルにビデオとして投稿予定です。

pagetop