スクリプトによる項目の更新方法について

エンジニアリングチームの杉本です。
F-RevoCRMのVtiger_Fieldクラスについて簡単にご紹介します。

Vtiger_Fieldクラスを使用した項目の更新について

F-RevoCRMでスクリプトを使用し項目を追加する場合、Vtiger_Fieldクラスを使用し項目の追加を行います。
Vtiger_Fieldクラスは便利ですが、実は項目の更新を行う処理が実装されていません。
Vtiger_Fieldクラスのsave関数した場合、既に存在する項目の場合は継承元クラスVtiger_FieldBasicの__update関数が実行されます。
しかし、 Vtiger_FieldBasic クラスの__update関数の中身を確認するとログを出力しているのみで更新処理は記述されておりません。
Vtiger_Fieldクラスを使用した項目の更新はしないようにしましょう。

<?php
    /**
     * Update this field instance
     * @access private
     * @internal TODO
     */
    function __update() {
        self::log("Updating Field $this->name ... DONE");
    }
?>

Vtiger_Field_Modelクラスを使用した項目の更新について

項目の更新を行う場合は、Vtiger_Fieldクラスを継承したVtiger_Field_Modelクラスを使用します。
Vtiger_Field_Modelクラスの場合、__update関数内で項目の情報を更新する処理が記述されています。

<?php
    public function __update() {
        $db = PearDatabase::getInstance();
        $query = 'UPDATE vtiger_field SET typeofdata=?,presence=?,quickcreate=?,masseditable=?,defaultvalue=?,summaryfield=?,fieldlabel=? WHERE fieldid=?';
        $params = array($this->get('typeofdata'), $this->get('presence'), $this->get('quickcreate'), $this->get('masseditable'),
                        $this->get('defaultvalue'), $this->get('summaryfield'), $this->get('label'), $this->get('id'));
		$db->pquery($query,$params);
    }
?>

Vtiger_Field_Modelクラスの__update関数で更新できる内容は以下となります。
・typeofdata  ※項目のタイプと必須かどうか
・presence ※表示非表示
・quickcreate ※クイック作成画面
・masseditable ※一括編集
・defaultvalue ※初期値
・summaryfield ※概要画面表示
・label ※ラベル名

※項目を数値型から文字列型にする場合など、項目のタイプ自体を変更する場合は該当のテーブルのカラムタイプも合わせて変更する必要があります。
結局はSQL文を実行する必要がある場合が多いため、Vtiger_Field_Modelクラスを使用するよりはSQL文を直接実行したほうが早い場合もあります。
用途・目的によってVtiger_Field_Modelクラスを使用するかSQL文を実行するか、適切な使い分けを行っていきましょう。

それでは次回もまたThinkingreedエンジニアリングBlogをよろしくおねがいします!!

ご質問・お問い合わせはこちら

メールフォームへ