とてもいいヘルプ記事です。 日本語版がないので取りあえず訳してみる。(ああ、機械翻訳ですよ、外国語は分かりません)
目次
- 数式で選択リスト値を参照していますが、それら/一部が考慮されていないようです
- 特定のプロファイル/役割/ユーザーに対して検証ルールをトリガーしたくない
- $Profile.Name (または $UserRole.Name) を参照して検証ルールで除外していますが、英語を話さない同僚にはバイパスされないようです。
- 2 つの日付の差を計算し、週末を除外したい
- 日付フィールドの月の最後の日を見つけようとしています
- 日付フィールドがうるう年かどうかを知るにはどうすればよいですか?
- フィールドが空白/null かどうかを確認するときに、数式が正しい結果を返していないようです。なぜですか?
- 数式を保存しようとすると、「数式の結果はデータ型 (テキスト) であり、期待されるデータ型 (true または false) と互換性がありません」というエラーまたは同様のメッセージが表示されます
- フィールドの画面フローに単純な検証ルールがあります。オブジェクトの検証ルールからコピーしましたが、まったく逆の動作をしているようです。何故ですか?
- 数式で日付/時刻を参照しているときに、正しい日付 (および時刻) が返されないのはなぜですか?
- レポートで行レベルの数式を作成すると、左側のパネルに特定のフィールドが見つかりません
- レポートに行レベルの数式を作成するオプションが表示されません
- 数式に適切な数の括弧があることは確かですが (数えました)、それでもこのエラー メッセージが表示されます。何故ですか?
- 数式で何も表示されない、または #Error が返される
- 入力規則で複数のフィールドを必須にするにはどうすればよいですか?
- チェックボックスが空白であることを検証しようとしていますが、ルールがトリガーされないようです。なんで?
- フィールドが変更されたかどうかを確認する入力規則が、レコードを編集するときは正常に機能しているように見えるのに、作成時には機能しないのはなぜですか?
- 数式が X と等しくなければならないという単純な入力要件があるのに、自動化がトリガーされないのはなぜですか?
- フィールドのデフォルト値の式でレコードのフィールドを参照しようとしていますが、使用できません
- 数式で ID をハードコーディングすると、それが考慮されないのはなぜですか?
- 数式に AND、OR、&&、|| が混在しています。いつもうまくいくとは限らないようです
- 非常に複雑な式を作成したので、私以外の誰もが理解するのは難しいでしょう. どうしたら「分かりやすく」なるでしょうか?
- 数式の詳細はどこで確認できますか?
Q:数式で選択リストの値を参照していますが、それらまたは一部が考慮されていないようです
A: 数式で選択リスト値の API 名を参照していることを確認してください。ラベルとは異なる場合があります。
たとえば、ラベルが「Other」で、API 名が「XOther」に設定された値を持つことができます。簡単な IF 式は次のようになります。
IF(ISPICKVAL(Picklist__c,'XOther', result if true, result if false)
Q: 特定のプロファイル/役割/ユーザーに対して検証ルールをトリガーしたくありません
A: まず、$ 記号はログインしているユーザーを参照します。
これで、次のことができます。
Profile: $Profile.Name<>’System Administrator’
Role: $UserRole.DeveloperName<>'CEO'
User: $User.Alias<>'XXX'
特定のユーザーを除外する別の方法として、まずカスタム アクセス許可を作成し (「ValidationBypass」と呼びます)、次にアクセス許可セットを作成して、このカスタム アクセス許可をそれに割り当てます。
選択したユーザーに権限セットを割り当てることができるようになりました。あとは、これを検証ルール式に追加するだけです。
AND(NOT($Permission.ValidationBypass), [角かっこを除いた式の残りの部分])
Q: $Profile.Name (または $UserRole.Name) を参照して検証ルールで除外していますが、英語を話さない同僚にはバイパスされないようです。
A: 名前はおそらく他の言語に翻訳されているため、ルールで参照している名前とは異なります。たとえば、英語の「System Administrator」はフランス語では「Administrateur système」になり、$Profile.Name<>「System Administrator」を含むルールはフランスでは機能しません。
ロールを使用する場合は、必ず DeveloperName を使用してください。残念ながら、プロファイルには使用できません。名前のみを使用できます。この場合、$Profile.ID を使用して式に ID をハードコーディングできますが、別の環境にデプロイするときに必要に応じて ID が変更されていることを確認する必要があります。より良い解決策は、プロファイルに割り当てるカスタム アクセス許可を作成し、検証ルールでそのアクセス許可を除外することです。
AND(NOT($Permission.ValidationBypass), [[角かっこを除いた式の残りの部分])
Q: 2 つの日付の差を計算し、週末を除外したい
A: 次の数式をテンプレートとして使用できます。
/*Calculate the number of days between the 2 dates*/
(EndDate__c - StartDate__c)
/*Remove the number of weekend days*/
-
(FLOOR((EndDate__c - StartDate__c)/7)*2
+
IF(AND(WEEKDAY(StartDate__c )=1, WEEKDAY(EndDate__c )<>7),1,
IF(CASE(WEEKDAY(StartDate__c ),1,8,WEEKDAY(StartDate__c ))>CASE(WEEKDAY(EndDate__c ),1,8,WEEKDAY(EndDate__c )),2,
IF(OR (WEEKDAY(EndDate__c )=7, WEEKDAY(StartDate__c )=1),1,
IF(OR (WEEKDAY(EndDate__c )=1, WEEKDAY(StartDate__c )=7),2,
0)))))
Q: 日付フィールドの月の最後の日を見つけようとしています
A: 次の式を使用してください。
ADDMONTHS(DATE(YEAR(DateField__c), MONTH(DateField__c),1),1)-1
ここでのコツは、日付フィールドの月と年の 1 日を取得し、それに 1 か月を加算して 1 日を減算することです。
たとえば、私の日付フィールドが 2022 年 3 月 3 日の場合、数式は 2022 年 3 月 1 日に 1 か月を加算し、2022 年 4 月 1 日を返します。次に、1 日を引いて 2022 年 3 月 31 日を取得します。
Q: 日付フィールドがうるう年かどうかはどうすればわかりますか?
A: 例として使用できる簡単な IF 式を次に示します。
IIF(DAY(DATE(YEAR(DateField__c),3,1)-1)=29, 'Leap year', 'Non-leap year')
日付フィールドの年の 3 月 1 日の前日 (最後のこの同じ年の 2 月 1 日) を返し、29 が返されるかどうかを確認します。この場合、うるう年です。
Q: フィールドが空白/null かどうかを確認するときに、数式が正しい結果を返していないようです。なぜですか?
A: 数式で数値、通貨、またはパーセント フィールドを参照する場合は、数式の [空白フィールドの処理] セクションで [空白フィールドを空白として扱う] オプションを選択してください。
それ以外の場合、空白のフィールドには 0 が含まれていると見なされるため、空白とは見なされません。
Q: 数式を保存しようとすると、「数式の結果はデータ型 (テキスト) であり、予想されるデータ型 (true または false) と互換性がありません」というエラーまたは同様のメッセージが表示されます
A: 数式に適切な [数式の戻り値の型] を選択していることを確認してください。上記の質問の例では、戻り値の型が「チェックボックス」に設定されていることを意味しますが、式の結果はテキストになるため、「式の戻り値の型」として「テキスト」を選択する必要があります。
Q: フィールドの画面フローに単純な入力規則があります。オブジェクトの検証ルールからコピーしましたが、まったく逆の動作をしているようです。何故ですか?
A: 数式の結果が true を返すと、Salesforce UI の入力規則によってユーザーにエラーが表示されます。
ただし、エラー メッセージを表示するには、画面フローの検証式が false を返す必要があります。
たとえば、数値フィールドに 500 を超える値を入力できないようにする場合、「標準」の検証ルールは次のようになります。
NumberField__c>500
フローの検証は次のようにする必要があります。
{!Number}<=500
Q: 数式で日付/時刻を参照しているときに、正しい日付 (および時刻) が返されないのはなぜですか?
A: 日付および日付/時刻フィールドの数式は、GMT タイムゾーンで値を返します。GMT からの時間の差によって、結果を相殺する必要があります。たとえば、日本にいる場合:
DateTimeField__c + 9/24
ただし、米国などではタイム ゾーンは 夏時間の変更の影響を受ける可能性があり、その開始日と終了日は毎年異なるため、数式で管理することは困難です。
Q: レポートで行レベルの式を作成すると、左側のパネルに特定のフィールドが見つかりません
A: 行レベルの数式の制限に関する記事を参照してください。
一部の項目は、行レベルの数式ではサポートされていません:
- 行レベルの数式は参照できません:
- バケット フィールド
- 集計式
- その他の行レベルの数式
- 行レベルの数式は、次のフィールド タイプをサポートしていません。
- ブール値
- タイムオンリー
- Eメール
- 複数選択リスト
- 次のような一部の日付フィールドはサポートされていません。
- 期日
- 生年月日
- 次のような一部のテキスト フィールドはサポートされていません。
- 請求先住所
Q: レポートに行レベルの数式を作成するオプションが表示されません
A: 現在、レポートごとに許可される行レベルの数式は 1 つだけです。
また、行レベルの数式の制限に関する記事を参照してください。
-
「ありまたはなし」のカスタム レポート タイプ (取引先責任者ありまたはなしの取引先など) は、行レベルの数式をサポートしていません。[行レベルの数式を追加] ボタンが表示されません。
-
履歴傾向レポートで行レベルの数式を作成できますが、行レベルの数式で履歴フィールドを参照することはできません。
-
レポート スナップショットは、行レベルの数式フィールドをサポートしていません。
-
行レベルの数式は、結合レポートでは使用できません。行レベルの数式を含むレポートを結合レポートに変換するには、最初に行レベルの数式を削除します。
-
Lightning Experience に埋め込まれた Salesforce Classic レポートビルダーは、行レベルの数式をサポートしていません。レポートに行+ レベルの数式がある場合、[編集 (Salesforce Classic)] ボタンは表示されません。
-
[フィールド] パネルから行レベルの数式を作成、編集、または削除することはできません。OUTLINE パネルから作成、編集、または削除します。
-
行レベルの数式は、Salesforce Classic では使用できません。Salesforce Classic では、行レベルの数式を含むレポートを実行または編集できません。
Q: 数式に適切な数の括弧が含まれていることは確かですが (数えました)、それでもこのエラー メッセージが表示されます。何故ですか?
エラー: 構文エラーです。ない ')'
A: 括弧の数が正しいと 100% 確信している場合、このエラーは通常、コンマが欠落していることを意味します。次の式を見てください。
CASE(Number__c,1,"one",2,"two",3,"three",4,"four",5,"five",6,"six",7,"seven",8,"eight",9,"nine" NULL)
末尾の 'nine' と NULL の間にカンマがありません。保存しようとすると同じエラーが返されます。次のように変更する必要があります。
CASE(Number__c,1,"one",2,"two",3,"three",4,"four",5,"five",6,"six",7,"seven",8,"eight",9,"nine", NULL)
Q: 数式で何も表示されない、または #Error が返される
A: これは通常、0 で除算するときに発生します。フィールドの値がゼロかどうかを判断する IF 関数を含めることで、ゼロ除算エラーを防止します。例えば:
IF(Field__c =0,0, 25/Field__c)
他にも理由があるかもしれません。参照してください:
Q: 入力規則で複数のフィールドを必須にするにはどうすればよいですか?
A: 次のように ISBLANK で OR ステートメントを使用する必要があります。
OR(
ISBLANK(Field1__c),
ISBLANK(Field2__c),
ISBLANK(Field3__c)
)
選択フィールドを参照している場合は、次のような TEXT 関数も必要になることに注意してください。
OR(
ISBLANK(Field1__c),
ISBLANK(Field2__c),
ISBLANK(Field3__c),
ISBLANK(TEXT(Picklist__c))
)
Q: チェックボックスが空白であることを検証しようとしていますが、ルールがトリガーされないようです。なんで?
A: チェックボックスを空白にすることはできません。true または false の 2 つの状態しかありません。チェックボックスが選択されていない (false) ときにエラーをスローしようとしている場合は、次のようにします。
NOT(Checkbox__c)
次のように書くこともできます。
Checkbox__c=FALSE
選択されたときに検証する (true) 場合は、フィールド自体を参照するだけです。
Checkbox__c
次のように書くこともできます。
Checkbox__c=TRUE
Q: フィールドが変更されたかどうかをチェックする入力規則が、レコードを編集するときは正常に機能しているように見えるのに、作成時には機能しないのはなぜですか?
A: ISCHANGED 関数は、フィールドに実際の変更がないため、新しく作成されたレコードでは考慮されません (最初の保存前には存在しませんでした)。要件に応じて、ISNEW() 関数で条件を追加するか、ISCHANGED を完全に削除する必要がある場合があります。
Q: 数式が X と等しくなければならないという単純な入力要件があるのに、自動化がトリガーされないのはなぜですか?
A: 数式フィールドは自動化 (フロー、コードなど) をトリガーできません。あなたができるかもしれないことの1つは、エントリ/トリガー条件のフィールドと同じ式を使用することです
Q: フィールドのデフォルト値の式でレコードのフィールドを参照しようとしていますが、使用できません
A: デフォルト値は、レコードの作成時にのみ使用できます。その時点で、レコードが保存されるまでフィールドに値がないため、レコード自体のフィールドを参照できないのはなぜですか。
レコードによってトリガーされるフローを使用してフィールドに入力することもできますが、これは保存後にのみ表示されるか、クイック アクションを使用してこの特定のフィールドに事前定義された値を追加することができます
Q: 数式で ID をハードコーディングすると、それが考慮されないのはなぜですか?
A: いくつかの理由が考えられます。
-
間違ったレコード ID を使用している
-
式項目と入力規則は 15 文字の ID を使用しますが、フローまたはプロセスビルダーは 18 文字の ID を使用します。この記事に従って、URL でレコードの ID を取得できます。
ここで ID を 15 文字から 18 文字に変換できます。
- また、一部の URL では ID の前に「2F」が追加されます。式に含まれていないことを確認してください。
Q: 数式に AND、OR、&&、|| が混在しています。いつもうまくいくとは限らないようです
A: 調合を「壊す」可能性があるため、これらを混ぜてはいけません。
どちらかを使用していることを確認してください
同じ数式内の AND と OR
&& と || 同じ式の中で
Q: 非常に複雑な数式を作成したため、他の人には理解するのが難しいでしょう。どうしたら「分かりやすく」なるでしょうか?
A: 次のように数式にコメントを追加できます。
/* コメントはこちら */
また、数値で計算する場合は、必ず括弧を使用してください。どちらの操作が先に実行されるかという実行順序がありますが、括弧を使用することでより明確になります。
また、次の素晴らしい記事に従ってください。
Q: フォーミュラの詳細はどこで学べますか?
A: トレイルヘッド!!! 無料で楽しく Salesforce を学習できます
以下も参照してください。
コンテキスト別の数式演算子と関数
数式を作成するためのヒント
数式フィールドを作成する
サンプル日付式
作成者のご紹介
Written by: Eric Praud | Salesforce MVP
Eric is a senior consultant at Epam PolSource and has been working in the Salesforce ecosystem for the past 12 years. He started his Salesforce career as a Salesforce support agent. Like many others, he stumbled across the platform accidentally and hasn’t looked back since. Eric is very active in the Answers community and has been a Salesforce MVP since March 2021.
Submission reflects only the opinion of the user who made available the Submission and not the opinions of Salesforce, regardless of whether the user is affiliated with Salesforce, and may contain of constitute products, services, information, data, content and other materials made available by or on behalf of third parties ("Third Party Materials). Salesforce neither controls nor endorse, nor is Salesforce responsible for, any Third Party Materials, including their accuracy, validity, timeliness, completeness, reliability, integrity, quality legality, usefulness or safety, or any applicable intellectual property rights. Any Submission made available through any message board or forum in response to posted questions, or that otherwise purports to answer any questions, including any questions about Salesforce or Programs, are made available for your general knowledge only and should never relied upon s answer to your specific questions (even if an answer is marked as a "best answer or with any similar qualifications). You should always contact Salesforce support for answers to your specific questions. Salesforce has no control over Submissions, and is not responsible for any use or misuse (including any distribution) by any third party of Submissions.
If you have questions, tap into the wisdom of our entire Trailblazer Community here: https://trailhead.salesforce.com/trailblazer- community/feed
ナレッジ記事番号
000366420