SugarCRM

第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 = Array();
$hook_array[‘before_save’] = Array();
$hook_array[‘before_save’][] = Array(1, ‘custom_logic’,
  ‘path/to/custom_logic.php’
  ‘LogicClass’, ‘logic_method’);
?>

 最初に$hook_versionに、このビジネスロジックフックが利用する仕様のバージョンを指定します。現状では、バージョン1のみがサポートされています。

 次に、ビジネスロジックフックを定義します。この情報は、$hook_array変数に定義されます。まず、最初にこの変数に配列を作成します。次に、$hook_arrayに‘before_save’要素を作成し、ここに配列を作成します。before_saveは、このモジュールのレコードが保存される前に呼び出されるロジックであることを示します。ここには、どのタイミングでロジックを呼び出すかを指定します。ここに指定できるタイミングについては次の節で説明します。

 これで、ビジネスロジックフックを定義する準備が整いました。

 $hook_arrayの対応するタイミングの配列に、ビジネスロジックフックの定義をした要素を追加します。この定義は5つの要素を持つ配列です。配列のそれぞれの要素の役割は以下のようになります。

1. インデックス
この番号に合わせてソートされ、呼び出される
2. ラベル
このフックを一意に認識するためのラベル
3. 取り込むPHPファイル
ロジックを実行する際に読み込むファイル
4 .ロジックが定義されたクラス
ビジネスロジックを定義したクラス。
上記のファイルに記述される必要がある
5. 呼び出されるメソッド
ビジネスロジックとして呼び出されるメソッド。
上記のクラスに定義されている必要がある

 これで、どのタイミングでどのようなロジックが呼び出されるかを定義することができました。

 ここで呼び出されるビジネスロジックのメソッドのシグネチャは、以下のようになります。

<?php
class LogicClass {
  function logic_method(&$bean, $event, $arguments) {
    …
  }
}
?>

 それぞれの引数には以下のような値が入ります。

$bean
対応するモジュールのBeanのインスタンス(参照渡し)
$event
現在のイベントの文字列(before_saveなど)
$arguments
引数の配列(イベントの種類によって渡される)

 上記のシグネチャに合わせてメソッドを作成し、そのメソッドの中に呼び出されるビジネスロジックを実装します。

ビジネスロジックフックの「仕掛けどころ」は?

 ここまでで、ビジネスロジックフックの定義方法を説明しました。ここで、ビジネスロジックフックを仕掛けられるタイミングを説明します。

 最初に紹介するのは、通常のモジュールに対するフックです。モジュールを操作する際に、以下の場所でビジネスロジックを追加することができます。

フック名 説明
before_delete
レコードを削除する前に呼ばれます
after_delete
レコードを削除した後に呼ばれます
before_restore
レコードの削除マークが取り消される前に呼ばれます
after_restore
レコードの削除マークが取り消された後に呼ばれます
after_retrieve
レコードをデータベースから取得した後に呼ばれます。レコードを新規に作成した場合は呼ばれません
before_save
レコードが保存される前に呼ばれます
after_save
レコードが保存された後に呼ばれます
process_record
データベースに検索文を実行しその結果を返す前に呼ばれます。ListViewやDetailViewで、表示する前にフィールドに特定の値をセットしたい場合にここが利用できます。EditViewではこのフックは呼ばれません
表1 通常のモジュールに対するフック

 次に、ユーザーモジュールに対するフックですが、以下のようなものがあります。ここでは、ユーザーのログインやログアウトといった動作に合わせてビジネスロジックを追加できます。

フック名 説明
before_logout
ユーザーがログアウトする前に呼ばれます
after_logout
ユーザーがログアウトした後に呼ばれます
after_login
ユーザーがログインした後に呼ばれます
login_failed
ユーザーのログインが失敗した後に呼ばれます
表2 ユーザーモジュールに対するフック

 最後は、アプリケーション全体に対するフックです。このフックは特定のモジュールに対してではなく、SugarCRMのアプリケーション全体に対するフックとなるため、ビジネスロジックを実装するメソッドの引数にある$bean変数に値が渡されることはありません。

フック名 説明
after_ui_frame
すべてのフレームが生成された後で、フッターが生成される前に呼び出される
after_ui_footer
フッターが生成された後に呼び出される
server_round_trip
SugarCRMのページが生成された後に毎回呼び出される
表3 アプリケーション全体に対するフック

第6回へ
1/2

Index
徹底解剖、SugarCRM(7)
 ビジネスロジックフックを使って処理を追加する
Page 1
 処理を呼び出す「ビジネスロジックフック」
 ビジネスロジックフックの「仕掛けどころ」は?
  Page 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フォーラム全記事インデックス


Linux & OSS フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Linux & OSS 記事ランキング

本日 月間