VTiger Extension Module为Accounts Module创建自定义字段

时间:2015-11-24 23:46:15

标签: custom-fields vtiger extension-modules

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

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

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

我似乎无法弄清楚如何在Extension模块中为Accounts模块创建自定义字段。

我用Google搜索并在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.
    }
}

希望有人可以帮我推动正确的方向。

提前致谢:)

2 个答案:

答案 0 :(得分: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

古德勒克!

答案 1 :(得分:0)

请参阅以下链接 Add New Field in existing Module

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