スクリーンフローで更新したレコードに戻る


未確認：クイックアクションから呼び出せばいい？

+ [Refresh page when screen flow completed](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007JCbb7SAD)

since this is a screen flow, if you just call it from a Quick Action instead of a button, it'll run as a modal and will refresh the page when it's finished

+ [【ヘルプ】フローを起動するためのクイックアクションを作成する](https://help.salesforce.com/s/articleView?id=sf.admin_create_flow_action.htm&type=5)

-----------------------

### 2025年04月

+ [現状、画面フローでレコードを表示する関連リストを作成しており、上記画面フローでレコード新規作成後 関連リストに表示されるようになるが、表示するためには手動で画面を更新しなければならない。 ](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000PZOdB)



---------------------
+ [force:refreshView は Summer '24 リリースのフロー コンポーネントでは動作しません](https://issues.salesforce.com/issue/a028c00000zIpxaAAC/forcerefreshview-is-not-working-with-flows-component-in-summer-24-release)

:::note alert
Error Occurred: Action failed: c:RefreshView$controller$invoke [Cannot read properties of undefined (reading 'fire')]
:::



# 戻る方法は分かりましたが、画面がリフレッシュされていないのか、更新前の値が表示されます

どちらを指定しても元の画面には戻るのですが、リフレッシュされないですね。F5を押すと値が変わるけど...

```
&retURL={!kenmei__c.Id}
```


```
&retURL=/lightning/r/kenmei__c/{!kenmei__c.Id}/view
```



# Auraコンポーネントを使って強制的にリフレッシュできそう。

はい、自動起動されたフローから更新画面のアクションをトリガーすることはできませんが、回避策は、更新画面のアクションを 1 つだけ含み、他には何も含まない画面フローを作成することです。次に、ボタンの URL にretURL最初に更新画面を含む画面フローの参照を含めてから、retURLレコード用に別の画面フローを追加します。これは私にとっては完璧に機能し、画面が更新されました。


https://salesforce.stackexchange.com/questions/301086/refresh-the-page-after-the-flow-completes

残念ですがエラーが解消しないですね。

:::note alert
エラーが発生しました: Action failed: c:RefreshView$controller$invoke [Cannot read properties of undefined (reading 'fire')]
:::

window.location.reload();、location.reload();だとエラーは出ないのですが、画面遷移しないですね。

ヘルプの通りに作っても機能しません。何でだろうAuraコンポーネントのイベントが全く発火しない。


試しにfireを２回かいてみると

```
var urlEvent = $A.get("e.force:navigateToURL");            
        var myUrl = "/lightning/r/kenmei__c/" + record + "/edit";
        urlEvent.setParams({
            "url": myUrl
        });
        urlEvent.fire();
        alert(myUrl);
        urlEvent.fire();
```

:::note alert
エラーが発生しました: Assertion Failed!: Event.fire(): Unable to fire event. Event has already been fired. : false
:::

既に発火したとさ...　ということは何でイベントが発火してないんだろう。

# 最終的に...

今回の画面には自作したAuraコンポーネントを埋め込んでいたので、retURLで元のレコードを表示したときには
想定通りに

```
 <aura:handler name="init" value="{!this}" action="{!c.doInit}"/>
```

が起動します。

仕方ないのでこのロジックの中で以下を追加して毎回強制的に親画面を再描画させました。
キャッシュが効いているのか標準画面はそのままでは再描画しませんね。バグのような気がします。


```
$A.get('e.force:refreshView').fire();//親画面の再描画    
```

+ [ケースオブジェクトで作成したアクションのボタン表示](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007ZBgFT)

:::note
&retURL={!Account.Id}をつけると元のレコードページには戻ることはできるのですが、更新結果は表示されないです。（キャッシュが効いているのかもしれません。F5をクリックして再描画すれば表示内容は最新になります。この仕様には少々不満です）

```
/flow/update_lookup_see2?recordId={!Account.Id}&retURL={!Account.Id}
```
:::


# 参考資料

https://salesforce.stackexchange.com/questions/328269/trying-to-get-flow-redirect-working-with-a-lightning-component-that-is-running-a

+ [標準画面で正常に保存されてから別の画面を起動させたい](https://qiita.com/Keiji_otsubo/items/2e1a0cffad43dc4eeccb)


# バグ？

Why isn’t my local action working when I run my Flow from Flow Builder or a Custom Button?

Some local actions use events to cause things to happen in your browser. Show Toast and Flow Finishing

https://unofficialsf.com/understanding-flow-local-actions/

Fire Fox ,Edgeでも試しましたが、いずれも機能しないですね。

# やっと見つけた　既知の問題になっている。

+ [Aura events fired inside the Local Actions that are in a Flow rendered by the Lightning-flow aura tag were not properly bubbling](https://issues.salesforce.com/issue/a028c00000p5gozAAA/aura-events-fired-inside-the-local-actions-that-are-in-a-flow-rendered-by-the-lightning-flow-aura-tag-were-not-properly-bubbling)


Aura events fired inside the Local Actions that are in a Flow rendered by the Lightning-flow aura tag were not properly bubbling outside the Lightning flow.


Lightning-flow aura タグによってレンダリングされたフロー内のローカル アクション内で起動された Aura イベントが、Lightning フローの外側で適切にバブリングしていませんでした。

解決したのかな？

+ [画面フローで作成したレコードを開く方法](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007EbMi6)

# 関連の質問

+ [画面フロー実行後の画面遷移について](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000QKSkm)

カスタムボタンまたはカスタムリンクでも表示の種類を詳細ページボタンにすれば、アクションと同じようにボタンとして配置できる


+ [lightning:availableForFlowScreensは画面フローだけみたいだけど、動きそう](https://developer.salesforce.com/docs/component-library/bundle/lightning:availableForFlowScreens/documentation)
+ [lightning:navigationは使えない](https://developer.salesforce.com/docs/component-library/bundle/lightning:navigation/documentation)

これは機能しない
+ [Redirect Flow Users with a Local Action](https://help.salesforce.com/s/articleView?id=sf.flow_concepts_finish_override.htm&type=5)

これがヒントになった
+ [How to redirect to record page from Screen Flow?](https://sfdcbrotherscom.wordpress.com/2023/06/15/how-to-redirect-to-newly-created-record-in-screen-flow/)

Component Markup

```
<aura:component controller="GetOrgBaseUrl2" implements="force:lightningQuickAction,lightning:availableForFlowActions">
    <aura:dependency resource="markup://force:navigateToSObject" type="EVENT"/>
    <aura:attribute name="recordId" type="String" />
</aura:component>
```

Client-Side Controller

```
({    
    
    invoke : function(component, event, helper) {
        var record = component.get("v.recordId");
        
        var action = component.get("c.getBaseUrl");
        action.setCallback(this, function(response){
            if (action.getState() == "SUCCESS") {            	
                var BaseUrl = response.getReturnValue();
                var myUrl= BaseUrl;
                if (record.left(3) == '001')  var myUrl = myUrl + "/lightning/r/Account/"+ record + "/view";
                
                //window.location.href = myUrl;
            }  else if (action.getState() == "ERROR" ) {
            }
        });
        $A.enqueueAction(action);

    },

})
```

Component Markup

```
<design:component>
	<design:attribute name="recordId" label="Record ID" />
</design:component>
```


bses URLを取得するApex class

```
public class GetOrgBaseUrl2 {
    // ***********************************************************************************
    // Base URL を取得する Apex                        
    // K.Otsubo 2024/04/26   
    //            
    // ************************************************************************************

    @AuraEnabled
    public static String getBaseUrl() {
        
       return URL.getCurrentRequestUrl().getAuthority();
    }
}
```

test class

```
@isTest
public class GetOrgBaseUrl2_test {
    // ***********************************************************************************
    // Base URL を取得する Apex test                  
    // K.Otsubo 2024/04/26   
    //            
    // ************************************************************************************

    static testMethod void  getBaseUrl_mainTest() {
        Test.startTest();
        String sfdcBaseURL=GetOrgBaseUrl2.getBaseUrl();
        
        system.debug(sfdcBaseURL);
        Test.stopTest();
    }
}
```

# バグ？

+ [ URL に retURL を追加しましたが、フローが終了した後、レコードにルーティングされる前にフロー名が 1 秒間表示されます。](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007cmRtR)