20
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Power Automate Desktop の変数(7)「カスタムオブジェクト型」

Last updated at Posted at 2021-03-11

概要

Power Automate Desktop(以下PAD) の変数についての記事最終回「カスタムオブジェクト型」です。PADのベース言語Robinのドキュメントを参考に試したものをまとめました。「変数の設定」アクションを中心に簡略化した例を挙げながら整理してみようと思います。コードはPADにコピペで試せます。

目次

  1. 概要、数値型
  2. テキスト型
  3. Datetime型
  4. ブール型
  5. リスト型
  6. データテーブル型
  7. カスタムオブジェクト型<今回の記事>

注意

  • すでに使いこなしているかた向けの記事ではありません。
  • Robin言語はあくまでベースであるためPADと異なる部分があります。
  • この記事の内容はすべて試していますが公式の見解とは異なる可能性がありますのでご注意ください。
  • Power Automateクラウドフローの入出力変数については触れていません。
  • 2021年3月の記事です。
  • あくまでも個人のまとめです。
  • 誤りがありましたらコメントでご指摘いただけると幸いです。
  • Robinの公式サイトは2021年4月30日に終了しました。

カスタムオブジェクト型変数について

カスタムオブジェクト型変数はJSON形式のデータを読み込んでPADで扱うことのできるようにする変数です。JSONはPADからは単なるテキスト値としか認識しません。カスタムオブジェクト変数に代入することにより「名前(key)と値」としてPADに認識されます。

JSONもカスタムオブジェクトも名前(Key)は必ず文字列です。値は数値、文字、リストやブールなど、ほとんどの型が使えます。
名前と値を:コロンで分離して波括弧{}で囲います。この構造がJSON、カスタムオブジェクトの最小単位です。

JSONObject = {"Name":Value}
CustomObject = {'Name':Value}

JSONは文字列を""ダブルクォーテーションで囲いますがカスタムオブジェクト型では文字列をシングルクォーテションで囲います。「JSONをカスタムオブジェクトに変換」アクションを使った場合、文字列の囲みはシングルクオーテーションに変換されます。逆にカスタムオブジェクトに対して「カスタムオブジェクトをJSON文字列に変換」アクションをつかうとダブルクォーテーションに変換されます。

「変数の設定」アクションでカスタムオブジェクトを作成

カスタムオブジェクト最小単位

CustomObject1
{'Name':Value}の形式を%で囲むとカスタムオブジェクトになります。くどいようですがカスタムオブジェクトの文字列はシングルクォーテションで囲みます。シングルクオーテーションで囲まれていない文字列は変数として扱われます。変数の設定アクションからこの形式で記述した場合、ダブルクオーテーションは自動的にシングルクオーテーションに変換されます。

2021-02-24-20-52-49.png

2021-02-24-20-54-21.png

カスタムオブジェクトに項目を増やす 

CustomObject2
2021-02-24-23-03-19.png

2021-02-24-23-03-39.png

カスタムオブジェクトの項目にリスト 

CustomObject3
2021-02-24-22-32-20.png

2021-02-24-22-34-41.png

詳細を表示すると追加したリストの値を表示できます。
2021-02-24-22-36-06.png

カスタムオブジェクトの入れ子

内容を少し変えたカスタムオブジェクトをもう1個つくります。
CustomObject4
2021-02-24-22-39-58.png

新たに名前にbrother、値としてリスト[CustomObject3,CustomObject4]で入れ子になったカスタムオブジェクトを作成します。CustomObject5
2021-02-24-22-50-59.png

2021-02-24-22-53-13.png

詳細を表示すると入れ子になっているのがわかります。
2021-02-24-22-54-46.png

2021-02-24-22-55-06.png

値へのアクセス

ichiroのPhone1の値にアクセスする場合のパスは次の通りです。
CustomObject5['brothers'][0]['Phone'][1]
2021-02-24-22-59-32.png

変数ペインから詳細を表示していくことで、どのようなパスで値にアクセスすればよいのか簡単に視認できます。

別の値へのアクセス記述

CustomObject.Name[1]のような書き方でも値にアクセス可能です。
image.png
image.png

カスタムオブジェクト内のリストのカウント

入れ子になっているカスタムオブジェクト内のリストはプロパティ値ではカウントできません。
PADで今のところ唯一使える関数countをつかうこで深い階層のリストをカウントすることができます。
便利な小技です。

image.png
image.png

カスタムオブジェクトをJSONに変換

PADから他のシステムにJSONを渡す場合カスタムオブジェクトを変換する必要があるかもしれません。。
PADには「カスタムオブジェクトをJSONに変換」アクションがあります。上記CustomObject2のように入れ子になっていない単純なカスタムオブジェクトであればJSONに変換できるのですが、CustomObject5のようなリストを含んだカスタムオブジェクトは2021年3月時点での自分の環境ではエラーになります。

image.png
image.png

2022年10月時点ではエラーなく出力されます。
image.png

ここからはただのトライ(失敗)です

そこで次のような方法でカスタムオブジェクトをJSONに変換してみようと試みました。
2021-02-25-00-46-10.png

2021-02-25-00-48-10.png

検索するテキストに'シングルクオーテーション
置き換え先のテキストに"ダブルクォーテーション
2021-02-25-00-50-00.png

VS Codeで開いてみます。
2021-02-25-01-53-52.png

値のテキスト値にダブルクオーテーションがありません。カスタムオブジェクト内で型は維持をするのですが文字の囲みが戻らないようです。
値が数値であればこの方法が使えそうですが、とりあえず駄目ですね。

ちなみにWinautomationのJSONへの変換アクションではカスタムオブジェクトから整形されたJSONに変換できるのでPADもそのうちなおるかもしれません。(希望)

失敗ですが記録ということで消さずに載せます。何かの役に立つかもしれないしね。

今回のコード

SET CustomObject1 TO { 'Name': 'ichiro' }
SET CustomObject2 TO { 'Name': 'ichiro', 'Age': 30 }
SET CustomObject3 TO { 'Name': 'ichiro', 'Age': 30, 'Phone': ['03-0000-0000', '090-0000-0000'] }
SET CustomObject4 TO { 'Name': 'jiro', 'Age': 25, 'Phone': ['03-0000-0001', '090-0000-0001'] }
SET CustomObject5 TO { 'brothers': [CustomObject3, CustomObject4] }
SET Jiro TO CustomObject5.brothers[1]
SET CountCustomObject TO count(CustomObject5['brothers'][0]['Phone'])
Variables.ConvertCustomObjectToJson CustomObject: Jiro Json=> CustomObjectAsJson
Text.JoinText.Join List: CustomObject5 Result=> JoinedText
Text.Replace Text: JoinedText TextToFind: $'''\'''' IsRegEx: False IgnoreCase: False ReplaceWith: $'''\"''' ActivateEscapeSequences: False Result=> OutJSON
Folder.GetSpecialFolder SpecialFolder: Folder.SpecialFolder.DesktopDirectory SpecialFolderPath=> SpecialFolderPath
File.WriteText File: $'''%SpecialFolderPath%/out.json''' TextToWrite: OutJSON AppendNewLine: True IfFileExists: File.IfFileExists.Overwrite Encoding: File.FileEncoding.UTF8

今回のまとめ

JSONについては優れた記事がたくさんあるので今更書くことがありませんでした(;´∀`)

JSON文字列はダブルクオーテーション、カスタムオブジェクトはシングルクオーテーションで囲みます。
PADは「JSON読み込み」>「JSONをカスタムオブジェクトに変換」することで値にアクセスできるようになります
カスタムオブジェクト内の要素はcount関数で数えることができます。
「カスタムオブジェクトをJSONに変換」アクションは今のところリストを含むと上手くいかないようです。

全体のまとめ

「変数の設定」アクションばかりの、とても地味な全7回という長い記事最終回です。
私自身は公式ドキュメントだけでは理解できていなかった部分が結構あったように感じます。
Robin言語のドキュメントを読みながら確認したことでいろいろな発見がありました。
何かと何かをつなぐためには、どのように変数を加工して渡すのか、上手に変数と付き合えるようになりたいです。
おわり!

20
19
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?