if(!function_exists("wf_date")) {
function wf_date($value, $interval, $format = "Y-m-d") {
if(empty($interval)) {
$dateValue = strtotime($value);
} else {
$dateValue = strtotime($interval, strtotime($value));
}
return date($format, $dateValue);
}
}
==== У вас есть модуль, который создает файлы, которые вы хотите интегрировать в Бизнес-Процесс? ====
isModuleActive()) {
return;
}
}
/**
* @var String $moduleName The module of the current Workflow
* @return array - array(
* 'filekeyA' => 'File title of the first file from this module',
* ...
* )
*
* The file title will be shown in the task configurations.
* The filekey will be given to your _getFile and should uniquely identify the file you should generate
*/
protected function _getAvailableFiles($moduleName) {
$return = array();
if(!$this->isModuleActive()) {
return $return;
}
/*
This function must simple return an array, like this:
array(
'filekeyA' => 'File title of this file'
)
*/
return $return;
}
/**
* @var String $key - The fileKey you set in the _getAvailableFiles function
* @var String $moduleName - The module from the given RecordID, which should be used to generate the file
* @var Int $crmid - The ID of the Record, which should be used to generate the file
* @return array - An Array with the following Structure
* array(
* 'path' => "",
* 'type' => "",
* 'name' => ""
* );
* The filename will probably overwritten by some tasks,
* but if not, it will be used to give this file to the user.
*/
protected function _getFile($key, $moduleName, $crmid) {
if(!$this->isModuleActive()) {
return false;
}
return array(
'path' => "",
'type' => "",
'name' => ""
);
}
public function isModuleActive() {
return getTabid('[moduleName]') && vtlib_isModuleActive('[moduleName]');
}
}
// This will register this class in the Interface Registry
\Workflow\InterfaceFiles::register('[SanitizedModuleName]', '\Workflow\Plugins\InterfaceFiles\[ModuleName]');
==== Добавление опций для работы с Файлами, созданными Бизнес-Процессом ====
После версий 600.0801 эта Задача будет интегрирована в каждую версию vTiger. \\
В данный момент функция присутствует только в блоке "Интеграция PDFMaker".
Добавьте файл с название **
'',
'options' => $options
)
$options is also an array with configuration options,
the User should input, if he choose this action
$options = array(
'' => array(
'type' => '',
'label' => '
==== Добавить тип поля для запроса значений от пользователя Add a FieldType for Request Values from User ====
Вам необходимы поля, которые отсутствуют в стандартном наборе полей? \\
Вы можете интегрировать свои собственные типы полей!
Добавьте файл с именем **
'',
'title' => '',
'config' => $config
* ), ...
* )
$config - массив полей конфигурации, которые необходимо настроить из бэкэнда
* Структура следующая:
* array(
* '' => array(
'type' => '[templatefield,templatearea,picklist,checkbox]',
* 'label' => '
==== Использование настраиваемых полей инвентаризации use custom Inventory Fields ====
Если вы используете настраиваемые поля в Задаче Inventory, такие как Счет, Коммерческое предложение, то значения этих полей будут очищены при выполнении любого другого Бизнес-Процесса и вы не сможете взаимодействовать с ними из Дизайнера Бизнес-Процессов, если версия вашего vTiger ниже 600.0825. \\
С этой версией вы сможете создавать файлы с именем “InventoryFields.inc.php” прямо в директории “extends”. \\
Эти файлы не будут переписаны во время обновления.
В этом файле вы можете настраивать создаваемые вами поля и сохранять их при выполнении Бизнес-Процессов. \\
Этот файл **ОБЯЗАТЕЛЬНО ДОЛЖЕН** иметь следующую структуру: \\
По той причине, что этот файл будет включен в каждое выполнение Бизнес-Процесса во всех модулях Inventory, вы должны вносить изменения осторожно. \\
Любая ошибка в этом файле сделает выполнение любого Бизнес-Процесса невозможным.
array('inventoryField' => 'FieldNameWithoutProductIndex', 'label' => 'Label of this field'),
* );
*/
// Example:
return array(
'test' => array('inventoryField' => 'testCol', 'label' => 'Testvalue'),
);
tableCol | Это имя колонки в таблице vtiger_inventoryproductrel. Не используется для чтения из БД, но подходит для использования как уникальное имя |
FieldNameWithoutProductIndex | Это код значения в ProductsArray. Вы используете это значение в функции “getAssociatedProducts” |
Testvalue | Является названием этого поля, которое будет показано в настройках Задачи |