Vtiger CRM(オープンソース版)において、日本国内での利用時に最もネックとなるのが「姓名の順序(名→姓)」の問題です。
これはVtigerが欧米の仕様(First Name + Last Name)をベースに作られているためです。主に「関連リストや検索結果での表示(Entity Label)」と「詳細画面のヘッダー表示」の2箇所で修正が必要です。
以下に、バージョン7.xおよび8.x系を想定した改修方法を解説します。
※作業前には必ずデータベースとファイルのバックアップを取ってください。
方法1:データベース設定の変更(最も重要)
関連リスト(他モジュールから参照した際の名前)やグローバル検索の結果において、「名 姓」となっているものを「姓 名」に変更するには、データベースの定義を変更するのが最も確実です。
対象テーブル: vtiger_entityname
このテーブルは、各モジュールの「レコードのタイトル(ラベル)」としてどのカラムを使うかを定義しています。
手順 (SQL実行)
phpMyAdminなどのツール、またはMySQLコマンドラインから以下のSQLを実行します。
SQL
-- Contacts(顧客担当者)の順序を入れ替え
UPDATE vtiger_entityname
SET fieldname = 'lastname,firstname'
WHERE modulename = 'Contacts';
-- Leads(見込み客)の順序を入れ替え
UPDATE vtiger_entityname
SET fieldname = 'lastname,firstname'
WHERE modulename = 'Leads';
-- Users(システムユーザー)の順序を入れ替え
UPDATE vtiger_entityname
SET fieldname = 'last_name,first_name'
WHERE modulename = 'Users';
解説: デフォルトでは
firstname,lastnameとなっていますが、これをlastname,firstnameに変更することで、システムがレコード名を生成する際に姓を先に取得するようになります。
方法2:既存データのラベル更新
上記(方法1)の設定変更は、「今後保存されるレコード」または「更新されたレコード」にのみ適用されます。すでに登録済みのデータは vtiger_crmentity テーブルの label カラムに「名 姓」のままテキストとして保存されているため、これを更新する必要があります。
手順
数が少なければ、各レコードを一度「編集」→「保存」するだけで直ります。
データが多い場合は、以下のロジックを持つ簡単なPHPスクリプトを作成してルートディレクトリで実行するのが早道です。
更新用スクリプトの例(概念コード):
PHP
<?php
include_once('vtlib/Vtiger/Module.php');
require_once('includes/main/WebUI.php');
// 顧客担当者の全レコードを取得して保存し直す(これでラベルが再生成される)
$moduleName = 'Contacts';
$queryGenerator = new QueryGenerator($moduleName, $current_user);
$queryGenerator->setFields(array('id'));
$query = $queryGenerator->getQuery();
$result = $adb->pquery($query, array());
while($row = $adb->fetch_array($result)) {
$recordId = $row['id'];
$recordModel = Vtiger_Record_Model::getInstanceById($recordId, $moduleName);
$recordModel->set('mode', 'edit');
$recordModel->save(); // 保存時にvtiger_entitynameの設定に従ってラベルが書き換わる
echo "Updated: " . $recordId . "<br>";
}
?>
※注意: 大量データの場合、タイムアウトしないようにご注意ください。
まとめ
- DB修正 (
vtiger_entityname): これが根本対策です。関連リストや検索での表示順を制御します。 - データ更新: 過去データのラベルを書き換えます。
多くの場合は、方法1を実施し、その後レコードを再保存するだけで解決します。