オープンソース版VtigerCRMのモジュール開発やカスタマイズ、外部システム連携(API / データベース直接操作)を行う上で、必ず理解しておく必要があるのが「フィールド属性(vtiger_fieldテーブル)」と「UIタイプ(uitype)」の仕組みです。
VtigerCRMでは、各項目が画面上で「テキスト入力」になるのか「ドロップダウン」になるのか、あるいは「カレンダーピッカー」になるのかを、uitype と呼ばれる識別番号によって厳密に制御しています。
本記事では、フィールドの属性情報を司る vtiger_field テーブルの重要カラムと、実務で頻出する主要な uitype 一覧・使い分けを詳しく解説します。
1. フィールドのメタデータを司る「vtiger_field」テーブル
VtigerCRMに存在するすべてのフィールド(標準・カスタム問わず)の定義情報は、データベース内の vtiger_field テーブル に格納されています。
主要なカラム一覧と役割
| カラム名 | データ型 | 説明・役割 |
tabid | int | どのモジュールに属するかを示すモジュールID(vtiger_tab テーブルの tabid と紐付く) |
fieldid | int | フィールド固有のプライマリキー(連番) |
columnname | varchar | 実際のデータ保存テーブル上で作成される物理カラム名(例:cf_1234, accountname) |
tablename | varchar | データが保存される実テーブル名(例:vtiger_account, vtiger_accountscf) |
fieldlabel | varchar | 画面上の表示ラベル(言語ファイルでの翻訳キーにもなる) |
uitype | int | 【最重要】 入力UIや表示形式・データ処理方法を決定するUIタイプ番号 |
typeofdata | varchar | バリデーションルール(V~M = 文字列・必須入力、N~O = 数値・任意入力 など) |
displaytype | int | 表示権限(1: 通常表示・編集可、2: 参照のみ、3: 非表示、4: 読取専用など) |
presence | int | 0: 常に有効、2: ユーザーが有効/無効切替可能 |
2. 実務でよく使う主要「UIタイプ(uitype)」一覧
uitype は、画面レンダリング(Smarty/Vue等)、入力バリデーション、DB保存時のフォーマット変換などを一括で決定づける識別番号です。
① 基本入力系
uitype = 1:単一行テキスト(Varchar)- 最も汎用的な1行の文字列入力フィールド。氏名、タイトル、任意のメモなど。
uitype = 2:氏名(Name)- 名・姓の組み合わせなど、氏名専用の特殊な挙動を持つテキスト。
uitype = 7:数値(Number)- 整数または小数点を含む数値入力。3桁カンマ区切り表示などが自動適用されます。
uitype = 71:金額(Currency)- 通貨記号(¥、$など)が付与され、ユーザーの通貨設定に応じた計算が行われる数値。
uitype = 56:チェックボックス(Boolean)- オン / オフ(1 / 0)を切り替えるチェックボックス。
② 選択肢・ドロップダウン系
uitype = 15:単一選択(Picklist)- 管理画面の「選択リストエディタ」で選択肢を管理できる標準ドロップダウン。
uitype = 16:非編集選択肢(Non-editable Picklist)- システム固定値など、一般管理者が選択肢の追加・削除を行えない静的ドロップダウン。
uitype = 33:複数選択(Multi-select Picklist)- 複数の選択肢を同時に選べるリストボックス。DB内部では文字列(
|##|区切り等)で保存されます。
- 複数の選択肢を同時に選べるリストボックス。DB内部では文字列(
③ 日付・時刻系
uitype = 5:日付(Date)- カレンダーピッカーから「YYYY-MM-DD」形式で選択・入力する日付専用項目。
uitype = 70:作成日時・更新日時(Datetime)- レコード作成日(Created Time)や更新日(Modified Time)など、システムが自動更新するタイムスタンプ。
④ 参照・リレーション系(他モジュールとの紐付け)
uitype = 10:汎用参照フィールド(Related To)- ポップアップや検索で他モジュールのレコードを紐付けるリレーション項目(取引先、連絡先、案件など)。
vtiger_fieldmodulerelテーブルで参照先モジュールを定義します。
- ポップアップや検索で他モジュールのレコードを紐付けるリレーション項目(取引先、連絡先、案件など)。
uitype = 53:担当者(Assigned To)- レコードの所有者(ユーザーまたはグループ)を指定するドロップダウン。
uitype = 51:顧客企業参照(Accounts Popup)- 取引先(Accounts)モジュールを特定して呼び出すポップアップ選択項目。
⑤ 長文・URL・連絡先系
uitype = 19/21:テキストエリア(TextArea)- 複数行のテキスト入力。説明欄や詳細備考など。
uitype = 13:メールアドレス(Email)- クリック時にメーラー起動やCRM内メール送信が立ち上がるメール専用形式。
uitype = 11:電話番号(Phone)- CTI連携(Click to Call)や発信リンクに対応する電話番号フィールド。
uitype = 17:WebサイトURL- 入力値が外部リンクとして自動リンク化されるURLフィールド。
3. 「typeofdata」によるバリデーション制御
vtiger_field テーブルの typeofdata は、「データ型 ~ 必須・任意 ~ 最大文字数」 をチルダ(~)区切りで定義します。
Plaintext
[型] ~ [必須区分] ~ [詳細条件]
代表的な定義例
V~O➡ Varchar(文字列) / Optional(任意)V~M➡ Varchar(文字列) / Mandatory(必須入力)N~M~10,2➡ Number(数値) / Mandatory(必須) / 最大10桁・小数第2位までD~O➡ Date(日付) / Optional(任意)
4. まとめ
- VtigerCRMの全フィールドは
vtiger_fieldテーブル で一元管理されている uitypeを指定することで、UIの描画コンポーネント(テキスト、選択リスト、日付ピッカー、参照ポップアップなど)が決定されるtypeofdataを設定することで、画面側および保存時の入力チェック(必須、数値制約など)が機能する
カスタムモジュールの作成スクリプト(vtlib)を書く際や、データベース構造を解析してデータ移行・API連携を行う際には、この uitype と vtiger_field の属性定義を正しく把握しておくことがスムーズな実装への近道です。
