Answersで回答する時に使う数式のまとめ2

+ [まとめページに戻る](https://qiita.com/Keiji_otsubo/items/60afc2a8d211b6f7d89f)
+ [Answersで回答する時に使う情報のまとめに戻る](https://qiita.com/Keiji_otsubo/items/9e6e0e946826133eddc7)


数式を実際に書くときのためだけのサンプルを整理しておきます。

|よく使う資料|[Answersで回答する時に使う情報のまとめ](https://qiita.com/Keiji_otsubo/items/9e6e0e946826133eddc7)|
|:------------------------------------------------------|:-------------------------------------------|
|[よく使うオブジェクト](https://qiita.com/Keiji_otsubo/items/32efad99c6af2cd70d70)|[SOQL関係のまとめ](https://qiita.com/Keiji_otsubo/items/c4fbeba75ca2b0623996)|
|[関数一覧【独自のまとめ】](https://qiita.com/Keiji_otsubo/items/05c918c17a2395b3c17e)|[数式で参照先のNameでエラーが出る時](https://qiita.com/Keiji_otsubo/items/0fc7b869a12ff648311d)|
|[Examples of Validation Rules](https://developer.salesforce.com/docs/atlas.en-s.usefulValidationRules.meta/usefulValidationRules/fields_useful_field_validation_formulas.htm)|[Case(数式)のまとめ](https://qiita.com/Keiji_otsubo/items/4d3ce97059a1bf7088d4)|
|[数式の整理](https://qiita.com/Keiji_otsubo/items/dd1bbd37527f119badae)|[Rich text項目を持つ数式項目を作成できません](https://help.salesforce.com/s/articleView?id=000329422&type=1)|
|CONTAINS(field__c, "text")|前方のゼロを消す TEXT(VALUE(ContractNumber))|
|RecordType.Name:日本語 DeveloperName:一意の英語|>=, <= |

|注意事項|ISCHANEDを入れておいかないと起動を修正時だけに限定できない|
|:------------------------------------------------------|:-------------------------------------------|
|ADDMONTHS( Start_Date__c , Months__c ) ADDMONTHS( DATE(YEAR(TODAY()),MONTH(TODAY()),1),1) -1|DAY(DATEVALUE(ClosedDate)) HOUR(TIMEVALUE(ClosedDate))  MINUTE(TIMEVALUE(ClosedDate))|
|$Profile.Name <> 'System Administrator'|NOW()-CreatedDate|
|TODAY()-DATEVALUE(CreatedDate)|Probability <= 0.75 //%型の時は少数で指定する|
|OwnerId <> LastModifiedById --> $User.Id <> OwnerId //書き換えること|CreatedBy.FirstName CreatedBy.LastName|
|Owner:User.FirstName & ' ' & Owner:User.LastName |TEXT(PRIORVALUE(Status))="Working"|
|**Owner:User.Username** otsubo@brave-hawk-3moqt3.com|$UserRole.Name|
|**$Permission**.sampleByPass = FALSE||

# 数式

+ [数式内に使用した「!」の扱い](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007eqekV)

:::note
この式の場合は太字の部分は文字列として認識されると思います。（URLのパラメータなど）

{! }の部分は結果が文字列として返されると私は認識しています。

**XX__c**={! IF( CONTAINS(TEXT(Opportunity.ContractType__c), "AA"),"AA","")}

エラーになった最初の式だと太字の部分が文字列として認識されるので保存はできたとしてもパラメータとしては正しくないと思います。よって今回の場合はIFの結果を文字列として返したいのでIFの前に{!を置くの正解だと思います。

**XX__c**=IF( CONTAINS({!TEXT(Opportunity.ContractType__c)}, "AA"),"AA","")
:::


# Owner.Nameが参照できない。

+ [Salesforce Flow and Related Fields via Lookup](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007bL9RH)

:::note
I don't think the Name of the user object can be referenced properly.
try using this formula.
 
```
 {!$Record.Owner.FirstName} & " " & {!$Record.Owner.LastName}
```

:::



# 連絡先はアカウント ID に関連付けられています

+ [How to write a validation rule](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007ZATLE)

```
ISBLANK(AccountId)
```

# when contains(FirstName, ''') then 'Invalid' 

+ [filtering a single quote in a query](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V000078Qj3F)

```
contains(FirstName, '\'') 
```

# ベースURLをべた書きしない方法

カスタム設定とかのほうがいいかな？

```
LEFT({!$Api.Enterprise_Server_URL_570} , FIND('/services', {!$Api.Enterprise_Server_URL_570})) & "/lightning/r/kenmei__c/"& {!$Record.Id} &"/view"
```

# 15桁のId

+ [How to fix this validation rule to actually trigger?](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007OXbCg)

:::note
Use 15-digit Ids in formulas
I think it's better to use Name/DeveloperName instead of hardcoding id.
:::

+ [Issues with 18 Digit ID and not 15 Digit ID in custom Formula](https://help.salesforce.com/s/articleView?id=000386186&type=1)

# 評価前の状態が重要

+ [validation rule to prevent editing field](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000JfszN)

メールフィールドが空です >> フィールドを編集できます
メール フィールドが null ではありません >> フィールドを編集できません

```
AND(
NOT(ISNEW()),
NOT(ISBLANK(PRIORVALUE(Email))), 
)
```


# ライセンスの指定

```
NOT(ISPICKVAL(   $Profile.UserType   , 'Standard'))  
NOT(ISPICKVAL(   $Profile.UserType   , 'PowerCustomerSuccess'))  //カスタマーポータルマネージャ
PowerPartner //パートナー
CSPLitePortal //大規模ポータル
```

[Profile](https://developer.salesforce.com/docs/atlas.ja-jp.object_reference.meta/object_reference/sforce_api_objects_profile.htm)

# 住所複合項目

```
SELECT Name, BillingStreet, BillingCity, BillingState, BillingPostalCode,BillingCountry, BillingLatitude, BillingLongitude from Account
```
[住所複合項目](https://developer.salesforce.com/docs/atlas.ja-jp.api.meta/api/compound_fields_address.htm)

# 式ではIdを直接書かない

```
AND(
ISNEW(),
$User.Username <> 'exempt.user@your.org', 
ISBLANK( TEXT(LeadSource))
)
```

If you are gonna use  " " or ' ' make sure you don't leave a blank space between the quotaion marks, because this => " " and this => ' ' do not equal blank/empty, they are literally a single blank space character (which is not the same thing)
[Need help with validation rules excluding specific user and blank picklist field](https://trailblazers.salesforce.com/answers?id=9064S000000Dwdr)


# 条件式の場合には入力していない場合を忘れないようにする

```
AND(
NOT(ISBLANK(FieldName)),
OR(
LEN(FieldName) <> 6,
 NOT(ISNUMBER( FieldName))
)
)
```

[restrict field to numbers and not zero](https://trailblazers.salesforce.com/answers?id=9064S000000Dvl5QAC)

# ISCHANGEDの注意

ISNEWと使う時は、ORで場合分けする。

The ISCHANGED function only evaluates when the value of a field is updated, it will not evaluate on NEW, so to cover all scenarios I would write it like this

ISCHANGED関数は、フィールドの値が更新されたときにのみ評価され、NEWでは評価されないため、すべてのシナリオをカバーするために、次のように記述します。

```
OR(
	AND(
	ISNEW(),
	NOT(ISBLANK(Price_Per_Unit__c)),
	ISBLANK( Description__c)
	),
	AND(
	ISCHANGED(Price_Per_Unit__c),
	ISBLANK( Description__c)
	)
)
```

# checkbox型にISBLANKは使えない
Checkboxes are never empty -- they are either TRUE or FALSE.    
So, for the checkbox, you can use.    NOT(Set_CFIN_Defaults__c)

[Validation Rule](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000A9ILnSAN)

# Validation Ruleはレコードの保存前に実行されるので、データ作成時には関連先のフィールドは参照できないです。

[Validation not working before record is saved](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000FSYq0SAH)

# Nameは必須項目なので、nullのチェックをしても意味がない
文字数を無意味に増やしているだけ

# Job__c.Construction_Start_Date__c = " ",には要注意

Just an fyi , this  Job__c.Construction_Start_Date__c = " " <== is not saying   "ob__c.Construction_Start_Date__c field is blank, or null, or empty".  

That is litrerally saying   "Job__c.Construction_Start_Date__c field has a single space character in it. 

Also, it kills a baby seal.... 

[Warning Error when encoding row-level formula: Syntax error. Missing ')'](https://trailblazers.salesforce.com/answers?id=9064S000000Dws4)

# 100円の位を切り捨て

```
FLOOR(X20221205a__c/1000) *1000
```

# フィルターロジック

+ [OR (1 AND 2 AND (4 OR 5)) OR (1 AND 3 AND (4 OR 5)) OR (2 AND 3 AND (4 OR 5)) OR (2 AND 6) OR (2 AND 7) OR (1 AND 3 AND 6) OR (2 AND 3 AND 6)](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000JfwQd)

```
OR (1 AND 2 AND (4 OR 5)) OR (1 AND 3 AND (4 OR 5)) OR (2 AND 3 AND (4 OR 5)) OR (2 AND 6) OR (2 AND 7) OR (1 AND 3 AND 6) OR (2 AND 3 AND 6)
```

先頭のORは必要ない

```
(1 AND 2 AND (4 OR 5)) OR (1 AND 3 AND (4 OR 5)) OR (2 AND 3 AND (4 OR 5)) OR (2 AND 6) OR (2 AND 7) OR (1 AND 3 AND 6) OR (2 AND 3 AND 6)
```

# 結果的にはよく分からない

+ [Formula evaluates to true every 72 hours](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000G3Lx8)

# べき乗の計算

+ [Formula result defaulting to a whole number although decimal places has been indicated to be larger than 0](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000KBp2v)

:::note
1-1.015^-24 worked for some reason now. 
:::


# フロー

+ [フローで特定の「テキスト」を抜く方法](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V000074V64D)