フローで Salesforce 組織ベース URL を取得する方法


+ [How to Get Salesforce Org Base URL in Flow](https://automationchampion.com/2022/04/25/how-to-get-salesforce-org-base-url-in-flow-2/)

+ フローで Salesforce 組織のベース URL を取得する
+ フローで現在のコミュニティ URL を取得する
+ ネットワーク ID を渡すと、レコードの完全な URL を取得します

最も安全な方法は、呼び出し 可能なApex クラスから URL メソッドであるgetSalesforceBaseUrl()を呼び出すことです。getSalesforceBaseUrl() メソッドは、Salesforce 組織への現在の接続の URL を返します。一方、 toExternalForm ()は現在の URL の文字列表現を返します。

```
global class GetOrgBaseUrl{
    @InvocableMethod(Label='Get Salesforce base and record url')
    global static List<Results> getBaseUrl(List<sObject> sourceRecords){
        
        List<Results> sfdcURLs=new List<Results>();
        for(sObject obj:sourceRecords){
            Results r=new Results();
            
            r.sfdcBaseURL=URL.getSalesforceBaseUrl().toExternalForm();
            r.sfdcRecordURL=URL.getSalesforceBaseUrl().toExternalForm()+'/'+obj.id;
            
            sfdcURLs.add(r);
        }
        return sfdcURLs;
    }
    
    global class Results{
        
        @InvocableVariable
        global String sfdcBaseURL;
        
        @InvocableVariable
        global String sfdcRecordURL;
    }
}
```

```
@isTest
public class GetOrgBaseUrl_Test {
    
    @testSetup
    static void setup() {
        
        // Create a test account
    Account a = new Account(Name='Test Account');
        insert a;    
        }
    
    @isTest
    static void stripHtmlTags() {
        
        // Access the opportunity that was just created.
        Account account = [SELECT Id, Name FROM Account LIMIT 1];

        GetOrgBaseUrl.getBaseUrl(new List<sObject> {account});
    }
}
```

+ [Apex : Get Community URL](https://www.levelupsalesforce.com/apex-get-community-url)

+ [Get Base URL of Org that is hosting Experience Cloud Site](https://salesforce.stackexchange.com/questions/378708/get-base-url-of-org-that-is-hosting-experience-cloud-site)
この質問の回答では、the base URL of org can be stored in a custom label and used in code

ちょっと、舐めていると思う。

# getSalesforceBaseUrl() メソッドの廃止

https://help.salesforce.com/s/articleView?id=release-notes.rn_apex_baseurlmethod_deprecate.htm&release=246&type=5

API バージョン 59.0 以降は、getSalesforceBaseUrl() メソッドが非推奨になり、使用できなくなります。代わりに、組織の URL を取得する場合は getOrgDomainUrl()、Salesforce インスタンス上のリクエスト全体の URL を取得する場合は getCurrentRequestUrl() を使用します。API バージョン 59.0 以降で非推奨のメソッドを使用しようとすると、コンパイルエラーが発生します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/9ce6e0d9-fef5-f213-d589-d64be6857dcf.png)


# これを調べる発端となった質問

+ [Experience Site Base url](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000JfhCsSAJ)

```
LEFT({!$Api.Partner_Server_URL_340}, FIND( '/services', {!$Api.Partner_Server_URL_340})).
```

私も回答しようと思ってましたが、別の人が

If the flow is launched from the experience site, this formula will get the experience site url instead of the internal url. 
フローがエクスペリエンス サイトから起動された場合、この式は内部 URL ではなくエクスペリエンス サイトの URL を取得します

本当か？

+ [Will this Flow formula work even after Enabling Enhanced Domain?](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V000078Rv8t)

:::note
I used the formula below in a sandbox with extended domains enabled and it worked fine.

LEFT({!$Api.Enterprise_Server_URL_570} , FIND('/services', {!$Api.Enterprise_Server_URL_570})) & "/lightning/r/Account/"& {!$Record.Id} &"/view"
:::

+ [コニュニティから本番環境のベースURLを取りたい](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007epmOY)

いつもの式だとコニュニティだとコニュニティのベースURLになって、本番が取得できないですね。

# {!Community_Url} 

+ [Community_url Not Showing as Clickable link](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000KDfnA)

:::note
テキストテンプレートでは機能しない

Please check this article. 

https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000A8Y5bSAF
:::