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を流し込みたいときなど。
after_ui_footer
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の隠しパラメータをまとめてみたい。こちらの方が実用的だがドキュメントに載っていないものが多いのでまとめ甲斐があるでしょう。