SugarCRM - ロジックフックまとめ

#sugarcrm

SugarCRM v7以降ロジックフックが増えている(合計41個ある)ので一度整理してみる。
一応カテゴリ分けをしているがざっくりしたものなので参考程度に考えてほしい。

リンクは公式のドキュメントへのリンクだがドキュメントが用意されていないHookもあるのであしからず。

認証系

システムにログイン・ログアウトしたときに呼ばれるHook。
Sidecar化した今OAuth APIへのアクセスが主な使われどころ。

before_login

認証する前に呼ばれる。

after_login

認証後に呼ばれる。

login_failed

認証が失敗したときに呼ばれる。

before_logout

ログアウト処理の前に呼ばれる。

after_logout

ログアウト処理の後に呼ばれる。

REST API系

REST APIにアクセスしたときに呼ばれるHookたち。
Sugar v7から実装されたHookである。

before_routing

REST APIのルーティング判定前に呼ばれる。
使い所はなさげ。

after_routing

REST APIのルーティング判定後に呼ばれる。
こちらも使い所はなさげ。

before_api_call

ルーティング処理が終わり、APIクラスがロードされる前に呼ばれる。
これも使い所はなさげ。ロギングくらい?

before_respond

クライアントにAPI実行結果を返す直前に呼ばれる。
HttpResponseのインスタンスが渡されるためレスポンスヘッダーに情報を付与したり消したりで使えそう。

before_filter

Filter APIのクエリ実行前に呼ばれる。
SugarQueryインスタンスとクエリオプションが渡されるため検索クエリに手を加えたいときに使えそう。

Bean系

Sugarのカスタマイズで一番使うのがこれらのBean系のHookだと思う。
Sugarのバックエンドのカスタマイズでここを抑えておけばなんとかなるといっても過言ではない。

モデルに近いHookなのでSidecar、BWC共に呼ばれる。

before_fetch_query

ListViewやSubpanelなどリストデータを取得するクエリの実行直前に呼ばれる。
SugarQueryインスタンスとselectするフィールドが渡されるがあまり使い所がなさそう。

after_fetch_query

ListViewやSubpanelなどリストデータ取得クエリの実行後に呼ばれる。
取得したデータのBean配列、DBから取得した生のデータが渡されるため、データ整形はここで。

before_save

最もよく使うHook。
保存前にモデルを操作したり値を判定したり。

after_save

最もよく使うHook。その2。
保存後に子のモデルを更新したり自モデルに関連したモデルを操作することが多い。

before_retrieve

BeanFactory::getBean()の処理前に呼ばれる。
リストではなく単一モデルが対象となる。つまりRecordView(DetailView、EditView)に関連する。

after_retrieve

BeanFactory::getBean()の処理後に呼ばれる。
モデルのデータを整えたりするのがここ。

process_record

ListViewのデータを処理するときに呼ばれる。
一覧データの整形などはこちら。

before_delete

モデルの削除前に呼ばれる。

after_delete

モデルの削除後に呼ばれる。
紐づくデータの掃除などはここ。

before_restore

削除したデータを復活させたときに呼ばれる。
未使用。

after_restore

同上。

リレーションシップ系

モジュールデータのリレーションシップが操作されたときに呼ばれるHookたち。
「データの紐付きが解除されたら〇〇したい」など結構使い所があるHookである。こちらもモデルに近いHookなのでSidecar、BWC共に呼ばれる。

before_relationship_add

データの紐付け前に呼ばれる。
サブパネルでデータを関連付けたときに親のデータを子に書くなど特定の処理を行いたいときに。

after_relationship_add

データの紐づけ後に呼ばれる。

before_relationship_update

データの紐づけ更新前に呼ばれる。

after_relationship_update

データの紐づけ更新後に呼ばれる。

before_relationship_delete

データの紐づけを削除する前に呼ばれる。

after_relationship_delete

データの紐づけを削除した後に呼ばれる。

View系

これらはSugarViewで処理されるBWCのみで有効なHook。
レガシーシステムでは使用しているところもあるだろうがほぼ使わなくなったHookである。実際 v7.10 でDeprecatedとなった。

after_ui_frame

SugarViewのdisplay処理の後に呼ばれる。
画面に追加のViewを流し込みたいときなど。

SugarViewのdisplay処理の最後に呼ばれる。

アプリケーション系

after_entry_point

Sugarの動作に必要なプログラム、設定値の読み込み、ログ、DBの初期化を行ったあとに呼ばれる。
使いみちがありそうでないHook。

after_load_user

Sugarの$currentUserをロードした後に呼ばれる。
ログインユーザーの情報でなんやかんやするときに使う。

after_session_start

セッションスタートの後に呼ばれる。

entry_point_variables_setting

Sugarの動作に必要なプログラム、設定値の読み込みが完了し、初期化を実行する前に呼ばれる。
v6.5にはなかったような。。

handle_exception

その名の通り例外が発生したときに呼ばれる。
もちろんハンドリングしている例外のみだし、BWCなどのレガシーシステムの方はふわっとした実装になっているため必ず呼ばれるわけではないことに注意。

server_round_trip

sugar_cleanup()が実行されたときに呼ばれる。
ドキュメントにはExecutes at the end of every page.と書かれてある。。

process_report_row

レポートのデータを1行ずつ処理するときに呼ばれる。
らしいが試してみた感じうまく動いていない。

before_email_import

SugarSNIPのメールインポート処理で呼ばれる。
未使用。

after_email_import

同上。

after_retrieve_elastic

ElasticSearchデータをハンドリングする際のSugarBean取得後に呼ばれる。
未使用。

スケジューラージョブ系

job_failure

スケジューラのJobが失敗したときに呼ばれる。

job_failure_retry

スケジューラのJobが失敗してリトライ処理を行ったときに呼ばれる。


実際に本番で使用するのは多くて5つくらいかなぁ。経験上before_save, after_saveを知っておけば大体なんとかなるっぽい。次はSidecarの隠しパラメータをまとめてみたい。こちらの方が実用的だがドキュメントに載っていないものが多いのでまとめ甲斐があるでしょう。