This article will explain how to create a new custom function in workflow task. Follow steps below:
1. Prepare registration script (.php)
e.g.: vtiger_root/registerWFFunction.php
In order to register the function, this register file needs to be placed in your vtiger root directory, and then you manually need to call it from your browser: http://www.mydomain.com/vtiger/registerWFFunction.php
In this example we register handleSetEstimatedDate() custom function defined in include/EstimatedDateHandler.php file for Invoice module.
<?php
require_once("modules/com_vtiger_workflow/include.inc");
require_once("modules/com_vtiger_workflow/tasks/VTEntityMethodTask.inc");
require_once("modules/com_vtiger_workflow/VTEntityMethodManager.inc");
$adb = PearDatabase::getInstance();
$emm = new VTEntityMethodManager($adb);
$result = $adb->pquery("SELECT function_name FROM com_vtiger_workflowtasks_entitymethod WHERE module_name=? AND method_name=?", array('Invoice', 'SetEstimatedDate'));
if($adb->num_rows($result)==0){
$emm->addEntityMethod("Invoice","SetEstimatedDate","include/EstimatedDateHandler.php","handleSetEstimatedDate");
}
2. Create Handler file
In another file we need define custom function and write content of this function.
e.g.: include/EstimatedDateHandler.php
<?php
function handleSetEstimatedDate($entityData) {
/* CONTENT OF CUSTOM FUNCTION ... */
}
3. Invoke Custom function with module
Last step is create and run via browser this file.
e.g.:vtiger_root/invokeCustomFunction.php
$adb = PearDatabase::getInstance();
$forModule = 'Invoice';
$summary = 'set Estimate Date '.$forModule;
$result = $adb->pquery("SELECT workflow_id FROM com_vtiger_workflows WHERE summary=? AND module_name=?", array($summary, $forModule));
if($adb->num_rows($result)==0){
echo 'Create Workflow for '.$forModule.'!<br />';
$wm = new VTWorkflowManager($adb);
$wf = Settings_Workflows_Record_Model::getCleanInstance($moduleName);
$wf->description = $summary;
$wf->test = Zend_Json::encode(array());
$wf->moduleName = $forModule;
$wf->executionCondition = 3;
$wf->filtersavedinnew = 6;
$wm->save($wf);
$adb->pquery('UPDATE com_vtiger_workflows SET type=? WHERE workflow_id=?',array('basic',$wf->id));
$wfId = $wf->id;
} else {
$wfId = $adb->query_result($result,0,'workflow_id');
}
$tResult = $adb->pquery("SELECT task_id FROM com_vtiger_workflowtasks WHERE workflow_id=?", array($wfId));
if($adb->num_rows($tResult)==0){
$tm = new VTTaskManager($adb);
echo 'Create Workflow Task for '.$forModule.'!<br />';
$task = $tm->createTask('VTEntityMethodTask', $wfId);
$task->active = true;
$task->summary = "Estimated Date Handler";
$task->methodName = "SetEstimatedDate";
$tm->saveTask($task);
}
Comments (2)
Hi, i need to create a custom function that create a new Project Task when a Service Contract status is completed.
Can you help me?.
Thanks
Hello, thank you for contacting us. This is more like customization needed for you. Please contact us at info@its4you.sk with your request. We will reply you with more details. Thanks