Salesforce学習記録-オブジェクト基本

# [オブジェクト基本](https://developer.salesforce.com/docs/atlas.ja-jp.api.meta/api/sforce_api_objects_concepts.htm)
## 項目データ型(※抜粋)
### プリミティブデータ型
|データ型|説明|
|:-|:-|
| boolean  | ブール項目の値は true (または 1) または false (または 0) のいずれか |
| base64  | Base 64 で符号化されたバイナリデータ。<br/>　Attachment、Document および Scontrol オブジェクトレコードでの**バイナリファイルの保存に使用**。<br/>これらのオブジェクトでは、**Body または Binary 項目にBase 64 でエンコーディングされたデータを保存**し、BodyLength 項目は Body または Binary 項目のデータ長を保存。<br/>Document オブジェクトには、ドキュメントを直接レコードに保存する代わりに、ドキュメントのある URL を保存することができる。  |
| date  |  日付のみ、時間なし。**常に協定世界時 (UTC) の深夜 12 時に設定**される。 |
| dateTime  | 日付/時間の値 (タイムスタンプ)。 CreatedDate、LastModifiedDate および SystemModstamp などの日付/時間の値 (タイムスタンプ) を処理します。通常の **精度が 1 秒**。**常に協定世界時 (UTC)** で保存され、 **ローカル時間との変換は、クライアントアプリケーションで処理する必要がある**。  |
| time  | 時間のみ、**精度が1 ミリ秒**  |
|その他|string,int,long,double,byte|

### データ型

| 項目の型 | 項目に含まれる内容 |
|:-|:-|
| anyType  | string、picklist、reference、boolean、currency、int、double、percent、ID、date、datetime、url、email データのいずれかを返す多様なデータ型。 |
| calculated  | 数式によって定義されている項目。  |
| combobox  | 列挙型値のセットを含むコンボボックスで、ユーザは**リストにない値も指定できる**。  |
| ID  | レコードごとに一意の識別子を含む。<br> update() コールは使用できない。<br>ID 値にはオブジェクトの種別を識別する 3 文字のコードがある。<br> ID は通常、**15 文字の base-62 文字列**で表されます。15 個の文字にはそれぞれ数字 (0-9)、英小文字 (a-z)、英大文字 (A-Z) を指定できます。**15 文字の ID は大文字と小文字が区別**されます。<br>Microsoft Access™ など**大文字と小文字を区別しないアプリケーションでは、15 文字の ID を使用しないでください。このような問題を回避するために、すべての API コールは大文字小文字のどちらにも対応する 18 文字の ID **を返し、大文字と小文字を区別しないアプリケーションでも正しく照合されることになります。**ID の末尾に追加されている 3 桁が、先行する 15 文字の大文字と小文字をエンコード**します。Salesforce では 18 文字の ID の使用をお勧めしています。 |
| textarea  | 4000 バイト以上のテキストを含めることができます。string 項目とは異なり、textarea 項目は query() コールの queryString の **WHERE 句には指定できません**。  |
| calculated | 他の項目、式、または値から値を取得するアルゴリズムである数式で定義されています。これらの項目は SOQL で絞り込むことができますが、複製することはできません。calculated 項目のテキストの長さは 3900 文字以下で、この長さを超えたものは切り捨てられます。 |

### 複合項目
複合項目は、数値や文字列などのプリミティブデータ型の複数の要素をグループ化して、場所や住所などの複雑なデータ型を表します。
複合項目は参照のみです。変更を加えるには、個別のコンポーネント項目に書き込みます。
複合項目は、SOAP および REST API を介してのみ使用できます。

#### 住所複合項目
**項目の取得**

| パターン | SOQL |
|:-|:-|
| 直接取得  | SELECT Name, **BillingAddress** FROM Account  |
| 個別取得  | SELECT Name, BillingStreet, BillingCity, BillingState, BillingPostalCode,<br>  　BillingCountry, BillingLatitude, BillingLongitude <br>FROM Account  |
| WHERE 句と ORDER BY 句で<br>場所として使用  | SELECT Id, Name, BillingAddress FROM Account<br>WHERE **DISTANCE**(BillingAddress, GEOLOCATION(37.775,-122.418), 'mi') < 20 <br>ORDER BY **DISTANCE**(BillingAddress, GEOLOCATION(37.775,-122.418), 'mi')  |

#### 地理位置情報の複合項目
地理位置情報項目は、構造化された複合データ型である Location または個別の緯度/経度要素として、SOAP と REST API からアクセスできます。 Location 型の複合項目として使用できます。構造化されたこのデータ型には、**緯度、経度**が含まれます。
**項目の取得**

| パターン | SOQL |
|:-|:-|
| 直接取得  | ```SELECT location__c FROM Warehouse__c``` |
| 個別取得  | ```SELECT location__latitude__s, location__longitude_s FROM Warehouse__c```  |

#### 複合項目の考慮事項と制限
##### 住所複合項目と地理位置情報複合項目の共通制限
・複合項目は参照のみです。項目値を更新するには、個別の項目コンポーネントを変更します。
・複合項目は、SOAP API、REST API、および Apex を介してのみアクセスできます。**複合バージョンの項目は、Salesforce ユーザインターフェースのどこからもアクセスできません**。
・複合項目は、**\<apex:outputField> など、Visualforce では使用できません**。項目値のアクセスまたは更新には、個別の項目コンポーネントを使用します。
・データローダでエクスポート対象として複合項目を選択すると、エラーメッセージが表示されます。値をエクスポートするには、個別の項目コンポーネントを使用します。
・標準住所のカスタム地理位置情報および位置の項目は、**メールテンプレートではサポートされません**。
・複合項目を使用できる**数式関数は、ISBLANK、ISCHANGED、および ISNULL のみ**です。

##### 住所複合項目制限
・標準オブジェクトの一部として存在する住所項目でのみ使用できます。**カスタム複合住所項目は作成できません**。
・住所項目は **SOQL の WHERE ステートメントでは使用できません**。

##### 地理位置情報複合項目制限
・**カスタム設定ではサポートされません**。
・**ダッシュボードまたはスキーマビルダーでは使用できません**。
・DISTANCE 数式は次でサポートされています。
・SOQL でサポートされますが、次の制限があります。
　－DISTANCE と GEOLOCATION は、SOQL の WHERE 句および ORDER BY 句ではサポートされますが、GROUP BY 句ではサポートされません。DISTANCE は SELECT 句でサポートされます。
　－DISTANCE は、論理演算子 > および < のみをサポートし、指定された半径内 (<) または外 (>) の値を返します。
　－SOQL クエリで GEOLOCATION 関数を使用する場合、地理位置情報項目を緯度および経度座標よりも前に入力する必要があります。<br>　　DISTANCE(**warehouse_location__c**, GEOLOCATION(37.775,-122.418), 'km') は機能しますが、　　DISTANCE(**GEOLOCATION(37.775,-122.418)**, warehouse_location__c, 'km') は機能しません**。
・Apex バインド変数は、DISTANCE 関数の単位パラメータではサポートされません。

```
String units = 'mi';
List<Account> accountList = [SELECT ID, Name, BillingLatitude, BillingLongitude FROM Account 
     WHERE DISTANCE(My_Location_Field__c, GEOLOCATION(10,10), :units) < 10];
```