オープンソースのERP iDempiereでは、マスタやトランザクションを検索する画面(検索ウィンドウと言います)も、パラメーター設定だけで作成する事ができます。
普通に、検索ウィンドウを作成すると、翻訳テーブルを含まずに作成してしまうと思います。しかし翻訳テーブルを含まず検索ウィドウを作成してしまうと、言語毎の翻訳データがあるマスタの"名称"などは主言語でしか検索できなくなってしまいます。主言語以外の言語で検索するためには翻訳テーブルも含めて検索ウィンドウを作成する必要があります。
そこで、検索ウィンドウをログイン言語で検索できるようにする方法を調査及び研究し、その成果をまとめてみました。
例:品目マスタの名称をログイン言語で検索できるようにする
品目マスタの検索ウィンドウで、名称をログイン言語で検索できるようにする事を例に説明します。
Step1:翻訳テーブルを含んだビューを作成
品目マスタの翻訳テーブルには主言語のデータがありませんので、主言語のデータをUNION結合し、品目マスタテーブルとジョインしたビューを作成します。
CREATE OR REPLACE VIEW adempiere.JP_Trl_Product AS
SELECT t.AD_Language, t.JP_Trl_Name, t.JP_Trl_Description, a.* FROM adempiere.M_Product a INNER JOIN
(
SELECT
trl.M_Product_ID AS M_Product_ID
, trl.AD_Language AS AD_Language
, trl.Name AS JP_Trl_Name
, Trl.Description AS JP_Trl_Description
FROM adempiere.M_Product_Trl trl
UNION ALL
SELECT
p.M_Product_ID AS M_Product_ID
,(SELECT AD_Language FROM adempiere.AD_Language WHERE IsBaseLanguage = 'Y' ) AS AD_Language
,p.Name AS JP_Trl_Name
,p.Description AS JP_Trl_Description
FROM adempiere.M_Product p
) t ON (a.M_Product_ID = t.M_Product_ID)
このビューは、DB上にビューとして作成しておくだけで、アプリケーション辞書のテーブルとカラムの設定は必要ありません。
Step2:検索ウィンドウの設定を変更する
検索ウィンドウのFrom句のメインテーブルを上記で作成したビューに変更し、SQL WHERE句フィールドにログイン言語で絞り込まれるように「p.AD_Language='@#AD_Language@'」と設定します。
ログイン言語で検索できるJP_Trl_Nameカラムを検索ウィンドウカラムに追加します。※JP_Trl_Nameはあらかじめエレメントに登録しておいて下さい。
設定は以上です。
Step3:確認
設定が完了したので、確認します。主言語として英語、副言語として日本語と中国を使用する環境で、検索キーが"I0001"の品目マスタに、次のようにそれぞれの言語の翻訳を設定しています。
◆主言語(英語)でログインして主言語で検索する
◆副言語(日本語)でログインして日本語で検索する
◆副言語(中国語)でログインして中国語で検索する
検索ウィンドウの多言語対応は割と簡単に実現できます。検索ウィンドウは、iDempiereの使いやすさを左右するといっても良いくらい重要な機能ですので、グローバルにiDempiereを活用する際には、検索ウィンドウも多言語対応してご活用下さい!!
【補足説明】多言語環境でiDempiereを使用する時の考慮すべき設定
多言語環境でiDempiereを使用する際には、クライアントの言語設定を"主言語"に設定しておくと良いでしょう。クライアントの言語設定を"日本語"にすると、主言語の名称を変更した時に、日本語の翻訳データがいったん主言語のデータで上書きされてしまいます。クライアントの言語設定を"主言語"にしておく事で、主言語の名称を変更した時に、品後の翻訳データが自動上書き修正される事を防ぐ事ができます。
そして、日本語をメインに使用する場合には、日本語を主言語として使用したくなるかもしれませんが、主言語は英語のまま(初期設定のまま)にしておく事をオススメします。主言語を切り替える機能はiDempiereになって導入されている割と新しい機能で、主言語を日本語に切り替える事が原因だと思われる不具合を数か所確認しています。このグログを書いている時点(2017/10/25時点)ではまだ良い意味で"枯れている"とは言えない状態だと思います。