個人的Salesforceのわかりにくいメタデータ名一覧

この記事は[Ateam LifeDesign Advent Calendar 2023](https://qiita.com/advent-calendar/2023/ateam-life-design)の18日目記事です。

# はじめに

突然ですが、SalesforceDX便利ですよね。
便利ですが、使い始めてすぐだと〇〇てメタデータだと何？となることが多いとおもます。
今まで自分が〇〇てどこだろうと探したことのあるメタデータについて備忘録として記事にします。

:::note
チームメンバーに〇〇てどこ？と聞かれたり
自分でも〇〇のメタデータどこ？となった場合はこの記事に足していきます。
:::

# Lightning レコードページ

`FlexiPage`です。
Salesforce上の画面表示と違うので最初は少し紛らわしいですよね。

```xml
<types>
  <name>FlexiPage</name>
</types>
```

https://developer.salesforce.com/docs/atlas.ja-jp.api_meta.meta/api_meta/meta_flexipage.htm

# 選択リスト値

## カスタム項目

素直に`CustomField`ですね

```xml
<types>
  <name>CustomField</name>
</types>
```

```xml
<?xml version="1.0" encoding="UTF-8"?>
<CustomField xmlns="http://soap.sforce.com/2006/04/metadata">
    <fullName>Test__c</fullName>
    <externalId>false</externalId>
    <label>テスト_選択リスト</label>
    <required>false</required>
    <trackFeedHistory>false</trackFeedHistory>
    <type>Picklist</type>
    <valueSet>
        <restricted>true</restricted>
        <valueSetDefinition>
            <sorted>false</sorted>
            <value>
                <fullName>A</fullName>
                <default>false</default>
                <label>A</label>
            </value>
            <value>
                <fullName>B</fullName>
                <default>false</default>
                <label>B</label>
            </value>
        </valueSetDefinition>
    </valueSet>
</CustomField>
```

https://developer.salesforce.com/docs/atlas.ja-jp.api_meta.meta/api_meta/customfield.htm

## 標準項目

`StandardValueSet`です

```xml
    <types>
        <name>StandardValueSet</name>
    </types>
```

`CustomField`の中に直接選択リスト値は存在せず
`StandardValueSet`に定義されています。

```xml
<?xml version="1.0" encoding="UTF-8"?>
<CustomField xmlns="http://soap.sforce.com/2006/04/metadata">
    <fullName>Rating</fullName>
    <trackFeedHistory>false</trackFeedHistory>
    <type>Picklist</type>
</CustomField>
```

```xml
<?xml version="1.0" encoding="UTF-8"?>
<StandardValueSet xmlns="http://soap.sforce.com/2006/04/metadata">
    <sorted>false</sorted>
    <standardValue>
        <fullName>Hot</fullName>
        <default>false</default>
        <label>Hot</label>
    </standardValue>
    <standardValue>
        <fullName>Warm</fullName>
        <default>false</default>
        <label>Warm</label>
    </standardValue>
    <standardValue>
        <fullName>Cold</fullName>
        <default>false</default>
        <label>Cold</label>
    </standardValue>
</StandardValueSet>
```

https://developer.salesforce.com/docs/atlas.ja-jp.api_meta.meta/api_meta/meta_standardvalueset.htm

## 選択リスト値セット（グローバル値セット）を使用いている場合

`GlobalValueSet`です。

```xml
    <types>
        <name>GlobalValueSet</name>
    </types>
```

`valueSet`の`valueSetName`に選択リスト値セット（グローバル値セット）のAPI参照名が定義されます。

```xml
<?xml version="1.0" encoding="UTF-8"?>
<CustomField xmlns="http://soap.sforce.com/2006/04/metadata">
    <fullName>Test__c</fullName>
    <externalId>false</externalId>
    <label>テスト</label>
    <required>false</required>
    <trackHistory>false</trackHistory>
    <type>Picklist</type>
    <valueSet>
        <restricted>true</restricted>
        <valueSetName>TestList</valueSetName>
    </valueSet>
</CustomField>
```

https://developer.salesforce.com/docs/atlas.ja-jp.api_meta.meta/api_meta/meta_globalvalueset.htm

# Lightningページの割り当て

`CustomApplication`です。

```xml
<types>
    <name>CustomApplication</name>
</types>
```

![取引先-Salesforce (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/8122c2be-b573-cd0c-6df5-cbd1ebecdc40.png)

Salesforceの画面で見るとプロファイルに設定されてそうな気もしますが、アプリケーションのメタデータの中に設定は存在します。

`CustomApplication`の`profileActionOverrides`の中にページ名とプロファイル名がマッピングされています。

```xml
<?xml version="1.0" encoding="UTF-8"?>
<CustomApplication xmlns="http://soap.sforce.com/2006/04/metadata">
   <profileActionOverrides>
        <actionName>View</actionName>
        <content>FlexiPage</content>
        <formFactor>Small</formFactor>
        <pageOrSobjectType>Account</pageOrSobjectType>
        <type>Flexipage</type>
        <profile>Admin</profile>
    </profileActionOverrides>
    <profileActionOverrides>
        <actionName>View</actionName>
        <content>FlexiPage</content>
        <formFactor>Large</formFactor>
        <pageOrSobjectType>Account</pageOrSobjectType>
        <type>Flexipage</type>
        <profile>Admin</profile>
    </profileActionOverrides>
```

https://developer.salesforce.com/docs/atlas.ja-jp.api_meta.meta/api_meta/meta_customapplication.htm

# ユーティリティバー

`FlexiPage`です。

```xml
<types>
  <name>FlexiPage</name>
</types>
```

アプリケーションかと思いきや実は違います。
ユーティリティバー自体は`FlexiPage`で定義されています。
どこまで定義されているかというと

アプリケーション内のナビゲーション項目のプロパティ設定の値まで定義されています。
個人的には、アプリケーション内でユーティリティバーにプロパティ設定を渡すというメタデータになっていると思い込んでいたので
数回リリース忘れを起こしましたね...


![スクリーンショット 2023-12-17 16.59.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/a341f56b-f581-b08f-262d-713676e2932d.png)

https://developer.salesforce.com/docs/atlas.ja-jp.api_meta.meta/api_meta/meta_flexipage.htm

# さいごに

どうしてもSalesforceのコード以外の部分は画面から作るので、メタデータ名を意識することが少なくて初めは慣れませんが
慣れると
- メタデータ書き換えた方が早く作れる
- メタデータコピーして作り始めると早く作れる

とか気づきことがたくさんあると思います。

SalesforceDXを使って間もない方にこの記事が少しでも役に立つと嬉しいです。