CONTAINSとINCLUDES

良く似た関数で、混乱します。


# CONTAINS

説明:	テキストの 2 つの引数を比較し、最初の引数に 2 番目の引数が含まれる場合には TRUE を返します。含まれない場合は FALSE を返します。

使用方法:	CONTAINS(text, compare_text)  text に、compare_text の値を含むテキストを指定します。

例:	

```
IF(CONTAINS(Product_Type__c, "part"), "Parts", "Service")
```

この数式は、Product_Type というカスタムテキスト項目の内容を確認し、「part」という言葉の含まれる商品に対して「Parts」を返します。それ以外の場合は、「Service」と表示します。値は大文字と小文字の区別をするため、Product_Type 項目に含まれるテキストが「Part」または「PART」の場合、「Services」が表示されます。

ヒント:	
+ この関数は、大文字と小文字を区別するため、compare_text の値には必ず正しい大文字を使用してください。
+ この関数を入力規則またはワークフロールールで使う場合は、空白の項目も有効となります。たとえば、納入商品のシリアル番号に「A」を含むかどうかを確認する入力規則がある場合、シリアル番号が空白の納入商品は有効と判断されます。
+ CONTAINS 関数は複数選択リストをサポートしません。複数選択リストに特定の値があるかどうかを確認するには、INCLUDES を使用します。

Picklist fieldに対しても使える。
```
If( AND( ISPICKVAL( Payment_Terms__c , "Against Proforma"), CONTAINS (TEXT(Payment_Terms__c),"LC")),Current_Month_Sale__c,   IF(Available_Credit_Limit__c <=0 ,0,Min (Available_Credit_Limit__c ,Current_Month_Sale__c)))
```

[Existing Formula change](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000IPLC4SAP)

**注意点**

なかなか興味深いお答え。
[If a picklist contains a value then make a picklist field required](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000A8iELSAZ)

One thing to note for the CONTAINS function is when using this function in a validation rule or workflow rule, fields that are blank are considered valid. For example, if you have a validation rule that tests to see if the serial number of an asset contains “A,” all assets that have a blank serial number are considered valid.

この関数を入力規則またはワークフロールールで使用する場合、空白のフィールドは有効と見なされることです。たとえば、アセットのシリアル番号に「A」が含まれているかどうかをテストする検証ルールがある場合、シリアル番号が空白のすべてのアセットは有効と見なされます。

**ピリオド、ダブルコーテーション、シングルコーテーション

+ [Validation rule for not to allow Quotation](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000O7JszSAF)

```
OR(
CONTAINS(FirstName, "\""),
CONTAINS(FirstName, "'"),
CONTAINS(FirstName, "."),
CONTAINS(LastName, "\""),
CONTAINS(lastName, "'")
)
```

### なかなか考えた使い方

+ [Keeping blank field from checking the checkbox](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000JgfnqSAB)

```
AND( 
NOT(ISBLANK(Account.BillingState)),
CONTAINS('KY:MD:MI:MN:MS:MT:NY:OK',Account.BillingState)
)
```

+ [Beginの代わり](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007eqFS2SAM)

```
IF(ISBLANK( PostalCode ), "Vide",
IF (CONTAINS ("06:83:13:04:84:34:11:66:30:81:12:20:99",LEFT(PostalCode,2)), "SUD",
IF (CONTAINS ("62:59:80:76:60:27:14:02:08:57:51:55:54:50:61:28:67:88:52:10:93:75",LEFT(PostalCode,2)), "NORD",
IF (CONTAINS ("95:94:77:70:68:90:21:89:39:71:74:01:73:58:05:26:38:18:69:03:42:63:43:48:15:25:07",LEFT(PostalCode,2)), "EST",
IF (CONTAINS ("78:91:92:45:35:53:72:22:56:29:44:85:17:33:49:79:37:41:36:86:16:47:87:24:46:23:19:40:64:32:65:82:31:09",LEFT(PostalCode,2), "OUEST",
IF (CONTAINS ("00",LEFT(PostalCode,2)), "NATIONAL",
"Autre"))))))
```

### 事例

+ [新しいリードの郵便番号に数字が含まれているかどうかを確認するフローを強化しようとしています。文字のみを含む見込み客がいくつかあるため、それらのステータスを自動的に更新したいと考えています。](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007Uur44)

:::note
I used the REGEX formula to create a boolean formula, then referenced it in a flow decision. Seems to work!
:::

# INCLUDES

説明:	複数選択の選択リスト項目で選択した値が、指定したテキストリテラルと等しいかどうかを決定します。

使用方法:	INCLUDES(multiselect_picklist_field, text_literal)

multiselect_picklist_field に、複数選択リストの差し込み項目名を指定します。text_literal には、見積に一致させる複数選択リストの値
を指定します。

例:	INCLUDES(Hobbies__c, "Golf") は、Hobbies カスタム複数選択リスト項目で選択された値の 1 つが「Golf」の場合に TRUE を返します。

ヒント:	

+ text_literal の式は、テキスト型にして引用符で囲む必要があります。差し込み項目または関数の結果にすることはできません。
+ 次のいずれかの場合には、Salesforce からエラーが返されます。
  + text_literal 数式を指定していない。
  + "" または " " など、空の text_literal 数式を指定している。
+ ISBLANK を使用して、複数選択リスト項目が空であるかどうかを示します。
+ INCLUDES 関数内に PRIORVALUE 関数を使用して、複数選択リスト項目の以前の値が特定の値を含んでいるかどうかを確認します。次に例を示します。

```
INCLUDES(
   PRIORVALUE(multiselect_picklist_field),
text_literal
)
```

余分な;を消す方法
```
SUBSTITUTE(
IF ( INCLUDES (  Account.SDO_Sales_Buying_Relationship__c  , "API Value 1" ), "Value 1; ",NULL ) &
IF ( INCLUDES ( Account.SDO_Sales_Buying_Relationship__c, "API Value 2" ), "Value 2; ",NULL ) & 
IF ( INCLUDES ( Account.SDO_Sales_Buying_Relationship__c , "API Value 3" ), "Value 3; ",NULL ) + ".", "; .", NULL)
```

[formula to fetch multiselect picklist value](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000J9ADnSAN)

**複数選択リストの項目のうちある特定の１つの値だけが選択されている場合だけ**

複数選択されている場合は;でセパレートされているので、;がなければ１つだけ選択されていると判断できる。

```
AND( 
INCLUDES( Partner_Type__c,"A"),
NOT (INCLUDES( Partner_Type__c,";") )
)
```

[I want to check a multi select picklist to see if ONLY Value A has been chosen and if another Checkbox field is not checked. If Value A is chosen and Value B is NOT chosen and the Checkbox is NOT checked, error message on the Checkbox Field](https://trailblazers.salesforce.com/answers?id=9064S000000DoUWQA0)

**text_literal の式は、テキスト型にして引用符で囲む必要があります。差し込み項目または関数の結果にすることはできません。**

変数を使うことはできないですね。

+ [トリガレコードの選択値が複数選択に含まれているレコードの取得](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007Urvuw)


```
IF({!getRecord.orderType__c} ="API 1" ,INCLUDES({!Loop1_customobject2.Multipicklist__c},"API 1"),
IF({!getRecord.orderType__c} ="API 2" ,INCLUDES({!Loop1_customobject2.Multipicklist__c},"API 2"),
false))
```