【PowerAutomate】【Length関数】件数に応じた条件分岐をさせる方法
はじめに
「フォルダ内に0ファイル or 1ファイル以上で処理を分岐させたい」
のように、PowerAutomate でアイテム件数やファイル件数に応じて条件分岐をさせたい場合ってありますよね。
今回はその悩みを解決する方法をご紹介します。
目次
Length関数を利用する
PowerAutomate で件数による条件分岐を行う場合は「Length関数」を使います。
例として下図フローを作成しました。
SharePointリストから「ステータス = 申請中」のアイテムを取得して、結果0件の場合は「はい」、1件以上の場合は「いいえ」に分岐します。

「変数の設定」では、「複数の項目の取得」アクションの Value を length関数 囲って変数「length」に設定します。
これで「複数の項目の取得」アクションの 実行結果を 件数 として取得できるようになりました。
変数「length」を使って条件分岐を行います。
下図では、length関数の結果 = 0件だった場合「はい」に分岐します。
今回の例では、SharePointリストに「ステータス = 申請中」のアイテムが1件あったので結果「いいえ」のルートに進んでいきました。

皆さんの PowerAutomate 活用の一助となれたらうれしいです。
もし参考になりましたら いいねなどして頂けると今後の励みとなりとても喜びます。
【PowerAutomate】「型名のないエントリが見つかりましたが、必要な型が指定されませんでした。」を解決する。
はじめに
「型名のないエントリが見つかりましたが、必要な型が指定されませんでした。型情報を持たないエントリを受け入れるには、モデルを指定するときに、必要な型も指定する必要があります。」
PowerAutomate でこんなエラーが出たとき、解決に苦労しました。
今回は、このエラーを解決するための対処方法2点をご紹介します。
目次
筆者が直面した状況
SharePoint の「ドキュメント(Shared Documents)」ライブラリにファイルが作成された時にファイル名を変更する。
というフローを作成していた時に表題のエラーが発生しました。
エラーが発生したのは「SharePoint に HTTP 要求を送信します」アクションです。
気を付けなければいけないのは、下図赤枠内の2カ所です。

原因その1:type が間違っている
上図の「SharePoint に HTTP 要求を送信します(リネーム)」アクションでボディにPOSTする対象を type で指定しています。
指定する際は下記に従って記入してください。
指定するのが「表示名」ではなく「内部名」である点に注意してください。
構文 "type": "SP.Data.リスト内部名Item" 例1 ドキュメント(Shared Documents)の場合 ”type”: "SP.Data.Shared_x0020_DocumentsItem"
原因その2:metadata の記述が間違っている
上図の「SharePoint に HTTP 要求を送信します(リネーム)」アクションでボディの type を囲む metadata ですが、よく見ると先頭に「__(アンダーバー)」が含まれています。
しかも、アンダーバーは半角1文字でも全角1文字でもなく、「半角2文字」ですのでご注意ください。
アンダーバー1文字の _metadata だと表題のエラーが発生します。

"__metadata":
結論
例のように、ファイル名のリネームを行いたい場合は下記コードを参考にして ボディを作成してください。
{
"__metadata": {
"type": "SP.Data.Shared_x0020_DocumentsItem"
},
"FileLeafRef": "新しいファイル名"
}
【PowerApps】複数選択したユーザーをJSON関数でPowerAutomateに渡す
はじめに
※この記事は、情報を最新化しつつ Qiita から移行してきたものになります。
今回は、PowerApps で複数選択したユーザーを PowerAutomate に渡す方法をご紹介します。
コンボボックスなどで複数選択した値やテーブル値を、単純に PowerApps から PowerAutomate に渡しても、すべてのデータを受け取ることはできません。
では、どうしたらよいのでしょうか。
結論、複数選択した値を PowerApps から PowerAutomate へ渡す場合は PowerApps 上でJSON関数を用いてJSON形式にしましょう。
目次
PowerAutomate側の構築
まずは PowerAutomate 側でJSONを受け取る準備をします。
全体構成
説明用にシンプルなフローを作成しました。
下図のフローでは、
・PowerApps から受け取った JSON を解析(データの抽出)
・解析した結果を保管する変数を用意
・データ数分、処理を繰り返します。
順番に各アクションの中身を見ていきましょう。

JSONの解析
「JSONの解析」アクションで、PowerApps から受け取ったデータ(JSON)を後続の処理で利用できるようにします。
コンテンツには「PowerAppsで確認」をクリックして「JSONの解析_コンテンツ」を配置します。

スキーマにはユーザー情報を取得するため、下記コードをコピペしてください。
{
"type": "array",
"items": {
"type": "object",
"properties": {
"Claims": {
"type": "string"
}
},
"required": [
"Claims"
]
}
}
変数を初期化する
後続の「Apply to each」で利用する変数「username」を用意します。

Apply to each (変数の設定)
「以前の手順から出力を選択」で、「JSONの解析」-「本文」を選択します。
「変数の設定」には、JSONから受け取った「Claims」を挿入します。

ここまでできたら、PowerAutomate 側の設定は完了です。
次はPowerAppsの設定です。
PowerApps側の構築
PowerApps側の画面構成は下図の通り。
UserNameでユーザーを複数選択して実行ボタンをクリックするとJSON形式のデータがPowerAutomate側に渡されます。

利用しているコネクタは下記の2つ。
| コネクタ | 用途 |
|---|---|
| PowerApps | 実行ボタンクリックで PowerAutomate フローを起動。 |
| SharePoint | ユーザー列を含むリストです。 |
ユーザーを複数選択するために
PowerAppsでユーザー選択を可能にするために一番簡単な方法は、SharePointリストのユーザー列を追加することです。
今回は事前にSharePointリスト(JSONチェック リスト)を用意して、Form1として追加しました。
Form1内の「UserName_DataCard1」が複数選択可能なユーザー列です。
DataCard内のコンボボックス(図のDataCardValue2)の設定「複数選択の許可」がオンになっていることを確認してください。

この UserName_DataCard1 でユーザーを複数選択可能にしただけでは、PowerAutomate側にJSON形式でデータを渡すことはできません。
重要なのは、実行ボタンクリック時の処理です。
JSON関数を利用する
「実行ボタン」の「OnSelect」に下記のコードを入力します。
Set(jsonApprover,JSON(DataCardValue2.SelectedItems.Claims,IndentFour)); PowerAutomateのフロー名.Run(jsonApprover);
1行目でUserNameで選択したユーザーをJSON形式に変換しています。
この時「DataCardValue2.SelectedItems.Claims」を指定していますね。
PowerAutomate側でも「JSONの解析」アクションなどで「Claims」という単語が使われていました。
PowerApps側からJSON形式で「Claims」を受け取ったため、PowerAutomate側で同じ名前を指定することでデータを処理できるようになったのです。
JSONに変換されたデータは、2行目の「PowerAutomateのフロー名.Run()」でPowerAutomate側へ渡されます。
JSON関数について
JSON関数の構文は以下の通りです。
JSON(DataStructure [, Format ] )
DataStructureは、テーブル名を入力。
※複数選択可能なコンボボックスなどもテーブルとして扱われます。
Formatは、ユーザー情報を使用する場合「IndentFour」を使用。
具体的には以下のように使用します。
JSON(DataCardValue2.SelectedItems.Claims,IndentFour)
実行結果
PowerAppsアプリを実行すると下図の通りユーザー情報を受信できました。
「JSONの解析」で出力される値:
PowerAppsから受け取ったユーザー情報が Claims に入っています。

「変数の設定」で出力される値:
「JSONの解析」で出力されたデータ分、変数「username」に Claims のデータが入っています。

これで完成です!!
JSONは慣れるまで扱いが難しいですが、理解できればすごく有効な方法です。
JSON関数は幅広く活用できるものだと思いますので、色々チャレンジして使ってみるといいかもですね。
【PowerApps】コンボボックスで複数選択した値を PowerAutomate で利用する
はじめに
※この記事は、情報を最新化しつつ Qiita から移行してきたものになります。
PowerApps のコンボボックスは、既定の動作として複数選択した内の「最後の選択肢」のみを PowerAutomate に渡します。
複数選択した値全てを PowerAutomate で使いたい場合これでは困りますよね。
今回紹介するのは、PowerApps の「コンボボックス」で複数選択した値をすべて PowerAutomate に渡して利用するための方法です。
目次
PowerApps 画面構成
今回は下記の操作を想定したアプリを作成して説明を行います。
1.コンボボックスで「好きな食べ物」を複数選択する。
2.送信ボタンをクリック。
3.送信ボタンクリックをトリガーに PowerAutomate が起動する。
サンプルアプリの画面構成は下図の通りです。
PowerAutomate 構成
PowerAutomate の構成は下図の通りです。
最低限必要なのは PowerApps トリガーと「JSONの解析」アクションです。
実装方法
1.PowerAutomate:「JSONの解析」を追加する
今回のアプリは、コンボボックスで複数選択した値をJSON形式でPowerAutomate に渡します。
PowerAutomate では、PowerApps から受け取った JSON を解析し、データを分割して使えるようにします。
イメージにするとこんな感じ。
上図右側を見ると「Value」という変数にデータが入っているのが分かります。
このValueを受け取るためには下記スキーマが必要です。
詳細は後ほど説明します。
{
"type": "array",
"items": {
"type": "object",
"properties": {
"Value": {
"type": "string"
}
},
"required": [
"Value"
]
}
}
2.PowerApps:コンボボックスを複数選択可能にする
サンプルでは下記のパーツを配置しました。
ComboBox1 のプロパティ「複数選択の許可」を「オン」にします。
3.PowerApps:ボタンクリックでPowerAutomateのフローを実行する
ComboBox1 で複数選択した値をすべて PowerAutomate に渡すために、JSON 関数 を利用します。
Button1 の OnClick に下記コードを記入します。
Set(jsonValue,JSON(ComboBox1.SelectedItems.Value,IndentFour)); 作成したフロー名.Run(jsonValue);
上記、JSON関数内の「ComboBox1.SelectedItems.Value」は、ComboBox1で選択した値全てを含むテーブルです。
実はコンボボックスってデータ型は「テーブル」なんですね。
JSON関数はテーブルやレコードをJSON形式に変換します。
JSON形式に変換されたデータは「フロー名.Run( )」でPowerAutomateに渡します。
PowerAutomate側では、JSON形式に変換された「ComboBox1.SelectedItems.Value」を受け取ります。
「JSONの解析」に記載の「required」で「Value」を指定することで「ComboBox1.SelectedItems.Value」テーブルのデータを扱うことができるようになるのです。
スキーマの記述例はこちら。
{
"type": "array",
"items": {
"type": "object",
"properties": {
"Value": {
"type": "string"
}
},
"required": [
"Value"
]
}
}
実行結果がこちら。
うまくコンボボックスで選択した値が取得できていますね。
あとは、PowerAutomate の後続の処理で煮るなり焼くなり好きに調理しましょう!!
少しでも皆様のお役に立てば嬉しいです。
【Teams】トランスクリプト機能のあれこれ
Teams会議の会話内容を文字起こしする「トランスクリプト機能」についてまとめました。
これから機能を使おうと思っている方の参考になればうれしいです!!
目次
トランスクリプト機能とは
・Teams会議において参加者の発言を 文字起こし する機能。
・日本語による文字起こしが可能。
・文字起こし結果は既定で「120日間」保管されます。
・保管期間は「1~99999日」の範囲で変更可能。
・文字起こし結果は、Wordファイル / vttファイルとしてダウンロード可能。
・ダウンロードファイルには「発言者名、発言時間、発言内容」が記録されます。
・文字起こし開始時、会議参加者には記録中である旨の通知が画面に表示されます。
注意事項
・日本語の文字起こし精度は高くありません。※メモ程度に考えるのが最良。
・トランスクリプト機能は文字記録のみで、音声は記録されません。
・トランスクリプト機能は翻訳は行いません。
・文字起こし結果は、ダウンロードするまでテキスト編集できません。
・複数人が同時に発言した場合、1人分しか文字化できません。
必要な事前設定
予定された会議 / チーム会議 の場合
予定された会議 or チーム会議で機能を使用する場合は下記設定をオンにします。
※グループチャットでトランスクリプト機能を利用する場合も、下記設定をオンにすることで可能になります。通話ポリシー関係ないらしくすごい不思議。。
1.Teams管理センター > 会議 > 会議ポリシー をクリック
2.レコーディングとトランスクリプト > トランスクリプト をオンにする

個人チャットで通話する 場合
トランスクリプト機能を個人チャットで通話する際に使用する場合は下記設定をオンにします。
1.Teams管理センター > 会議 > 通話ポリシー をクリック
2.トランスクリプト をオンにする

利用可能なユーザー
トランスクリプト機能を利用できるユーザーと利用可能な範囲は下表の通りです。
利用可能なユーザー
以下ライセンスを持っているユーザーはトランスクリプト機能を利用できます。
・O365 E1、M365 E3、M365 E5、
・O365 A1、O365/M365 A3、O365/M365 A5、
・M365 F1、O365/M365 F3、
・M365 Business Basic、M365 Business Standard、M365 Business Premium SKU
利用可能な操作
トランスクリプト機能で利用できる範囲は下表の通りです。

文字データの保存場所とダウンロード
文字データは ExchangeOnline上(機能を実行者したユーザーの領域)に保管されます。
全ユーザーはダウンロードするまで文字データにアクセスすることができません。
また、Teams会議を開催した場所によってダウンロード場所が異なります。
下記を参考にダウンロードしてください。
予定された会議(単体)の場合
カレンダーに登録された会議の会議詳細からダウンロードが可能。
予定された会議(繰り返し)の場合
カレンダーに登録された会議の会議詳細からダウンロードが可能。
チーム会議の場合
「会議を開始しました」のスレッドに「トランスクリプト」が追加されている。

個人 / グループチャットの場合
個人チャットの場合、チャット画面に「トランスクリプト」と表示されている。

参考
【PowerAutomate】PowerAppsから値を受け取る方法 3選
PowerApps でアプリを作成する場合、ボタンクリックで PowerAutomate を起動するシーン多いと思います。
PowerApps から PowerAutomate 側に値を渡す際は、Run関数を利用すればよいのですが、PowerAutomate 側の値の受け取り方はいくつかあります。
今回は私が知る方法3つをご紹介したいと思います。
目次
1.PowerApps トリガーを利用する
最初にPowerApps トリガーを利用する方法です。
PowerApps から受信した値を利用したい場所で「PowerAppsで確認」を選ぶと新しいコンテンツが作成されます。

作成されるコンテンツの名称は下図のように「アクション名_項目名」になります。
一度作成したコンテンツは、同じフロー内であればいつでも利用できます。

PowerApps では、Run関数を利用して作成したコンテンツに渡したい値を記載すればOK。

ただし、下記点にご注意ください。
一度作成したコンテンツはフローから削除しても裏では残り続けるため、PowerApps で Run関数 を作成する際は「削除したコンテンツも存在する」ものとして値を設定する必要があります。
意外と忘れてしまう落とし穴なのでご注意を。。

2.PowerApps トリガーを利用する &「JSONの解析」を利用する
次は「JSONの解析」を利用して PowerApps から情報を受け取る方法です。
「PowerApps」トリガーの直下に「JSONの解析」アクションを配置します。
「コンテンツ」で「PowerAppsで確認」をクリックしてコンテンツを作成し、「スキーマ」には下記を参考に JSON を記述します。
//PowerAutomate 側
{
"type": "object",
"properties": {
"XXXXX": {
"type": "string"
},
"YYYYY": {
"type": "integer"
}
}
}
「XXXXX」と「YYYYY」はパラメータの名称です。自由に変更してください。
PowerApps の Run関数は下記のような書き方になります。
JSON関数に記載するパラメータの名称は PowerAutomate で定めた名称と合わせる必要があります。
同様に、PowerApps から渡す値の型も PowerAutomate 側で定めた型(type)に合わせてください。
※PowerAutomate で「"type": "integer"」とした場合、PowerApps はValue関数を利用するなどして数値として渡す必要があります。
PowerAppsにおけるJSON関数については こちら をご覧ください。

送信ボタンの OnClick に記述するコマンド例
//JSON形式のパラメータをPowerAutomateに渡す
'フロー名'.Run(
JSON(
{
XXXXX: TextInput.Text,
YYYYY: Value(NumberInput.Text)
},
JSONFormat.IndentFour
)
);
3.PowerApps(v2) トリガーを利用する
最後に PowerApps(v2) トリガーを利用する方法です。
「PowerAutomate(v2)」トリガーを選択して、「+入力の追加」をクリックすると下図のようにパラメータの種類が選択できます。
パラメータの種類を選択して名前を付けると、以後は作成した名前のパラメータが利用できます。
PowerApps のRun関数に入力する項目も PowerApps(v2) トリガーで作成した項目が必要で、上図における Run関数 は下記のような構成になります。
PowerApps から渡す値の型は PowerAutomate 側で定めた型(type)に合わせてください。
※PowerAutomate で「数」を選択した場合、PowerApps も数値型で渡す必要があります。
// Title=text型、No=number型 'フロー名'.Run( Title, No)

参考
#PowerApps のJSON関数を使ったFlowへのパラメータ渡し
Power Apps の JSON 関数【Docs】
【PowerAutomate】SharePointグループのメンバーを抽出してメールを送りたい
はじめに
SharePoint グループにはメールアドレスがないので、SharePointグループに対してメールを送れません。
しかし、PowerAutomate を使えば SharePointグループ に含まれるメンバーを抽出して、メールを送ることができます。
フローの完成イメージはこんな感じです。
一つ一つ手順を説明していきたいと思います。

目次
手順
SharePoint グループからメンバーを取得して全員にメールを送るフローを作成します。
1~4の順番にアクションを追加してください。
1.SharePoint に HTTP 要求を送信します

このアクションでSharePointグループに含まれる全メンバーのユーザー情報を取得します。
対象のサイトを選択して、URIには下記を入力してください。
URI:_api/web/sitegroups/getByName('SharePointグループ名')/users
結果、下記例のような情報を取得(出力)します。※一部省略
{
"d": {
"results": [
{
"__metadata": {"省略"},
"Alerts": {"省略"},
"Groups": {"省略"},
"Id": 21,
"IsHiddenInUI": false,
"LoginName": "i:0#.f|membership|testuser@contoso.onmicrosoft.com",
"Title": "テスト 太郎",
"PrincipalType": 1,
"Email": "testuser@contoso.onmicrosoft.com",
"Expiration": "",
"IsEmailAuthenticationGuestUser": false,
"IsShareByEmailGuestUser": false,
"IsSiteAdmin": false,
"UserId": {
"NameId": "100320004d7fed7c",
"NameIdIssuer": "urn:federation:microsoftonline"
},
"UserPrincipalName": "testuser@contoso.onmicrosoft.com"
}
]
}
}
2.選択

「動的なコンテンツの追加」からそれぞれ下記の式を入力します。
開始 :{body('SharePoint_に_HTTP_要求を送信します')?['body']?['d']?['results']}
マップ:item()?['Email']
開始は、情報を取得する場所を示します。
「SharePoint に HTTP 要求を送信します」アクションの出力結果を見ると ['d'] > ['results'] の下に各種ユーザー情報が含まれているのでそこから情報を取得します。
マップで item()?['Email'] とすることで取得した情報のうち Email 部分のみを抽出します。
今回の場合は、SharePoint グループに含まれるメンバーのメールアドレスを取得しているわけです。
結果、下記のように出力されます。
kurattyo@contoso.co.jp, testuser@contoso.co.jp, admin@contoso.co.jp
3.作成

「選択」アクションで取得した値はカンマ区切りです。
しかし、メールの宛先として使う場合はセミコロン区切りに修正する必要があるので、join関数で「選択」アクションで取得したメールアドレスをカンマ区切りに修正します。
「動的なコンテンツの追加」から下記の式を入力します。
入力: {join(body('選択'),';')}
結果、下記のように修正されて出力されます。
kurattyo@contoso.co.jp; testuser@contoso.co.jp; admin@contoso.co.jp
4.メールの送信

最後に抽出したメンバー全員にメールを送信します。
宛先で「作成」アクションの「出力」を選択します。
「作成」アクションでメールアドレスをセミコロン区切りにしたので、今回抽出した全ユーザに対して一度にメール送信ができるようになっています。
その他:1ユーザーごとにメール送信したい場合
「4.メールの送信」の宛先に、「作成」アクションの「出力」を選択すると全員に一括送信されます。
しかし、1ユーザーごとにメールを送信したい場合はどうすればよいのでしょうか?
「Apply to each」を追加してその中に「メールの送信」を配置します。
「以前の手順から出力を選択」に「選択」アクションの「出力」を配置してください。
「選択」アクションの「出力」は下記のようにカンマ区切りのメールアドレスが入っています。
カンマ区切りのメールアドレスを利用すると、1ユーザーごとに処理が行われるようになります。
kurattyo@contoso.co.jp, testuser@contoso.co.jp, admin@contoso.co.jp

参考
Power Automate get SharePoint Group Members & flow code snippets【YouTube】









