VTiger 扩展模块为帐户模块创建自定义字段

VTiger Extension Module create custom field for Accounts Module

我正在开发一个 VTiger 6.4.0 扩展模块,用于在帐户模块中输入公司名称时获取公司数据。

该模块即将完成,我从 API 检索数据并使用 JQuery 在输入字段中输入它们。

但问题是我有一些数据与帐户信息中的现有字段无关,所以我正在尝试创建一些新的自定义字段。

只是我似乎无法弄清楚如何从我的扩展模块中为帐户模块创建自定义字段。

我用谷歌搜索并在 Whosebug 上看了一些帖子。

我想出了以下部分代码,但这似乎不起作用。

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 函数(如果这是在扩展模块中执行此操作的正确方法,则无法找到任何信息)

vtlib 处理程序:

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.
    }
}

希望有人能在正确的方向上推动我。

提前致谢:)

我成功地在帐户模块中创建了我需要的自定义字段。

感谢 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

祝你好运!

请参考下文link Add New Field in existing Module

复制我的答案中的代码并创建一个新的 PHP 文件,名称为 ay。将它放在 CRM 的根目录中,然后将 运行 放入浏览器中。您的字段将添加到您的模块中。您必须确保您在复制的代码中设置的参数。