くらっちのクラウド日記

仕事や勉強で得た Microsoft 365 関連の技術知識を投稿していくブログです。

【PowerAutomate】文字列検索にはコレがおすすめ!

はじめに

PowerAutomate で「文字列に指定の文字列が含まれている場合」を条件分岐として使いたいということありませんか?
・メール件名に【お知らせ】という文字が含まれていた場合、条件分岐でTrueにしたい
SharePoint のタイトル列に【重要】という文字が含まれていた場合、条件分岐でTrueにしたい
など。

そんな時は「テキストの位置の検索」アクションを使うと便利です!!

目次

「テキストの位置の検索」アクション

「テキストの位置の検索」アクションは、「検索テキスト」が「テキスト」のどこに含まれているかをチェックしてテキストの位置を数値で返すアクションです。

返される値は下記例を参考にしてください。

例:テキスト「こんにちは、今日はいい天気ですね。」

検索テキスト =「こんにちは」 ※検索対象が先頭にある場合
戻り値 = 0

検索テキスト =「今日」の場合 ※検索対象が7文字目にある場合
戻り値 = 6

検索テキスト =「Hello」の場合 ※検索対象が存在しない場合
戻り値 = -1

文字が含まれている、いないで条件分岐

上記例からわかるように「検索文字が含まれている場合は0以上が返されて、検索文字が含まれない場合は -1が返される」ので、これを条件にします。

実装は下図のようなイメージです。
「本文 次の値以上 0」とすることで、検索文字が含まれている場合は「はい」に移動します。

検索文字が2カ所以上に存在する場合

テキストに検索対象の文字が2カ所以上存在していた場合は、最初の位置のみ返されますのでご注意ください。

【PowerShell】PowerAutomate Freeなどライセンスの自動付与を禁止したい

はじめに

PowerAutomate Free や PowerBI Free などは管理者がライセンスを付与しなくてもユーザーがアプリを使おうとした場合、自動的にライセンスが付与されます。
しかし、組織としてはライセンスを自動付与をさせたくないシーンはありそうです。
そこで今回はライセンスの自動付与を禁止する方法をご紹介します。

目次

ライセンスが自動的に付与される?

ライセンスが自動付与される機能は「セルフサービス サインアップ」といいます。

セルフサービス サインアップ機能:
ユーザーが PowerApps や PowerBI などサービスの利用を開始する際、該当するライセンスが付与されていない場合に自動的に無償ライセンス(Freeライセンス等)が付与される機能です。
テナント内に存在しないメールアドレスでサービス利用を開始しようとした場合は、同時に新規ユーザーが作成されます。

参考:組織でのセルフサービス サインアップの使用

ライセンスの自動付与を禁止する

Teams 試用版 ライセンスの場合

Teams の試用版ライセンスを自動付与させたくない場合は、M365管理センターで下記手順を実施します。
※2022/12/20 現在、この項目は Microsoft Teams Exploratory のみに有効な制御です。
※他ライセンスへの影響はありません。

1.管理者アカウントで Microsoft365 管理センター にアクセスします。
2.左側メニューより [設定] - [組織設定] に移動します。
3.[サービス] タブ内の、[ユーザーが所有するアプリとサービス] をクリックします。
4.[ユーザーが組織の代理として試用版を開始できるようにする] のチェックを外します。
5.保存します。

参考:Microsoft Teams Exploratory ライセンスを管理する

Teams 以外の場合

PowerApps や PowerBI などTeams以外のサービスは、PowerShell を実行することでライセンスの自動付与を制限できます。
実施前に PowerShell モジュール [MSOnline (Azure AD v1)] をインストールしてください。

参考:Azure AD PowerShell インストール方法

1.PowerShell を管理者権限で起動します。
2.下記コマンドを実行してサインインします

Connect-MsolService

3.ライセンスの自動付与を禁止する対象に応じて下記いずれかのコマンドを実行します。

現時点でテナント内に存在しないユーザーに対して、ライセンスの自動付与を禁止する
Set-MsolCompanySettings -AllowEmailVerifiedUsers $False

既存のユーザーと、テナント未登録のユーザーの両方に対してライセンスの自動付与を禁止する
Set-MsolCompanySettings -AllowAdHocSubscriptions $False

4.下記コマンドを実行して設定変更が反映されていることを確認します。

Get-MsolCompanyInformation | select AllowEmailVerifiedUsers,AllowAdHocSubscriptions


※実施例

注意事項

  • 上記の設定を変更した場合でも、既にユーザーに付与されているライセンスや、サービスの既存の利用状況には影響を与えません。

  • 「AllowEmailVerifiedUsers」と「AllowAdHocSubscriptions」の値を $True にすることでライセンスの自動付与を許可します。

  • ライセンスの自動付与制限は、テナント単位での設定となります。

  • 特定のグループや特定のユーザーなど、範囲を指定して制限することは出来ません。

  • ライセンスの自動付与を禁止した場合でも、管理者は管理センターから各ユーザーに Free ライセンスを付与することは可能です。

【PowerAutomate】SharePoint上のフォルダを自動削除しよう

はじめに

SharePoint のアクションには「ファイルの削除」「フォルダの作成」アクションはあるのに「フォルダの削除」アクションがありません。
「ファイルの削除」アクションでフォルダ削除もできるのでは?と思いますが、残念ながらこれも不可です。
「フォルダの削除」アクションはありませんが、他の方法で削除することができたので今回ご紹介したいと思います。

目次

SharePoint に HTTP 要求を送信します

結論として「SharePoint に HTTP 要求を送信します」アクションを利用することでフォルダ削除ができます。
下図を参考にアクションの設定を行ってください。

下図フローは、SharePointサイト内の「サンプルライブラリ」にファイルが作成されたときにファイル作成場所にある「一時フォルダ」フォルダを削除します。


SharePoint に HTTP 要求を送信します」アクションの「方法」に「DELETE」を設定します。
「尿(URI)」には下記URI を記入してください。
<削除フォルダのPath>には、ドキュメントライブラリからのPathが入力されるようにします。
<削除フォルダのPath>で指定されたフォルダが削除されます。

URI ⇒
_api/web/GetFolderByServerRelativeUrl('<削除フォルダのPath>')

URIの記載例 ⇒
_api/web/GetFolderByServerRelativeUrl('DocLib/テストその3/一時フォルダ')

実行結果

処理を実行すると下図のようにドキュメントライブラリ内の対象フォルダがきれいさっぱりと削除されました。

注意事項

・フォルダを削除するとき、フォルダ内のファイルも削除されます。
・フォルダ内のファイルを誰かが掴んでいる場合、フォルダ削除ができません。
・フォルダ削除時、確認ダイアログは表示されません。
・削除したフォルダは、サイトのゴミ箱に移動します。

皆さんの PowerAutomate 活用の一助となれたらうれしいです。 もし参考になりましたら お気に入り登録などして頂けると今後の励みとなりとても喜びます。

【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)

JSON関数に関するMicrosoft公式情報はコチラから

実行結果

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 の後続の処理で煮るなり焼くなり好きに調理しましょう!!

少しでも皆様のお役に立てば嬉しいです。