2015-11-24 8 views
0

Я работаю над модулем расширения VTiger 6.4.0, который используется для получения данных компании при вводе имени компании в модуле Учетные записи.Модуль расширения VTiger создает настраиваемое поле для модуля учетных записей

Модуль почти закончен, я извлекаю данные из API и вводя их в поля ввода с помощью JQuery.

Но проблема в том, что у меня есть некоторые данные, которые не относятся к существующим полям в информации об учетной записи, поэтому я пытаюсь создать несколько новых настраиваемых полей.

Только я не могу понять, как создать настраиваемое поле для модуля учетных записей из моего модуля расширения.

Я googled вокруг и наблюдал за некоторыми сообщениями в 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 (это добавит пользовательское поле на обновление модуля)

Единственная проблема с этим состоит в том, что он будет получать запускаться каждый раз extenstion обновляется.

Поэтому я предлагаю создать оператор if в функции, чтобы проверить, существует ли поле в dbtable vtiger_field, если не запускается скрипт.

Надеюсь, я спас кого-то еще некоторое время, записывая все это вниз: P

Гудлак!

0

см ниже ссылки Add New Field in existing Module

Скопируйте код из Моего ответа и создать новый PHP-файл с именем ау. Поместите это в корневой каталог CRM и запустите в браузере. Ваше поле будет добавлено в ваш модуль. Вы должны убедиться в параметрах, которые вы задали в коде, который вы копируете.