オブジェクト・フィールド・レコード
データモデル。14 個の標準オブジェクト、5 系統 19 種類のフィールド、レコードが保持するもの、そして稼働中のオブジェクトの何が変えられるかを扱います。
オブジェクトはワークスペースが扱う物の種類です(取引先、見積、タスク)。フィールドはそのオブジェクトのレコードが保持する 1 つの情報です。レコードはその 1 件です。/objects 配下のすべてのエンドポイントはこの 3 つのいずれかを扱います。
標準オブジェクト
標準オブジェクトは 14 個あり、それぞれモジュールに属します。POST /bootstrap はワークスペースで有効なモジュールが所有するものを設置するため、ワークスペースがどのオブジェクトを持つかは何を有効にしているかで決まります。 再実行しても既に設置済みのものはそのまま残ります。
| モジュール | オブジェクト |
|---|---|
| core(常に有効) | account 取引先 · contact 取引先責任者 · lead リード · opportunity 商談 · activity 活動 · event 行動 · task タスク · note ノート |
cpq |
product 商品 · quote 見積 · quote_line_item 見積明細 · contract 契約 |
marketing |
campaign キャンペーン · campaign_member キャンペーンメンバー |
一覧を前提にせず GET /objects を読んでください。marketing にはこの API のエンドポイントが 1 つもないため、その 2 つのオブジェクトは存在しますがこの API からは到達できません。
ラベルは表示用の文字列であり、リクエストごとに翻訳するのではなく一度保存されます。キーで照合し、ラベルで照合しないでください。
activity(活動)と event(行動)は別のオブジェクトで、よく混同されます。activity は記録された接触で、経由したチャネル、結果、そしてリードの温度を持ちます。event は予定された打ち合わせで、種別とカレンダー上の表示を持ちます。
フィールドの種類
19 種類が 5 系統に分かれます。どの系統かが、書き込めるか、フィルターできるか、設定できるかを決めます。
13 のスカラー種類は 1 つの列に保存され、型以外の設定を持ちません。text、longtext、decimal、currency、percent、boolean、date、datetime、email、url、phone、user、address です。
| 種類 | 保持するもの |
|---|---|
text |
1 行、最大 16,384 文字 |
longtext |
文書(ノートの本文、議事録)。最大 1,000,000 文字で、行の上限ではなくリクエストサイズで制限されます |
decimal、currency、percent |
数値ではなく十進文字列。規約を参照 |
date |
YYYY-MM-DD |
datetime |
ISO 8601、オフセット付き。オフセットのない値は拒否されます |
email、url、phone |
検証済みのアドレス、http/https の URL、最大 255 文字の文字列 |
user |
ユーザー id。そのユーザーが組織に属するかはアプリケーションが検査し、列自体はテキストです |
address |
postalCode、prefecture、city、street、building の 5 部分。自由記述ではなく日本の住所です |
2 つの選択種類 select と multi_select はフィールドが定義する一覧から値を取ります。multi_select は最大 200 個で、重複を拒否します。
relation は別のオブジェクトのレコードを指します。作成時に targetObjectId と cardinality を指定します。
formula は式ではなく 1 つの算術ステップを計算します。left、add・subtract・multiply・divide のいずれかの演算子、right で、両辺はキーで別のフィールドを指します。
2 つの仮想種類 rollup と days_since には列がありません。クライアントが他のレコードやフィールドから計算します。保存されず書き込めないため、これを含むレコード書き込みは field_not_scalar で拒否されます。
レコードが保持するもの
レコードは id、objectId、name、revision、createdAt、updatedAt、archivedAt、フィールドごとに 1 件の values、そしてオブジェクトがリレーションフィールドを持つ場合は relations を返します。
name と updated_at は予約されたフィルター・ソートキーで、上のレスポンスの形とは別の一覧です。ビューは updated_at で並び替え、レスポンスは updatedAt を返します。
空は 5 種類ではなく 1 つの状態です。 キーの不在、null、空文字列、空の multi_select、全部分が空白の住所はすべて同じもので、すべて値なしとして保存されます。どの形で送っても読み戻すと null になります。
select の選択肢はそれ自体が保存値です。 そのためフィールドが提供しない選択肢を書き込むと field_value_invalid で拒否されます。標準フィールドではこれは、選択肢一覧は追加されるだけで名称変更されないことを意味します。古い文字列が既存のレコードが保持している値だからです。
フィールドの作成と変更
オブジェクトやフィールドの追加には custom_objects モジュールが必要です。レコードの読み書きには不要です。
POST /objects/{objectId}/fields は系統ごとに異なる本文を取り、全部で 7 つの形があります。どれも key、label、required、visibleByDefault を持ち、選択系統は options(最大 200 個、各 1〜120 文字)を、リレーションは targetObjectId を追加します。
選択肢はフィールド作成時に決まります。 PATCH は key、label、required、targetObjectId、type を受け付け、options は受け付けません。つまりこの API を通して後から一覧を変える方法はありません。フィールドにレコードが入る前に決めてください。
visibleByDefault は一覧のメタデータです。誰も列を選んでいない状態で一覧がそのフィールドを表示するかどうかを決めます。誰がそのフィールドを読めるかとは無関係で、それは権限の話です。
リードの転換
リードは取引先と取引先責任者になります。GET /objects/{objectId}/records/{recordId}/conversion-matches は重複を作らず統合する候補を探します。
スキャンには上限があります。 partial: true はレコードを見尽くす前にスキャンが止まったことを意味するため、何も見つからないことは何も証明しません。partial の下での空の結果は「一致なし」ではなく「不明」として扱ってください。