tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:Name項目のデータ型選択について

SalesforceオブジェクトのName項目とデータ型選択についてです。

f:id:tyoshikawa1106:20180919062825p:plain


Name項目はレコード作成の際に必須となる項目で、「テキスト型」と「自動採番型」の2種類から選択できます。
f:id:tyoshikawa1106:20180919062628p:plain


テキスト型は値を自由に入力したい場合に使用します。取引先名や商談名とよく目にする使われ方をしているデータ型です。
f:id:tyoshikawa1106:20180919063105p:plain


もう一つの自動採番型はデータ登録後に自動で値を生成してくれるデータ型です。重複しないユニークな値が生成されるので申請や請求などを管理するオブジェクトで利用できます。
f:id:tyoshikawa1106:20180919063358p:plain


f:id:tyoshikawa1106:20180919063431p:plain


自動採番型は指定した文字列を表示できるプレフィックスの機能も用意されています。文字数の上限がありプレフィックスが利用できる文字数も決まっているので長い値にしたい場合は注意が必要です。
f:id:tyoshikawa1106:20180919063739p:plain


プレフィックスの機能で「2018-01-01-00001」というように本日日付+自動採番された値という組み合わせの値を生成することができます。採番で00001というように5桁用意したとしてレコード数が5桁分使い切ると0に戻るのではなく6桁目を生成します。はじめに余裕を持って桁を確保しておくのがいいと思います。

ApexとName項目のテキスト型

ApexとName項目のテキスト型の組み合わせで一つ面白い使い方ができます。
f:id:tyoshikawa1106:20180919064732p:plain


上で記載したとおりテキスト型は必須項目のため画面から未入力で保存しようとするとエラーとなります。
f:id:tyoshikawa1106:20180919064946p:plain


ですがApexから登録する場合はこのエラー判定がスキップされます。
f:id:tyoshikawa1106:20180919065021p:plain


この方法でデータを作成するとName項目にはレコードIDがセットされて登録されます。
f:id:tyoshikawa1106:20180919065154p:plain


これはカスタムオブジェクトでのみ適用される仕様で標準オブジェクトの場合はApex経由でもエラーとなります。


この仕組みを利用してApexでデータを作成してName項目にレコードIDをセットして自動採番の代わりにしようと思いつく場合があるかもしれません。ですがレコードIDをセットして管理する方法は下記の問題が発生します。

ユーザが自由に編集可能

テキスト型のためユーザが自由に値を書き換えることが可能です。Name項目 = レコードIDというルールは保証されなくなります。もしもレコードIDを見える位置に表示したい場合は数式項目を用意した方が確実です。
f:id:tyoshikawa1106:20180919065902p:plain

重複可能

テキスト型はユニークチェックは実行されないため同じ値のデータを作成することが可能です。そのため自動採番の代わりとして運用しようとすると思わぬトラブルが発生します。Apexを経由して作成する前提のオブジェクトと考えたとしてもこうしたデータを作成できてしまう時点で品質が低下していまいます。
f:id:tyoshikawa1106:20180919070200p:plain

手作成によるデータ登録時の問題

Apexでの作成が前提としたルールがあったとしても状況に応じてどうしても手作業で新規データ登録を行う場面が出てくると思います。仮にBeforeトリガを用意して保存後に値を入れ直す処理を実装したとしてもユーザは一度何かしらの値を入力する必要があるため無用な混乱を招いてしまいます。
f:id:tyoshikawa1106:20180919070558p:plain


以上の理由からName項目にレコードIDをセットして自動採番の代わりにするという運用は個人的にオススメできません。無理に複雑な仕組みで運用するのではなく自動採番型で管理するのが良いと思います。

Name項目とルックアップ項目

Name項目はルックアップ項目で目立つ位置に表示されます。
f:id:tyoshikawa1106:20180919071254p:plain


自動採番された番号だと直感的に選択しにくいような用途のオブジェクトの場合はテキスト型で管理するのがいいと思います。ルックアップ検索時はName項目の他に別の項目を表示することが可能です。同じ値のデータと区別がしずらい場合はこの仕組みで判別できると思います。
f:id:tyoshikawa1106:20180919071611p:plain:w300