サブパネル内の一覧をエクスポートする

出典: 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;
}

データのエクスポート も参考に。


最終更新 09:28, 2009年9月7日 (月)。   このページは 606 回アクセスされました。