SugarCRM

第7回 ビジネスロジックフックを使って処理を追加する


河村 嘉之
オープンソースCRM株式会社
2009/4/6


カスタムビジネスロジックの実装

 では、実際にカスタムビジネスロジックを作ってみましょう。ここでは例として、「商談の金額が200万円以上少ない値で保存されたときに、その商談をチェックするタスク」を作成し、担当者の上司に割り当てるようにします。この処理をビジネスロジックフックを用いて実装してみましょう。

 初めに、ビジネスロジックフックの定義を行います。今回は商談に関連するカスタムビジネスロジックを呼び出すため、以下の内容を記述したファイルを、custom/modules/Opportunitiesディレクトリにlogic_hooks.phpという名前で作成します。

 今回は保存時に処理が呼び出されるため、ビジネスロジックフックが呼び出されるタイミングはbefore_saveになります。ここで$hook_array変数を作り、そこにbefore_save要素を作成します。

 このロジックが呼び出されるタイミングですが、今回作成するビジネスロジックフックのは1つだけで、順番を考慮する必要がないため、1としておきます。

 次に、このビジネスロジックをnotify_managerという名前にします。このロジックは、OpportunityCheckerというクラスのnotify_managerメソッドで実装し、そのファイルはcustom/modules/Opportunities/opportunity_checker.phpとします。これらの情報を配列とし、$hook_arrayのbefore_save要素の配列の最初の要素として格納します。

<?php
$hook_version = 1;
$hook_array = Array();
$hook_array['before_save'] = Array();
$hook_array['before_save'][] = Array(1, 'notify_manager',
  'custom/modules/Opportunities/opportunity_checker.php',
  'OpportunityChecker', 'notify_manager');
?>

 次に、ビジネスロジックを実装します。ここでは上記の定義ファイルに従い、OpportunityCheckerというクラスにnotify_managerというメソッドを作成します。このクラスをcustom/modules/Opportunities/opportunity_checker.phpファイルに記述します。

<?php
require_once('modules/Tasks/Task.php');
require_once('modules/Users/User.php');

class OpportunityChecker {
    function notify_manager(&$bean, $event, $arguments) {
        $current_amount = $bean->amount;
        $old_amount = $bean->fetched_row['amount'];
        if (($current_amount - $old_amount) < -2000000) {
            $user = new User();
            $assigned_user = $user->retrieve($bean->assigned_user_id);
            $manager_id = $assigned_user->reports_to_id;

            $task = new Task();
            $task->name = '商談をチェックしてください';
            $task->description = '商談金額が大きく減少しました。';
            $task->assigned_user_id = $manager_id;
            $task->save();
        }
    }
}
?>

 このロジックが呼び出されると、保存された商談が$beanというメソッドの引数としてこのメソッドに渡されてきます。

 ここで、入力された商談の金額と変更される前の商談の金額を比較します。画面に入力された値は、そのBeanのインスタンスのフィールド名と同じ名前のメンバー変数にアクセスすることによって取得できます。変更される前の値は、そのBeanのfetched_rowという変数に格納されている配列のフィールド名の要素にアクセスすることにより取得できます。

 商談の変更前と現在の値を比較し、金額が200万円以上少なくなった場合は、この商談に割り当てられたユーザーの上司を取得し、商談をチェックするタスクを作成し、上司に割り当てて保存しています。これによって、商談の金額を200万以上少なくしたうえでその商談を保存すると、上司にその商談をチェックするタスクが割り当てられます。

 さあ、これでカスタムビジネスロジックが実装できました。まず、任意のユーザー(上司フィールドがセットされているもの)でログインし、商談の金額を200万円減らしてみましょう。そしてその商談を保存します。

 次に、今度は先ほどのユーザーの上司としてログインし、活動タブからタスクの一覧を選んでみます。すると、商談をチェックするタスクが新たに作成されているはずです。

まとめ

 今回は、カスタムビジネスロジックを利用して、Bean本体のソースコードを修正することなくロジックを追加する方法を説明しました。レコードの保存時や削除時にちょっとした処理を加えたい場合、この方法を利用すれば簡単に処理を追加できます。

 これまで、いろいろな方法でSugarCRMをカスタマイズする方法を説明しました。しかし、単純にファイルを配置するだけでは、どのようなカスタマイズがSugarCRMに入っているか管理できなくなります。SugarCRMでは、カスタマイズなどをパッケージして取り込む方法があります。次回は、カスタマイズをどのように管理していくかについて説明します。

2/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 記事ランキング

本日 月間