パッケージ内の Salesforce URL のコール
[私のドメイン] の URL の形式は、本番組織と Sandbox 組織とで異なります。パーティション分割されたドメインの場合も、ホスト名の形式は、デモ組織、Developer Edition 組織、無料組織、パッチ組織、スクラッチ組織、および Trailhead Playground に応じて変化します。たとえば、現在、Sandbox の [私のドメイン] のログインホスト名には 2 個の形式、Visualforce ホスト名には 10 個の形式が使用できます。詳細は、Salesforce ヘルプの「[私のドメイン] の URL の形式」と「パーティション分割されたドメイン」を参照してください。
ログインでの [私のドメイン] のログイン URL の使用
すべての Salesforce 組織には、[私のドメイン] があります。[私のドメイン] とは、Salesforce がその組織用にホストする URL の組織固有のサブドメインのことです。顧客は、汎用のホスト名である login.salesforce.com および test.salesforce.com からのユーザログインと SOAP API ログインを防止するオプションを選択できます。これらのオプションを有効にすると、ログイン時に [私のドメイン] のログイン URL が必要になります。
1//Get the My Domain login hostname
2String myDomainHostname = DomainCreator.getOrgMyDomainHostname();この場合、[私のドメイン] の名前が mycompany の本番組織では、myDomainHostname で mycompany.my.salesforce.com が返されます。
相対 URL の使用
可能な限り、パッケージ内のパスのみが含まれる相対 URL を使用することをお勧めします。
たとえば、URL が https://MyDomainName--PackageName.vf.force.com/apex/myCases の Visualforce ページのリンクを、URL が https://MyDomainName--PackageName.vf.force.com/apex/newCase の Visualforce ページに追加することを想定します。この場合は、ページを参照するときに相対パス /apex/newCase を使用します。
完全な URL のホスト名の生成
完全な URL が必要になる場合があります。たとえば、自分のパッケージで提供されるコンテンツを含む Visualforce ページを自分のパッケージで提供する場合です。パッケージに完全な URL が含まれる場合は、System.DomainCreator Apex クラスを使用して、関連付けられているホスト名を取得します。そうしないと、ユーザ側でパッケージ機能に関する問題が発生する場合があります。
1//Define the name of your package as a string
2String packageName = 'abcpackage';
3
4//Get the Visualforce hostname
5String vfHostname = DomainCreator.getVisualforceHostname(packageName);
6
7//Build the URL for creating a new case
8System.URL vfNewCaseUrl = new URL('https', vfHostname, '/apex/newCase');この例の場合、拡張ドメイン、および mycompany という [私のドメイン] の名前を持つ本番組織では、vfNewCaseUrl で https://mycompany--abcpackage.vf.force.com/apex/newCase が返されます。
ドメインの一部の取得
既知の URL またはドメインを解析して値を取得するコードがパッケージにある場合は、より新しい Apex クラスの 1 つが使用されるようにコードを更新することをお勧めします。特定の URL 形式を前提としたコードは失敗する場合があります。
ホスト名が必要な場合は、System.DomainCreator クラスを使用できるかどうかを評価します。
別の理由でその値が必要な場合は、代わりに System.DomainParser または System.Domain Apex クラスを使用します。
1//Parse a known URL
2System.Domain domain = DomainParser.parse('https://mycompany--abcpackage.vf.force.com');
3
4//Get the domain type
5System.DomainType domainType = domain.getDomainType(); // Returns VISUALFORCE_DOMAIN
6
7//Get the org’s My Domain name
8String myDomainName = domain.getMyDomainName(); // Returns mycompany
9
10//Get the package name
11String packageName = domain.getPackageName(); // Returns abcpackage