2015-11-24 104 views
0

我正在使用VTiger 6.4.0擴展模塊,用於在帳戶模塊中輸入公司名稱時獲取公司數據。VTiger擴展模塊創建帳戶模塊的自定義字段

該模塊幾乎完成,我從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); 
} 

的addKvkfield函數被調用的vtlib_handler module.postinstall(找不到任何信息,如果這是一個Extenstion模塊內這樣做的正確的方式)

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

我設法創造,我需要在賬戶模塊的自定義字段成功。

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

古德勒克!

0

請從我的答案是指以下鏈接 Add New Field in existing Module

複製代碼,並創建AY名稱的新PHP文件。將其置於CRM的根目錄並運行到瀏覽器中。你的領域將被添加到你的模塊。你必須確定你在複製的代碼中設置的參數。