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

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

希望有人可以推动我朝着正确的方向前进。

提前致谢 :)

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);

}

上面的代码将在 Account 模块中创建一个(可选的)自定义字段。

如果您编写了一个新模块并且从未安装过这个模块,那么您可以像我在我的问题中所做的那样调用 vtlib_handler 中的函数。

但在我的情况下,这不起作用,因为我在添加代码以创建自定义字段之前已经安装了插件。

所以我需要做的是在 vtlib_handler module.postupdate 上调用上面的函数(这将在模块更新中添加自定义字段)

唯一的问题是每次更新扩展时它都会运行。

所以我建议在函数中创建一个 if 语句来检查该字段是否已经存在于 vtiger_field dbtable 中,如果不运行脚本。

希望我把这些都写下来为别人节省了一些时间:P

祝你好运!

于 2015-11-26T14:00:58.943 回答
0

请参考以下链接 在现有模块中添加新字段

从 My Answer 复制代码并创建一个名称为 ay 的新 PHP 文件。将其放在 CRM 的根目录中并运行到浏览器中。您的字段将被添加到您的模块中。您必须确保您在复制的代码中设置的参数。

于 2015-12-09T14:10:10.807 回答