第7回 ビジネスロジックフックを使って処理を追加する
河村 嘉之
オープンソースCRM株式会社
2009/4/6
オープンソースのSFA/CRMアプリケーション「SugarCRM」は、利用者に合わせてカスタマイズを加えていくことで、より真価を発揮することができます。この連載では、ソースコードの内容を把握した上でさまざまなカスタマイズを加えていくまでを紹介します(編集部) |
前回までで、SugarCRMの基本的なフレームワークについて解説しました。SugarCRMはMVCパターンに従ってデザインされ、表示を担当する「ビュー」と、ロジックを担当する「モデル」、それらを制御する「コントローラ」で構成されています。
今回は、モデルにロジックを追加する方法を説明します。ここで説明する方式は、モデルのロジックを修正するのではなく、例えばBeanを保存した後にほかのシステムに対して通知を投げるなど、ある動作をトリガーにして特定の処理を追加するようなカスタマイズです。
処理を呼び出す「ビジネスロジックフック」
SugarCRMでは、ある動作をトリガーにして処理を呼び出すような仕組みを「ビジネスロジックフック」という形で提供しています。
このビジネスロジックフックの仕組みは、既存のロジックに手を加えずに、アプリケーションの特定のポイントに処理を追加していきます。そのため、アップグレードセーフの形で提供され、パッチの適用やアップグレードで上書きされることはありません。
■ビジネスロジックフックの定義
ビジネスロジックフックは、custom/modules/<モジュール名>/logic_hooks.phpに定義します。例えば、商談モジュール(Opportunities)に対するビジネスロジックフックは、custom/modules/Opportunities/logic_hooks.phpになります。それでは、この定義ファイルの内容を見てみましょう。
<?php |
最初に$hook_versionに、このビジネスロジックフックが利用する仕様のバージョンを指定します。現状では、バージョン1のみがサポートされています。
次に、ビジネスロジックフックを定義します。この情報は、$hook_array変数に定義されます。まず、最初にこの変数に配列を作成します。次に、$hook_arrayに‘before_save’要素を作成し、ここに配列を作成します。before_saveは、このモジュールのレコードが保存される前に呼び出されるロジックであることを示します。ここには、どのタイミングでロジックを呼び出すかを指定します。ここに指定できるタイミングについては次の節で説明します。
これで、ビジネスロジックフックを定義する準備が整いました。
$hook_arrayの対応するタイミングの配列に、ビジネスロジックフックの定義をした要素を追加します。この定義は5つの要素を持つ配列です。配列のそれぞれの要素の役割は以下のようになります。
1. インデックス |
この番号に合わせてソートされ、呼び出される |
2. ラベル |
このフックを一意に認識するためのラベル |
3. 取り込むPHPファイル |
ロジックを実行する際に読み込むファイル |
4 .ロジックが定義されたクラス |
ビジネスロジックを定義したクラス。 上記のファイルに記述される必要がある |
5. 呼び出されるメソッド |
ビジネスロジックとして呼び出されるメソッド。 上記のクラスに定義されている必要がある |
これで、どのタイミングでどのようなロジックが呼び出されるかを定義することができました。
ここで呼び出されるビジネスロジックのメソッドのシグネチャは、以下のようになります。
<?php |
それぞれの引数には以下のような値が入ります。
$bean |
対応するモジュールのBeanのインスタンス(参照渡し) |
$event |
現在のイベントの文字列(before_saveなど) |
$arguments |
引数の配列(イベントの種類によって渡される) |
上記のシグネチャに合わせてメソッドを作成し、そのメソッドの中に呼び出されるビジネスロジックを実装します。
ビジネスロジックフックの「仕掛けどころ」は?
ここまでで、ビジネスロジックフックの定義方法を説明しました。ここで、ビジネスロジックフックを仕掛けられるタイミングを説明します。
最初に紹介するのは、通常のモジュールに対するフックです。モジュールを操作する際に、以下の場所でビジネスロジックを追加することができます。
|
||||||||||||||||||
表1 通常のモジュールに対するフック |
次に、ユーザーモジュールに対するフックですが、以下のようなものがあります。ここでは、ユーザーのログインやログアウトといった動作に合わせてビジネスロジックを追加できます。
|
||||||||||
表2 ユーザーモジュールに対するフック |
最後は、アプリケーション全体に対するフックです。このフックは特定のモジュールに対してではなく、SugarCRMのアプリケーション全体に対するフックとなるため、ビジネスロジックを実装するメソッドの引数にある$bean変数に値が渡されることはありません。
|
||||||||
表3 アプリケーション全体に対するフック |
第6回へ | 1/2 |
|
||||
|
Linux Square全記事インデックス |
Linux Squareフォーラム 仮想化技術関連記事 |
連載:実践! Xenで実現するサーバ統合 有力な仮想化技術として注目を集めるようになった「Xen」。このXenを活用してサーバ統合を実践していく手順を具体的に紹介します |
|
特集:サーバの仮想化技術とビジネス展開の可能性 jailからUML/VMwareまで 1台のマシンで複数のサーバを動かす「仮想化技術」。VMwareやUMLの登場により、WebサイトだけでなくOS自体を仮想化できるようになった |
|
特集:仮想化技術のアプローチと実装 VMwareから要注目技術Xenまで 1台のサーバで複数の仮想マシンを実行する仮想化技術は、空間コストを引き下げる可能性を持つ。最新の仮想化技術を概観してみよう |
|
特集:仮想OS「User Mode Linux」活用法 技術解説からカーネルカスタマイズまで Linux上で仮想的なLinuxを動かすUMLの仕組みからインストール/管理方法やIPv6などに対応させるカーネル構築までを徹底解説 |
|
特集:仮想化技術の大本命「Xen」を使ってみよう インストール & Debian環境構築編 高いパフォーマンスで本命の1つとなった仮想マシンモニタ「Xen」。日本語による情報が少ないXenを、実際に動かしてみよう |
|
特集:仮想化技術の大本命「Xen」を使ってみよう Xen対応カスタムカーネル構築編 Xen環境およびその上で動作する仮想マシン用カーネルを自分で構築しよう。これにより、自由にカスタマイズしたカーネルを利用できる |
|
特集:IPv6、UML、セキュリティ機能の統合 全貌を現したLinuxカーネル2.6[第4章] 今回は、これまでに紹介し切れなかった機能を一気に紹介する。これを読めば、カーネル2.6の正式リリースが楽しみになるだろう |
|
Linux Squareプロダクトレビュー VMware Workstation 4 PC/AT互換機エミュレータとして不動の地位を築いたVMware。その新バージョンがリリースされた。新機能を早速試してみよう |
|
古くて新しい「サーバ仮想化技術」の行方 サーバ仮想化を実現するための技術がソフトウェア、ハードウェアの両面で出そろってきた。ハイパーバイザーのさらなる高速化に向けた動きを紹介する |
|
Linux Squareフォーラム全記事インデックス |
- 【 pidof 】コマンド――コマンド名からプロセスIDを探す (2017/7/27)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、コマンド名からプロセスIDを探す「pidof」コマンドです。 - Linuxの「ジョブコントロール」をマスターしよう (2017/7/21)
今回は、コマンドライン環境でのジョブコントロールを試してみましょう。X環境を持たないサーバ管理やリモート接続時に役立つ操作です - 【 pidstat 】コマンド――プロセスのリソース使用量を表示する (2017/7/21)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、プロセスごとのCPUの使用率やI/Oデバイスの使用状況を表示する「pidstat」コマンドです。 - 【 iostat 】コマンド――I/Oデバイスの使用状況を表示する (2017/7/20)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、I/Oデバイスの使用状況を表示する「iostat」コマンドです。
|
|