WebタブのURLを組織によって可変にする

# これはなに？

https://help.salesforce.com/s/articleView?id=sf.creating_web_tabs.htm&type=5

SalesforceのWebタブでURLの一部を組織によって可変にする方法を記載します。

Webとは、カスタムタブとしてWebタブを作成することで
Salesforceの中でWebアプリケーションを利用することができるようになる機能です。

内容的にはiframeで呼び出すことになるのですが、
みるだけではなく form操作やSalesforceとのデータのやり取りをする場合は、
SalesforceCanvasとして登録しVisualforceかAuraで呼び出すことをお勧めします。

# どうすれば可変にできるのか？

以下の方法で実装します。

- ユーザオブジェクトに組織IDで判定してテキストを返す数式項目を作る
- WebタブのURLに差し込み項目として追加する

# どういう時に使うの？

Webアプリケーションを持っている場合

- 開発
- staging

と2つの環境を本番のドメインのサブドメインとして運用していることが多いと思います、
そういった場合にsandboxではstaging環境のWebアプリケーションを表示したい！何個もWebタブの設定を追加したくない！といった場合に今回のやり方が役に立つと思います。


# やってみる

今回は、検証用のURLとしてQiitaのサービスを使わせていただきます。

本番相当の組織では`https://qiita.com/`を
sandbox相当の組織では`https://jobs.qiita.com/`を表示させます。

https://qiita.com/

https://jobs.qiita.com/

## 差し込み項目用のユーザ項目を作成する

`設定>オブジェクトマネージャー>ユーザ>項目とリレーション`にアクセスします。


### 1. データ型の選択

データ型は数式を選択します。

![スクリーンショット 2022-12-04 21.11.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/b11cf6ca-71b5-d868-dcbf-ac1270cc4c80.png)

### 2. 出力型の選択

![スクリーンショット 2022-12-04 21.13.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/8b2d25fb-13f1-877b-c475-5c8190b4bb1c.png)

|設定項目|内容|
|---|---|
|項目の表示ラベル| Qiitaドメイン |
|項目名| QiitaDomain |
|数式の戻り値のデータ型| データ型 |

### 3. 数式の入力

![スクリーンショット 2022-12-04 21.20.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/31e37a47-1f11-572b-8590-7059cc9d526d.png)

数式は以下の内容になります。

組織IDには`設定>組織情報>salesforce.com 組織 ID`に記載されているものを入れてください。

```
IF ( RIGHT( $Organization.Id , 13) = '組織ID' , 'qiita.com', 'jobs.qiita.com')
```

`RIGHT( $Organization.Id , 13) `について

組織IDは`00ABABABAB12345`のような15桁で表現されていますが、Flowや、数式項目に組織IDを15桁を直書きしている箇所があるとsandbox更新時に本番の組織IDに置換されてしまいます。

そこで先頭の00を除外して13桁でチェックするように記述するとsandbox更新時の組織ID上書きを回避できます。

https://help.salesforce.com/s/articleView?id=000385203&type=1

>「00D」を探すと、エンティティが組織であることがわかります。

と記載されているので　冒頭の00を省いたとしても比較対象が組織IDなので問題ないです。

:::note warn
2022/12月現在の挙動であり
13桁でチェックしなくても良くなっている可能性はあります。
:::


このまま作成していただければOKです。
次はWebタブ側の設定に入ります。

## Webタブを用意する

`設定>タブ`にアクセスしWebタブの新規を選択します。

![スクリーンショット 2022-12-04 20.39.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/e235e220-6236-f4a2-9359-9cde8697771a.png)

### 1. タブのレイアウトの選択

今回はページ幅全体を選択しました。

![スクリーンショット 2022-12-04 20.41.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/7728e8b2-cc33-c92d-b093-bb987f54279f.png)

### 2. 内容と表示プロパティの定義

![スクリーンショット 2022-12-04 20.43.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/87d8622e-d9fa-e931-b9fb-24f7ea9e4daa.png)

|設定項目|内容|
|---|---|
|タブの表示ラベル| Webタブテスト |
|タブ名| WebTabTest |
|タブスタイル| なんでも良いですが、今回はCD/DVDにしました |
|コンテンツフレームの高さ (ピクセル)	|600|

高さに関しては100%指定ができると嬉しいのですが、現時点でできないのが微妙な点です。

IdeaExchangeに投稿されているので、機能として希望するからはいいね！押しておきましょう

https://ideas.salesforce.com/s/idea/a0B8W00000Gdl2rUAB/allow-web-tab-page-height-to-be-specified-as-a-percentage

### 3. URL の詳細を入力

![スクリーンショット 2022-12-04 20.51.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/9abd895c-e916-924b-1c6b-36b044052832.png)
![スクリーンショット 2022-12-04 20.54.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/b313fce7-13f0-de0b-c300-990928e1e252.png)

URLの中に差し込み項目として

- API項目
- ユーザの項目
- 組織の項目

この3つがあります。組織IDが組織の項目から取得できるのでいけそうな気がしますが
URLの記述部分に数式を記述することができないため、数式を書けて項目を追加できる差し込み項目であるユーザの項目を使うことになります。

![スクリーンショット 2022-12-04 21.38.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/b7082030-ea1e-3a32-17f2-4cb7b906c80d.png)

|設定項目|内容|
|---|---|
|ボタンまたはリンクの URL|https://{!User.QiitaDomain__c}|

# 検証してみる

検証環境がtrailheadのハンズオン組織なので
sandboxでの挙動等は確認できませんが、ユーザの項目の組織IDを別のものに変更することで検証しようと思います。

![スクリーンショット 2022-12-04 21.41.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/95321c75-251d-a970-4499-edc077d51cc2.png)

タブにアクセス

![スクリーンショット 2022-12-04 22.00.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/300d7284-15d0-a0b7-0353-70a29787cfe6.png)

```
IF ( RIGHT( $Organization.Id , 13) = '組織ID' , 'qiita.com', 'jobs.qiita.com')
```

組織IDの部分を別のIDに変えます。

![スクリーンショット 2022-12-04 22.01.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/15bda948-97a5-c098-96d1-d36cd54c909e.png)

別ドメインにアクセスできることが確認できました。

# 最後に

業務をSalesforce内部で実現することももちろん大事ですが、
複雑なロジック等をSalesforceに持ち込むのであれば別アプリケーションに切り出して
Webタブ等で利用するのもありだと思います。

個人的にはWebタブは好きな機能ではあるので高さの%指定など小さなアップデートを期待しています。