項目用のカラムをモジュールのメインテーブルとは別のテーブルに作成する方法すっかり寒くなってしまい、去年冬物コートを捨てたことを思い出して慌てて買いに行ったエンジニアリングチームの川合(@Ricckn)です。今年は比較的暖かかったのですが、夜の冷え込みが完全に冬のそれになりましたね。みなさまも風邪などには気をつけてください。大量のフィールド、MySQLの1テーブルに乗らない問題CRMでデータを管理する際、特に別のシステムから移行する場合などに大量の項目を登録するケースがあると思います。あまりに多い項目数になるとMySQLのカラム数の制限により、同一テーブルにカラムを増やすことができなくなってしまいます。※参考(https://dev.mysql.com/doc/refman/5.6/ja/column-count-limit.html)F-RevoCRMでは、項目自体の管理をvtiger_fieldというテーブルを利用して管理しているため、テーブルを複数に分けることが可能です。項目作成のスクリプト例えば、新規フィールドをモジュールに追加する際には、標準のクラスを使った場合以下のようなスクリプトになります。'旧社内管理No';$blockInstance->addField($field);Vtiger_Fieldクラスには、$field->tableという値があるので、ここにテーブル名を入れることで、指定したテーブルに項目を追加することが可能です。※「旧社内管理No」フィールドのケースしかし、このままではテーブル自体が作成されていない為、以下のメソッドを事前に流しておく必要があります。「会社の特徴」フィールドの後のスクリプトは、以下のようになります。'旧社内管理No';$blockInstance->addField($field);$module->initTablesによって、モジュールで管理するテーブルを作成できます。第1引数はテーブル名。第2引数は、KeyとなるIDなので、慣例的にモジュールのメインのIDと一致させたほうが良いでしょう(もしくは、同等なcrmidと書くのが良いと思います)データを作れば良いわけではありません!テーブルができた、vtiger_fieldにも項目の情報が登録された!でもこれだけではありません。frevocrm_root/modules/{MODULE}/{MODULE}.phpには以下のような記述があり、レポート作成時にどのテーブルをどのキーでJOINするかと言った際に利用しています。その為、以下のように追記する必要があります。TABLEを行っても良いわけですが、このように便利なメソッドが用意されていますので、積極的に使っていければと思います。知っていることで、SQLを書くことによるミスを減らせますし、自動化も楽になります。こちらのメソッドの注意点ですが、キーとなる第2引数のカラムにindexが付与されません。こちらは手動で登録する必要がありますが、弊社としてもバージョンアップで自動適用のパッチを書ければと思います。エンジニア採用サイト。