2015年4月26日日曜日

ADempiereのJapserReportでIPAフォントを使う

ADempiereの帳票は、JasperReportを使うことで多様なデザインの帳票を作成することができる。

JasperReportとは、OSSの帳票作成プログラムのことである。
.NetやVBに精通している人であれば、GrapeCity社のActiveReportをご存知かと思うが、それと同じような機能を持っているJava用のしかもオープンソースの帳票処理プログラムである。

このJapserReportをADempiereで使うときに、問題となるのがフォントである。
特にLinuxサーバに実装するとき、マイクロソフト系のフォントが使えないという問題がある。
そこで、IPAフォントを使うというのが解決策となる。

また、ADempiereのEARにIPAフォントを含ませることで、OSにIPAフォントをインストールしたりする手間が省けたり、違うOSにEARを持っていったときにフォントなしエラーが出るなどの問題がなくなる。

ここでは、IPAフォントをEARに含める方法をご紹介する。


■IPAフォントを使う設定(EAR内にIPAフォントを含める)

①クラスパスを通したフォルダに、jasperreports_extension.propertiesを用意して、中身を以下にする

net.sf.jasperreports.extension.registry.factory.fonts=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
net.sf.jasperreports.extension.simple.font.families.ireport=org/compiere/fonts/fonts_extend.xml

②fonts_extend.xmlを以下のフォルダに作成する。
org/compiere/fonts

中身を以下にして、UTF-8で保存する。

<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
   <fontFamily name="IPA Pゴシック">
       <normal>org/compiere/fonts/ipagp.ttf</normal>
       <pdfEncoding>Identity-H</pdfEncoding>
       <pdfEmbedded>true</pdfEmbedded>
   </fontFamily>
   <fontFamily name="IPAゴシック">
       <normal>org/compiere/fonts/ipag.ttf</normal>
       <pdfEncoding>Identity-H</pdfEncoding>
       <pdfEmbedded>true</pdfEmbedded>
   </fontFamily>
   <fontFamily name="IPAexゴシック">
       <normal>org/compiere/fonts/ipaexg.ttf</normal>
       <pdfEncoding>Identity-H</pdfEncoding>
       <pdfEmbedded>true</pdfEmbedded>
   </fontFamily>
   <fontFamily name="IPA P明朝">
       <normal>org/compiere/fonts/ipamp.ttf</normal>
       <pdfEncoding>Identity-H</pdfEncoding>
       <pdfEmbedded>true</pdfEmbedded>
   </fontFamily>
   <fontFamily name="IPA明朝">
       <normal>org/compiere/fonts/ipam.ttf</normal>
       <pdfEncoding>Identity-H</pdfEncoding>
       <pdfEmbedded>true</pdfEmbedded>
   </fontFamily>
   <fontFamily name="IPAex明朝">
       <normal>org/compiere/fonts/ipaexm.ttf</normal>
       <pdfEncoding>Identity-H</pdfEncoding>
       <pdfEmbedded>true</pdfEmbedded>
   </fontFamily>
</fontFamilies>

③②と同じフォルダに、②のxml内で指定したIPAのttfファイルを配置する。


■フォント変更作業(JasperReport内)
Jrxmlのソースを開いて、fontNameとpdfFontNameでIPAフォントを使用するように置換する。fontNameはフォント名、pdfFontNameはjarファイル名(パス不要)を指定。

<font fontName="MS 明朝" size="16" pdfFontName="HeiseiMin-W3" pdfEncoding="UniJIS-UCS2-HW-H"/>
↓↓
<font fontName="IPA明朝" size="16" pdfFontName="HeiseiMin-W3" pdfEncoding="UniJIS-UCS2-HW-H" isPdfEmbedded="true"/>

2015年4月24日金曜日

Gitサイズが大きいレポジトリのクローンエラー②

EGitでいつものように、クローンをしようとしたら、意味深なメッセージが出た。

aborting due to possible repository corruption on the remote side

ネットを検索すると、Gitのデータが破損している可能性があるとかなんとか・・・
また、面倒くさいことになったなと思いながら、
ふと思いついた。

サーバーのメモリーが足りていないのでは?

SSHでログインして、freeをすると、
案の定、8Gの物理メモリを7.5G以上も使用中ではないか!!!

rebootして、再度クローン。
調子よく動いているとおもっていたら、今度は
なにやらタイムアウトメッセージが・・・

ウィンドウ設定で
チーム=>Git=>リモート接続タイムアウトを500秒にしてもう一度実行。

今度は、問題なくいけた。
面倒なことにならなくてよかった、よかった。

2015年4月21日火曜日

ADempiere3.8のDB Migrate

ADempiere3.8では、DBのマイグレートバッチが追加された。

ADempiere3.7までは、デフォルトのデータをDBへインポートする場合、
ADempiereをインストール後、RUN_ImportAdempiereを実行すれば、可能だった。

ADempiere3.8では、2つのバッチ(シェル)を使う。
①RUN_ImportReference
②RUN_Migrate

いったん、Referenceスキーマにデータを生成しておいて、ターゲットのスキーマとReferenceスキーマの差分をアップグレードしてくれるようなイメージ。

2015年4月17日金曜日

EGitでのRevertでコミットを戻す

EGitで、Revertするとどうなるのかメモ。

EGitで、Gitのヒストリーを表示して、一覧のどれかを右クリックすると
Revertメニュー(コミットを戻す)が表示される。

これをおこなうと、一覧で選択しているコミットを打ち消すためのコミットが作成されるようだ。
それ以外のコミットには、影響しない。
一覧で選択しているコミット時点まで戻るということではないので注意。

<手順詳細>
①プロジェクト全体を指定して、チーム=>ヒストリーを表示。
②ヒストリーの一覧から、戻したいコミットを選択して右クリック
 (ここで選択したコミットだけが削除される)
③コミットを戻すをクリックする
④②で選択したコミットだけを戻すための打ち消し用コミットができる。
⑤この状態でPUSHすれば、サーバ側にも反映される。

☆コミットを戻すの実際☆
実際には、「コミットを戻す」というのは、そのコミットを打ち消すソースを自動生成してくれるものの
そのコミット以降のコミットは考慮してくれないので、競合が発生しマージ作業が発生してしまうのがおちだと思う。
マージ作業は、ミスをすれば他の人の修正を消してしまうこともあるだろうし、意外と神経を使う作業なのでできればやりたくないのがプログラマの本音。

つまり、変更する箇所が明確にわかっているのであれば、この機能を使うよりも、自分の記憶を頼りに最新バージョンに対して修正をおこなったほうが、効率的であるし確実であると思う。

2015年4月9日木曜日

ADempiereのDBデータのバックアップとリストア

<ADempiereのDBデータのバックアップ(エクスポート)>
①ADEMPIERE_HOME/utilsに移動

②DBバックアップコマンド実行
prompt> ./RUN_DBExport.sh

③ADEMPIERE_HOME/dataに移動
ここにできたExpDat.dmpがバックアップデータそのもの(エクスポートデータ)。
バックアップとして持っていれば、いつでもリストアできる。


<ADempiereのDBデータをリストア(インポート)>
①ADEMPIERE_HOME/dataに移動
ここに、ExpDat.dmpという名前でリストア用データ(インポートデータ)を配置する。

②ADEMPIERE_HOME/utilsに移動

③DBリストアコマンド実行
prompt> ./RUN_DBRestore.sh

※注:postgresとの接続をすべて切断しておくこと。
サーバプログラムからの接続や、クライアントのPGAdminからの接続もすべて切断しておく。

ADempiereサーバの起動と停止

<ADempiere サーバ起動>
①ADEMPIERE_HOME/utilsに移動

②サーバ起動コマンド実行
prompt> nohup ./RUN_Server2.sh &


<ADempiere サーバ停止>
①ADEMPIERE_HOME/utilsに移動

②サーバ停止コマンド実行
prompt> ./RUN_Server2Stop.sh

iDempiereサーバーの起動と停止

<iDempiere サーバ起動>
nohup ./idempiere-server.sh &

<iDempiere サーバ停止>
telnet localhost 12612
close

※12612ポートは、idempiere.iniで記述したポート。

iDempiereに、Eclipseなしで新しいプラグインをインストールする方法

■プラグインのインストール方法(Eclipseなし)

①jarをpluginsフォルダに配置する
idempiere-server/plugins/

②サーバを起動
nohup ./idempiere-server.sh &

③OSGIコンソールに接続
telnet localhost 12612
(idempiere.iniで指定しているポート番号)

④プラグインををインストール
osgi> install file:①のプラグインファイル名

ex.
osgi> install file:/usr/local/adempiere/idempiere-server/plugins/org.libero.manufacturing_3.0.0.201503181333.jar

※ssと入力して、インストールしたプラグインが出てきたらOK。
ex.
osgi>  ss
182 INSTALLED org.libero.manufacturing_3.0.0.201503181333

⑤④のIDの部分(182)を使って、インストールしたプラグインを開始する。
osgi> start 182

※もういちど、ssと入力してACTIVEになったらOK
ex.
osgi> ss
182 ACTIVE org.libero.manufacturing_3.0.0.201503181333

⑥telnet切断
osgi> CTRL+]
telnet> quit