フローの中でApexを使って外部システムにコールアウトさせて結果をメール送信するフローを作りましたが、機能しないですね。
System.CalloutException: You have uncommitted work pending. Please commit or rollback before calling out
1での説明によると@InvocableMethodがコールアウトとして認識されているから? ダメなのかな。
以下に@future(callout=true)を使って回避策が提案されていましたので、分割して作ってみたら...
Future methodsは戻値が持てないらしい... あああやっぱり不可能です。
Future methods do not support return type of String
An Apex error occurred: System.CalloutException: You have uncommitted work pending. Please commit or rollback before calling out
@InvocableMethod自体はコールアウトとして認識してください。ブラウザーからSalesforceに繋がりますから。
解決方法はこちらです。要するにフローは@InvocableMethodのメソッドを実行します。@future(callout=true)にした別のメソッドはHTTPリクエストを実行します。結果として、フローは終了しますが、@futureにしたメソッドはいつか自動的に発動してくれます。
実際にはApexクラスから外部のRSSサイトにアクセスしてレスポンスを取得していますか?
そうれあれば、 @InvocableMethod アノテーションを使うように変更できれば、FlowからこのApexを呼び出して結果を得ることはできると思います。
フローで Apex アクションを実行
https://help.salesforce.com/s/articleView?id=sf.flow_build_extend_apex.htm&type=5
RSSの結果に対する処理が複雑でなければ、フロー内で「HTTP コールアウト」を使うこともできると思います。
https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007TtIqTSAV
That prompted me to look deeper into the API service's documentation, then I found that the ArcGIS REST API supports responses in several formats. &f=json for response in a JSON object in Esri JSON format.
•ESRI Developer ArcGIS REST APIs Output formats
Problem solved! This was not a Salesforce problem at all.
API サービスのドキュメントを詳しく調べたところ、ArcGIS REST API が複数の形式での応答をサポートしていることがわかりました。Esri JSON 形式の JSON オブジェクトでの応答の場合は &f=json です。
• ESRI Developer ArcGIS REST API 出力形式
問題は解決しました。これは Salesforce の問題ではありませんでした。