Loading
Salesforce から送信されるメールは、承認済ドメインからのみとなります続きを読む

フロー内で Not In 演算子を使用する方法

公開日: Apr 2, 2026
説明
Salesforce 内では、追加機能を提供する権限セットをユーザーに割り当てることによってユーザーアクセスを拡張できます。

プロファイルが所有者である特殊な種類の権限セットが存在します (IsOwnedByProfile)。これらの権限セットは、そのプロファイルを変更しなければ削除できません。

このナレッジ記事では、プロファイルが所有者の権限セットを確実にそのまま維持しながら、フローを使用して権限セットの割り当てを削除するプロセスについて説明します。

この例では、Winter '23 リリースで導入されたフロー演算子 Not In を使用します。
解決策
オブジェクトモデル
この記事のハウツーの部分に入る前に、権限セットの割り当てがどのように処理されるかを理解するためにオブジェクトモデルにアクセスしてみましょう。

権限セット Diagram.png

Salesforce 内では、権限セットライセンスは、ユーザーのプロファイルを変更せずにユーザーに割り当てることができるライセンスを表します。権限セットライセンスの割り当ては、ユーザーと権限セットライセンスの関係を表します。権限セットは、権限セットの割り当てを通してユーザーに割り当てられた権限のグループを表します。

これらのオブジェクト (特に、フロー内の権限セット、権限セットの割り当て、およびユーザー) 間の関係モデルのために、権限セットの割り当てが現在のユーザーに関連しているが、プロファイルが所有者でない権限セットを削除する必要があります

フローを使用する
 
この場合は、IsOwnedByProfile = TRUE になっている権限セットを除き、ユーザーが無効化されたらすべての権限セットの割り当てを削除します。

このソリューションでは、API 参照名、フローの種類、およびその他の設定が事前定義されます。これを自分の使用事例に合わせて自由に調整し、それを権限セットライセンスの割り当てに拡張してください。権限セットライセンスの割り当てに属性「IsOwnedByProfile」は存在しません。
 
ステップ 1.Salesforce の [設定] (設定の歯車アイコン> [設定] 経由) に移動します。
 
Setup.png
 
ステップ 2.[クイック検索] を使用して「フロー」を検索します。
 
Quick Find.png
ステップ 3.[フロー][新規フロー] の順にクリックします。
 
New Flow.png
 
ステップ 4.フローの種類をレコードトリガーとして設定してから、[作成] をクリックします。
 
Record Trigger.png

ステップ 5.オブジェクトとして [ユーザー] を、条件として [A record is updated (レコードが更新されたとき)] を選択します。
 
Select object.png
 
ステップ 6.[IsActive][{!$GlobalConstant.False}] と等しい場合は [すべての条件に一致 (AND)] のときに実行されるようにフローを設定します。 
           Set Entry.png
 
ステップ 7.[条件の要件に一致するようにレコードを更新したときのみ] に実行されるようフローを設定し、[アクションと関連レコード] 用にフローを最適化します。[完了] をクリックします。
  
When to run the flow.png
ステップ 8.[+] を使用してレコード取得コンポーネントを追加して、現在のユーザーの権限セットの割り当てを取得します。 
a. [ラベル]: 権限セットの割り当てを取得する
b. [API 参照名]: Get_Permission_Set_Assignments
c. [説明]: 現在のユーザーの権限セットの割り当てを取得する
d. [オブジェクト名]: 権限セットの割り当て
e. [条件の要件]: [すべての条件に一致 (AND)]
f. [AssigneeId] 次の値と等しい [{!$Record.Id}]
g. [Sort Order (並べ替え順)]: [Not Sorted (並べ替えなし)]
h. [保存するレコード数]: [All Records (すべてのレコード)]
i. [レコードデータの保存方法]: [すべての項目を自動的に保存]
 
Edit Get record.png
 
ステップ 9.[+] を使用して決定要素を追加して、権限セットの割り当てが見つかったときにのみ次の一連のアクションを実行します。 
a. [ラベル]: ユーザーに権限セットがあるか?
b. [API 参照名]: Does_User_have_Permission_Sets
c. [説明]: ユーザーに権限セットが割り当てられているかどうかに基づいてアクションを実行するかどうかを判定する
d. 結果の詳細
i. [ラベル]: True
ii.[API 参照名]: True
iii.[結果を実行する条件の要件]: [すべての条件に一致 (AND)]
iv.[リソース]: [{!Get_Permission_Set_Assignments}] 値なし [{!$GlobalConstant.False}]
v. [結果を実行するタイミング]: [条件の要件を満たす場合]
e. 結果の詳細
i. [ラベル]: False
 
Edit Decision.png
 
Edit Decision 2.png
 
ステップ 10.IsOwnedByProfile = TRUE である権限セットを取得できるように、[TRUE Path (Outcome) (TRUE パス (結果))] で [+] を使用してレコード取得を追加します。 
a. [ラベル]: プロファイルが所有者の権限セットを取得する
b. [API 参照名]: Get_Permission_Sets_Owned_by_Profile
c. [説明]: IsOwnedByProfile = TRUE であるすべての権限セットを取得する
d. [オブジェクト名]: 権限セット
e. [条件の要件]: [すべての条件に一致 (AND)]
f. [IsOwnedByProfile] 次の値と等しい [{!$GlobalConstant.True}]
g. [Sort Order (並べ替え順)]: [Not Sorted (並べ替えなし)]
h. [保存するレコード数]: [All Records (すべてのレコード)]
i. [レコードデータの保存方法]: [すべての項目を自動的に保存]
 
image.png
 
ステップ 11.次に、[+] を使用して、プロファイルが所有者の権限セットをループ処理します。
a. [ラベル]: プロファイルが所有者の権限セットをループ処理する
b.  [API 参照名]: Loop_around_Permission_Sets_Owned_by_Profile
c.[説明]: プロファイルが所有者の権限セットをループ処理する
d.[コレクション変数]: [{!Get_Permission_Sets_Owned_by_Profile}]
e. [Direction (方向)]: [First item to last item (最初の項目から最後の項目へ)]
 
image.png
 
ステップ 12.ループ内で使用するリソースを作成して、プロファイルが所有者の権限セット権限セット ID を保存します。[ツールボックス] アイコン、[新規リソース] の順にクリックします。 
 
 
ステップ 13.フローのリソースを次のように設定します。
a. [リソース種別]: [変数]
b.[API 参照名]: PermissionSetsToKeep
c.[説明]: 削除から除外する権限セットの権限セット ID を保存する
d.[データ種別]: [テキスト]
e.  [複数の値を許可 (コレクション)]: [チェック]
f.[Available for input (入力に使用可能)]: [チェックなし]
g.[Available for output (出力に使用可能)]: [チェックなし]
 
Edit variable.png
 
ステップ 14.ループ内で [+] を使用して、代入要素を追加します。
a. [ラベル]: 現在の項目をテキストコレクションに追加する
b.[API 参照名]: Add_Current_Item_to_Text_Collection
c.[説明]: 現在の項目をテキストコレクション変数に追加する
d.[{!PermissionSetsToRemove}] 追加する [{!Loop_around_Permission_Sets_Owned_by_Profile.Id}]
 
Edit Assignment.png
 
ステップ 15.ループの外部で [+] を使用して、レコード削除コンポーネントを追加します。
a. [ラベル]: 権限セットの割り当てを削除する
b. [API 参照名]: Delete_Permission_Set_Assignments
c. [説明]: プロファイルが所有者でない権限セットの割り当てを削除する
d. [削除するレコードを検索する方法]: [条件を指定]
e. [オブジェクト]: [権限セットの割り当て]
f. [Condition Requirements for Records to Delete (削除するレコードの条件の要件)]: [すべての条件に一致 (AND)]
i. [AssigneeId] 次の値と等しい [{!$Record.Id}]
ii.[PermissionSetId] 次に含まれていない [{!PermissionSetsToKeep}]

image.png
 
ステップ 16.[保存] をクリックします。
a. [Flow Label (フローラベル)]: 権限セットの割り当てを削除する
b.[フローの API 参照名]: Delete_Permission_Set_Assignments
c.[説明]: ユーザーが無効化されたら権限セットの割り当てを削除する
 
Save the Flow.png
 
ステップ 17.[有効化] をクリックします。
 
Activate Flow.png
 
 
完了すると、最終的なフローは次のようになります。




___________________________________


作成者: Tom Bassett | Salesforce アンサーリーダー
Tom Bassett は Trigg Digital のソリューションアーキテクトであり、Salesforce プラットフォームの経験は 5 年を超えています。顧客が CRM を最大限に活用することを目指して、新機能のアイデアや投稿された質問に対する回答を提供することで、より広い Trailblazer Community をサポートし、Ohana 文化を広めています。Tom は London Architect Community グループの共同リーダーであり、エキスパートの著者として Salesforce Ben にも貢献しています。

これらの回答は回答を提供したユーザーの意見のみを反映したものであり、ユーザーが Salesforce と提携しているか否かにかかわらず Salesforce の意見ではありません。第三者によって、または第三者に代わって提供された製品、サービス、情報、データ、コンテンツ、その他の資料 (以下「第三者資料」) が含まれる場合があります。Salesforce は第三者資料の正確性、有効性、適時性、網羅性、信頼性、完全性、品質、適法性、有用性、安全性、該当する知的財産権について、管理も支持もしておらず、それに関する責任を負いません。投稿された質問に対してメッセージボードやフォーラムで提供された回答、Salesforce やプログラムに関する質問などに答えることを意図した回答は、一般的な知識としてのみ利用でき、特定の質問に対する回答として捉えないでください (「最良」な回答または同様の評価がされた回答としてマークされている場合でも同様です)。特定の質問に対する回答は、必ず Salesforce サポートにお問い合わせください。Salesforce は回答を管理しておらず、回答の第三者による使用または誤用 (共有を含む) について一切責任を負いません。

ご質問がある場合は、こちら (
https://trailhead.salesforce.com/trailblazer-community/feed) から Trailblazer Community 全体の英知を活用してください。
ナレッジ記事番号

000394118

 
読み込み中
Salesforce Help | Article