Apex 無しで実現できるか?と思って調べてみたらできた。
やり方
入力規則にこんな感じで入力する。
# 例) 名前にリードを指定した時にエラーにしたい場合 LEFT(WhoId, 3) = '00Q'
ちょっとだけ解説
Salesforce のレコードの先頭3文字は SObject の種類を識別する prefix になっていることを利用。
(prefix は組織によらないので決めうちでもまあなんとかなりますね)
prefix は各 Sobject のタブをクリックした URL から取得するか、
開発者コンソールで
[prefixを取得したいSObject].SObjectType.getDescribe().getKeyPrefix();
としてもいいです。
応用編
さて、次はこんなことができるか考えてみる。
ロスト済みの商談は行動にひもづけることができない
先ほどと違い、 WhoId/WhatId だけでなくその Id が示す Sobject のレコードを実際に取得する必要がある。
で、調べてみたんだけどこれはさすがに無理そう。。。
以下、調べた記録。
VLOOKUP 関数
入力規則で使える関数の中に、VLOOKUP
というのがあった。
参考: Help And Training Community
VLOOKUP
は
- 特定の field を検索対象として
- 特定の SOjbect のレコードを検索し
- レコードが見つかったら、指定した項目 (1.とは別で良い) を返す
ことができるという大変便利なもの。
が、カスタムオブジェクトにしか使えない という制限が。。。
( IdeaExchange に早く標準オブジェクトに対応しろ!ってのがありますね)
カスタムオブジェクトなら可能なのか
ということで、さらにこんなことができるか考えてみる。
カスタムオブジェクト
MyObj
を活動にひもづける場合、Status__c
という項目が'完了'
になっているものは許可しない
これも結論から言うと できない みたい。
というのも、VLOOKUP
は
VLOOKUP(field_to_return, field_on_lookup_object, lookup_value)
field_to_return: 返す field
field_on_lookup_object: SObjectの検索対象の field
lookup_value: 検索値
という書き方をするのだけれど、この field_on_lookup_object という部分、
実際には Name
しか指定できない みたい。
Name
以外を指定すると、
と怒られちゃいました。。。
VLOOKUP のサンプル
件名に一致するカスタムオブジェクト MyObj
の Status__c
を取得する。
VLOOKUP( $ObjectType.MyObj__c.Fields.Status__c, $ObjectType.MyObj__c.Fields.Name, Subject)
VLOOKUP の注意事項
最後に、公式リファレンスから注意点を抜き出し。
- field_to_return のデータ型は、自動採番、積み上げ集計、参照関係、主従関係、チェックボックス、日付、日時、メール、数値、パーセント、電話番号、選択リスト、テキスト、テキストエリア、または URL にする必要があります。
- field_on_lookup_object は、カスタムオブジェクトの [レコード名] 項目にする必要があります。
- field_on_lookup_object と lookup_value は、同じデータ型にする必要があります。
- 一致するレコードが複数ある場合は、最初のレコードの値が返されます。
- 返される値は、カスタムオブジェクトのものであることが必要です。
- この関数で参照されるカスタム項目またはカスタムオブジェクトは削除できません。
- この関数は、入力規則でのみ使用できます。
というわけで、すごく便利そうに見えて色々使い勝手の悪い VLOOKUP
でした。