サブパネル内の一覧をエクスポートする
出典: SugarForum.jp
サブパネルの内容だけエクスポートしたい、というのは比較的よくある要望です。下記のようなウィジェットを作成して、Sugarクラスの create_export_query() 関数をオーバーライドしておけば、簡単に実現できます。
ボタンウィジェットの作成
「SubPanelTopButtonExport」という名称にするならば、
SugarRoot/include/generic/SugarWidgets/SugarWidgetSubPanelTopButtonExport.php
に下記の内容のファイルを配置します。
require_once('include/generic/SugarWidgets/SugarWidgetSubPanelTopButton.php');
class SugarWidgetSubPanelTopButtonExport extends SugarWidgetSubPanelTopButton
{
function display($defines) {
global $app_strings,$current_user,$sugar_config,$beanList,$beanFiles;
$title = $app_strings['LBL_EXPORT_ALL'];
$accesskey = $app_strings['LBL_EXPORT_ALL_BUTTON_KEY'];
$value = $app_strings['LBL_EXPORT_ALL'];
$parent_type = $defines['focus']->module_dir;
$parent_id = $defines['focus']->id;
$child_module = $defines['module'];
$button = "<input title='$title' accesskey='$accesskey'
onclick=\"window.location='index.php?entryPoint=export
&module=$child_module&parent_id=$parent_id
&parent_type=$parent_type';\"
class='button' type='submit' name='button' value='$value' />";
return $button;
}
}
ボタンの配置
サブパネル上部のボタンをカスタマイズする を参考に、
array('widget_class' => 'SubPanelTopButtonExport'),
を top_buttons 配列に追加します。
Sugarクラスの create_export_query() 関数
子モジュール(=サブパネルに表示されるモジュール)のクラス定義で、create_export_query() 関数をオーバーライドします。下記のように、
- parent_idの指定がなければ、デフォルトのcreate_export_query() を実行
- parent_idの指定があれば、独自の処理を実行
するのが良いでしょう。後者の独自の処理として、親モジュールを指定するキーに、サブパネルを参照しているオブジェクトのIDを指定すれば、OKです。
function create_export_query(&$order_by, &$where){
if (!isset($_REQUEST['parent_id'])){
return parent::create_export_query($order_by, $where);
}
$pid = $_REQUEST['parent_id'];
$where = "mymodule_id = '{$pid}'";//検索条件に親モジュールを指定するキーを追加
$query = ...省略...
return $query;
}
データのエクスポート も参考に。