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
Warning! You have to call this register file once. Everytime you call this register file, it will add the function to the vtiger_workflowtasks_entitymethod table in the database, so if you call it more than once then it will get added to the database more than once.
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);
}
Need help with Vtiger CRM?
We develop extensions, integrations and custom solutions for Vtiger CRM. Tell us what you need and we will suggest the next step.