前置き
Spring'22もフローが大きく強化され、ますます使い勝手があがってきました。
またこれまで自動化ツールとしてよく使われていたワークフロールールやプロセスビルダーも将来的に使えなくなるとのことからフローの注目度も高まってきているように思います。
今回はApexアクションとフローを組み合わせたレコードに添付されたファイルを削除する画面フローをご紹介していきます。
特にコレクション変数をどうやってフロー側に渡すかご紹介していきます。
大まかなファイル削除フローの説明
1.添付ファイルを取得するApexアクションを実行
2.決定要素で1に添付ファイルがある場合は「ある」へ進み、削除したいファイルを選択する
「ない」の場合は「添付ファイルがありません」と表示して終了
3.2で選択された添付ファイルを削除して、アクションを実行して成功トーストを表示する
Apexアクション「添付ファイル取得」
まずはサンプル的に書いたコードは以下の通りです。
global class FileDelete{
@InvocableVariable(required=true label='recordId')
public Id recId;
@InvocableMethod(label='添付ファイル取得' description='添付ファイル削除')
public static List<List<ContentDocument>> getContent(List<Id> recId){
List<List<ContentDocument>> cdList2= new List<List<ContentDocument>>();
List<ContentDocument> cdList = new List<ContentDocument>();
List<Id> cdIdList = new List<Id>();
List<ContentDocumentLink> cdlList =
[
SELECT ContentDocumentId, LinkedEntityId
FROM ContentDocumentLink
WHERE LinkedEntityId =:recId
];
if(cdlList.size() > 0){
for(ContentDocumentLink cdl : cdlList){
cdIdList.add(cdl.ContentDocumentId);
}
cdList = [SELECT Id,title FROM ContentDocument WHERE ID IN :cdIdList];
cdList2.add(cdList);
}
return cdList2;
}
}
ポイントはフローへコレクション変数を渡したい場合はメソッドの戻り値を 「List<List<>>」
とすることです。直観的には「List<>」ではないかと考えがちですが、「List<>」とするとフローには戻り値として単一の変数が戻ってきます。
画面「添付ファイル削除選択画面」
「添付ファイル取得」でApexからコレクション変数を受け取ったところでこれを選択リストに設定します。Spring'22からこのようにコレクション変数を選択肢として使用できるようになったので表現の幅が広がったと思います。
あとは選択したファイルを削除するようにし、アクションとして成功トーストを表示させれば完了です。
成功トーストの参考は以下となります。
フローでレコードをリダイレクトしてメッセージ表示をさせてみた
補足
ファイルの削除はシステム管理者かそのファイルの所有者しかできないので注意が必要です。