【Salesforce】エラー一覧

はい！

エラー書いていきます！

対策もできたら書いていきます！

# QueryException

## only aggregate expressions use field aliasing

[【salesforce】エラーが出たゼイ。その4かな。System.QueryExceptionについて](http://blog.livedoor.jp/volvic_beer/archives/52099998.html)

## Aggregate query has too many rows for direct assignment, use FOR loop

[集計クエリで直接割り当てられる行数が多すぎるが、200 行未満である](https://help.salesforce.com/s/articleView?id=000381135&type=1)

サブクエリはレコード数 × 項目数で上限がある
上記のエラーが出た場合、可能なら項目数を減らす、もしダメならサブクエリを使用しないでレコードを取得する

# DmlException

## STORAGE_LIMIT_EXCEEDED, storage limit exceeded

ガバナ制限について書いてたら出てきたエラー

```
System.DmlException: Insert failed. First exception on row 0; first error: STORAGE_LIMIT_EXCEEDED, storage limit exceeded: []
```

我らがGoogle翻訳

```
System.DmlException：挿入に失敗しました。 行0の最初の例外。 最初のエラー：STORAGE_LIMIT_EXCEEDED、ストレージ制限を超えました：[]
```

レコードをinsertしようとしたら、ストレージ制限超えてたよーとのことなので、設定→クイック検索に「システムの概要」→システムの概要→データストレージ

<img width="393" alt="無題.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492812/428c74be-a5b4-a6d2-01fb-5591ed71d60a.png">

あらら・・・(私のDev環境のため、容量少なめ)

要件定義の際にここらへんは固めておくと思うので、あまり出ないと思いますが、出てしまった場合はデータを削除 or データ整理 or ストレージ増設

言わずもがなストレージ増設はお金がかかるので、開発工程ではあまり見たくないエラーですね

# SearchException

## search term must be longer than one character: 0

ガバナ制限について書いてたら出てきたエラー

```
System.SearchException: search term must be longer than one character: 0
```

我らがGoogle翻訳

```
System.SearchException：検索語は1文字より長くする必要があります：0
```

1文字で取得したら2,001件以上のレコードさくっと取得できるんじゃないかな？
という考えが甘かったです。

```
List<List<sObject>> searchList = [FIND 'a' IN ALL FIELDS RETURNING Account(Name)];
```

SOSLの検索する値は2文字以上にしましょう！

# LimitException

```
System.LimitException: BlobValue length exceeds maximum: 12000000
```

下記のようにStringをBlob形式にしようとしたらエラー
```
Blob bodyBlob = Blob.valueOf(testStr);
```

Blobは1,200万件までしかNGなんだな。

# EmailException

```
SendEmail failed. First exception on row 0; first error: NO_MASS_MAIL_PERMISSION, Single email is not enabled for your organization or profile.: []
```

```
SendEmailに失敗しました。行 0 で最初の例外が発生しました。
最初のエラーです。NO_MASS_MAIL_PERMISSION, 
Single email is not enabled for your organization or profile.最初のエラー：NO_MASS_MAIL_PERMISSION、シングル電子メールが組織またはプロファイルで有効になっていません。[]
```

Salesforce→設定→送信→アクセス権を調整する必要がある

# その他

## Invalid identifier '　'. Apex identifiers must start with an ASCII letter (a-z or A-Z) followed by any number of ASCII letters (a-z or A-Z), digits (0 - 9), '$', '_'.

以下のコードを実行したら出てきたエラーです。

<img width="869" alt="スクリーンショット 2020-05-01 17.38.45.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492812/b510479e-018b-aae7-b1e0-fe5f000f5c7d.png">

ちょっと詰まったのですが、書き直してみたらエラーが出なくなりました。
もしやと思い、VisualStudioCodeでコピペしてみたら、

![スクリーンショット 2020-05-01 17.39.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492812/e36d68d4-09df-8137-d14a-1c8f63b59fa8.png)

SELECTの前に全角が入っていました・・・
いつ潜り込んだんだろう・・・

## 問題が発生しました。このページのエラーを確認してください。owner is inactive, cannot reparent record

Q.レコードを更新しようと思ったら上記のエラーが表示されました。

A.レコードの所有者が無効になっていたので、所有者を有効のユーザに更新する。

## DUPLICATE_VALUE, 重複値が見つかりました: <unknown>の値が重複しているレコードの ID: <unknown>: []

テストクラスでユニークが有効になってる項目で重複したデータを作成していました。

```
// 例 TestId__c 項目のユニークが有効である想定
Contact co1 = new Contact();
co1.TestId__c = '12345678';
insert co1;

Contact co2 = new Contact();
co2.TestId__c = '12345678';
insert co2;

// DUPLICATE_VALUE, 重複値が見つかりました: <unknown>の値が重複しているレコードの ID: <unknown>: []エラーが出る
```

修正後
```
// 例 TestId__c 項目のユニークが有効である想定
Contact co1 = new Contact();
co1.TestId__c = '12345678';
insert co1;

Contact co2 = new Contact();
co2.TestId__c = '12345679'; // 重複しないように調整
insert co2;

// DUPLICATE_VALUE, 重複値が見つかりました: <unknown>の値が重複しているレコードの ID: <unknown>: []エラーが出る
```