タグ別アーカイブ: JSON

難解そうなPower Automateのデータ操作コネクタの概要に触れる

【データ操作コネクタにはデータの扱いそのものに強くなれる機能が満載です】

Power Automateには「データ操作」コネクタがあります

このコネクタを使いこなせると、Formsで受け取ったデータの扱いやCSVの扱いなど、データ操作自体に強くなれます

今回は、実際のアクション別に概要に触れていきます

記事の最後にはこのコネクタを使う隠れた秘訣も2つ解説します

作成アクション

作成アクションでは様々なデータを作成できます

このアクションの特徴は形式を自動的に認識してくれることです

実際に下の画像のようなデータを入力してフローを動かしてみます

そして、実行結果から「未加工出力の表示」をクリックします

するときちんとダブルクォーテーションが入力され、文字列と認識されているのが分かります

次は配列を入力してみます

今度もちゃんと配列で出力されています

結合アクション

結合アクションでは、配列を指定した区切り文字で結合処理を行うことができます

例えば、前述の「作成2」の配列を;で結合したいとします

画像に alt 属性が指定されていません。ファイル名: image-16.png

この場合は下の画像のように結合アクションを作成します

指定する2段の箇所の内、1番目の段には結合する配列を動的コンテンツにて指定します

2番目の段には区切り文字「;」を指定します

そして、実際にフローを動かすと配列内の文字列が結合されます

選択アクション

以下のようなオブジェクト*が、作成アクションを通じて作成してあるとします

*文脈によっては配列という場合もあると思いますが、ここでは分かりやすくするためにオブジェクトとします

オブジェクトの項目は名前、身長、体重の3つがあります

こちらを1つなどに絞り込むのに、選択アクションが使えます

上の画像の「開始」には動的コンテンツで配列が作成されたアクション名を指定します

そしてマップの名前にはオブジェクトの項目名(キー名)を指定します

右側にはitem関数にて値を設定します

このItem関数を使うのがこのアクションのポイントです

このItem関数により、取得したオブジェクトの項目を抽出します

項目の仕方は「?」を追加した後、項目名を[”]内に指定します

それでは実際にフローを実行します

アレイのフィルター処理

選択アクションでは3つの項目がある配列から1つに絞り込みました

「アレイのフィルター処理」では条件に合う配列の内容に絞り込みます

上記の画像は実際のアレイのフィルター処理の内容です

「差出人」という表現になっていますが、こちらでは動的コンテンツにて配列を指定します

差出人の下の欄では前述のItem関数を使用して条件を指定します

次の画像の実際にフローを実行した際の出力内容です

オブジェクトの内容が「Aさん」のものに絞り込まれています

CSVテーブルの作成

CSVテーブルの作成アクションでは、オブジェクトからCSVファイルを作成することができます

今回は、前述の「アレイのフィルター処理」を動的コンテンツで指定しています

「作成したCSVファイル」アクションで出力された内容は「ファイルの作成」アクションを通じ、Sharepointサイトに出力します

実際にフローを動かすと、以下の内容が「作成したCSVファイル」アクションが出力されます

そして、ファイルの作成アクションを通じて、指定フォルダー内に以下のようなCSVファイルが作成されます

HTMLテーブルの作成

こちらはCSVテーブルの作成とほぼ同じ内容になりますので、詳細は割愛します

実際の使用例としてメール内に出力してみます

本文内では動的なコンテンツで「HTMLテーブルの作成」を設定します

実際にフローを動かすと「HTMLテーブルの作成」アクションで出力された内容が、送信したメール本文内に出力されます

JSONの解析

JSONの解析については、作成とセットで解説させて頂きます

最終的には、一見利用できないようなデータから必要なデータを抽出できるようにします

コンテンツ

JSONの解析ではまず、解析する内容を指定します

今回は前述の作成3を使用します

こちらの内容は、JSONの解析の「コンテンツ」に動的コンテンツにて設定します

スキーマ

まずフローを実行した履歴から「作成3」出力結果をコピーしておきます

その後、「サンプルから生成」をクリックします

すると、次のGIF画像のように新たな入力画面が開きます

入力画面はに、前述コピーした内容を貼り付けます

作成

作成アクションでは「JSONの解析」の内容を繰り返し処理により取得します

下のGIF画像のように、作成アクションで「JSONの解析」の内容を動的コンテンツで取得すると「Apply to each」が自動的に適用されます

下の内容が実際にフローを動かしたときの作成アクションの内容になります

<まとめ>

今回はPower Automateの「データ操作コネクタ」の概要について解説しました

このコネクタの操作に慣れると、Power automate活用の幅は格段に広がります

実際の使用例についてはまた別途、記事を書こうと思います

最後にこのコネクタを上手に使うための隠れたポイントを2つ解説します

ポイント1

「データ操作コネクタ」を動的コンテンツで取得するケースがはとても多いです

通常だと「作成~」となってしまい、区別があまりつかなくなってしまいます

ですので、アクション名については明確に区別がつく名前をつけておきましょう

ポイント2

「データ操作コネクタ」では、他のデータ操作コネクタを動的コンテンツを通じて参照するケースが多いです

ところが、参照したものが「出力」や「本文」というような2文字に集約されて表示されるので、何を参照したかよくわからなくなってしまいます

この場合はアクションの右上の三点リーダーから「コードのプレビュー」を使用しましょう!

どのアクションを参照したかが良く分かります

ちなみに、上の画像ではアクション名は「作成 3」なのに「作成_3」と表示されています

これはアクション名に空白がある場合は、_で置き換えられることを意味します

今回の記事では関数は扱いませんでしたが、関数でアクション名を使用する際は_を意識しないとエラーになるケースがあるので注意が必要です

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

Uploadしたエクセルファイルを直接コレクションにする~Power Apps~

【エクセルファイルをSharepointリストなどを経由せず、直接Power Apps内で編集できるようにします】

エクセルファイルの内容をSharepointリストに反映する前に、一旦編集したいケースもあると思います

その場合、一旦Sharepointリストに反映してしまうと「削除」を行う必要がでてくるなど、やたらと時間がかかることがあります

今回はJSON形式を経由して、直接エクセルファイルの内容をPower Appsに取り込みます

記事の解説は大きく分けると、次の3つになります

・エクセルをPower Appsから始動して一旦、OneDriveに名前を変えて保存する

・エクセルファイルをJSON形式に変えてPower Appsに送信する

・Power AppsでJSON形式を通常のコレクションにする

上記のうち「エクセルをPower Appsから始動して一旦、OneDriveに名前を変えて保存する」については、お手数ですが過去の記事をご参照願います

前提条件

・Uploadするエクセルファイルの中身は最初からテーブル形式になっていること

*OfficeScriptでPower Automateのフロー内で自動的にテーブル形式にすることもできます⇒過去記事

・Uploadするエクセルファイルの列は固定であること

ファイルのアップロード及びPower Automateの起動

フォームのパーツを使用してファイルをUploadする方法は過去の記事を参照してください

今回はファイルのアップロードしてコレクションを作成するまでの間は「処理中」と表示します

この「処理中」を表示するためには、ボタンの「OnSelect」プロパティにてUpdateContext関数を組み込みます

UpdateContext関数で更新する変数はラベルのVisibleプロパティに組み込んでおきます

そして、Power Automateフローを起動する時には変数:myflowで受け取れるようにします

UpdateContext({myflow: 

             エクセルインポート.Run(

                                         {

                                         contentBytes: First(DataCardValue.Attachments).Value,                                                              

             name: First(DataCardValue.Attachments).Name

                                    }

              )

});

Power Automate内でのJSON形式への変換

ファイルの作成

Power Automateフロー内ではPower Appsから受け取ったファイルの内容を基にして、まずはOneDrive内に新たなファイルを作成します

作成されるファイル名は過去に作成したものと同じにならないように、現在時刻をファイル名に入れます

*OneDrive内では作成したファイルを削除したり、ファイル自体を上書き更新するには一定期間を空けなくてはなりません。その為、このような処理を行います

JSON形式への変更

選択アクション

UploadしたエクセルファイルをJSON形式に変換するには、データ操作コネクタの選択アクションを使用します

「表内に存在する行を一覧表示」アクションで読み込んだ内容を「選択」アクションでJSON形式に当てはめていきます

この時に「日時」と「数値」形式の内容については、関数を使用してきちんと該当の形式に変換しておきます

・日時形式 ⇒例:formatDateTime(item()[‘Date’],’yyyy/MM/dd’)

・数値 ⇒例:int(item()?[‘Sales’])

注意

「選択」アクション内で、うまく動的コンテンツでエクセルの内容を拾えないことがあります

この時は2つ対応方法があります

・動的コンテンツの工夫

通常「表内に存在する行を一覧表示」アクション内では下の画像のように、ファイルの指定内容は動的コンテンツにて指定します

選択アクションにて動的コンテンツを使用するまでは「パス」ではなく、実際のファイルパスを指定しておきます

選択アクション内で動的コンテンツを設定したら、元通り「パス」を設定し直しておきます

・式での指定

一度、コードのプレビューを見てみましょう

上の画像を見ると、開始の「value」で処理する内容は<item()?[‘列の中身’]>で抽出できることがわかります

実際に<item()?[‘列の中身’]>を使用する時は、下の画像のように「式」の中で@を入れないことも大きなポイントです

JSONの解析

JSONの形式変更の最後では「JSONの解析」アクションを使用します

スキーマは「サンプルから生成」から作成しますが、こちらは一旦「””」で設定してフローを動かして設定します

*あまりUploadするファイルの行数が多いと取得できませんので、その場合は行数が少ないサンプルファイルを使用します

フロー動かした後の出力結果をコピーし、どこかメモ帳にでもコピーしておきます

その後、サンプルから生成をクリックし、次に表示される画面にコピーしてスキーマを作成します

Power Appsへの受け渡し

作成したJSONはPower Appsに受け渡します

上の画像では「msg」としてPower Appsに受け渡しますが、Power Apps内ではそのまま「msg」では抽出できませんので注意が必要です

Power Apps内でのコレクションの作成

Power Automateから受け取ったJSONの内容は、次の画像のようになっています

コンテキスト変数内で更に「msg」を経由することで「JSONの内容」を抽出できるようになっています

このJSONからコレクションを作成するには、2つの関数を使用します

ParseJSON関数」と「ForAll関数」です

最初のParseJSON関数では、受け取ったJSON形式の内容を解析します

解析した内容には形式がありませんので、次の画像のようにTable関数でTable形式にします

Table(ParseJSON(myflow.msg))

Table関数で作成したテーブルの内容は、ForAll関数でコレクションにします

ここで注意点です

ParseJSONで解析した内容はValueで抽出します

しかも、Valueで抽出しても形式が無いので、次のようにText関数やValue関数で形式を付与します

 {  

              Product:Text(Value.Product),  

              Date:Text( Value.Date),  

              Customer:Text( Value.Customer),  

              Sales: Value(Value.Sales)   

 }

ここで、JSON形式をコレクションにする内容を全てみてみましょう

 Clear(myJson);

ForAll(

        Table(ParseJSON(myflow.msg)),

          Collect(

                    myJson,

                    {

                      Product:Text(Value.Product),

                      Date:Text( Value.Date),

                      Customer:Text( Value.Customer),

                     Sales: Value(Value.Sales)

                   }

        )

)

 まず最初に作成するコレクション:myJSONをクリアしておきます

その後に、前述のようにParseJSON関数で解析しながら、JSONの内容を全てコレクションにします

<まとめ>

今回はエクセルファイルをアップロードしてコレクションにする方法を解説しました

具体的な内容としては①エクセル⇒JSON、②JSON⇒コレクションというように2段階で変換を行うので少し重い内容となっています

但し、意外と躓きやすい箇所が他にあります

「表内に存在する行を一覧表示」のアクションです

既存の設定だと2つ注意点があります

1.出力される行数が256行に限定される

こちらは設定を変えておきましょう!

上の画像の設定をクリックすると次の画面が開きます

こちらで「しきい値」を変えると出力する行数の上限を引き上げられます

2.DateTime形式

こちらは「ISO 8601」にしておかないと、日付形式の箇所はエラーになります

「ISO 8601」の他に「Serial Number」というのもありますが、その場合は日付形式の内容を設定するには「addDays関数」を使用します

こちらについては後日、別途詳細な記事を書きたいと思います

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

POWER AUTOMATE DESKTOP でAPIを操作してデータを取得するの巻

 APIは「アプリケーション・プログラミング・インターフェイス」の略語で、Webスクレイピングとは違い、あらかじめネット上に公開してあるデータを収集します

今回の記事では、Power Automate Desktopを使用してAPIを操作する方法を解説します

 尚、APIそのものについてはこの記事では詳細には解説しませんので、もっと詳細を知りたい方は他のサイト等を参考にされてください

データの時間

ビジネス+IT

実際に記事の内容を動かしてみて、APIというものを実感して頂けたら幸いです

一番簡単なパターン/登録不要

通常、APIを利用する際にはAPIを利用するサイトで登録を行い、ID等を事前に取得する必要があります

今回は、登録が必要なしで使えるAPIで操作を行います

その代わり、取得するデータも1行だけになります

 Power Automate Desktopでは、JSON形式にてデータを取得し、さらにデータを成型してメッセージで表示します

実際のフローで使用するのは3つのアクションだけになります

使用するAPIは「zipcloud」の郵便番号検索APIになります

ポイント

データの取得

郵便番号検索APIのサイトで示してあるリクエストパラメーターの型式に従って、リクエスト文を指定の箇所に送り、データを取得します

データの変換

取得したデータはJSON形式になっており、人間の目では読みにくい内容になっています

こちらを郵便番号検索APIのサイトで示してあるレスポンスフィールドの階層に従い、人間の読める内容に変換します

リクエストURL及び指定項目

データの取得に使用するURLは以下のURLになります

https://zipcloud.ibsnet.co.jp/api/search

指定項目の中で必須は郵便番号/7桁のみです

試しに上の画像の(例)をそのままブラウザに入力してみます

https://zipcloud.ibsnet.co.jp/api/search?zipcode=7830060

*「search」と「zipcode」の間に「?」が入力されている点にご注目ください(検索対象の郵便番号を変える場合には最後の7桁を変更します)

すると、次のように表示されます

今回は上記の画像の「address1/高知県」と「address2/南国市」をメッセージで表示します

実際のフロー

APIを操作するフローは3つのアクションで構成されます

アクション1:Webサービスを呼出します

zipcloudのサイトに掲示されているリクエストURL(https://zipcloud.ibsnet.co.jp/api/search?zipcode=7830060)をそのまま使いデータを取得します

使用するアクションは「Webサービスを呼出します」になります

パラメーター:URLの箇所に上記のリクエストURLを入力します

このアクションを動かすと、サイトからJSON形式でデータを取得し、以下の変数にデータを格納します

 下の画像は変数:WebServiceResponseに実際にJSON形式のデータが格納されたところです

アクション2:JSONをカスタムオブジェクトに変換

難しそうなアクション名のアクションですが、要は人間の目では読みにくいJSON形式のデータを読みやすく変換します

上記の画像のようにパラメーター:JSONにはデータが格納されている変数:WebServiceResponseを指定します

このアクションで変換されたデータは変数:JsonAsCustomObjectに格納されます

ここでAPIの取得データ・詳細を確認します

以下の画像はzipcloudの「レスポンス」の画面です

データの階層が2段階に分かれていて、1階層目が「status」「message」「results」の3つなのが分かります

そして2階層目が「results」の下の階層の実際のデータ項目/address1等になっています

ですので、このアクションで変換したデータも同じ構造になっています

上記の画像 はこのアクションで変換した内容を格納した変数:JsonAsCustomObjectの内容です

resutlsの項目の詳細表示をクリックすると次の内容になります

今回取得するのは1行だけですので、1行だけになっています

更に詳細表示をクリックします

次のアクションで上記画像の「address1」と「address2」をメッセージで表示します

アクション3:メッセージを表示

前アクションにて、データをJSON形式から人間の目で見える形に変えて格納した変数:JsonAsCustomObjectから、項目別に抜き出してメッセージを表示します

上記の内容の振り返りになりますが、取得したデータは2階層になっています(一部省略)

・results >>(address1,address2・・・)

上記の階層に対応した形で取得データを「address1」と「address2」に分けて抜き出します

・address1 ➡ %JsonAsCustomObject.results[0].address1%

・address2 ➡ %JsonAsCustomObject.results[0].address2%

実際に上記の2つの内容をアクションに反映したのが次の画像です

以上です➡次回に続く

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ