0

アカウントモジュールに会社名を入力するときに会社データを取得するために使用される VTiger 6.4.0 拡張モジュールに取り組んでいます。

モジュールはほぼ完成しています。API からデータを取得し、JQuery を使用して入力フィールドに入力します。

しかし問題は、アカウント情報の既存のフィールドに関連しないデータがあることです。そのため、新しいカスタム フィールドをいくつか作成しようとしています。

拡張機能モジュール内からアカウント モジュールのカスタム フィールドを作成する方法がわかりません。

グーグルで調べて、stackoverflow に関するいくつかの投稿を見ました。

コードの次の部分を思いつきましたが、これは機能していないようです。

public function addKvkfield(){

    $module = new Vtiger_Module();
    $module->name = 'Accounts';
    $module = $module->getInstance('Accounts');

    $blockInstance = new Vtiger_Block();
    $blockInstance->label = 'LBL_ACCOUNT_INFORMATION';
    $blockInstance = $blockInstance->getInstance($blockInstance->label,$module);

    $fieldInstance = new Vtiger_Field();
    $fieldInstance->name = 'KvKNummer';
    $fieldInstance->table = $module->basetable;
    $fieldInstance->column = 'kvknummer';
    $fieldInstance->columntype = 'VARCHAR(100)';
    $fieldInstance->uitype = 2;
    $fieldInstance->typeofdata = 'V~M';
    $blockInstance->addField($fieldInstance);
}

vtlib_handler module.postinstall で addKvkfield 関数が呼び出されています (これが拡張モジュール内でこれを行う正しい方法である場合、情報は見つかりませんでした)

vtlibhandler:

function vtlib_handler($modulename, $event_type) {
    global $log;
    if($event_type == 'module.postinstall') {
        $this->addJSLinks();
        $this->createConfigTable();
        $this->addSettingsMenu();
        $this->addKvkfield();   
        $this->updateLabels();

        // TODO Handle post installation actions
    } else if($event_type == 'module.disabled') {
        // TODO Handle actions when this module is disabled.
    } else if($event_type == 'module.enabled') {
        // TODO Handle actions when this module is enabled.         
    } else if($event_type == 'module.preuninstall') {
        // TODO Handle actions when this module is about to be deleted.
    } else if($event_type == 'module.preupdate') {
        // TODO Handle actions before this module is updated.
    } else if($event_type == 'module.postupdate') {
        $this->updateLabels();
        // TODO Handle actions after this module is updated.
    }
}

うまくいけば、誰かが私に正しい方向へのプッシュを与えることができます.

前もって感謝します :)

4

2 に答える 2

1

アカウント モジュールで必要なカスタム フィールドの作成に成功しました。

Vtiger メーリング リストに感謝します。:)

トリックは、私が書いたコードの小さな変更でした:

public function addKvkfield(){

        $module = Vtiger_Module::getInstance('Accounts');
        $blockInstance = Vtiger_Block::getInstance('LBL_ACCOUNT_INFORMATION', $module);

        $fieldInstance = new Vtiger_Field();
        $fieldInstance->label = 'KvKNummer';
        $fieldInstance->name = 'kvknummer';
        $fieldInstance->column = $fieldInstance->name; // Good idea to keep name and columnname the same
        $fieldInstance->columntype = 'VARCHAR(100)';
        $fieldInstance->uitype = 1; // No need to use 2 anymore. Setting "M" below will introduce the Red asterisk
        $fieldInstance->typeofdata = 'V~O';
        $blockInstance->addField($fieldInstance);

}

上記のコードは、アカウント モジュールに (オプションの) カスタム フィールドを作成します。

新しいモジュールを作成し、このモジュールをインストールしたことがない場合は、質問で行ったように vtlib_handler で関数を呼び出すことができます。

しかし、私の場合、コードを追加してカスタムフィールドを作成する前にプラグインを既にインストールしていたため、これは機能しませんでした。

したがって、vtlib_handler module.postupdate で上記の関数を呼び出す必要がありました (これにより、モジュールの更新にカスタム フィールドが追加されます)。

これに関する唯一の問題は、拡張機能が更新されるたびに実行されることです。

したがって、スクリプトを実行しない場合は、関数内に if ステートメントを作成して、フィールドが vtiger_field dbtable に既に存在するかどうかを確認することをお勧めします。

うまくいけば、これをすべて書き留めることで、他の誰かの時間を節約できます:P

幸運を!

于 2015-11-26T14:00:58.943 に答える
0

以下のリンクを参照してください 既存のモジュールに新しいフィールドを追加する

My Answer からコードをコピーし、任意の名前で新しい PHP ファイルを作成します。それを CRM のルート ディレクトリに配置し、ブラウザで実行します。フィールドがモジュールに追加されます。コピーするコードで設定したパラメーターについて確認する必要があります。

于 2015-12-09T14:10:10.807 に答える