我正在开发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.
}
}
希望有人可以帮我推动正确的方向。
提前致谢:)
答案 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的根目录中并运行到浏览器中。您的字段将添加到您的模块中。您必须确保在复制的代码中设置的参数。