2014年3月13日木曜日

vTigerCRMにて自作モジュールを削除・アンインストールする

vTigerCRMにてモジュールを自作をしてみた時に皆さん絶対困るのが、どうやってモジュールアンインストールするの?ってことかなと思います。私も困りました。

ちなみにGUIかはら削除は出来ません。
また、下記の方法はvTigerCRM5でもvTigerCRM6でも一緒です。

削除の仕方はvTlibを使用するコードを書いてあげる必要があります。
<?php
   $Vtiger_Utils_Log = true;
    include_once('vtlib/Vtiger/Module.php');
    $module = Vtiger_Module::getInstance('削除するモジュール名');
    if($module)
    {
        $module->delete();
    }else{
     echo 'module naiyo?';

    }
?>

こちらを記述したPHPファイルをvTigerCRMのルート直下に配置していただき、ブラウザ直接アクセスしていただければ実行されます。

コンソールから直接実行しても問題ありません。
module_delete.phpというファイル名で保存したならば、
php -f module_delete.php
と実行する感じです。

実行結果は以下のようになります。
Deleting sharing access ... DONE
Deleting tools ... DONE
Deleting fields of the module ... DONE
Deleting blocks for module ... DONE
De-Initializing webservices support ...DONE
Invoking vtlib_handler for module.preuninstall ...START
Invoking vtlib_handler for module.preuninstall ...DONE
Unsetting entity identifier ... DONE
Deleting related lists ... DONE
Deleting Module 削除するモジュール名 ... DONE
Deleting Links ... DONE
Detaching from menu ... DONE
Updating parent_tabdata file ... STARTED
Updating parent_tabdata file ... DONE
Updating tabdata file ... DONE

これでvTigerCRM上からはモジュールは削除されます。
ただ、削除したモジュールに関連するテーブル等がデータベースに残ります。
また、%vTigerCRMのインストールディレクトリ%/modules/の下にも関連するファイルが残ったままの状態です。
綺麗に削除するためには上記も削除してあげる必要があります。

まず、ファイルに関してですが、%vTigerCRMのインストールディレクトリ%/modules/%削除するモジュール名%のディレクトリを削除するだけです。

次に、データベースに関してですが、幾つかのテーブルに対して操作が必要です。

まず、モジュール作成時に作成されるテーブルを削除します。

実際、SQLクライアント等で接続して見ていただければ分かりやすいと思いますが、
例えばsalesreportなるモジュールを作成した場合は、
vtiger_salesreportとvtiger_salesreportcfなるテーブルが作成されます。
また、インストール時にドロップダウンな選択項目を作成済みな形でモジュールを作成している場合は、それに関連したテーブルも作成されます。
たとえば、report_statusなる選択項目フィールドを作成した場合は、
vtiger_salesreport_report_statusとvtiger_salesreport_report_status_seqというテーブルも作成されます。

まず、これらを一式削除するのであれば、

drop table vtiger_salesreport;
drop table vtiger_salesreportcf;
drop table vtiger_salesreport_report_status;
drop table vtiger_salesreport_report_status_seq;
となります。

また、vtiger_picklistを確認していただき、
こちらにnameのカラムにsalesreport_sales_statusが格納されているものがあればそれ削除してあげましょう。

とりあえず、今把握している一つの方法として紹介いたします。
このテーブルもごみが残るよ!といった情報がありましたらコメントいただければと思います。

CRM TOUCHのサイトはこちら
vTigerCRMの日本語の情報に関してはこちら